var cSecureDelim1 = "!<>!|!<>!";
var cGlobalDelim = "^~";	
var cColDelim = "^|";

var PWD_REGEXP = /(?=.*\d)(?=.*[a-z])/i;
var EMAIL_REGEXP= "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$"
var ALP_REGEXP = "[^a-zA-Z '-]"
var PHONE_REGEXP = "[^0-9]"
var char_invalid = "";

var STANDARD_SCREEN_WIDTH = 940;
var standardScreenHeight = 0;
var STANDARD_SCREEN_HEIGHT_IE = 504; // 700 minus some room for toolbars, etc.  For IE.
var STANDARD_SCREEN_HEIGHT_FF = 504; // For Firefox
var PROGRESS_BAR_TOP = 32;
var MAX_UTILITIES_LIST_TABLE_HEIGHT = 92;

function ltrim(sInstr)
{
	var sOutStr;
	var ictr;

	sOutStr = sInstr;

	for(ictr = 0; ictr < (sInstr.length); ictr++)
	{
		if (sInstr.charAt(ictr) != ' ') break;
	}

	if (ictr < (sInstr.length))
	    sOutStr = sInstr.substring(ictr,sInstr.length);

	return sOutStr;
}

function rtrim(sInstr)
{
	var sOutStr;
	var ictr;

	sOutStr = sInstr;

	for (ictr = (sInstr.length - 1); ictr >= 0; ictr--)
	{
		if (sInstr.charAt(ictr) != ' ')
			break;
	}

	if (ictr < (sInstr.length - 1))
		sOutStr = sInstr.substring(0, ictr + 1);

	return sOutStr;
}

function trim(sInstr)
{
	var sOutStr;

	sOutStr = ltrim(sInstr);
	sOutStr = rtrim(sOutStr);

	return sOutStr;
}

function checkForProperCase(sText, sProper, sFirstFlag)
{
	var returnValue;

	switch(sProper)
	{
		case "ON":
			returnValue = ConvertProperNew(sText);
			break;

		case "OFF":
			returnValue = sText;
			break;

		case "FIRST":
			if (sFirstFlag == '1')
				returnValue = sText;
			else
				returnValue = ConvertProperNew(sText);
			break;
	}

	return returnValue;
}

function isInputFieldNotEmpty(control)
{
	if (trim(control.value) != ""  && control.value != "null")
	{
		control.className = "err";
		return true;
	}

	control.className = "valid";
	return false;
}

function isInputFieldEmpty(control)
{
	if (trim(control.value) == ""  || control.value == "null")
	{
		control.className = "err";
		return true;
	}

	control.className = "valid";
	return false;
}

function checkFormValidation(form)
{
	var form = document.getElementById(form);

	for (var index = 0; index < form.length; index++)
		if (form.elements[index].className == 'err')
			return false;

	return true;
}

function checkField(RegStr, objTextbox, sMessage, isOpp, isSubmission)
{
	if (trim(objTextbox.value) == "" || objTextbox.value == null)
	{
		if (!isSubmission)
		{
			setErrmsg('');
			objTextbox.className = "valid";
		}

		return true;
	}

	if (trim(objTextbox.value.toUpperCase()) == "NOT SUPPLIED" && isSubmission)
	{
		objTextbox.className = "valid";
		return true;
	}

	var regExp = new RegExp(RegStr);

	if ((regExp.test(objTextbox.value) && !isOpp) || (!regExp.test(objTextbox.value) && isOpp))
	{
		objTextbox.className = "err";

		if (isSubmission)
			char_invalid = char_invalid  + sMessage + ',';
		else
			if (sMessage.toUpperCase() == 'EMAIL' )
				setErrmsg('Email is invalid');
			else
				setErrmsg(sMessage + ' contains invalid characters.');

		return false;
	}

	if (!isSubmission)
	    setErrmsg('');

	objTextbox.className = "valid";

	return true;
}

function setErrmsg(msg)
{
	if (msg != '')
	{
		document.getElementById("celErrmsg").innerHTML = msg;
		document.getElementById("celErrmsg").style.backgroundColor = "salmon";
	}
	else
	{
		document.getElementById("celErrmsg").innerHTML = '&nbsp;';
		document.getElementById("celErrmsg").style.backgroundColor = "#FFFFFF";
	}
}	
//end of validation functions
	
var newwin;

function launchwint(winurl, winfeatures)
{
	newwin = window.open(winurl, 'newwindow', winfeatures);
}

function display_alt(text, e, display)
{
	if (e.pageX || e.pageY)
	{
		posx = e.pageX;					
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;	
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	document.getElementById("celText").innerHTML = text;

	var objDisplay = document.getElementById('divAlt');

	if (display)
	{
		objDisplay.style.visibility = "visible";
		objDisplay.style.display = "";
		objDisplay.style.display = "block";
		objDisplay.style.position = "absolute";
		objDisplay.style.top = posy;
		objDisplay.style.left = posx + 10;
	}
	else 
	{
		objDisplay.style.visibility = "hidden";
		objDisplay.style.display = "none";
		objDisplay.style.position = "absolute";
		objDisplay.style.top = posy;
		objDisplay.style.left = posx + 10;
	}
}

function getKeyCode(e)
{
    // this returns keycode in a way that firefox browsers can also read.
	var code;

	if (!e)
	    var e = window.event;

	if (e.keyCode)
	    code = e.keyCode;
	else if (e.which)
	    code = e.which;

	return code;
}

function streetTypeOnKeyPressEvent(e, control)
{
	var num;
	var keyCode = getKeyCode(e);

	switch(keyCode)
	{
        case 8:
            num = 0;
            break;

        case 65:
        case 97:
		    if ((num = setSelectedIndex("AVENUE", control)) == 0)
			    num = setSelectedIndex("AV", control);

            break;

        case 66:
        case 98:
		    if ((num = setSelectedIndex("BOULEVARD", control)) == 0)
			    num = setSelectedIndex("BVD", control);

			break;

        case 67:
        case 99:
		    if ((num = setSelectedIndex("COURT", control)) == 0)
			    num = setSelectedIndex("CT", control);

			break;

        case 68:
        case 100:
		    if ((num = setSelectedIndex("DRIVE", control)) == 0)
			    num = setSelectedIndex("DR", control);

			break;

        case 69:
        case 101:
		    if ((num = setSelectedIndex("ESPLANADE", control)) == 0)
			    num = setSelectedIndex("ESP", control);

			break;

        case 70:
        case 102:
		    if ((num = setSelectedIndex("FAIRWAY", control)) == 0)
			    num = setSelectedIndex("FAWY", control);

			break;

        case 71:
        case 103:
		    if ((num = setSelectedIndex("GROVE", control)) == 0)
			    num = setSelectedIndex("GR", control);

			break;

        case 72:
        case 104:
		    if ((num = setSelectedIndex("HARBOUR", control)) == 0)
			    num = setSelectedIndex("HRBR", control);

			break;

        case 73:
        case 105:
		    if ((num = setSelectedIndex("INLET", control)) == 0)
			    num = setSelectedIndex("INLT", control);

			break;

        case 74:
        case 106:
		    if ((num = setSelectedIndex("JUNCTION", control)) == 0)
			    num = setSelectedIndex("JNC", control);

			break;
        case 75:
        case 107:
		    if ((num = setSelectedIndex("KEY", control)) == 0)
			    num = setSelectedIndex("KEY", control);

			break;

        case 76:
        case 108:
		    if ((num = setSelectedIndex("LANE", control)) == 0)
			    num = setSelectedIndex("LANE", control);

			break;

        case 77:
        case 109:
		    if ((num = setSelectedIndex("MOTORWAY", control)) == 0)
			    num = setSelectedIndex("MWY", control);

			break;

        case 78:
        case 110:
		    if ((num = setSelectedIndex("NEAVES", control)) == 0)
			    num = setSelectedIndex("NVS", control);

			break;

        case 79:
        case 1111:
		    if ((num = setSelectedIndex("OAKS", control)) == 0)
			    num = setSelectedIndex("OAKS", control);

			break;

        case 80:
        case 112:
		    if ((num = setSelectedIndex("PLACE", control)) == 0)
			    num = setSelectedIndex("PL", control);

			break;

        case 81:
        case 113:
		    if ((num = setSelectedIndex("QUAY", control)) == 0)
			    num = setSelectedIndex("QY", control);

			break;

		case 82:
		case 114:
	        if ((num = setSelectedIndex("ROAD", control)) == 0)
		        num = setSelectedIndex("RD", control);

            break;

	    case 83:
	    case 115:
		    if ((num = setSelectedIndex("STREET", control)) == 0)
			    num = setSelectedIndex("ST", control);

			break;

        case 84:
        case 116:
		    if ((num = setSelectedIndex("TERRACE", control)) == 0)
			    num = setSelectedIndex("TCE", control);

			break;

        case 85:
        case 117:
		    if ((num = setSelectedIndex("UNDERPASS", control)) == 0)
			    num = setSelectedIndex("UPAS", control);

			break;

        case 86:
        case 118:
		    if ((num = setSelectedIndex("VALE", control)) == 0)
			    num = setSelectedIndex("VALE", control);

			break;

        case 87:
        case 119:
		    if ((num = setSelectedIndex("WAY", control)) == 0)
			    num = setSelectedIndex("WAY", control);

			break;

        case 89:
        case 121:
		    if ((num = setSelectedIndex("YARD", control)) == 0)
			    num = setSelectedIndex("YARD", control);

			break;

        default:
            break;
	}

    // ignore tab character
    if (keyCode != 9)
    {
        control.selectedIndex = num - 1;
    }
}

function streetTypeOnKeyPress(control)
{
    streetTypeOnKeyPressEvent(window.event, control);
}

function setSelectedIndex(typeName, control)
{
	for (var index = 0; index < control.options.length; index++)
		if (control.options[index].value.toUpperCase() == typeName.toUpperCase())
			return index;

	return 0;
}

function displayFern()
{
	setSectionPosition('divFern', 130, 0);

	if (document.getElementById('divBottom'))
	    setSectionPosition('divBottom', 0, 35);

	if (document.getElementById('divProgressBar'))
	    setSectionPosition('divProgressBar', 0, 40);

	if (document.getElementById('tblProgressButtons'))
	{
		if (getWindowWidth() < 800)
		{
			document.getElementById('tblProgressButtons').style.width = 800;
			document.getElementById('tblProgressIcons').style.width = 500;
		}
		else
			document.getElementById('tblProgressButtons').style.width = "100%";
	}
}

function displaySection(displayId, display)
{
	var objDisplay = document.getElementById(displayId);

    if (objDisplay != null)
    {
	    if (display)
	    {
		    objDisplay.style.visibility = "visible";
		    objDisplay.style.display = "";
	    }
	    else
	    {
		    objDisplay.style.visibility = "hidden";
		    objDisplay.style.display = "none";
	    }
    }
}

function setSectionPosition(displayId, offsetX, offsetY)
{
	var objDisplay = document.getElementById(displayId);

	if (offsetX != '' || offsetX != 0)
	    objDisplay.style.left = getWindowWidth() - offsetX;

	if (offsetY != '' || offsetY != 0)
	    objDisplay.style.top = getWindowHeight() - offsetY;
}

function getWindowHeight()
{
	if(navigator.appName == 'Microsoft Internet Explorer')
		return document.body.clientHeight;
	else
		return window.innerHeight;
}

function getWindowWidth()
{
	if(navigator.appName == 'Microsoft Internet Explorer')
		return document.body.clientWidth;
	else
		return window.innerWidth;
}

function isBrowserIE()
{
    var agt = navigator.userAgent.toLowerCase();
    var is_ie = (agt.indexOf("msie") != -1);

    if (is_ie)
        return true;
    else
        return false;
}

function renderForPageWidth(panelWidth)
{
    document.getElementById("divTopBanner").style.left = panelWidth;
    document.getElementById("divTopBanner").style.width = STANDARD_SCREEN_WIDTH;

    document.getElementById("divBottom").style.left = panelWidth;
    document.getElementById("divBottom").style.width = STANDARD_SCREEN_WIDTH;

    document.getElementById("divContent").style.left = panelWidth;
    document.getElementById("divContent").style.width = STANDARD_SCREEN_WIDTH;
}

function renderForPageHeight()
{
    document.getElementById("divContent").style.height = standardScreenHeight - 85;
    document.getElementById("divBottom").style.top = standardScreenHeight - 27;
}

function resize()
{
    standardScreenHeight = getStandardScreenHeight();
	var panelWidth = getPanelWidth();

    renderForPageWidth(panelWidth);
    renderForPageHeight();
}

function getStandardScreenHeight()
{
    var returnValue;

    if (navigator.appName == 'Microsoft Internet Explorer')
        return STANDARD_SCREEN_HEIGHT_IE;
    else
        return STANDARD_SCREEN_HEIGHT_FF;
}

function getPanelWidth()
{
    // Justify Left. See OCNZ-4666.
	//if (getWindowWidth() <= STANDARD_SCREEN_WIDTH)
	    return 0;
	//else
	//    return (getWindowWidth() - STANDARD_SCREEN_WIDTH) / 2;
}

function setProgressBarSize()
{
    document.getElementById("divProgressBar").style.left = getPanelWidth();
    document.getElementById("divProgressBar").style.top = standardScreenHeight - PROGRESS_BAR_TOP;
}

function left(str, n)
{
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0, n);
}

function right(str, n)
{
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else 
    {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

//This function checks for the numeric key. In case numeric key then it allows
//the user to type in the Text Box. Decimal is not allowed

function chkKeyNumericNoDecimal(e)
{
	//Code for Netscape
	if (navigator.appName == "Netscape")
	{
	    var KeyCode;

        if (e.charCode)
        {
            KeyCode = e.charCode; // For Gecko
        }
        else
        {
            KeyCode = e.keyCode; // For Presto
        }

        if (e.shiftKey == true && (KeyCode == 37 || KeyCode == 35 || KeyCode == 36 || KeyCode == 40))
			e.preventDefault();

		if (e.shiftKey == true && KeyCode == 38)
			e.preventDefault();

        if (KeyCode != 9)
        {
			if (KeyCode != 37 && KeyCode != 38 && KeyCode != 39 && KeyCode != 40 && KeyCode != 35 && KeyCode != 46 && KeyCode != 8 && KeyCode != 36)
			{
			    if ((KeyCode < 47 || KeyCode > 57) && (KeyCode < 96 || KeyCode > 105))
			    {
			        e.preventDefault();
			    }
		    }
        }
	}
	else
	{
	    //Code for IE	
		if (event.keyCode < 48 || event.keyCode > 57)
		{
			if (event.ctrlKey)
			{
				if (event.keyCode == 67 || event.keyCode == 86 || event.keyCode == 88)
				{
					return true;
				}
				else
				{
					return false;
				}
			}

			if (event.keyCode == 190)
			{
				return false;
			}

			if (event.keyCode != 8 && event.keyCode != 46 && event.keyCode != 96 && event.keyCode != 97 && event.keyCode != 98
			        && event.keyCode != 99 && event.keyCode != 100 && event.keyCode != 101 && event.keyCode != 102 && event.keyCode != 103
			        && event.keyCode != 104 && event.keyCode != 105 && event.keyCode != 9 && event.keyCode != 37 && event.keyCode != 38
			        && event.keyCode != 39 && event.keyCode != 40)
			{
				return false;
			}
		}
		else
		{
			if (event.shiftKey == true && (event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50 || event.keyCode == 51
			        || event.keyCode == 52 || event.keyCode == 53 || event.keyCode == 54 || event.keyCode == 55 || event.keyCode == 56
			        || event.keyCode == 57 || event.keyCode == 190 || event.keyCode == 191 || event.keyCode == 220))
			{
				return false;
			}
		}
	}
}