var m_popupReferenceCount = 0;

var FormMode =
{
    Create: 1,
    Update: 2,
    View: 3,
    Delete: 4,
    Authorise: 8,
    Audit: 9
};

//Browser detect / browser fix functions
function IsInternetExplorer6()
{
    var bInternetExplorer6;
    var sApplicationVersion;

    if(navigator.appName == 'Microsoft Internet Explorer')
    {
        sApplicationVersion = navigator.appVersion.toString();
        if(sApplicationVersion.indexOf("MSIE 6.0") != -1)
        {
            bInternetExplorer6 = true;
        }
        else
        {
            bInternetExplorer6 = false;
        }
    }
    else
    {
        bInternetExplorer6 = false;
    }
    
    return bInternetExplorer6;
}

function IsInternetExplorer55()
{
    var bInternetExplorer55;
    var sApplicationVersion;

    if(navigator.appName == 'Microsoft Internet Explorer')
    {
        sApplicationVersion = navigator.appVersion.toString();
        if(sApplicationVersion.indexOf("MSIE 5.5") != -1)
        {
            bInternetExplorer55 = true;
        }
        else
        {
            bInternetExplorer55 = false;
        }
    }
    else
    {
        bInternetExplorer55 = false;
    }
    
    return bInternetExplorer55;
}

var arVersion = navigator.appVersion.split("MSIE");
var version = parseFloat(arVersion[1]);

function fixPNG(myImage) 
{
    if ((version >= 5.5) && (version < 7) && (document.body.filters)) 
    {
       var imgID = (myImage.id) ? "id='" + myImage.id + "' " : "";
       var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : "";
       var imgTitle = (myImage.title) ? "title='" + myImage.title  + "' " : "title='" + myImage.alt + "' ";
       var imgStyle = "display:inline-block;" + myImage.style.cssText;
       var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + "width:" + myImage.width + "px; height:" + myImage.height + "px;" + imgStyle + ";" + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>";
       
       myImage.outerHTML = strNewHTML;
    }
}

function HideSelectBoxes()
{    
    var hideDropdowns = true;
    //var title = window.parent.document.getElementById('Title');

    if (typeof (m_hideDropdowns) != 'undefined')
    {
        hideDropdowns = m_hideDropdowns;
    }
    
    m_popupReferenceCount++;
    //title.innerHTML = 'HideSelectBoxesCalled : ' + m_popupReferenceCount;
    
    if (IsInternetExplorer6() && hideDropdowns)
    {
        var allSelects = document.getElementsByTagName('SELECT');    
        var select;
        for(var selectIndex = 0; selectIndex < allSelects.length; selectIndex++)
        {
            select = allSelects[selectIndex];
            select.style.visibility = 'hidden';
        }   
    }
}

function ShowSelectBoxes()
{
    var hideDropdowns = true;
    //var title = window.parent.document.getElementById('Title');

    if (typeof (m_hideDropdowns) != 'undefined')
    {
        hideDropdowns = m_hideDropdowns;
    }
    
    m_popupReferenceCount--;
    //title.innerHTML = 'ShowSelectBoxesCalled : ' + m_popupReferenceCount;

    if(m_popupReferenceCount < 1)
    {
        if (IsInternetExplorer6() && hideDropdowns)
        {
            var allSelects = document.getElementsByTagName('SELECT');    
            var select;
            for(var selectIndex = 0; selectIndex < allSelects.length; selectIndex++)
            {
                select = allSelects[selectIndex];
                select.style.visibility = 'visible';
            }   
        }
    }
}

//Session functions
function GetSessionKey()
{
	var name = "RiskBusiness_" + m_sApplicationID + "=SessionID=";
	var c = document.cookie;
    var i = c.lastIndexOf(name);
    var x = c.substring(i + name.length); 
    
	var ca = x.split('&');
	
	return ca[0];
}

//Querystring functions
function RemoveParameterFromQueryString(sQueryString, sParameter)
{
    var iParameterStartPosition;
    var iParameterEndPosition;
    var sUpdateQueryString;
    var sQueryStringBeforeParameter;

    iParameterStartPosition = sQueryString.indexOf('&' + sParameter + '=');
    if(iParameterStartPosition == -1)
    {
        iParameterStartPosition = sQueryString.indexOf('?' + sParameter + '=');
    }
    iParameterStartPosition = iParameterStartPosition + 1;
   
    if(iParameterStartPosition > 0)
    {        
        sQueryStringBeforeParameter = sQueryString.substring(0, iParameterStartPosition);
        iParameterEndPosition = sQueryString.indexOf("&", iParameterStartPosition);
        if(iParameterEndPosition > -1)
        {
            sUpdatedQueryString = sQueryStringBeforeParameter + sQueryString.substring(iParameterEndPosition + 1);
        }
        else
        {
            sUpdatedQueryString = sQueryStringBeforeParameter.substring(0, sQueryStringBeforeParameter.length - 1);
        }           
    }
    else
    {
        sUpdatedQueryString = sQueryString;
    }
    
    return sUpdatedQueryString;   
}

function GetQueryStringFromURL(URL)
{
    var queryStringStartPosition = URL.indexOf('?');
    var queryString = URL.substring(queryStringStartPosition + 1);
    
    return queryString;
}

function GetURLParameter(name)
{
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if(results === null)
    {
        return "";
    }
    else
    {
        return results[1];
    }
}

function GetURLString()
{
    var URLElements = [];
    URLElements = window.location.href.split('?');
    
    if(URLElements.length > 1)
    {
        return "?" + URLElements[1];
    }
}

//Onscreen progress indicator
function ShowInProgress()
{
    top.document.g_revokeInProgress = false;
    setTimeout(internalShowInProgress, 0);
}

function internalShowInProgress()
{
    if(!top.document.g_revokeInProgress)
    {
        var theBody = top.document.getElementsByTagName('BODY')[0];
        
        if(theBody === null)
        {
            theBody = document.getElementsByTagName("BODY")[0];
        }
        
        var mask; 
        var content;
        var waitingImg;
        var message;
        
        mask = top.document.getElementById('progressMask');
        if(mask === null)
        {
            mask = top.document.createElement('div');
            mask.id = 'progressMask';
            mask.style.display = 'block';
            mask.style.cursor = 'wait';
            mask.style.position = 'absolute';
	        mask.style.zIndex = '200';
	        mask.style.top = '0px';
	        mask.style.left = '0px';
	        mask.style.width = '100%';
	        mask.style.height = '100%';
	        mask.style.opacity = '.1';
	        mask.style.filter = 'alpha(opacity=10)';
            mask.style.backgroundColor = '#333333';

            content = top.document.createElement('div');
            content.style.position = 'absolute';
            content.id = 'progressContent';
            content.style.backgroundColor = 'white';
            content.style.display = 'block';
            content.style.borderTop = 'solid 1px silver';
            content.style.borderLeft = 'solid 1px silver';
            content.style.borderRight = 'solid 2px gray';
            content.style.borderBottom = 'solid 2px gray';
            content.style.padding = '10';
            content.style.cursor = 'wait';
            content.style.textAlign = 'center';

            content.style.zIndex = '201';
            waitingImg = top.document.createElement('img');
            waitingImg.src = 'Images/ajax_wait2.gif';

            message = top.document.createElement('div');
            message.innerHTML = '<center><span style="font-family:arial;font-size:10pt;font-weight:bold;color:black;">Please wait...</span><br/><a class="" style="font-family:arial;font-size:8pt;" href="javascript:HideInProgress();">Cancel</a></center>';

            content.appendChild(waitingImg);
            content.appendChild(message);
            if(theBody)
            {
                theBody.appendChild(content);
                theBody.appendChild(mask);
            }
            
            mask = top.document.getElementById('progressMask');
        }
        else
        {
            content = top.document.getElementById('progressContent');

            mask.style.display = 'block';
            content.style.display = 'block';
        }
        
        setProgressMaskSize(mask);
        
        centreProgressElement(content);
    }    
}

function centreProgressElement(htmlElement) 
{
    var width = htmlElement.offsetWidth;
    var	height = htmlElement.offsetHeight;
	
	var theBody = top.document.getElementsByTagName("BODY")[0];
	
	if(theBody === null)
    {
        theBody = document.getElementsByTagName("BODY")[0];
    }

    if(theBody)
    {
	    var scTop = parseInt(getDefaultScrollTop(),10);
	    var scLeft = parseInt(theBody.scrollLeft,10);

	    var fullHeight = getDefaultViewportHeight();
	    var fullWidth = getDefaultViewportWidth();
    	
	    htmlElement.style.top = (scTop + ((fullHeight - height) / 2)) + "px";
	    htmlElement.style.left =  (scLeft + ((fullWidth - width) / 2)) + "px";
    }
}

function HideInProgress()
{
    top.document.g_revokeInProgress = true;
    var mask = top.document.getElementById('progressMask');
    var content = top.document.getElementById('progressContent');
    
    if(mask !== null)
    {
        mask.style.display = 'none';
    }
    
    if(content !== null)
    {
        content.style.display = 'none';
    }
}

function setProgressMaskSize(mask)
{
	var theBody = top.document.getElementsByTagName("BODY")[0];
			
	var fullHeight = getDefaultViewportHeight();
	var fullWidth = getDefaultViewportWidth();
	
	// Determine what's bigger, scrollHeight or fullHeight / width
	if (fullHeight > theBody.scrollHeight) {
		popHeight = fullHeight;
	} else {
		popHeight = theBody.scrollHeight;
	}
	
	if (fullWidth > theBody.scrollWidth) {
		popWidth = fullWidth;
	} else {
		popWidth = theBody.scrollWidth;
	}
	
	mask.style.height = popHeight + "px";
	mask.style.width = popWidth + "px";
}

function getDefaultScrollTop()
{
	if (self.pageYOffset) // all except Explorer
	{
		return self.pageYOffset;
	}
	else if (top.document.documentElement && top.document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		return top.document.documentElement.scrollTop;
	}
	else if (top.document.body) // all other Explorers
	{
		return top.document.body.scrollTop;
	}
}

function getDefaultScrollLeft()
{
	if (self.pageXOffset) // all except Explorer
	{
		return self.pageXOffset;
	}
	else if (top.document.documentElement && top.document.documentElement.scrollLeft)
		// Explorer 6 Strict
	{
		return top.document.documentElement.scrollLeft;
	}
	else if (top.document.body) // all other Explorers
	{
		return top.document.body.scrollLeft;
	}
}

function getDefaultViewportHeight()
{
	if (window.innerHeight!=window.undefined)
	{
	    return window.innerHeight;
	}
	else if (top.document.compatMode=='CSS1Compat')
	{
	    return top.document.documentElement.clientHeight;
	}
	else if (top.document.body) 
	{
	    return top.document.body.clientHeight; 
	}

	return window.undefined; 
}

function getDefaultViewportWidth()
{
	var offset = 17;
	var width = null;
	if (window.innerWidth!=window.undefined) return window.innerWidth; 
	if (top.document.compatMode=='CSS1Compat') return top.document.documentElement.clientWidth; 
	if (top.document.body) return top.document.body.clientWidth; 
}

//Button Methods
function ButtonMouseIn(button)
{
    var disabledStatus = button.getAttribute('rbi:disabled');

    if (disabledStatus == 'false')
    {
        button.className = 'ImageButton ImageButtonOver';
        if (CheckHideSubButtons(button))
        {
            HideSubButtons(m_visibleSubButtons);
        }
    }
}

function ButtonMouseOut(button)
{
    var disabledStatus = button.getAttribute('rbi:disabled');

    if (disabledStatus == 'true')
    {
        button.className = "ImageButton ImageButtonDisabled";
    }
    else
    {
        button.className = "ImageButton";
    }
}

function ButtonMouseDown(button)
{
    var disabledStatus = button.getAttribute('rbi:disabled');

    if (disabledStatus == 'false')
    {
        button.className = 'ImageButton ImageButtonClick';
    }
}

function EnableButton(button)
{
    if (button != null)
    {
        button.setAttribute('rbi:disabled', 'false');
        button.className = 'ImageButton';
    }
}

function DisableButton(button)
{
    if (button != null)
    {
        button.setAttribute('rbi:disabled', 'true');
        button.className = 'ImageButton ImageButtonDisabled';
    }
}

function EnableButtonByID(buttonID)
{
    var button = document.getElementById(buttonID);

    EnableButton(button);
}

function DisableButtonByID(buttonID)
{
    var button = document.getElementById(buttonID);

    DisableButton(button);
}


function SetButtonIcon(button, iconURI)
{
    if (button != null && iconURI != null && iconURI.length > 0)
    {
        var iconElement = document.getElementById(button.id + "_Icon");
        if(iconElement != null)
        {
            iconElement.src = iconURI;
        }
    }
}

function SetButtonLabel(button, label)
{
    if (button != null && label != null && label.length > 0)
    {
        var labelElement = document.getElementById(button.id + "_Label");
        if(labelElement != null)
        {
            labelElement.innerHTML = "&nbsp;" + label;
        }
    }
}

function SetButtonIconFromID(buttonID, iconURI)
{
    if (buttonID.length > 0 && iconURI.length > 0)
    {
        var iconElement = document.getElementById(buttonID + "_Icon");
        if(iconElement != null)
        {
            iconElement.src = iconURI;
        }
    }
}

function SetButtonLabelFromID(buttonID, label)
{
    if (buttonID.length > 0 && label.length > 0)
    {
        var labelElement = document.getElementById(buttonID + "_Label");
        if(labelElement != null)
        {
            labelElement.innerHTML = "&nbsp;" + label;
        }
    }
}

function SetButtonLocation(subButtonContainerID, parentButtonID)
{
    var subButtonContainer = document.getElementById(subButtonContainerID);
    var parentButton = document.getElementById(parentButtonID);
   
    subButtonContainer.style.top = GetOffsetTop(parentButton) + 24;
    subButtonContainer.style.left = GetOffsetLeft(parentButton) - 1;
}

//General Positioning Methods
function GetOffsetTop(element)
{
    if(element.offsetParent != null && element.offsetParent.id != 'ScrollingContainer' && element.style.overflow != 'auto')
    {    
        return element.offsetTop + GetOffsetTop(element.offsetParent);
    }
    else
    {
        return 0;
    }
}

function GetOffsetLeft(element)
{
    if(element.offsetParent != null && element.offsetParent.id != 'ScrollingContainer' && element.style.overflow != 'auto')
    {
        return element.offsetLeft + GetOffsetLeft(element.offsetParent);
    }
    else
    {
        return 0;
    }
}

function ToggleShowSubButtons(elementName)
{
    var subButtonContainer = document.getElementById(elementName);
    
    if(subButtonContainer != null)
    {
        if(subButtonContainer.style.display == 'none')
        {
            HideSelectBoxes();
        
            subButtonContainer.style.display = '';
            m_visibleSubButtons = elementName;
        }
        else
        {
            ShowSelectBoxes();
        
            subButtonContainer.style.display = 'none';
            m_visibleSubButtons = '';
        }
    }
}

function CheckHideSubButtons(currentButton)
{
    var returnValue = true;

    //Is the button the root of the subbutton div?
    if (currentButton.id + '_SubButtons' == m_visibleSubButtons)
    {
        returnValue = false;
    }
    else
    {
        //Is the button contained by the subbutton div?
        if (IsElementContained(currentButton, m_visibleSubButtons))
        {
            returnValue = false;
        }
    }

    return returnValue;
}

function IsElementContained(element, parentID)
{
    var isContained = false;

    if (element != null)
    {
        if (element.id != parentID)
        {
            isContained = IsElementContained(element.parentNode, parentID);
        }
        else
        {
            isContained = true;
        }
    }

    return isContained;
}

function HideSubButtons(elementName)
{
    var subButtonContainer = document.getElementById(elementName);
    
    if(subButtonContainer != null)
    {
        subButtonContainer.style.display = 'none';
        m_visibleSubButtons = '';
        
        ShowSelectBoxes();
    }    
}

//DOM interrogation
function getElementsByTagNames(list, obj)
{
    if (!obj)
    {
        obj = document;
    }
    var tagNames = list.split(',');
    var resultArray = new Array();
    for (var i = 0; i < tagNames.length; i++)
    {
        var tags = obj.getElementsByTagName(tagNames[i]);
        for (var j = 0; j < tags.length; j++)
        {
            resultArray.push(tags[j]);
        }
    }
    var testNode = resultArray[0];
    if (!testNode) return [];
    if (testNode.sourceIndex)
    {
        resultArray.sort(function(a, b)
        {
            return a.sourceIndex - b.sourceIndex;
        });
    }
    else if (testNode.compareDocumentPosition)
    {
        resultArray.sort(function(a, b)
        {
            return 3 - (a.compareDocumentPosition(b) & 6);
        });
    }
    return resultArray;
}

//QueryString handling object
function QueryString(initialQueryString)
{
    this.m_queryString = "";
    
    this.Add = QueryStringAdd;
    this.AddParameter = QueryStringAdd;
    this.Get = QueryStringGet;
    this.GetParameter = QueryStringGet;
    this.Remove = QueryStringRemove;
    this.RemoveParameter = QueryStringRemove;
    this.toString = function() { return this.m_queryString; };

    if (typeof (initialQueryString) != 'undefined' && initialQueryString != null && initialQueryString.length > 0)
    {
        this.m_queryString = initialQueryString;
    }
    else
    {
        this.m_queryString = window.location.search;
    }
}

function QueryStringAdd(name, value)
{
    this.Remove(name);

    if (this.m_queryString.length == 0)
    {
        this.m_queryString = "?";
    }

    if (this.m_queryString.length == 1 && this.m_queryString == "?")
    {
        this.m_queryString = this.m_queryString + name + "=" + value;
    }
    else
    {
        this.m_queryString = this.m_queryString + "&" + name + "=" + value;
    }
}

function QueryStringGet(name)
{
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(this.m_queryString);
    if (results == null)
    {
        return "";
    }
    else
    {
        return results[1];
    }
}

function QueryStringRemove(name)
{
    var startIndex;
    var endIndex;
    var tempQueryString;
    var queryStringFragment;

    startIndex = this.m_queryString.indexOf('&' + name + '=');
    if (startIndex == -1)
    {
        startIndex = this.m_queryString.indexOf('?' + name + '=');
    }
    startIndex = startIndex + 1;

    if (startIndex > 0)
    {
        queryStringFragment = this.m_queryString.substring(0, startIndex);
        endIndex = this.m_queryString.indexOf("&", startIndex);
        if (endIndex > -1)
        {
            tempQueryString = queryStringFragment + this.m_queryString.substring(endIndex + 1);
        }
        else
        {
            tempQueryString = queryStringFragment.substring(0, queryStringFragment.length - 1);
        }

        this.m_queryString = tempQueryString;
    }
}

function LeftTrim(value)
{	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");	
}

function RightTrim(value)
{	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");	
}

function Trim(value)
{	
	return LeftTrim(RightTrim(value));	
}

function LeftPad(string, length, chars) 
{ 
    return new Array(length - string.length + 1).join(chars || '0') + string; 
}

function RightPad(string, length, chars) 
{ 
    return string + new Array(length - string.length + 1).join(chars || '0'); 
}

function RemoveHTMLTags(content)
{
    var root = document.createElement("root");
    root.innerHTML = content;
    
    return root.innerText;
}

function GetWindowSize() {
  var myWidth = 0, myHeight = 0;
  if(typeof(window.innerWidth) == 'number') 
  {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  }
  else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
  {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  }
  else if(document.body && (document.body.clientWidth || document.body.clientHeight))
  {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  
  return [myWidth, myHeight];
}

function GetDocumentFileName()
{
    var fileName = document.location.href;
    var endOfName = fileName.indexOf("?");
    if(endOfName == -1)
    {
        endOfName = fileName.length;
    }
    var lastSlash = fileName.substring(0,endOfName).lastIndexOf("/");
    
    fileName = fileName.substring(lastSlash + 1, endOfName);
    
    return fileName;
}

function CheckBreadcrumb()
{
    var queryString = new QueryString();
    var showBreadCrumb = queryString.GetParameter("ShowBreadcrumb");
    if (showBreadCrumb.length == 0)
    {
        var breadcrumb = document.getElementById("Breadcrumb");
        breadcrumb.style.display = 'none';
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb2");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb3");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
    }
    else if (showBreadCrumb == '1')
    {
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb2");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb3");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
    }
    else if (showBreadCrumb == '2')
    {
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb3");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
    }
    else if (showBreadCrumb == '3')
    {
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
        try
        {
            var breadcrumb = document.getElementById("Breadcrumb2");
            breadcrumb.style.display = 'none';
        }
        catch(error){}
    }
}

function GetLeftOffset()
{
    var menuLeft = 0;
    var menuDiv = document.getElementById('menu');
    var offsetLeft = 1;
    if (/MSIE 8/.test(navigator.userAgent))
    {
        offsetLeft = 0;
    }
   	else if (/Firefox/.test(navigator.userAgent))
    {
        var htmlElement = document.getElementsByTagName('html')[0];
        var bodyElement = document.getElementsByTagName('body')[0];
        offsetTop = 5;
        offsetLeft = 1 + Math.round((htmlElement.offsetWidth - bodyElement.offsetWidth + 1) / 2);
    }

    try
    {
        menuLeft = GetOffsetLeft(menuDiv) + offsetLeft;
    }
    catch(error){}

    return menuLeft;
}
        
function RelocateMenu()
{
    /*
    menu items are id="e0_NNi"
    Correct Left values: 155 232 342 446 541 650
    Incorrect Left vaues: 164 241 351 455 550 659
    
    1. Find current MenuLeft position
    2. Find the first menu element, get its Left position
    3. If Left values differ then:
    4. Calc difference (the adjustment)
    5. iterate through the menu elements and add the adjustment to the Left position
    6. test in both screen resolutions
    */
    var leftPos = GetLeftOffset();
    var rootMenuItem = document.getElementById("e0_0i");
    var rootLeftPos = parseInt(rootMenuItem.style.left);
    if (leftPos != rootLeftPos)
    {
        var diff = leftPos - rootLeftPos;
        for (var index = 0; true; index++)
        {
            var menuItem = document.getElementById("e0_" + index + "i");
            if (menuItem == null)
            {
                break;
            }
		    
            var newLeftPos = parseInt(menuItem.style.left) + diff;
            menuItem.style.left = newLeftPos + "px";
        }
    }
}
