﻿Array.prototype.clear = function () { this.length = 0; };
Array.prototype.add = function (parElem) {
    this[(this.length || 0)] = parElem;
    return this.length - 1;
} // Array.prototype.add = function (parElem)

String.prototype.trim = function() { return this.replace(/(^\s+|(\s+$))/g, ''); }

String.prototype.startsWith = function(str) { return (this.match("^"+str)==str); }
String.prototype.endsWith = function(str) { return (this.match(str+"$")==str); }

function isObject() {
	if (typeof arguments[0] != 'object') return false;
	return (arguments[0].constructor == null || arguments[0].constructor.toString().match(/string/i) == null);
}

function isString() {
	if (typeof arguments[0] == 'string') return true;
	if (typeof arguments[0] == 'object'){
		return (arguments[0].constructor != null && arguments[0].constructor.toString().match(/string/i) != null);
	}
	return false;
}

function isArray()
{
	if (typeof arguments[0] == 'object'){
		var criterion = arguments[0].constructor.toString().match(/array/i); 
		return (criterion != null);
	}
	return false;
}


// --------------------------- Waiting Image & UserWait ------------------------------------------------


function GetUserWaitParent(varParentElement) {
    if (!varParentElement) return document.body;
    if (varParentElement.substring) return document.getElementById(varParentElement);
    return varParentElement;
} // function GetUserWaitParent(varElement)

function GetUserWaitElement(varParentElement) {
    var x = 0;
    var varElement;

    while (!varElement && x < varParentElement.childNodes.length) {
        varElement = varParentElement.childNodes[x];
        if (varElement.className != 'WaitPanel') varElement = null;
        x++;
    }

    return varElement;
} // function GetUserWaitElement(varParentElement)

function StartUserWait(varParentElement) {
    var strPosition;
    var varElement;

    varParentElement = GetUserWaitParent(varParentElement);
    varElement = GetUserWaitElement(varParentElement);

    if (varParentElement == document.body)
        strPosition = 'static';
    else {
        if (!(varParentElement.style.position) || varParentElement.style.position == 'relative') {
            varParentElement.style.position = 'relative'
            strPosition = 'absolute';
        }
        else strPosition = 'static';
    }

    if (varElement) {
        varElement.style.display = '';
        varElement.Count++;
    }
    else {
        varParentElement.appendChild(varElement = document.createElement('div'));
        varElement.className = 'WaitPanel';
        varElement.style.position = strPosition;
        varElement.style.left = '0px';
        varElement.style.top = '0px';
        varElement.style.width = '100%';
        varElement.style.height = '100%';
        varElement.style.opacity = '0.5';
        varElement.style.filter = 'alpha(opacity=50)';
        varElement.style.zIndex = '5000';
        varElement.style.backgroundColor = '#FFFFFF';
        varElement.innerHTML = '<table style="width:100%;height:100%;"><tr><td style="text-align:center;vertical-align:center;"><img src = "/Code/_Images/loader_25.gif" class="WaitImage"/></td></tr></table>'
        varElement.Count = 1;
    }
} // function StartUserWait

function EndUserWait(varParentElement) {
    var strPosition;
    var varElement;

    varParentElement = GetUserWaitParent(varParentElement);
    varElement = GetUserWaitElement(varParentElement);

    if (varElement) {
        varElement.Count--;
        if (varElement.Count <= 0) {
            varElement.Count = 0;
            varElement.style.display = 'none';
        }
    }
} // function EndUserWait

function EndUserWaitComplete(varParentElement) {
    var strPosition;
    var varElement;

    varParentElement = GetUserWaitParent(varParentElement);
    varElement = GetUserWaitElement(varParentElement);

    if (varElement) {
        varElement.Count = 0;
        varElement.style.display = 'none';
    }
} // function EndUserWaitComplete






//Includes a JS file from another JS file if it isn't already there
function Include(parFileName) {
    var varHead;
    var varScript;
    
    if (CurrentDomain() == 'LOCAL')
        parFileName = '/iXtranet/Script/' + parFileName;
    else
        parFileName = '/Script/' + parFileName;
    
    varHead = document.getElementsByTagName('head')[0];
    for (var i = 0; i < varHead.childNodes.length; i++)
        if (varHead.childNodes[i].src == parFileName) return;

    varScript = document.createElement('script');
    varScript.src = parFileName;
    varScript.type = 'text/javascript';

    varHead.appendChild(varScript)
} // function Include(parFileName)

function ToggleElement(parElementName, parVisible) {
  var varElem = document.getElementById(parElementName);

  if (varElem) {
    if (typeof (parVisible) == 'undefined')
      ToggleElement(parElementName, !varElem.style || !varElem.style.display || varElem.style.display == 'none');
    else if (parVisible)
      varElem.style.display = '';
    else
      varElem.style.display = 'none';
  } // if (varElem)
} // function ToggleElement(parElementName)

function TriggerEvent(parElementID, parEventName) {
    //alert('triggering event : ' + parEventName + '\n on element : ' + parElementID);
    $('#' + parElementID).trigger(parEventName);
} // function TriggerEvent(parElementID, parEventName)

function PadRight(parText, parLength, parFillChar) {
    if (typeof parText == 'undefined') parText = '';
    if (typeof parFillChar == 'undefined' || parFillChar.length != 1) parFillChar = ' ';

    parText += ''; // turn it into a string if it isn't already

    try {
        if (typeof parLength == 'undefined' || !parseInt(parLength)) parLength = parText.length;
    } // try
    catch (varError) {
        parLength = parText.length;
    } // catch

    while (parText.length < parLength) parText += parFillChar;

    return parText;

} // function PadRight(parText, parLength, parFillChar)

function PadLeft(parText, parLength, parFillChar) {
    if (typeof parText == 'undefined') parText = '';
    if (typeof parFillChar == 'undefined' || parFillChar.length != 1) parFillChar = ' ';

    parText += ''; // turn it into a string if it isn't already

    try {
        if (typeof parLength == 'undefined' || !parseInt(parLength)) parLength = parText.length;
    } // try
    catch (varError) {
        parLength = parText.length;
    } // catch

    while (parText.length < parLength) parText = parFillChar + parText;

    return parText;

} // function PadLeft(parText, parLength, parFillChar)

function AddMinutesToDateTime(parDateTime, parMinutes) {
    return new Date
	(
		//parDateTime.getYear(), parDateTime.getMonth(), parDateTime.getDate(),
        parDateTime.getFullYear(), parDateTime.getMonth(), parDateTime.getDate(),
		parDateTime.getHours(), parDateTime.getMinutes() + parMinutes, parDateTime.getSeconds(), 0
	);
} // function AddMinutesToDateTime(parDateTime, varMinutes)

function AddSecondsToDateTime(parDateTime, parSeconds) {
    return new Date
	(
    //parDateTime.getYear(), parDateTime.getMonth(), parDateTime.getDate(),
        parDateTime.getFullYear(), parDateTime.getMonth(), parDateTime.getDate(),
		parDateTime.getHours(), parDateTime.getMinutes(), parDateTime.getSeconds() + parSeconds, 0
	);
} // function AddSecondsToDateTime(parDateTime, parSeconds)

function DateFormat(parDate, parFormat) {
    if (typeof parFormat == 'undefined') parFormat = 'SYSTEM'; // handled by 'default'

    try {
        parDate.getYear();
    } // try
    catch (varError) {
        parDate = new Date();
    } // catch

    var varFormatted = null;

    var varYear = parDate.getFullYear();
    var varMonth = parDate.getMonth() + 1;
    var varDay = parDate.getDate();
    var varHour = parDate.getHours();
    var varMinute = parDate.getMinutes();
    var varSecond = parDate.getSeconds();
    var varMilliSecond = parDate.getMilliseconds;

    switch (parFormat) {
        case 'UNDERSCORE':
            varFormatted = varYear + '_' + PadLeft(varMonth, 2, '0') + '_' + PadLeft(varDay, 2, '0')
            varFormatted += '_' + PadLeft(varHour, 2, '0') + '_' + PadLeft(varMinute, 2, '0') + '_' + PadLeft(varSecond, 2, '0');
            break;
        case 'TIME':
            varFormatted = ' ' + PadLeft(varHour, 2, '0') + ':' + PadLeft(varMinute, 2, '0');
            break;
        case 'JAVASCRIPT':
            varFormatted = varYear + ',' + (varMonth - 1) + ',' + varDay
            varFormatted += varHour + ',' + varMinute + ',' + varSecond + ',' + varMilliSecond;
        default:
            varFormatted = varYear + '-' + PadLeft(varMonth, 2, '0') + '-' + PadLeft(varDay, 2, '0')
            varFormatted += ' ' + PadLeft(varHour, 2, '0') + ':' + PadLeft(varMinute, 2, '0') + ':' + PadLeft(varSecond, 2, '0');
            break;
    } // switch (parFormat)
    return varFormatted;
} // function DateFormat(parDate, parFormat)

function ParseDate(parDateString) {
    var varPattern = null;

    var varYear = null;
    var varMonth = null;
    var varDay = null;
    var varHour = null;
    var varMinute = null;
    var varSecond = null;

    varDatePattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/;
    varDateTimePattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/;
    if (varDatePattern.test(parDateString) || varDateTimePattern.test(parDateString)) {
        // '2010-05-13 14:04:25'
        //  0123456789012345678
        varYear = parDateString.substring(0, 4);
        varMonth = parDateString.substring(5, 7);
        varDay = parDateString.substring(8, 10);
        varHour = parDateString.substring(11, 13);
        varMinute = parDateString.substring(14, 16);
        varSecond = parDateString.substring(17, 19);
        return new Date(varYear, varMonth - 1, varDay, varHour, varMinute, varSecond, 0);
    } // if (varPattern.test(parDateString))

} // function ToDate(parDateString)

function AddMilliseconds(parDate, parMilliseconds) {
    if (!parDate) return null;
    if (!parMilliseconds) return parDate;
    return new Date(parDate.getTime() + ParseFloat(parMilliseconds));
}

function FormatCurrency(parCurrencyPattern, parValue) {
    parValue = ParseFloat(parValue, 0);
    parValue = (Math.round(parValue * 100) / 100).toString();

    if (parValue.indexOf('.') < 0) parValue += '.';
    while (parValue.indexOf('.') > parValue.length - 3) parValue += '0';
    
    return parCurrencyPattern.replace('#value#', parValue);
} // function FormatCurrency(parCurrencyPattern, parValue)

function Querystring(parkey, parDefault) {
    var varSearchResult = null;
    if (parDefault == null) parDefault = '';
    parkey = parkey.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]');
    varSearchResult = new RegExp('[\\?&]' + parkey + '=([^&#]*)').exec(window.location.href);
    if (varSearchResult == null)
        return parDefault;
    else
        return varSearchResult[1];
} // function Querystring(parkey, parDefault)

function GetXmlProperty(parParentElement, parTagName) {

    //  Old implementation
    //    var xmlProperty;
    //    if (!parParentElement) return null;
    //    xmlProperty = parParentElement.getElementsByTagName(parTagName);
    //    if (!xmlProperty) return null;
    //    if (xmlProperty[0]) xmlProperty = xmlProperty[0]; else return null;
    //    if (!xmlProperty.childNodes) return null;
    //    if (!xmlProperty.childNodes[0]) return null;
    //    xmlProperty = xmlProperty.childNodes[0];
    //    xmlProperty = (xmlProperty.nodeTypedValue || xmlProperty.nodeValue);
    //    if (xmlProperty) if (xmlProperty.toString().toUpperCase() == 'NULL') xmlProperty = null;
    //    return xmlProperty;

    var xmlProperty;

    if (!parParentElement) return null;
    if (!parTagName) return null;

    parTagName = parTagName.toLowerCase();

    for (var i = 0; i < parParentElement.childNodes.length; i++)
        if (parParentElement.childNodes[i].nodeType == 1 && parParentElement.childNodes[i].tagName.toLowerCase() == parTagName)
            xmlProperty = parParentElement.childNodes[i];

    if (!xmlProperty) return null;
    if (!xmlProperty.childNodes) return null;
    if (!xmlProperty.childNodes[0]) return null;
    xmlProperty = xmlProperty.childNodes[0];
    xmlProperty = (xmlProperty.nodeTypedValue || xmlProperty.nodeValue);
    if (xmlProperty) if (xmlProperty.toString().toUpperCase() == 'NULL') xmlProperty = null;
    return xmlProperty;

} // function GetXmlProperty(parParentElement, parTagName)

function DateDiff(parInterval, parDate1, parDate2) {
    var varDivisor = 1;

    switch (parInterval) {
        case 'day':
            varDivisor *= 24;
        case 'hour':
            varDivisor *= 60;
        case 'minute':
            varDivisor *= 60;
        case 'second':
            varDivisor *= 1000;
            break;
        default:
            alert('Error in DateDiff(). Time interval "' + parInterval + '" not supported.\nOnly "day", "hour", "minute" or "second" are valid intervals.');
            return;
    } // switch (parInterval)

    return parseInt((GetMilliSeconds(parDate2) - GetMilliSeconds(parDate1)) / varDivisor);
} // function dateDiff(interval, date1, date2)

function GetMilliSeconds(parDate) {

    var varYear = parDate.getYear();
    var varMonth = parDate.getMonth() + 1;
    var varDay = parDate.getDate();
    var varHour = parDate.getHours();
    var varMinute = parDate.getMinutes();
    var varSecond = parDate.getSeconds();
    var varMillisecond = parDate.getMilliseconds();

    var varTotalMilliSeconds = 0;
    
    // Add years.
    for (i = 1; i < Math.abs(varYear); i++) {
        if (IsLeapYear(i) == true)
            varTotalMilliSeconds += 31622400000;
        else
            varTotalMilliSeconds += 31536000000;
    } // for (i = 1; i < year; i++)

    // Add months.
    for (x = 1; x < varMonth; x++) {
        switch (x) {
            case 4: case 6: case 9: case 11:
                varTotalMilliSeconds += 2592000000;
                break;
            case 2:
                if (IsLeapYear(varYear) == true)
                    varTotalMilliSeconds += 2505600000;
                else
                    varTotalMilliSeconds += 2419200000;
                break;
            default: //1,3,5,7,8,10,12
                varTotalMilliSeconds += 2678400000;
        } // switch (x)
    } // for (x = 1; x < month; x++)

    // Add days.
    varTotalMilliSeconds += (86400000 * (varDay - 1));
    
    // Add hours.
    varTotalMilliSeconds += (3600000 * varHour);
    
    // Add minutes.
    varTotalMilliSeconds += (60000 * varMinute);
    
    // Add seconds.
    varTotalMilliSeconds += (1000 * varSecond);
    
    // Add milliseconds.
    varTotalMilliSeconds += varMillisecond;

    return varTotalMilliSeconds;
} // function GetMilliSeconds(date)

function IsLeapYear(parYear) {
    var varIsLeap = false;
    if (parYear < 0) parYear = -(parYear + 1); // 1 BC = 0 for leapyear calculation, 9 BC = 8, etc.
    if ((parYear % 4) == 0) {
        varIsLeap = true;
        if (parYear % 100 == 0) if (parYear % 400 != 0) varIsLeap = false;
    } // if ((parYear % 4) == 0)
    return varIsLeap
} // function IsLeapYear(year)

function SetMouseoverColor() {
    if (!this.style) return;
    if (this.MouseoverBackgroundColor && this.MouseoverBackgroundColor != '')
        this.style.backgroundColor = this.MouseoverBackgroundColor;
    else
        this.style.backGroundColor = '';
    if (this.MouseOverColor && this.MouseOverColor != '')
        this.style.Color = this.MouseoverColor;
    else
        this.style.Color = '';
} // function SetMouseoverColor()

function SetMouseoutColor() {
    if (!this.style) return;
    if (this.MouseoutBackgroundColor && this.MouseoutBackgroundColor != '')
        this.style.backgroundColor = this.MouseoutBackgroundColor;
    else
        this.style.backGroundColor = '';
    if (this.MouseoutColor && this.MouseoutColor != '')
        this.style.Color = this.MouseoutColor;
    else
        this.style.Color = '';
} // function SetMouseoutColor()

function ParseInt(parInteger, parDefault) {

    if (parInteger == 0) return 0;

    if (!parInteger) return parDefault;
    parInteger = parInteger.toString();
    if (!parInteger) return parDefault;
    
    if (parInteger.indexOf(',') >= 0) parInteger = parInteger.substr(0, parInteger.indexOf(','));
    if (parInteger.indexOf('.') >= 0) parInteger = parInteger.substr(0, parInteger.indexOf('.'));
    
    try { return parseInt(parInteger); }
    catch (varException) { return parDefault; }

} // function ParseInt(parInteger, parDefault)

function ParseFloat(parFloat, parDefault) {

    if (ParseFloat == 0) return 0;

    if (!parFloat) return parDefault;
    parFloat = parFloat.toString();
    if (!parFloat) return parDefault;

    parFloat = parFloat.replace(',', '.');
    if (parFloat.lastIndexOf('.') >= 0) parFloat = parFloat.substr(0, parFloat.lastIndexOf('.')).replace('.', '') + parFloat.substring(parFloat.lastIndexOf('.'));

    try { return parseFloat(parFloat); }
    catch (varException) { return parDefault; }

} // function ParseFloat(parFloat, parDefault)

function ParseBool(parBool, parDefault) {

    if (!parBool) return parDefault;
    parBool = parBool.toString();
    if (!parBool) return parDefault;

    parBool = parBool.toUpperCase();

    switch (parBool) {
        case 'TRUE': return true;
        case 'YES': return true;
        case '1': return true;

        case 'FALSE': return false;
        case 'NO': return false;
        case '0': return false;
    } // switch (parBool)

    return parDefault;

} // function ParseBool(parBool, parDefault)

function ParseBit(parBool, parDefault) {

    if (!parBool) return parDefault;
    parBool = parBool.toString();
    if (!parBool) return parDefault;

    parBool = parBool.toUpperCase();

    switch (parBool) {
        case 'TRUE': return 1;
        case 'YES': return 1;
        case '1': return 1;

        case 'FALSE': return 0;
        case 'NO': return 0;
        case '0': return 0;
    } // switch (parBool)

    return parDefault;

} // function ParseBit(parBool, parDefault)

function ParseString(parString, parDefault) {
    if (!parString) return parDefault;

    if (typeof (parString) == 'boolean') {
        if (parString) return 'true'; else return 'false';
    } // if (typeof (parString) == 'boolean')

    return parString.toString();
} // function ParseString(parString, parDefault)

function ShowErrorMessage(parErrorMessage) {
    var elemErrors;

    elemErrors = document.getElementById('Javascript_Errors');
    if (elemErrors) {
        elemErrors.style.display = '';
        if (elemErrors.innerHTML) elemErrors.innerHTML += '<br />------<br />';
        elemErrors.innerHTML += parErrorMessage;
    } else alert(parErrorMessage);
} // function ShowErrorMessage()

function GetXmlResponse(parAjaxResponse) {

    var varXmlResponse = '';

    var varErrorMessage = '';
    var varFieldName = '';
    var varFieldValue = '';

    if (!parAjaxResponse) {
        ShowErrorMessage('there was no response from the ajax service');
        return false;
    } // if (!parAjaxResponse)

    varXmlResponse = parAjaxResponse.responseXML;

    if (!varXmlResponse) {
        ShowErrorMessage('the ajax response contained no XML');
        return false;
    } // if (!varXmlResponse)

    if (!varXmlResponse.documentElement) {
        ShowErrorMessage('the ajax response contained no (valid) parent element');
        return false;
    } // if (!varXmlResponse.documentElement)

    if (varXmlResponse.documentElement.nodeName.toLowerCase() == 'errors') {
        varErrorMessage = 'the ajax response returned errors : ';
        for (var varIndex = 0; varIndex < varXmlResponse.documentElement.childNodes.length; varIndex++) {
            varFieldName = varXmlResponse.documentElement.childNodes[varIndex].nodeName;
            varFieldValue = varXmlResponse.documentElement.childNodes[varIndex].nodeTypedValue || varXmlResponse.documentElement.childNodes[varIndex].nodeValue;
            varFieldValue = varFieldValue.replace(/\n/g, '<br />\n');
            varErrorMessage += '<br />\n' + varFieldName + ': ' + varFieldValue;
        } // for (var varIndex = 0; varIndex < varXmlResponse.documentElement.childNodes.length; varIndex++)
        ShowErrorMessage(varErrorMessage);
        return false;
    } // if (varXmlResponse.documentElement.nodeName.toLowerCase() == 'errors')

    return varXmlResponse;

} // function GetXmlResponse(parAjaxResponse)

function AddCheckBoxListOnClickHandler(parCheckBoxListID, parFunction) {
    var elemCheckBoxList;
    
    var varInputElements;
    var elemInput;

    var varOldOnClickFunction;
    
    elemCheckBoxList = document.getElementById(parCheckBoxListID);
    if (!elemCheckBoxList) return;
    
    varInputElements = elemCheckBoxList.getElementsByTagName('input');
    if (!varInputElements || varInputElements.length == 0) return;
    
    for (var varIndex = 0; varIndex < varInputElements.length; varIndex++){
        elemInput = varInputElements[varIndex];
        
        if (elemInput.type == 'checkbox') {
            varOldOnClickFunction = elemInput.onclick;

            if (varOldOnClickFunction) {
                varOldOnClickFunction = varOldOnClickFunction.toString();
                varOldOnClickFunction = varOldOnClickFunction.substr(varOldOnClickFunction.indexOf('{') + 1);
                varOldOnClickFunction = varOldOnClickFunction.substr(0, varOldOnClickFunction.lastIndexOf('}') - 1);
                varOldOnClickFunction += ';';
            } // if (varOldOnClickFunction)

            elemInput.onclick = new Function(parFunction + varOldOnClickFunction);
            //alert(elemInput.onclick);
        } // if (elemInput.type == 'checkbox')
         
    } // for (var varIndex = 0; varIndex < varInputElements.length; varIndex++)
} // function AddCheckBoxListOnClickHandler(parCheckBoxListID)

// --------------------------- Window & URL Scripts ------------------------------------------------

function CurrentDomain() {
    if (location.href.indexOf('localhost') >= 0) return 'LOCAL';
    if (location.href.indexOf('dixystest') >= 0) return 'TEST';
    return 'PRODUCTION';
} // function CurrentDomain()

function OpenNamedWindowWS(parName, parURL, parwidth, parheight, parReturnHandle) {

    var vartop = Math.floor((screen.availHeight - parheight) / 2);
    var varleft = Math.floor((screen.availWidth - parwidth) / 2);
    var varNamedWindow = window.open(parURL, parName, 'width=' + parwidth + ',height=' + parheight + ',top=' + vartop + ',left=' + varleft + ',scrollbars,alwaysRaised=True,resizable=yes,titlebar=no');
    varNamedWindow.focus();
    if (typeof blnReturnHandle == 'undefined') parReturnHandle = false;
    if (parReturnHandle) return varNamedWindow;
} // function OpenNamedWindowWS(parName, parURL, parwidth,parrheight, parReturnHandle)

function AddStandardParameter(parURL, parParameter, parValue, parDefault) {
    if (parValue) if (typeof (parValue) == 'object') parValue = parValue.value;
    if (!parValue) parValue = parDefault;

    var arURL = null;
    var blnReplaced = false;
    var x;

    if (!parURL) parURL = '/';
    if (typeof (parURL) == 'string') {
        arURL = parURL.split(/\?|&/);
        for (x = 1; x < arURL.length; x++) arURL[x] = arURL[x].split(/=/, 2);
    }
    else if (parURL.length)
        arURL = parURL;
    else
        return;

    for (x = 1; x < arURL.length; x++) {
        if (parParameter && arURL[x][0].toLowerCase() == parParameter.toLowerCase()) {
            if (parValue)
                arURL[x][1] = escape(parValue);
            else
                arURL[x][1] = '';
            blnReplaced = true;
        } else if (arURL[x].length == 1 || !arURL[x][1]) {
            arURL[x][1] = '';
        }
    }
    
    if (!blnReplaced) arURL[arURL.length] = [parParameter, (parValue ? escape(parValue) : '')];

    if (typeof (parURL) == 'string') {
        parURL = arURL[0];
        for (x = 1; x < arURL.length; x++) if (arURL[x][0] && arURL[x][1]) { parURL += "?" + arURL[x][0] + "=" + arURL[x][1]; break; }
        for (x++; x < arURL.length; x++) if (arURL[x][0] && arURL[x][1]) parURL += "&" + arURL[x][0] + "=" + arURL[x][1];
    }
    else
        parURL = arURL;

    return parURL;

} // function AddStandardParameter(parURL, parParameter, parValue)

function AddStandardParameters(parURL) {

    var arURL = null;

    if (!parURL) parURL = '/';
    if (typeof (parURL) == 'string') {
        arURL = parURL.split(/\?|&/);
        for (x = 1; x < arURL.length; x++) arURL[x] = arURL[x].split(/=/, 2);
    }
    else if (parUrl.length)
        arURL = parURL;
    else
        return;

    arURL = AddStandardParameter(arURL, 'CID', document.getElementById('CID'), '12');
    arURL = AddStandardParameter(arURL, 'SCID', document.getElementById('SCID', '0'));
    arURL = AddStandardParameter(arURL, 'AID', document.getElementById('AID', '0'));

    arURL = AddStandardParameter(arURL, 'CA_AID', document.getElementById('CA_AID'));
    arURL = AddStandardParameter(arURL, 'CM_AID', document.getElementById('CM_AID'));
    arURL = AddStandardParameter(arURL, 'FAQ_AID', document.getElementById('FAQ_AID'));
    arURL = AddStandardParameter(arURL, 'FB_AID', document.getElementById('FB_AID'));
    arURL = AddStandardParameter(arURL, 'FI_AID', document.getElementById('FI_AID'));
    arURL = AddStandardParameter(arURL, 'FM_AID', document.getElementById('FM_AID'));
    arURL = AddStandardParameter(arURL, 'ML_AID', document.getElementById('ML_AID'));
    arURL = AddStandardParameter(arURL, 'NW_AID', document.getElementById('NW_AID'));
    arURL = AddStandardParameter(arURL, 'OD_AID', document.getElementById('OD_AID'));
    arURL = AddStandardParameter(arURL, 'OR_AID', document.getElementById('OR_AID'));
    arURL = AddStandardParameter(arURL, 'PL_AID', document.getElementById('PL_AID'));
    arURL = AddStandardParameter(arURL, 'SUB_AID', document.getElementById('SUB_AID'));
    arURL = AddStandardParameter(arURL, 'SYNC_AID', document.getElementById('SYNC_AID'));
    arURL = AddStandardParameter(arURL, 'SYS_AID', document.getElementById('SYS_AID'));
    arURL = AddStandardParameter(arURL, 'WS_AID', document.getElementById('WS_AID'));

    arURL = AddStandardParameter(arURL, 'LC', document.getElementById('LC'));
    arURL = AddStandardParameter(arURL, 'DBSUID', document.getElementById('DBSUID'));

    if (typeof (parURL) == 'string') {
        parURL = arURL[0];
        for (x = 1; x < arURL.length; x++) if (arURL[x][0] && arURL[x][1]) { parURL += "?" + arURL[x][0] + "=" + arURL[x][1]; break; }
        for (x++; x < arURL.length; x++) if (arURL[x][0] && arURL[x][1]) parURL += "&" + arURL[x][0] + "=" + arURL[x][1];
    }
    else
        parURL = arURL;

    return parURL;

} // function AddStandardParameters(parURL)

// --------------------------- Ajax & Request Complete Scripts ------------------------------------------------

function GetXmlDocument() {
    if (window.ActiveXObject)
        return new ActiveXObject('Microsoft.XMLDOM');
    else
        return document.implementation.createDocument('', '', null);
}
function GetXmlHttpObject() {
    var objXMLHttp = null;
    if (window.XMLHttpRequest)
        objXMLHttp = new XMLHttpRequest();
    else if (window.ActiveXObject)
        objXMLHttp = new ActiveXObject('Microsoft.XMLHTTP');
    return objXMLHttp;
}
function CallAJAXURL(parURL, parFunctionOnreadystatechange, parUseSID) {
    //alert (strURL);
    var xmlHttp = GetXmlHttpObject();

    if (xmlHttp == null) {
        //alert ('Browser does not support HTTP Request');
        return;
    }

    if (typeof (parUseSID) == 'undefined') parUseSID = true;
    if (parUseSID) parURL = parURL + '&sid=' + Math.random();

    xmlHttp.open('GET', parURL, true);
    if (typeof (parFunctionOnreadystatechange) != 'undefined') {
        xmlHttp.onreadystatechange = new Function('if (this.readyState == 4) {' + parFunctionOnreadystatechange + '}');
    }
    xmlHttp.send(null);
    return xmlHttp;
}

function PostAjaxForm(parFormID, parCompleteHandle, parSuccessHandle) {
    PostAjaxFormTyped(parFormID, parCompleteHandle, parSuccessHandle, "html");
} // function PostAjaxForm(parFormName) {

function PostAjaxFormJSON(parFormID, parCompleteHandle, parSuccessHandle) {
    PostAjaxFormTyped(parFormID, parCompleteHandle, parSuccessHandle, "json");
}

function PostAjaxFormTyped(parFormID, parCompleteHandle, parSuccessHandle, parDataType) {
    var varForm = $("#" + parFormID).get(0);
    var varCompleteHandle = function () {
        PostAjaxFormComplete(parCompleteHandle);
    };

    var varAjaxRequest = $.ajax({
        url: varForm.action,
        type: varForm.method,
        dataType: parDataType,
        data: $("#" + parFormID).serialize(),
        complete: varCompleteHandle,
        success: parSuccessHandle,
        error: PostAjaxFormError
    });
}

function PostAjaxFormError(parResponse) {
    //var varUrl = AddStandardParameters('/TEST/Geert');
    //var varWindow = window.open(document.url, 'appointmentWindow', 'width=850,height=500,toolbar=0,menubar=0,status=0,location=0,resizable=1,scrollbars');

    alert(parResponse.responseText);

//    varWindow.focus();
//    varWindow.document.appendChild(varWindow.document.createTextNode(parResponse.responseText));
}

function PostAjaxFormComplete(parCompleteHandle) {
    $.ScriptManager.ExecuteRequestCompleteScript();
    parCompleteHandle();
} //function PostAjaxFormComplete(parCompleHandle)

// --------------------------- Event handler registering ------------------------------------------------

function GetFunction(parFunction) {
    if (typeof (parFunction) == "function")
        return parFunction
    else
        return Function(parFunction);
} // function GetFunction(parFunction)

function ExecuteFunction(parFunction) { GetFunction(parFunction)(); }

// --------------------------- Numeric Checks ------------------------------------------------

function PreventInvalidIntegerKey(parEvent) {

    var varCharCode;

    parEvent = parEvent || event;

    varCharCode = (parEvent.which) ? parEvent.which : parEvent.keyCode;

    if (varCharCode <= 31) return true;

    return (varCharCode >= 48 && varCharCode <= 57)
} // function PreventInvalidIntegerKey(parEvent)

function PreventInvalidNumericKey(parEvent) {

    // call this function onkeypress

    var varElement;
    var varValue;
    var varCharCode;

    parEvent = parEvent || event;

    varElement = parEvent.target;
    if (!varElement) return;

    varValue = varElement.value;

    varCharCode = (parEvent.which) ? parEvent.which : parEvent.keyCode;

    if (varCharCode <= 31) return true;

    if (varCharCode == 44 || varCharCode == 46)
        return (varValue.indexOf(',') == -1 && varValue.indexOf('.') == -1);
    else 
        return (varCharCode >= 48 && varCharCode <= 57)

} // function PreventInvalidNumericKey(parElementID, parEvent)


function IsValidEmail(varEmail) {
    var varFilter = /^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/;
    return varFilter.test(varEmail);
}

function ChangeClientID(intCID, intSCID) {
    $('#frmChangeClient #ChangeCID').val(intCID);
    $('#frmChangeClient #ChangeSCID').val(intSCID);
    $("#frmChangeClient #RequestUID").val('');

    $('#frmChangeClient').submit();
}

function ShowLoaderInto(parContainer) {
    if (!parContainer) return;
    if (parContainer.startsWith && !parContainer.startsWith('#'))
        parContainer = $('#' + parContainer);
    else
        parContainer = $(parContainer);
    parContainer.html('<div style="text-align:center;"><img src="/Code/_Images/loader_16.gif" /></div>');
    window.resize();
}

function ShowLoaderReplace(parContainer) {
    if (!parContainer) return;
    if (parContainer.startsWith && !parContainer.startsWith('#'))
        parContainer = $('#' + parContainer);
    else
        parContainer = $(parContainer);
    parContainer.replaceWith('<div id="' + parContainer.attr('id') + '" style="text-align:center;"><img src="/Code/_Images/loader_16.gif" /></div>');
    window.resize();
}

function GetContentInto(parContainerID, parUrl) {
    $.get(
        parUrl,
        function (data) {
            if (data) {
                if (!document.getElementById(parContainerID)) return;
                $('#' + parContainerID).html(data);
                $.ScriptManager.ExecuteRequestCompleteScript();
                window.resize();
            }
        }
    );
}

function GetContentReplace(parContainerID, parUrl) {
    $.get(
        parUrl,
        function (data) {
            if (data) {
                if (!document.getElementById(parContainerID)) return;
                $('#' + parContainerID).replaceWith(data);
                $.ScriptManager.ExecuteRequestCompleteScript();
                window.resize();
            }
        }
    );
}

function PostContentInto(parContainerID, parUrl, parData) {
    $.post(
        parUrl,
        parData,
        function (data) {
            if (data) {
                if (!document.getElementById(parContainerID)) return;
                $('#' + parContainerID).html(data);
                $.ScriptManager.ExecuteRequestCompleteScript();
                window.resize();
            }
        }
    );
}

function PostContentReplace(parContainerID, parUrl, parData) {
    $.post(
        parUrl,
        parData,
        function (data) {
            if (data) {
                if (!document.getElementById(parContainerID)) return;
                $('#' + parContainerID).replaceWith(data);
                $.ScriptManager.ExecuteRequestCompleteScript();
                window.resize();
            }
        }
    );
}

window.center = function () {

    // obviously only works when this isn't an iframe
    if (window.parent == window) {

        var lngWidth = $(window.document).width();
        var lngHeight = $(window.document).height();

        //half the screen width minus half the window width (plus 5 pixel borders).
        var lngLeft = (this.screen.availWidth - lngWidth) / 2;

        //half the screen height minus half the window height (plus title and status bars).
        var lngTop = (this.screen.availHeight - lngHeight) / 2;

        //Move the window.
        this.moveTo(lngLeft, lngTop);

    } // if (window.parent == window)

} // window.center

function SetTransparent(parIFrameID) {
    $('#' + parIFrameID).attr("allowtransparency", true);
    $('#' + parIFrameID).attr("frameborder", 0);
    $('#' + parIFrameID).contents().find('body').css("background", "transparent");
}



function DebugWindow(parMessage) {

    if (!window.debugWindow) {

        window.debugWindow = window.open('', 'DebugWindow' + Math.random()); //OpenNamedWindowWS('DebugWindow' + Math.random(), '', 500, 500, true, false);
        window.debugWindow.document.title = 'Debug Window for ' + window.location.toString();
        window.debugWindow.document.body.innerHTML = '<div style="font-weight: bold;">' + window.debugWindow.document.title + '</div>';
    }

    window.debugWindow.document.body.innerHTML += '<br /><hr />' + parMessage;
}
