// JLR: 09/12/06 - Refactored from UWFramework's JSFunctions.js.
//                 Original function names are commented out.

//function padZero(number,length) 
function Common_LeftPadZeros(str, toLength)
{
    var newStr = "" + str;
	while (newStr.length < toLength)
	{
	    newStr = "0" + newStr;
	}
	return newStr;
}

//function isNumber(inputVal) 
function Common_IsNumber(inputVal)
{	
	var oneDecimal = false;
	var numCommas = 0;
	var inputStr = inputVal.toString();

	for (var i = 0; i < inputStr.length; i++) 
	{
		var oneChar = inputStr.charAt(i);
		
		if (oneChar == "," && !oneDecimal && numCommas <= 1) 
		{
			if (parseInt(inputStr.length - i) > 1) 
			{
				numCommas++;
				continue;
			} 
			else 
			{
			    return false;
			}
		} 
		else if (oneChar == "." && !oneDecimal) 
		{
		    if (parseInt(inputStr.length - i) > 1) 
		    {
			    oneDecimal = true;
				continue;
			} 
			else 
			{
			    return false;
			}
		}
		
		if (oneChar < "0" || oneChar > "9") 
		{
			return false;
		}
	}
	
	return true;
}

//function stripCharsInBag(s, bag)
function Common_StripChars(s, chars)
{	
	var returnString = "";
	for (var i = 0; i < s.length; i++)
	{
	    var c = s.charAt(i);
	    if (chars.indexOf(c) == -1) returnString += c;
	}
    return returnString;
}

//function CtlFormatNumber(objname) 
function Common_FormatNumber(ctrl)
{
    if (!ctrl || ctrl.value == "" || !isNaN(ctrl.value)) return false;
    ctrl.value = (ctrl.value * 1).toString();
    return true;
}

//function CtlFormatCurrency(objname, bolfmt, noOfDecimals)
function Common_FormatCurrency(ctrl, numberOfDecimals)
{
    if (!ctrl || !ctrl.value || !Common_AreValidatorsValid(ctrl)) return false;
    
	var numstr = ctrl.value;
	numstr = numstr.replace(/\$|\,/g,'');
	
	if (isNaN(numstr)) return false;
	
	var numval = numstr;
	
	// Determine if the value contains a negative indicator ('-')
	var sign = (numval == Math.abs(numval));
	if (!sign) numval = Math.abs(numval);
	
	// assume 2 decimal places unless otherwise specified
	if (numberOfDecimals == undefined) numberOfDecimals = 2;
	
	var dollars = Math.floor(numval);
	
	// NOTE: JS floating point math "bug" necessitates the rounding of this result.
	//  For investigation/curiousity, call this routine with the value 4.35 and
	//  test the result of the Math.round() argument below:
	var cents = Math.round((numval * Math.pow(10, numberOfDecimals)) % Math.pow(10, numberOfDecimals));

	var dollarstr = dollars.toString();
	
	// Left pad the cent with zeros to specified # of decimal places
	var centstr = Common_LeftPadZeros(cents, numberOfDecimals);
			
	// Add commas to deliniate thousands, etc.
	for (var i = 0; i < Math.floor((dollarstr.length - (1 + i)) / 3); i++) 
	{
	    dollarstr = dollarstr.substring(0, dollarstr.length - (4 * i + 3)) + ',' +
		            dollarstr.substring(dollarstr.length - (4 * i + 3));
	}

    if (numberOfDecimals > 0)
    {
        numstr = dollarstr + '.' + centstr;
    }
    else
    {
        numstr = dollarstr;
    }
	
	numstr = (((sign) ? '':'-') + numstr);
	ctrl.value = numstr;
		
	return true;
}

//function CtlFormatPercent(objname, noOfDecimals) 
function Common_FormatPercentage(ctrl, numberOfDecimals)
{	
    if (!ctrl || !ctrl.value || !Common_AreValidatorsValid(ctrl)) return false;
	
	var numstr = ctrl.value;
	numstr = numstr.replace(/\$|\,/g,'');
	if (isNaN(numstr)) return false;
	
	var numval = numstr;

	// assume no (zero) decimal places unless otherwise specified
	if (numberOfDecimals == undefined) numberOfDecimals = 0;

	if (numberOfDecimals > 0) 
	{
	    var whole = Math.floor(numval);
	    // NOTE: JS floating point math "bug" necessitates the rounding of this result.
	    //  For investigation/curiousity, call this routine with the value 4.35 and
	    //  test the result of the Math.round() argument below:
	    var decimals = Math.round((numval * Math.pow(10, numberOfDecimals)) % Math.pow(10, numberOfDecimals));

	    // Left pad the decimals with zeros to specified # of decimal places
		numstr = whole + '.' + Common_LeftPadZeros(decimals, numberOfDecimals);
	}
	else 
	{
	    // JLR: mojo - a bug from the original code? num is undefined!
	    numstr = num.toString();
	}
	    
	ctrl.value = numstr;
		
	return true;
}

//function ctlchkdate(objName) 
function Common_FormatDate(ctrl)
{
    if (!ctrl || !ctrl.value || ctrl.value.length < 6) return false;
    
	var strDatestyle = "US"; //United States date style
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = ctrl;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	var strMonthArray = new Array(12);
	
	strMonthArray[0] = "Jan";
	strMonthArray[1] = "Feb";
	strMonthArray[2] = "Mar";
	strMonthArray[3] = "Apr";
	strMonthArray[4] = "May";
	strMonthArray[5] = "Jun";
	strMonthArray[6] = "Jul";
	strMonthArray[7] = "Aug";
	strMonthArray[8] = "Sep";
	strMonthArray[9] = "Oct";
	strMonthArray[10] = "Nov";
	strMonthArray[11] = "Dec";
	strDate = datefield.value;

	if (strDate.length < 1) 
	{
		return false;
	}
	
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) 
	{
	    if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) 
	    {
		    strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) 
			{
				return false;
			}
			else 
			{
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}
	
	if (booFound == false) 
	{
		if (strDate.length > 5)
		{
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4,4);
		}
	}
	
	if (strYear.length == 2) 
	{
		if (strYear < '50') 
		{
		    strYear = '20' + strYear;
		}
		else 
		{
		    strYear = '19' + strYear;
		}
	}
	
	if ((strYear.length == 3) || (strYear.length == 1)) 
	{
		return false;
	}
	
	if ((strYear < '1850') || (strYear > '2100' && strYear != '9999' && strMonth != '09' && strDate != '09')) 
	{
		return false;
	}
	
    // US style
	if (strDatestyle == "US") 
	{
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}
	
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) 
	{
		return false;
	}
	
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) 
	{
	    for (i = 0; i < 12; i++) 
	    {
		    if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) 
		    {
			    intMonth = i + 1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}
		
		if (isNaN(intMonth)) 
		{
			return false;
		}
	}
	
	if (isNaN(strYear)) 
	{
		return false;
	}
	
	intYear = strYear;
	if (intMonth>12 || intMonth<1) 
	{
		return false;
	}
	
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) 
	{
		return false;
	}
	
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) 
	{
		return false;
	}
	
	if (intMonth == 2) 
	{
		if (intday < 1) 
		{
			return false;
		}
		
		if (Common_IsLeapYear(intYear)) 
		{
		    if (intday > 29) 
		    {
			    return false;
		    }
	    }
	    else 
	    {
		    if (intday > 28) 
		    {
			    return false;
		    }
	    }
	}
	
	datefield.value = Common_LeftPadZeros(intMonth,2)+ '/' + Common_LeftPadZeros(intday,2) + '/' + strYear;
	
	Common_RefreshValidators(ctrl);
				
	return true;
}

//function FormatTime(objName, bNoSeconds)
function Common_FormatTime(ctrl, includeSeconds) 
{
    if (!ctrl || !ctrl.value || ctrl.value.length <= 0) return false;
    
	var iHrs;
	var iMins;
	var iSecs;

    var strTime = ctrl.value;
    strTime = strTime.toString().replace(':','');
	if (!includeSeconds)
	{
	    if (strTime != '')
        {
            if (isNaN(strTime) == false)
            {
                strTime = (strTime * 1).toString();
            }
        }
        
	    switch(strTime.length)
	    {
		    case 3:
			    iHrs = strTime.substr(0,1);
			    iMins = strTime.substr(1,2);
			    break;
		    case 4:
			    iHrs = strTime.substr(0,2);
			    iMins = strTime.substr(2,2);
			    break; 
		    default:
			    return false;
			    break;
	    }
	    
	    if (isNaN(iHrs)) {return false;}
	    if (isNaN(iMins)) {return false;}
	    if (iHrs>23) {return false;}
	    if (iMins>59) {return false;}
		
	    ctrl.value = iHrs + ':' + iMins;
	}
    else
    {
	    switch(strTime.length)
	    {
	        case 4:
			    iHrs = strTime.substr(0,2);
			    iMins = strTime.substr(2,2);
			    iSecs = '00';
			    break;
	        case 6:
			    iHrs = strTime.substr(0,2);
			    iMins = strTime.substr(2,2);
			    iSecs = strTime.substr(4,2);
			    break; 
		    default:
			    return false;
			    break;               
		}
		
		if (isNaN(iHrs)) {return false;}
		if (isNaN(iMins)) {return false;}
		if (isNaN(iSecs)) {return false;}
		
		if (iHrs > 24)
		{
			if (iMins > 0)
			{
			    return false;
			}
		}
		else
		{
		    if (iMins > 59)
		    {
		        return false;
		    }
	    }
	    
		if (iSecs > 59)
		{
		    return false;
		}
		
		ctrl.value = iHrs + ':' + iMins + ':' + iSecs;
    }
	
	Common_RefreshValidators(ctrl);
	
	return true;
}

//function LeapYear(intYear) 
function Common_IsLeapYear(intYear)
{
    if (intYear % 100 == 0) 
    {
	    if (intYear % 400 == 0) {return true;}
	}
	else 
	{
	    if ((intYear % 4) == 0) {return true;}
	}
	return false;
}

//function SetSelectedValue(listObj, SelectedVal)	
function Common_SetSelectedValue(listCtrl, selectedValue)
{
    if (!listCtrl) return;
    for (var i = 0; i < listCtrl.length; i++)
    {
	    if (listCtrl.options[i].value == selectedValue)
	    {
	        listCtrl.selectedIndex = i;
	        break;
	    }
    }
}

function Common_NoDigits(e)
{
    var key = window.event ? e.keyCode : e.which;
	switch(key)
	{
		case 48: //zero
		case 49: //one
		case 50: //two
		case 51: //three
		case 52: //four
		case 53: //five
		case 54: //six
		case 55: //seven
		case 56: //eight
		case 57: //nine
		    return false;
		default:
			return true;
	}
}

//function AllowDigits()
function Common_OnlyAllowDigits(e)
{
    var key = window.event ? e.keyCode : e.which;
	switch(key)
	{
	    case 0:   //firefox tab/delete/backspace/arrow
	    case 8:   //firefox backspace
	    case 9:   //firefox tab
	    case 13:  //enter
		case 48:  //zero
		case 49:  //one
		case 50:  //two
		case 51:  //three
		case 52:  //four
		case 53:  //five
		case 54:  //six
		case 55:  //seven
		case 56:  //eight
		case 57:  //nine
		    return true;
		case 99:  //c
		case 118: //v
		case 120: //x
		    return e.ctrlKey;
		default:
		    return false;
	}
}      

//function AllowPercent()
function Common_OnlyAllowPercentage(e)
{
    var key = window.event ? e.keyCode : e.which;
	switch(key)
	{
	    case 0:  //firefox tab/delete/backspace/arrow
	    case 8:  //firefox backspace
	    case 9:  //firefox tab
	    case 13: //enter
		case 46: //.
		case 48: //zero
		case 49: //one
		case 50: //two
		case 51: //three
		case 52: //four
		case 53: //five
		case 54: //six
		case 55: //seven
		case 56: //eight
		case 57: //nine
			return true;
		case 99:  //c
		case 118: //v
		case 120: //x
		    return e.ctrlKey;
		default:
		    return false;
	}
}      

//function AllowTime()
function Common_OnlyAllowTime(e)
{
    var key = window.event ? e.keyCode : e.which;
	switch(key)
	{
	    case 0:  //firefox tab/delete/backspace/arrow
	    case 8:  //firefox backspace
	    case 9:  //firefox tab
	    case 13: //enter
		case 48: //zero
		case 49: //one
		case 50: //two
		case 51: //three
		case 52: //four
		case 53: //five
		case 54: //six
		case 55: //seven
		case 56: //eight
		case 57: //nine
		case 58: //colon (:)
			return true;
		case 99:  //c
		case 118: //v
		case 120: //x
		    return e.ctrlKey;
		default:
		    return false;
	}
}  

function Common_OnlyAllowAlpha(e)
{
    var key = window.event ? e.keyCode : e.which;
    
    if ((key == 0) || (key == 8) || (key == 9) || (key == 13) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122))
    {
        // firefox tab, firefox backspace, firefox tab, enter, 
        // or ASCII letter (upper or lower case); allow key press 
        return true;
    }
    else
    {
        // non-letter; stop key press
        return false;
    }
}  

//function AllowAlphanumeric()
function Common_OnlyAllowAlphanumeric(e)
{
    var key = window.event ? e.keyCode : e.which;
    
    if ((key == 0) || (key == 8) || (key == 9) || (key == 13) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122))
    {
        // firefox tab, firefox backspace, firefox tab, enter, 
        // or ASCII letter (upper or lower case); allow key press 
        return true;
    }
    else
    {
        // non-letter; check for digit
        return Common_OnlyAllowDigits(e);
    }
}

//function AllowCurrency(sOptions)
function Common_OnlyAllowCurrency(e, allowNegative, allowDecimals)
{
	// account for non-specified parameter(s)
	if (allowNegative == undefined) allowNegative = false;
	if (allowDecimals == undefined) allowDecimals = true;
	
	var key = window.event ? e.keyCode : e.which;
	switch(key)
	{
	    case 0:  //firefox tab/delete/backspace/arrow
		case 8:  //firefox backspace
		case 9:  //firefox tab
		case 13: //enter
		case 44: //comma
		case 48: //zero
		case 49: //one
		case 50: //two
		case 51: //three
		case 52: //four
		case 53: //five
		case 54: //six
		case 55: //seven
		case 56: //eight
		case 57: //nine
			return true;
		case 45: //minus
		    return allowNegative;
		case 46: //decimal
		    return allowDecimals;
		case 99:  //c
		case 118: //v
		case 120: //x
		    return e.ctrlKey;
		default: 
		    return false;
	}
}      

//function LimitTextOnKeyPress(obj, iMaxLength, sTextType)
function Common_LimitTextOnKeyPress(ctrl, maxLength, textLabel)
{   
	if (!ctrl.readOnly && ctrl.value.length >= maxLength)
	{
	    alert(textLabel + " text is limited to " + maxLength + " characters.");
	    return false;
	}
	
	return true;
}

//function LimitTextOnPaste(obj, iMaxLength, sTextType)
function Common_LimitTextOnPaste(ctrl, maxLength, textLabel)
{   
    if (ctrl.value.length >= maxLength)
	{
	    alert(textLabel + " text is limited to " + maxLength + " characters.");
	    return false;
	}
	
	var text = window.clipboardData.getData("Text");
	
	if (text.length + ctrl.value.length > maxLength)
	{
	    alert(textLabel + " text is limited to " + maxLength + " characters.  Your paste will be trimmed.");
	    var textRange = document.selection.createRange();
	    textRange.text = text.substr(0, maxLength - ctrl.value.length);
	    return false;
	}
	
	return true;
}
		
//function formatPhoneNo(obj, bNoAreaCode) 
function Common_FormatPhoneNum(ctrl) 
{ 
    if (!ctrl || !ctrl.value) return false;
    
	var retVal;
	var num = Common_StripChars(ctrl.value, " ");
	num = num.toString().replace(/\(|\)|\-/g,'');
	   
	if (num.length != 10)
	{ 
	    // If user did not enter 10 digit phone number then 
	    // simply print whatever user entered.
		retVal = ctrl.value;
	} 
	else
	{ 
	    // Formating phone number here
		retVal = '(';
		var ini = num.substring(0,3);
		retVal += ini + ')';
		var st = num.substring(3,6);
		retVal += st + '-';
		var end = num.substring(6,10);
		retVal += end;
	}
			
	ctrl.value = retVal;
	 
	Common_RefreshValidators(ctrl);
	
	return true;
}

function Common_FormatGNWPhoneNum(ctrl) 
{ 
    if (!ctrl || !ctrl.value) return false;

    var retVal;
    var num = Common_StripChars(ctrl.value, " ");
    num = num.toString().replace(/\(|\)|\-/g,'');

    if (num.length != 10)
    { 
        // If user did not enter 10 digit phone number then 
        // simply print whatever user entered.
        retVal = ctrl.value;
    }
    else
    { 
        // Formating phone number in GNW format here 999 999.9999
        retVal = "";
        var ini = num.substring(0,3);
        retVal += ini + " ";
        var st = num.substring(3,6);
        retVal += st + ".";
        var end = num.substring(6,10);
        retVal += end;
    }

    ctrl.value = retVal;
    Common_RefreshValidators(ctrl);
    return true;
}

function Common_RefreshValidators(ctrl)
{
	if (ctrl && typeof(Page_Validators) == 'object')
	{
	    var hasValidator = false;
	    for (i = 0; i < Page_Validators.length; i++) 
	    {
	        if (Page_Validators[i].controltovalidate == ctrl.id)	
		    {
		        hasValidator = true;
		        break;
		    }	
	    }
	    if (hasValidator)
	    {
	        ValidatorOnChange();
	    }
    }
}

//function formatSSN(obj)
function Common_FormatSsn(ctrl)
{ 
    if (!ctrl || !ctrl.value) return false;
    
	var retVal;
	var num = ctrl.value;
	   
	num = num.toString().replace(/\(|\)|\-/g,'');
	   
	if (num.length != 9)
	{ 
	    // If user did not enter 9 digit SSN then simply print 
	    // whatever user entered.
		retVal = ctrl.value;
	} 
	else
	{ 
	    // Formating SSN here
		var ini = num.substring(0,3);
		retVal = ini + '-';
		var st = num.substring(3,5);
		retVal += st + '-';
		var end = num.substring(5,9);
		retVal += end;
	}
	
	ctrl.value = retVal;
	
	Common_RefreshValidators(ctrl);	
	
	return true;
} 

//function formatZip(obj)
function Common_FormatZip(ctrl)
{
    if (!ctrl || !ctrl.value) return false;
    
    var retVal;
	var num = ctrl.value;
	  
	num = num.toString().replace(/\(|\)|\-/g,'');
	   
	if (num.length < 5 && (num.length != 5 || num.length != 9))
	{ 
	    // If user did not enter 9 digit Zip then simply print 
	    // whatever user entered.
		retVal = _OUTPUT ? ctrl.value : false;
	} 
	else
	{ 
	    // Formating Zip here
		var st = num.substring(0, 5);
		var end = num.substring(5, num.length);
		if (end.length > 0)
		{
		    retVal = st + '-' + end;
		}
		else
		{
		    retVal = st;
		}
    }
	ctrl.value = retVal;
	
	Common_RefreshValidators(ctrl);
	
    return true;
} 

//function setTextValue(clientID, val)
function Common_SetTextValue(ctrlId, val)
{	
	var obj = document.getElementById(ctrlId);
	
	if (obj)
	{
	    if (obj.type == 'text' || obj.type == 'hidden') 
	    {
		    obj.value = val.toString();
		}
	}
}

//function show(clientID) 
function Common_ShowById(controlId)
{
    if (document.getElementById(controlId)) 
    {
	    var objStyle = document.getElementById(controlId).style;
		
		if (objStyle) 
		{
		    objStyle.visibility = "visible";
		}
	}				
}

//function hide(clientID)
function Common_HideById(controlId)
{
    if (document.getElementById(controlId)) 
    {
	    var objStyle = document.getElementById(controlId).style;
		
		if (objStyle) 
		{
		    objStyle.visibility = "hidden";
		}
	}
}

// HtmlDecode (http://lab.msdn.microsoft.com/annotations/htmldecode.js)
// Client side version of the useful Server.HtmlDecode method.
// Takes one string (encoded) and returns another (decoded).
//function HtmlDecode(s)
function Common_HtmlDecode(s)
{
	var out = "";
	if (s==null) return;

	var l = s.length;
	for (var i=0; i<l; i++)
	{
		var ch = s.charAt(i);
		
		if (ch == '&') 
		{
			var semicolonIndex = s.indexOf(';', i+1);
			
            if (semicolonIndex > 0) 
            {
				var entity = s.substring(i + 1, semicolonIndex);
				if (entity.length > 1 && entity.charAt(0) == '#') 
				{
					if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
						ch = String.fromCharCode(eval('0'+entity.substring(1)));
					else
						ch = String.fromCharCode(eval(entity.substring(1)));
				}
		        else 
			    {
					switch (entity)
					{
						case 'quot': ch = String.fromCharCode(0x0022); break;
						case 'amp': ch = String.fromCharCode(0x0026); break;
						case 'lt': ch = String.fromCharCode(0x003c); break;
						case 'gt': ch = String.fromCharCode(0x003e); break;
						case 'nbsp': ch = String.fromCharCode(0x00a0); break;
						case 'iexcl': ch = String.fromCharCode(0x00a1); break;
						case 'cent': ch = String.fromCharCode(0x00a2); break;
						case 'pound': ch = String.fromCharCode(0x00a3); break;
						case 'curren': ch = String.fromCharCode(0x00a4); break;
						case 'yen': ch = String.fromCharCode(0x00a5); break;
						case 'brvbar': ch = String.fromCharCode(0x00a6); break;
						case 'sect': ch = String.fromCharCode(0x00a7); break;
						case 'uml': ch = String.fromCharCode(0x00a8); break;
						case 'copy': ch = String.fromCharCode(0x00a9); break;
						case 'ordf': ch = String.fromCharCode(0x00aa); break;
						case 'laquo': ch = String.fromCharCode(0x00ab); break;
						case 'not': ch = String.fromCharCode(0x00ac); break;
						case 'shy': ch = String.fromCharCode(0x00ad); break;
						case 'reg': ch = String.fromCharCode(0x00ae); break;
						case 'macr': ch = String.fromCharCode(0x00af); break;
						case 'deg': ch = String.fromCharCode(0x00b0); break;
						case 'plusmn': ch = String.fromCharCode(0x00b1); break;
						case 'sup2': ch = String.fromCharCode(0x00b2); break;
						case 'sup3': ch = String.fromCharCode(0x00b3); break;
						case 'acute': ch = String.fromCharCode(0x00b4); break;
						case 'micro': ch = String.fromCharCode(0x00b5); break;
						case 'para': ch = String.fromCharCode(0x00b6); break;
						case 'middot': ch = String.fromCharCode(0x00b7); break;
						case 'cedil': ch = String.fromCharCode(0x00b8); break;
						case 'sup1': ch = String.fromCharCode(0x00b9); break;
						case 'ordm': ch = String.fromCharCode(0x00ba); break;
						case 'raquo': ch = String.fromCharCode(0x00bb); break;
						case 'frac14': ch = String.fromCharCode(0x00bc); break;
						case 'frac12': ch = String.fromCharCode(0x00bd); break;
						case 'frac34': ch = String.fromCharCode(0x00be); break;
						case 'iquest': ch = String.fromCharCode(0x00bf); break;
						case 'Agrave': ch = String.fromCharCode(0x00c0); break;
						case 'Aacute': ch = String.fromCharCode(0x00c1); break;
						case 'Acirc': ch = String.fromCharCode(0x00c2); break;
						case 'Atilde': ch = String.fromCharCode(0x00c3); break;
						case 'Auml': ch = String.fromCharCode(0x00c4); break;
						case 'Aring': ch = String.fromCharCode(0x00c5); break;
						case 'AElig': ch = String.fromCharCode(0x00c6); break;
						case 'Ccedil': ch = String.fromCharCode(0x00c7); break;
						case 'Egrave': ch = String.fromCharCode(0x00c8); break;
						case 'Eacute': ch = String.fromCharCode(0x00c9); break;
						case 'Ecirc': ch = String.fromCharCode(0x00ca); break;
						case 'Euml': ch = String.fromCharCode(0x00cb); break;
						case 'Igrave': ch = String.fromCharCode(0x00cc); break;
						case 'Iacute': ch = String.fromCharCode(0x00cd); break;
						case 'Icirc': ch = String.fromCharCode(0x00ce); break;
						case 'Iuml': ch = String.fromCharCode(0x00cf); break;
						case 'ETH': ch = String.fromCharCode(0x00d0); break;
						case 'Ntilde': ch = String.fromCharCode(0x00d1); break;
						case 'Ograve': ch = String.fromCharCode(0x00d2); break;
						case 'Oacute': ch = String.fromCharCode(0x00d3); break;
						case 'Ocirc': ch = String.fromCharCode(0x00d4); break;
						case 'Otilde': ch = String.fromCharCode(0x00d5); break;
						case 'Ouml': ch = String.fromCharCode(0x00d6); break;
						case 'times': ch = String.fromCharCode(0x00d7); break;
						case 'Oslash': ch = String.fromCharCode(0x00d8); break;
						case 'Ugrave': ch = String.fromCharCode(0x00d9); break;
						case 'Uacute': ch = String.fromCharCode(0x00da); break;
						case 'Ucirc': ch = String.fromCharCode(0x00db); break;
						case 'Uuml': ch = String.fromCharCode(0x00dc); break;
						case 'Yacute': ch = String.fromCharCode(0x00dd); break;
						case 'THORN': ch = String.fromCharCode(0x00de); break;
						case 'szlig': ch = String.fromCharCode(0x00df); break;
						case 'agrave': ch = String.fromCharCode(0x00e0); break;
						case 'aacute': ch = String.fromCharCode(0x00e1); break;
						case 'acirc': ch = String.fromCharCode(0x00e2); break;
						case 'atilde': ch = String.fromCharCode(0x00e3); break;
						case 'auml': ch = String.fromCharCode(0x00e4); break;
						case 'aring': ch = String.fromCharCode(0x00e5); break;
						case 'aelig': ch = String.fromCharCode(0x00e6); break;
						case 'ccedil': ch = String.fromCharCode(0x00e7); break;
						case 'egrave': ch = String.fromCharCode(0x00e8); break;
						case 'eacute': ch = String.fromCharCode(0x00e9); break;
						case 'ecirc': ch = String.fromCharCode(0x00ea); break;
						case 'euml': ch = String.fromCharCode(0x00eb); break;
						case 'igrave': ch = String.fromCharCode(0x00ec); break;
						case 'iacute': ch = String.fromCharCode(0x00ed); break;
						case 'icirc': ch = String.fromCharCode(0x00ee); break;
						case 'iuml': ch = String.fromCharCode(0x00ef); break;
						case 'eth': ch = String.fromCharCode(0x00f0); break;
						case 'ntilde': ch = String.fromCharCode(0x00f1); break;
						case 'ograve': ch = String.fromCharCode(0x00f2); break;
						case 'oacute': ch = String.fromCharCode(0x00f3); break;
						case 'ocirc': ch = String.fromCharCode(0x00f4); break;
						case 'otilde': ch = String.fromCharCode(0x00f5); break;
						case 'ouml': ch = String.fromCharCode(0x00f6); break;
						case 'divide': ch = String.fromCharCode(0x00f7); break;
						case 'oslash': ch = String.fromCharCode(0x00f8); break;
						case 'ugrave': ch = String.fromCharCode(0x00f9); break;
						case 'uacute': ch = String.fromCharCode(0x00fa); break;
						case 'ucirc': ch = String.fromCharCode(0x00fb); break;
						case 'uuml': ch = String.fromCharCode(0x00fc); break;
						case 'yacute': ch = String.fromCharCode(0x00fd); break;
						case 'thorn': ch = String.fromCharCode(0x00fe); break;
						case 'yuml': ch = String.fromCharCode(0x00ff); break;
						case 'OElig': ch = String.fromCharCode(0x0152); break;
						case 'oelig': ch = String.fromCharCode(0x0153); break;
						case 'Scaron': ch = String.fromCharCode(0x0160); break;
						case 'scaron': ch = String.fromCharCode(0x0161); break;
						case 'Yuml': ch = String.fromCharCode(0x0178); break;
						case 'fnof': ch = String.fromCharCode(0x0192); break;
						case 'circ': ch = String.fromCharCode(0x02c6); break;
						case 'tilde': ch = String.fromCharCode(0x02dc); break;
						case 'Alpha': ch = String.fromCharCode(0x0391); break;
						case 'Beta': ch = String.fromCharCode(0x0392); break;
						case 'Gamma': ch = String.fromCharCode(0x0393); break;
						case 'Delta': ch = String.fromCharCode(0x0394); break;
						case 'Epsilon': ch = String.fromCharCode(0x0395); break;
						case 'Zeta': ch = String.fromCharCode(0x0396); break;
						case 'Eta': ch = String.fromCharCode(0x0397); break;
						case 'Theta': ch = String.fromCharCode(0x0398); break;
						case 'Iota': ch = String.fromCharCode(0x0399); break;
						case 'Kappa': ch = String.fromCharCode(0x039a); break;
						case 'Lambda': ch = String.fromCharCode(0x039b); break;
						case 'Mu': ch = String.fromCharCode(0x039c); break;
						case 'Nu': ch = String.fromCharCode(0x039d); break;
						case 'Xi': ch = String.fromCharCode(0x039e); break;
						case 'Omicron': ch = String.fromCharCode(0x039f); break;
						case 'Pi': ch = String.fromCharCode(0x03a0); break;
						case 'Rho': ch = String.fromCharCode(0x03a1); break;
						case 'Sigma': ch = String.fromCharCode(0x03a3); break;
						case 'Tau': ch = String.fromCharCode(0x03a4); break;
						case 'Upsilon': ch = String.fromCharCode(0x03a5); break;
						case 'Phi': ch = String.fromCharCode(0x03a6); break;
						case 'Chi': ch = String.fromCharCode(0x03a7); break;
						case 'Psi': ch = String.fromCharCode(0x03a8); break;
						case 'Omega': ch = String.fromCharCode(0x03a9); break;
						case 'alpha': ch = String.fromCharCode(0x03b1); break;
						case 'beta': ch = String.fromCharCode(0x03b2); break;
						case 'gamma': ch = String.fromCharCode(0x03b3); break;
						case 'delta': ch = String.fromCharCode(0x03b4); break;
						case 'epsilon': ch = String.fromCharCode(0x03b5); break;
						case 'zeta': ch = String.fromCharCode(0x03b6); break;
						case 'eta': ch = String.fromCharCode(0x03b7); break;
						case 'theta': ch = String.fromCharCode(0x03b8); break;
						case 'iota': ch = String.fromCharCode(0x03b9); break;
						case 'kappa': ch = String.fromCharCode(0x03ba); break;
						case 'lambda': ch = String.fromCharCode(0x03bb); break;
						case 'mu': ch = String.fromCharCode(0x03bc); break;
						case 'nu': ch = String.fromCharCode(0x03bd); break;
						case 'xi': ch = String.fromCharCode(0x03be); break;
						case 'omicron': ch = String.fromCharCode(0x03bf); break;
						case 'pi': ch = String.fromCharCode(0x03c0); break;
						case 'rho': ch = String.fromCharCode(0x03c1); break;
						case 'sigmaf': ch = String.fromCharCode(0x03c2); break;
						case 'sigma': ch = String.fromCharCode(0x03c3); break;
						case 'tau': ch = String.fromCharCode(0x03c4); break;
						case 'upsilon': ch = String.fromCharCode(0x03c5); break;
						case 'phi': ch = String.fromCharCode(0x03c6); break;
						case 'chi': ch = String.fromCharCode(0x03c7); break;
						case 'psi': ch = String.fromCharCode(0x03c8); break;
						case 'omega': ch = String.fromCharCode(0x03c9); break;
						case 'thetasym': ch = String.fromCharCode(0x03d1); break;
						case 'upsih': ch = String.fromCharCode(0x03d2); break;
						case 'piv': ch = String.fromCharCode(0x03d6); break;
						case 'ensp': ch = String.fromCharCode(0x2002); break;
						case 'emsp': ch = String.fromCharCode(0x2003); break;
						case 'thinsp': ch = String.fromCharCode(0x2009); break;
						case 'zwnj': ch = String.fromCharCode(0x200c); break;
						case 'zwj': ch = String.fromCharCode(0x200d); break;
						case 'lrm': ch = String.fromCharCode(0x200e); break;
						case 'rlm': ch = String.fromCharCode(0x200f); break;
						case 'ndash': ch = String.fromCharCode(0x2013); break;
						case 'mdash': ch = String.fromCharCode(0x2014); break;
						case 'lsquo': ch = String.fromCharCode(0x2018); break;
						case 'rsquo': ch = String.fromCharCode(0x2019); break;
						case 'sbquo': ch = String.fromCharCode(0x201a); break;
						case 'ldquo': ch = String.fromCharCode(0x201c); break;
						case 'rdquo': ch = String.fromCharCode(0x201d); break;
						case 'bdquo': ch = String.fromCharCode(0x201e); break;
						case 'dagger': ch = String.fromCharCode(0x2020); break;
						case 'Dagger': ch = String.fromCharCode(0x2021); break;
						case 'bull': ch = String.fromCharCode(0x2022); break;
						case 'hellip': ch = String.fromCharCode(0x2026); break;
						case 'permil': ch = String.fromCharCode(0x2030); break;
						case 'prime': ch = String.fromCharCode(0x2032); break;
						case 'Prime': ch = String.fromCharCode(0x2033); break;
						case 'lsaquo': ch = String.fromCharCode(0x2039); break;
						case 'rsaquo': ch = String.fromCharCode(0x203a); break;
						case 'oline': ch = String.fromCharCode(0x203e); break;
						case 'frasl': ch = String.fromCharCode(0x2044); break;
						case 'euro': ch = String.fromCharCode(0x20ac); break;
						case 'image': ch = String.fromCharCode(0x2111); break;
						case 'weierp': ch = String.fromCharCode(0x2118); break;
						case 'real': ch = String.fromCharCode(0x211c); break;
						case 'trade': ch = String.fromCharCode(0x2122); break;
						case 'alefsym': ch = String.fromCharCode(0x2135); break;
						case 'larr': ch = String.fromCharCode(0x2190); break;
						case 'uarr': ch = String.fromCharCode(0x2191); break;
						case 'rarr': ch = String.fromCharCode(0x2192); break;
						case 'darr': ch = String.fromCharCode(0x2193); break;
						case 'harr': ch = String.fromCharCode(0x2194); break;
						case 'crarr': ch = String.fromCharCode(0x21b5); break;
						case 'lArr': ch = String.fromCharCode(0x21d0); break;
						case 'uArr': ch = String.fromCharCode(0x21d1); break;
						case 'rArr': ch = String.fromCharCode(0x21d2); break;
						case 'dArr': ch = String.fromCharCode(0x21d3); break;
						case 'hArr': ch = String.fromCharCode(0x21d4); break;
						case 'forall': ch = String.fromCharCode(0x2200); break;
						case 'part': ch = String.fromCharCode(0x2202); break;
						case 'exist': ch = String.fromCharCode(0x2203); break;
						case 'empty': ch = String.fromCharCode(0x2205); break;
						case 'nabla': ch = String.fromCharCode(0x2207); break;
						case 'isin': ch = String.fromCharCode(0x2208); break;
						case 'notin': ch = String.fromCharCode(0x2209); break;
						case 'ni': ch = String.fromCharCode(0x220b); break;
						case 'prod': ch = String.fromCharCode(0x220f); break;
						case 'sum': ch = String.fromCharCode(0x2211); break;
						case 'minus': ch = String.fromCharCode(0x2212); break;
						case 'lowast': ch = String.fromCharCode(0x2217); break;
						case 'radic': ch = String.fromCharCode(0x221a); break;
						case 'prop': ch = String.fromCharCode(0x221d); break;
						case 'infin': ch = String.fromCharCode(0x221e); break;
						case 'ang': ch = String.fromCharCode(0x2220); break;
						case 'and': ch = String.fromCharCode(0x2227); break;
						case 'or': ch = String.fromCharCode(0x2228); break;
						case 'cap': ch = String.fromCharCode(0x2229); break;
						case 'cup': ch = String.fromCharCode(0x222a); break;
						case 'int': ch = String.fromCharCode(0x222b); break;
						case 'there4': ch = String.fromCharCode(0x2234); break;
						case 'sim': ch = String.fromCharCode(0x223c); break;
						case 'cong': ch = String.fromCharCode(0x2245); break;
						case 'asymp': ch = String.fromCharCode(0x2248); break;
						case 'ne': ch = String.fromCharCode(0x2260); break;
						case 'equiv': ch = String.fromCharCode(0x2261); break;
						case 'le': ch = String.fromCharCode(0x2264); break;
						case 'ge': ch = String.fromCharCode(0x2265); break;
						case 'sub': ch = String.fromCharCode(0x2282); break;
						case 'sup': ch = String.fromCharCode(0x2283); break;
						case 'nsub': ch = String.fromCharCode(0x2284); break;
						case 'sube': ch = String.fromCharCode(0x2286); break;
						case 'supe': ch = String.fromCharCode(0x2287); break;
						case 'oplus': ch = String.fromCharCode(0x2295); break;
						case 'otimes': ch = String.fromCharCode(0x2297); break;
						case 'perp': ch = String.fromCharCode(0x22a5); break;
						case 'sdot': ch = String.fromCharCode(0x22c5); break;
						case 'lceil': ch = String.fromCharCode(0x2308); break;
						case 'rceil': ch = String.fromCharCode(0x2309); break;
						case 'lfloor': ch = String.fromCharCode(0x230a); break;
						case 'rfloor': ch = String.fromCharCode(0x230b); break;
						case 'lang': ch = String.fromCharCode(0x2329); break;
						case 'rang': ch = String.fromCharCode(0x232a); break;
						case 'loz': ch = String.fromCharCode(0x25ca); break;
						case 'spades': ch = String.fromCharCode(0x2660); break;
						case 'clubs': ch = String.fromCharCode(0x2663); break;
						case 'hearts': ch = String.fromCharCode(0x2665); break;
						case 'diams': ch = String.fromCharCode(0x2666); break;
						default: ch = ''; break;
					}
				}
				i = semicolonIndex; 
			}
		}
		
		out += ch;
	}

	return out;
}

function Common_AreValidatorsValid(ctrl)
//function checkValidatorStatus(obj) (from NavJSFunctions.js) 
{
    try	
    {
	    for (var i = 0; i < Page_Validators.length; i++) 
	    {
		    if (Page_Validators[i].controltovalidate == ctrl.id) 
		    {
			    if (!Page_Validators[i].isvalid)	
			    {
				    return false;
				}
			}	
		}	
	}
	catch (exception) 
	{
	    return false;
	}
	
    return true;
}

function Common_LTrim(str) 
{ 
    for (var k = 0; k < str.length && Common_IsWhitespace(str.charAt(k)); k++);
    return str.substring(k, str.length);
}

function Common_RTrim(str) 
{
    for (var j = str.length - 1; j >= 0 && Common_IsWhitespace(str.charAt(j)); j--);
    return str.substring(0, j + 1);
}

function Common_Trim(str) 
{
    return Common_LTrim(Common_RTrim(str));
}

function Common_IsWhitespace(charToCheck) 
{
    var whitespaceChars = " \t\n\r\f";
    return (whitespaceChars.indexOf(charToCheck) != -1);
}
