var cSecureDelim1 = "!<>!|!<>!";
var cGlobalDelim = "^~";	
var cColDelim = "^|";
var cRowDelim = "^~"

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 NUMERIC_REGEXP = "[^0-9]";
var MOBILE_NUMBER_REGEXP = "[^0-9 ]";
var char_invalid = "";
var ALPHA_NUMERIC_REGEXP = "[^a-zA-Z0-9., ]";

var STANDARD_SCREEN_WIDTH = 940; // 950 width.
//var STANDARD_SCREEN_HEIGHT = 0;
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 REQUEST_TYPE_PLAN_REQUEST = "PR";
var REQUEST_TYPE_PLAN_COLLATE = "PC";

function submitFormWithKey(evt)
{
	var keycode;

	if (window.event)
		keycode = window.event.keyCode;
	else if (evt)
		keycode = evt.which;
	else
		return true;

	if (keycode == 13)
	{
		if (!submitform())
			return false;
	}
	else
		return true;
}

//Trim the passed string from LHS
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;
}

//Trim the passed string from RHS
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;
}

//Trim the passed string
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;
}

//validation
function isFaxFieldEmpty(control)
{
    var className = control.className;

    if (isInputFieldEmpty(control))
    {
        control.className = "err";
        return true;
    }
    else
    {
        control.className = className;
        return false;
    }
}

function isInputFieldEmpty(control)
{
	if (trim(control.value) == "" || control.value == "null")
	{
		control.className = "err";		
		return true;
	}

	control.className = "valid";
	return false;
}

function checkField(RegStr, objTextbox, sMessage, isOpp, isSubmission)
{
	if (trim(objTextbox.value) == "" || objTextbox.value == null)
	{
		if (!isSubmission)
		{
			setErrmsg('');
			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()
{
	// Do nothing
}

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.offsetHeight;
	else
		return window.innerHeight;
}

function getWindowWidth()
{
	if (navigator.appName == 'Microsoft Internet Explorer')
		return document.body.offsetWidth;
	else	
		return window.innerWidth;	
}

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 - 105;
    document.getElementById("divBottom").style.top = standardScreenHeight - 27;
}

function resize()
{
    standardScreenHeight = getStandardScreenHeight();
	var panelWidth = getPanelWidth();

    renderForPageWidth(panelWidth);
    renderForPageHeight();
}

function getStandardScreenHeight()
{
    if (navigator.appName == "Microsoft Internet Explorer")
        return STANDARD_SCREEN_HEIGHT_IE;
    else
        return STANDARD_SCREEN_HEIGHT_FF;
}

function getPanelWidth()
{
    // Justify Left. See OCUK-4560.
	//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 checkForField(control, reg_exp, message, isOpp, isSubmission)
{
	if (!checkField(reg_exp, control, message, isOpp, isSubmission))
	{
	    errorCount++;
	    return message + " contains invalid characters.<br/>";
	}
	
	return "";
}

function checkForEmptyField(control, message)
{
    if (isInputFieldEmpty(control))
    {
        errorCount++;
        return message + " cannot be blank.<br/>";
    }
    
    return "";
}

function displayButtons(display)
{
    displaySection("cellButtons", display);
}

function removeTableRows(table, rowsToKeep)
{
    if (table != null)
    {
        var rows = table.rows;

        while (rows.length > rowsToKeep)
            table.deleteRow(rows.length - 1);
    }
}

function removeSelectOptions(control, rowsToKeep)
{
    while (control.length > rowsToKeep)
        control.remove(control.length - 1);
}

function createOption(control, value, text)
{
    var oOption = document.createElement("option");

    oOption.text = text;
    oOption.value = value;

    try
    {
        // standards compliant
        control.add(oOption, null);
    }
    catch(ex)
    {
        // IE only
        control.add(oOption);
    }
}

function isBrowserIE6()
{
    return navigator.appVersion.indexOf("MSIE 6.0") > 0;
}

function getRadioButtonValue(control)
{
    var value = "";

    for (var index = control.length - 1; index > -1; index--)
    {
        if (control[index].checked)
            value = control[index].value;
    }

    return value;
}

function select_OnChange(control, sMessage)
{
	if (control.value == "null" || control.value == "")
	{
		control.className = "err";
		setErrmsg("Please specify " + sMessage);
	}
	else
	{
		control.className = "valid";
		setErrmsg("");
	}
}

function getDateFromString(rawDate)
{
    var date = rawDate.split("/");
    return new Date(date[2], (date[1]) - 1, date[0]);
}

function textLimit(field, maxlen)
{
    if (field.value.length > maxlen)
    {
        field.value = field.value.substring(0, maxlen);
        alert("Maximum of " + maxlen + " character allowed.");
    }
}

function setBottomPositionForPlanCollation(includeText)
{
    var num = 0;
    var topBar = 0;
    var topBarOriginal = 300;
    var maxScreenHeight = 0;
    var rowHeight = 26;

    if (utilityNumDisplay > 0)
        num = utilityNumDisplay + 12;

    maxScreenHeight = getStandardScreenHeight();

    var bottom = document.getElementById("divBottom");
    topBar = topBarOriginal + (num + 1) * rowHeight + rowHeight;

    if (topBar < maxScreenHeight)
        topBar = maxScreenHeight;

    if (includeText && num == 0)
        topBar += 50;

    if (document.getElementById("NonChargeable").value == "0" && utilityNumDisplay == 0)
        topBar += 140;

    bottom.style.top = topBar;

    var progressBar = document.getElementById("divProgressBar");
    progressBar.style.top = topBar - 5;
}