//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//Purpose: 
//  To Validate input fields on a form.
//
//  Calling:
//
//Notes:
//  Date validation rules.
//      Normal day, month checks.
//      The year must be from 1000 to 2200 and the user must enter all four digits.
//      Date can be entered with dashes ('-') or slashes ('/') as a seperator.
//
//  Credit card date validation rules.
//      Normal month checks.
//      The year must be from 1000 to 2200 and the user must enter all four digits.
//      Date can be entered with dashes ('-') or slashes ('/') as a seperator.
//      The format is mm/yyyy only. No day is to be entered.
//          
//--------------------------------------------------------------------------------
SetDocDomain();

function SetDocDomain()  
{
    try  // catch error if domain is not ten-net.net or balboainsurance.com
    {
        var env_link = "balboainsurance.com";
        var url = window.location.href;

        //Work around for Access denied issue for IFrame
        //http://msdn.microsoft.com/en-us/library/ms533028(VS.85).aspx
        if(url.indexOf("https")!= -1)
        {
            env_link = "content.balboainsurance.com";    
            }  
         if(url.indexOf("ten-net.net") != -1)
           env_link = "ten-net.net";             
        document.domain = env_link;
        
    }
    catch(e){ //alert('document.domain should be either ten-net.net or balboainsurance.com') 
    }
}
var FormElements  = new Array();        //Elements for validation
var SavedElements = new Array();        //Elements for checking to see if the data has changed

var isIE = (navigator.appName.indexOf("Microsoft") != -1);
var isNS = (navigator.appName.indexOf("Netscape") != -1);

var vCleanedDate;       // The "clean" reformatted date after date validation

function xdoAction(formName, actionId, actionHandler, validate) {
    if (validate == null)
        validate = true;
    return doActionFunction(formName, actionId, actionHandler, validate);
}

function doAction(formName, actionId, actionHandler, validate) {
    if (validate == null)
        validate = true;

    if (!validate) {
        actionUrl = "controller.aspx?action=" + actionId + "&handler=" + actionHandler;
        document.forms[formName].action = actionUrl ;

//--    Set values for time logging             krg 01-07-2002
        dd = new Date();
//        d = dd.getTime();
        d = (((dd.getHours() * 3600) + (dd.getMinutes() * 60) + dd.getSeconds()) * 1000) + dd.getMilliseconds();
        document.cookie="g2SubmitTime=" + d;

        document.forms[formName].submit();
//        return true;
        return false;
    }

//--Check the data for any changes. If there are, set the "dirty" flag.
    if (HasDataChanged()) {
        document.forms[formName].hdn_changes_not_saved.value = 1;
    }

    actionUrl = "controller.aspx?action=" + actionId + "&handler=" + actionHandler;
    document.forms[formName].action = actionUrl ;

    if (window.PageEdit != null) {
        var ret = PageEdit(formName);
        if (ret == 0) {                                 // Error. Did not pass edits.
            return false;
        }
        else {
            if (ret == 2) {                             // Ok. Skip all other edits.
//--            Set values for time logging             krg 01-07-2002
                dd = new Date();
//                d = dd.getTime();
                d = (((dd.getHours() * 3600) + (dd.getMinutes() * 60) + dd.getSeconds()) * 1000) + dd.getMilliseconds();
                document.cookie="g2SubmitTime=" + d;

                document.forms[formName].submit();
            }
            else {
                if (validateForm(formName)) {           // Ok. Do other edits.
//--                Set values for time logging             krg 01-07-2002
                    dd = new Date();
//                    d = dd.getTime();
                    d = (((dd.getHours() * 3600) + (dd.getMinutes() * 60) + dd.getSeconds()) * 1000) + dd.getMilliseconds();
                    document.cookie="g2SubmitTime=" + d;

                    document.forms[formName].submit();
                }
            }
        }
    }
    else {
        if (validateForm(formName)) {
//--        Set values for time logging             krg 01-07-2002
            dd = new Date();
//            d = dd.getTime();
            d = (((dd.getHours() * 3600) + (dd.getMinutes() * 60) + dd.getSeconds()) * 1000) + dd.getMilliseconds();
            document.cookie="g2SubmitTime=" + d;

            document.forms[formName].submit();
        }
    }
    return false;
}
function CheckForlossOfData(formName) {
//--Check the data for any changes. If there are, set the "dirty" flag.
//alert("check for loss");
    if (formName == null) formName = document.forms[0].name;
    if (HasDataChanged()) {
        document.forms[formName].hdn_changes_not_saved.value = 1;
    }

    if (document.forms[formName].hdn_changes_not_saved != null) {
        if (document.forms[formName].hdn_changes_not_saved.value == 1) {
            if (confirm(document.forms[formName].hdn_changes_not_saved_msg.value)) {
                document.forms[formName].hdn_changes_not_saved.value = false;
                return true;
            }
            else
                return false;
        }
    }
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function validateEmail(emailAddress) 
{
   var match = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/.test(emailAddress);
   return match;
}

function Trim(str) 
{
    if (str == '')   return '';
    if (str == null) return '';

    var idxEnd = 0
    var idxStart = str.length
    
    for (var idx=0; idx<=str.length-1; idx++) {
        if (str.substring(idx, idx+1) != ' ') {
            idxStart = idx
            break
        }
    }

    if (idxStart == str.length)
        return ''
        
    for (var idx=str.length-1; idx>=0; idx--) {
        if (str.substring(idx, idx+1) != ' ') {
            idxEnd = idx
            break
        }
    }
    sTemp = str.substring(idxStart, idxEnd+1)
    return sTemp
}

function CheckForlossOfDataOnCurrentPage(formName) {
    if (formName == null) formName = document.forms[0].name;

//--Check the data for any changes. If there are, warn the user.
    if (HasDataChanged()) {
        if (confirm(document.forms[formName].hdn_changes_not_saved_msg.value)) {
            document.forms[formName].hdn_changes_not_saved.value = false;
            return true;
        }
        else
            return false;
    }
}

//Options
var fShowIndividualMessages = false;
var fShowGroupMessage       = false;
var fShowErrorImage         = true;
var sErrorImage_Off         = "../images/error_none.gif";
var sErrorImage_Required    = "../images/error_required.gif";
var sErrorImage_Edit        = "../images/error_edit.gif";
var sErrorImage_Range       = "../images/error_range.gif";

//Define the field edit types
/*
var EDIT_NONE           = 0;    //No validation required.
var EDIT_ALPHA          = 1;    // a-z only
var EDIT_ALPHANUMERIC   = 2;    // a-z 0-9 space
var EDIT_CCNUMBER       = 3;    // Credit card
var EDIT_COUNTRYCODE    = 4;    // Two character country code
var EDIT_CURRENCY       = 12;   // Same as number for now
var EDIT_DATE           = 6;    // Date entered in a single field
var EDIT_DATE3          = 7;    // Date entered in three seperate fields
var EDIT_EMAIL          = 8;    // E-Mail address
var EDIT_INTEGER        = 9;    // 0-9 , .
var EDIT_NAME           = 10;   // a-z - '
var EDIT_NUMERIC        = 11;   // 0-9
var EDIT_NUMBER         = 12;   // 0-9 , . -
var EDIT_PHONE          = 13;   // Phone number entered in a single field
var EDIT_PHONE3         = 14;   // Phone number entered in three (or four) seperate fields
var EDIT_STATECODE      = 15;   // Two character state code
var EDIT_TIME           = 16;   // Time entered in a single field
var EDIT_ZIP            = 17;   // Five or nine character zipcode
*/

var EDIT_NONE           = "none";           //No validation required.
var EDIT_ALPHA          = "alpha";          // a-z only
var EDIT_ALPHANUMERIC   = "alphanumeric";   // a-z 0-9 space
var EDIT_CCNUMBER       = "ccnumber";       // Credit card
var EDIT_CCDATE         = "ccdate";         // Credit card date mm/yyyy
var EDIT_COUNTRYCODE    = "countrycode";    // Two character country code
var EDIT_CURRENCY       = "currency";       // Same as number for now
var EDIT_DATE           = "date";           // Date entered in a single field
var EDIT_DATE3          = "date3";          // Date entered in three seperate fields
var EDIT_EMAIL          = "email";          // E-Mail address
var EDIT_INTEGER        = "integer";        // 0-9 , .
var EDIT_NAME           = "name";           // a-z - '
var EDIT_NUMERIC        = "numeric";        // 0-9
var EDIT_NUMBER         = "number";         // 0-9 , . -
var EDIT_PASSWORD       = "password";       // Password fields must be at least 8 characters long, contain letters, numbers and special characters.
var EDIT_PHONE          = "phone";          // Phone number entered in a single field
var EDIT_PHONE3         = "phone3";         // Phone number entered in three (or four) seperate fields
var EDIT_PHONE4         = "phone4";         // Phone number entered in a single field functionality(EDIT_PHONE) and Digits only phone number ' added by ss on 2/5/2002'
var EDIT_STATECODE      = "statecode";      // Two character state code
var EDIT_TIME           = "time";           // Time entered in a single field
var EDIT_ZIP            = "zip";            // Five or nine character zipcode


//Define the form object types
var OBJTYPE_TEXT    = 1;
var OBJTYPE_SELECT  = 2;
var OBJTYPE_RADIO   = 3;
var OBJTYPE_CHECK   = 4;
var OBJTYPE_SCRIPT  = 5;

var sErrorMessage = "";
var fFieldInError = null;
var fPrevField    = "";

function validateForm(formName) {
    var f = document.forms[formName];
    sErrorMessage = "";
    fFieldInError = null;

    for (idx=0; idx<FormElements.length; idx++) {
        var fName = FormElements[idx].name;
//alert("Checking " + fName);

//--    Check to see that the field we are going to test is within the current form.
        fFound = false;
        for (idx1=0; idx1<f.elements.length; idx1++) {
            if (f.elements[idx1].name == fName) {
                fFound = true;
                break;
            }
        }
        if (!fFound) {
//            alert("skipping " + fName);
            continue;    
        }

//--    Clear the old error flag if this is a diferent field. Note: there may be more than one validation per field.
	if (fPrevField != fName) 
            validateForm_ClearError(f[fName + "_error"]);

        fPrevField = fName;

        if (FormElements[idx].type == OBJTYPE_SCRIPT) {
            if (!eval(FormElements[idx].req)) {
                if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rmsg, sErrorImage_Range))
                    return false;
            }
        }
        else if (FormElements[idx].type == OBJTYPE_TEXT) {

            if (FormElements[idx].req) {
                if (FormElements[idx].edit == EDIT_DATE3) {
                    if (isEmpty(Trim(f[fName + "_1"].value))) {
                        if (!validateForm_ShowError(FormElements[idx].rmsg, f[fName + "_1"], sErrorImage_Required))
                            return false;
                    }
                    if (isEmpty(Trim(f[fName + "_2"].value))) {
                        if (!validateForm_ShowError(FormElements[idx].rmsg, f[fName + "_2"], sErrorImage_Required))
                            return false;
                    }
                    if (isEmpty(Trim(f[fName + "_3"].value))) {
                        if (!validateForm_ShowError(FormElements[idx].rmsg, f[fName + "_3"], sErrorImage_Required))
                            return false;
                    }
                }
                else if (FormElements[idx].edit == EDIT_PHONE3) {
                    if (isEmpty(Trim(f[fName + "_1"].value))) {
                        if (!validateForm_ShowError(FormElements[idx].rmsg, f[fName + "_1"], sErrorImage_Required))
                            return false;
                    }
                    if (isEmpty(Trim(f[fName + "_2"].value))) {
                        if (!validateForm_ShowError(FormElements[idx].rmsg, f[fName + "_2"], sErrorImage_Required))
                            return false;
                    }
                    if (isEmpty(Trim(f[fName + "_3"].value))) {
                        if (!validateForm_ShowError(FormElements[idx].rmsg, f[fName + "_3"], sErrorImage_Required))
                            return false;
                    }
                }
                else {
                    if (isEmpty(f[fName].value)) {
                        if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rmsg, sErrorImage_Required))
                            return false;
                    }
                }
            }

//--        If the field is not empty, validate the input.
            if (FormElements[idx].edit != EDIT_NONE) {
                if (FormElements[idx].edit == EDIT_DATE3 || FormElements[idx].edit == EDIT_PHONE3) {
                    if (!isEmpty(f[fName + "_1"].value) || !isEmpty(f[fName + "_2"].value) || !isEmpty(f[fName + "_3"].value)) {
                        if (FormElements[idx].edit == EDIT_DATE3) {
                            var sTemp = Trim(f[fName + "_1"].value) + "/" + Trim(f[fName + "_2"].value) + "/" + Trim(f[fName + "_3"].value);
                            if (!isDate(sTemp)) {
                                if (!validateForm_ShowError(f[fName + "_1"], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))
                                    return false;
                            }
                        }
                        else if (FormElements[idx].edit == EDIT_PHONE3) {
                            var sTemp = Trim(f[fName + "_1"].value) + " " + Trim(f[fName + "_2"].value) + " " + Trim(f[fName + "_3"].value);
                            if (!isPhoneNumber(sTemp)) {
                                if (!validateForm_ShowError(f[fName + "_1"], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))
                                    return false;
                            }
                        }
                    }
                }
                else if (!isEmpty(f[fName].value)) {
                    if (FormElements[idx].edit == EDIT_ALPHA) {
                        if (!isAlpha(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_ALPHANUMERIC) {
                        if (!isAlphaNumeric(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_CCDATE) {
                        if (!isCCDate(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                        else {
                            f[fName].value = vCleanedDate;      // Replace the current value with a "clean" reformatted date.
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_CCNUMBER) {
                        if (!isCCNumber(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_COUNTRYCODE) {
                        if (!isCountryCode(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_DATE) {
                        if (!isDate(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                        else {
                            f[fName].value = vCleanedDate;      // Replace the current value with a "clean" reformatted date.
                        }
                    }
//                    else if (FormElements[idx].edit == EDIT_DATE3) {
//                        var sTemp = Trim(f[fName + "_1"].value) + "/" + Trim(f[fName + "_2"].value) + "/" + Trim(f[fName + "_3"].value);
//                        if (!isDate(sTemp)) {
//                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))
//                                return false;
//                        }
//                    }
                    else if (FormElements[idx].edit == EDIT_EMAIL) {
                        if (!isEMailAddress(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_INTEGER) {
                        if (!isInteger(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_NAME) {
                        if (!isName(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_NUMERIC) {
                        if (!isNumeric(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_CURRENCY) {
                        if (!isNumber(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_NUMBER) {
                        if (!isNumber(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_PASSWORD) {
                        if (!isPassword(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_PHONE) {
                        if (!isPhoneNumber(f[fName].value)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
//                    else if (FormElements[idx].edit == EDIT_PHONE3) {
//                        var sTemp = Trim(f[fName + "_1"].value) + " " + Trim(f[fName + "_2"].value) + " " + Trim(f[fName + "_3"].value);
//                        if (!isPhoneNumber(sTemp)) {
//                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))
//                                return false;
//                        }
//                    }
                    else if (FormElements[idx].edit == EDIT_STATECODE) {
                        if (!isStateCode(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_TIME) {
                        if (!isTime(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                    else if (FormElements[idx].edit == EDIT_ZIP) {
                        if (!isZipCode(Trim(f[fName].value))) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].emsg, sErrorImage_Edit))  return false;
                        }
                    }
                }
            }

//--        If the field is not empty, check for a range test.

//            if (FormElements[idx].edit == EDIT_INTEGER || FormElements[idx].edit == EDIT_NUMERIC || FormElements[idx].edit == EDIT_NUMBER || FormElements[idx].edit == EDIT_ALPHANUMERIC || FormElements[idx].edit == EDIT_ALPHA || FormElements[idx].edit == EDIT_CURRENCY) {
            if (FormElements[idx].edit == EDIT_INTEGER || FormElements[idx].edit == EDIT_NUMERIC || FormElements[idx].edit == EDIT_NUMBER || FormElements[idx].edit == EDIT_CURRENCY) {
                if (!isEmpty(f[fName].value) && (FormElements[idx].min != null || FormElements[idx].max != null)) {
                    if (FormElements[idx].min != null) {
                        if (parseFloat(f[fName].value) < parseFloat(FormElements[idx].min)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rngmsg, sErrorImage_Range))  return false;
                        }
                    }
    
                    if (FormElements[idx].max != null) {
                        if (parseFloat(f[fName].value) > parseFloat(FormElements[idx].max)) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rngmsg, sErrorImage_Range))  return false;
                        }
                    }
                }
            }
            else if (FormElements[idx].edit == EDIT_ALPHANUMERIC || FormElements[idx].edit == EDIT_ALPHA) {
                if (!isEmpty(f[fName].value) && (FormElements[idx].min != null || FormElements[idx].max != null)) {
                    if (FormElements[idx].min != null) {
                        if (f[fName].value < FormElements[idx].min) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rngmsg, sErrorImage_Range))  return false;
                        }
                    }
    
                    if (FormElements[idx].max != null) {
                        if (f[fName].value > FormElements[idx].max) {
                            if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rngmsg, sErrorImage_Range))  return false;
                        }
                    }
                }
            }
        }
        else if (FormElements[idx].type == OBJTYPE_SELECT) {
            if (FormElements[idx].req) {
                if (f[fName].selectedIndex == -1) {
                    if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rmsg, sErrorImage_Required))  return false;
                }
                if (isEmpty(f[fName][f[fName].selectedIndex].value)) {
                    if (!validateForm_ShowError(f[fName], f[fName + "_error"], FormElements[idx].rmsg, sErrorImage_Required))  return false;
                }
            }
        }
        else if (FormElements[idx].type == OBJTYPE_RADIO) {
            if (FormElements[idx].req) {
                var found = false;
                for (var idx1=0; idx1<f[fName].length; idx1++) {
                    if (f[fName][idx1].checked)
                        found = true;
                }
                if (!found) {
                    var t = f[fName][0];
                    if (!validateForm_ShowError(f[fName][0], f[fName + "_error"], FormElements[idx].rmsg, sErrorImage_Required))  return false;
                }
            }
        }
    }

    if (fShowIndividualMessages)
        return true;
    else {
        if (sErrorMessage != "") {
            if (fShowGroupMessage)  {
                alert(sErrorMessage);
                fFieldInError.focus();
            }
            return false;
        }
        else
            return true;
    }
}
//--------------------------------------------------------------------------------
//Note: the alt property only works on IE.
function validateForm_ShowError(field, errfield, msg, icon) {
    if (fShowIndividualMessages) {
        alert(msg);
        field.focus();
        if (fShowErrorImage) {
            errfield.src = icon;
            errfield.alt = msg;
        }
        return false;
    }
    else {
        sErrorMessage += "\n" + msg;
        if (fFieldInError == null) fFieldInError = field;
        if (fShowErrorImage) {
//alert("name=" + errfield.name + "  icon=" + icon);
            errfield.src = icon;
            errfield.alt = msg;
        }
        return true;
    }
}
//--------------------------------------------------------------------------------
//?????????????????
function validateForm_ClearError(field) {
    if (fShowErrorImage)
        if (field.src.indexOf(sErrorImage_Off) == -1) {
            field.src = sErrorImage_Off;
            field.alt = "";
        }
}
//--------------------------------------------------------------------------------
//Purpose: 
//  Constructors for FieldEmement object
//--------------------------------------------------------------------------------
function Element (name, type, req, rmsg, edit, emsg, rangeMin, rangeMax, rngmsg) {
    this.name   = name;
    this.type   = type;
    this.req    = req;
    this.rmsg   = rmsg;
    this.edit   = edit;
    this.emsg   = emsg;
    this.min    = rangeMin;
    this.max    = rangeMax;
    this.rngmsg = rngmsg;
}

//--------------------------------------------------------------------------------
function addElement(element) {
    FormElements[FormElements.length] = element;
}
//--------------------------------------------------------------------------------
function ElementData (formName, elementName, elementType, elementValue) {
    this.formName       = formName;
    this.elementName    = elementName;
    this.elementType    = elementType;
    this.elementValue   = elementValue;
    this.changed        = false;
}
//--------------------------------------------------------------------------------
function SaveElementData(element) {
    SavedElements[SavedElements.length] = element;
}
//--------------------------------------------------------------------------------
//Saves all the data in the current document.
function SaveElements() {
    var idxF, idxE, idx;
    var f, e;
    var sTemp;
//alert("Save");
//    if (validate == null)
//    document.forms[0].hdn_changes_not_saved.value = 0;
    for (idxF=0; idxF<document.forms.length; idxF++) {
        f = document.forms[idxF];

//--    Clear the data changed flag.
//        if (f.hdn_changes_not_saved != null)
//            f.hdn_changes_not_saved.value = 0;

        for (idxE=0; idxE<f.elements.length; idxE++) {
            e = f.elements[idxE];
            if (e.type == 'text' || e.type == 'textarea') {
                SaveElementData(new ElementData(f.name, e.name, e.type, e.value));
            }
            else if (e.type == 'radio') {
                if (e.checked) {
                    SaveElementData(new ElementData(f.name, e.name, e.type, e.value));
                }
            }
            else if (e.type == 'select-one') {
                SaveElementData(new ElementData(f.name, e.name, e.type, e.selectedIndex));
            }
            else if (e.type == 'select-multiple') {
                sTemp = '';
                for (idx=0; idx<e.options.length; idx++) { //Collect and save all the selected items.
                    if (e.options[idx].selected) {
                        sTemp += e.options[idx].value;
                    }
                }
                SaveElementData(new ElementData(f.name, e.name, e.type, sTemp));
            }
            else if (e.type == 'button' || e.type == 'submit' || e.type == 'reset') {
            }
            else {
//                alert("Unknown type: " + e.type);
            }
        }
    }

//--Log the response time                   krg 01-07-2002
    t1 = GetCookie("g2SubmitTime");
    if (t1 != '') {
        if (t1 != '0') {        
        dd = new Date();
//        dd = dtEnd.getTime();
//alert(dd.getHours() * 3600);
//alert(dd.getMinutes() * 60);
//alert(dd.getSeconds)
//alert(dd.getMilliseconds());;
        t2 = (((dd.getHours() * 3600) + (dd.getMinutes() * 60) + dd.getSeconds()) * 1000) + dd.getMilliseconds();
        d1 = t2 - t1;
        img1 = new Image;
        img1.src = "ah_logtimervalue.aspx?pagetime=" + d1 + "&starttime=" + t1 + "&endtime=" + t2;
        document.cookie="g2SubmitTime=0";
        }
    }
}
//--------------------------------------------------------------------------------
//Check all the fields in the current documant to see if there are any changes
function HasDataChanged() {
    var idx, idx2, t;
    var DataChanged = false;

    for (idx=0; idx<SavedElements.length; idx++) {
        if (SavedElements[idx].elementType == 'text' || SavedElements[idx].elementType == 'textarea') {
            t = "document." + SavedElements[idx].formName + "." + SavedElements[idx].elementName + ".value";
            if (eval(t) != SavedElements[idx].elementValue) {
                DataChanged = true;
            }
        }
        else if (SavedElements[idx].elementType == 'radio') {
            var len = eval("document." + SavedElements[idx].formName + "." + SavedElements[idx].elementName + ".length");
            for (var idx2=0; idx2<len; idx2++) {
                t = "document." + SavedElements[idx].formName + "." + SavedElements[idx].elementName + "[" + idx2 + "].checked";
                if (eval(t)) {    //Found checked item.
                    t = "document." + SavedElements[idx].formName + "." + SavedElements[idx].elementName + "[" + idx2 + "].value";
                    if (eval(t) != SavedElements[idx].elementValue) {
                        DataChanged = true;
                    }
                }
            }
        }
        else if (SavedElements[idx].elementType == 'select-one') {
            t = "document." + SavedElements[idx].formName + "." + SavedElements[idx].elementName + ".selectedIndex";
            if (eval(t) != SavedElements[idx].elementValue) {
                DataChanged = true;
            }
        }
        else if (SavedElements[idx].elementType == 'select-multiple') {
            t = "document." + SavedElements[idx].formName + "." + SavedElements[idx].elementName;
            e = eval(t);
            sTemp = '';
            for (idx2=0; idx2<e.options.length; idx2++) { //Collect and save all the selected items.
                if (e.options[idx2].selected) {
                    sTemp += e.options[idx2].value;
                }
            }
            if (sTemp != SavedElements[idx].elementValue) {
                DataChanged = true;
            }
        }
        else if (e.type == 'button' || e.type == 'submit') {
        }

        if (DataChanged) break;
   }
   return DataChanged;
}
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//Purpose: 
//  To check if the browser has cookies enabled
//
//  Calling:
//      if (!AreCookiesEnabled()) {alert "cookies are not enabled";}
//--------------------------------------------------------------------------------
function AreCookiesEnabled() {
    document.cookie="g2CookieTest=This application needs cookies enabled to function"
    var c = document.cookie;
    if (c.indexOf("g2CookieTest=") == -1) {
//        alert ("You do not have cookies enabled.\nYou will not be able to use this site.");
        return false;
    }
    else {
        return true;
    }
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To format dollar amounts and with two decimal places
//
//  Calling:
//      str = FromatAmount(amt);
//--------------------------------------------------------------------------------
function FormatAmount (Amt) {
    var sTemp = new String(Amt);
    var idx = sTemp.indexOf(".");
    if (idx < 0) {
        var dollars = sTemp;
        var cents   = "00";
    }
    else {
        var dollars = sTemp.substring(0,idx);
        var cents   = sTemp.substring(idx+1);
        if (cents.length == 1) cents = cents +"0";
        if (cents.length >  2) cents = cents.substring(0,2);
    }

    sTemp = "";
    while (dollars.length > 3) {
        sTemp = "," + dollars.substring(dollars.length - 3, dollars.length) + sTemp;
        dollars = dollars.substring(0, dollars.length - 3);
    }
    sTemp = dollars + sTemp;
    return sTemp +"." + cents;
}
//--------------------------------------------------------------------------------
function FormatCurrency (Amt) {
    return "$ " + FormatAmount(Amt);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To test if a form element exists
//
//  Calling:
//      ret = FormElementExists(sName);              
//  Where:
//      sForm is the name of the form the element is on.
//      sName is the name of the element to test for.
//--------------------------------------------------------------------------------
function FormElementExists(sForm, sName) {
    var t = "document." + sForm.name + "." + sName;
    if (eval(t)) return true;
    else         return false;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To get a single cookie from the cookie string
//
//  Calling:
//      val = GetCookei(sName);              
//  Where sName is the name of the cookie to return.
//--------------------------------------------------------------------------------
function GetCookie(sName) {
    var sCookies = document.cookie;
    var pos = sCookies.indexOf(sName + "=");
    if (pos != -1) {
        var start = pos + sName.length + 1;
        var end   = sCookies.indexOf(";", start);
        if (end == -1) end = sCookies.length;
        var value = sCookies.substring(start, end);
        return value;
    }
    else {
        return "";
    }
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To locate and return an element in the elements array
//
//  Calling:
//      val = GetElement(fieldname);
//
// Returns null if not found
//--------------------------------------------------------------------------------
function GetElement(sName) {
    for (idx=0; idx<FormElements.length; idx++) {
        if (FormElements[idx].name == sName)
            return FormElements[idx];
    }
    return null;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To extract a name=value pair from the URL string
//
//  Calling:
//      val = GetURLArg("fieldname");
//
// If the variable passed exists in the Query_String the value of the variable
// is returned, otherwise an empty string is returned
//----------------------------------------------------------------
function GetURLArg(sField) {
    var sInput = location.search;

//--Check for no args.
    if (sInput.length == 1) {
        return "";
    }

    sInput = sInput.substring(1);               //Remove the leading "?"
    var args = sInput.split("&");               //Seperate the value pairs.
    var sRet = "";                              //Value to be returned.
    var sItem;
    var idx;

//--Loop thru the value pairs looking for the requested one.
    for (idx=0; idx < args.length; idx++) {
        sItem = args[idx].split("=");           //Seperate the name from the value
        if (sField.toLowerCase() == unescape(sItem[0].toLowerCase())) {
            sTemp = unescape(sItem[1]);         //Remove any HEX chars.

//--        Replace any '+' chars with a space
            while ((ind=sTemp.indexOf("+")) > -1) {
                sTemp = sTemp.substring(0, ind) + " " + sTemp.substring(ind+1);
            }
            sRet = sTemp;
            break;
        }
    }
    return sRet;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To extract the base directory for the current web page
//
//  Calling:
//      str = httpBase();
//--------------------------------------------------------------------------------
function httpBase() {
    return window.location.href.substring(0, window.location.href.lastIndexOf('/'));
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check that the data is only letters
//
//  Calling:
//      val = isAlpha(sTemp);
//--------------------------------------------------------------------------------
function isAlpha(sInput) {
//--Check for valid characters.
    var reAlpha = /^[a-z]+$/i;
    return reAlpha.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check that the data is only letters and numbers
//
//  Calling:
//      val = isInteger(sTemp);
//--------------------------------------------------------------------------------
function isAlphaNumeric(sInput) {
//--Check for valid characters. 0-9, comma, minus
    var reAlphaNumber = /^[a-z0-9 ]+$/i;
    return reAlphaNumber.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid credit card number
//
//  Calling:
//      ret = isValidCCNumber(ccNum);
//  Note:
//      Encoding only works on cards with less than 19 digits
//----------------------------------------------------------------
function isCCNumber(ccNum) {

//--Check for valid input characters
    var reNumber = /^[0-9\- ]+$/;       // 0-9 space and dash
    if (!reNumber.test(ccNum)) 
        return false;

//--Start with a clean number
    var str = CleanCCNum(ccNum)

//--Check the length
    if (ccNum.length > 19)
        return (false);

//--Check the credit card length by card type
    var ccType = str.substr(0, 1);	//3=Amex, 4=Visa, 5=MasterCard, 6=Discover
    if (ccType != 3 && ccType != 4 && ccType != 5 && ccType != 6) return false;

//--Check the credit card length by card type
    if (ccType == 3 && str.length!=15) return false;
    if (ccType == 4 && str.length!=13 && str.length!=16) return false;
    if (ccType == 5 && str.length!=16) return false;
    if (ccType == 6 && str.length!=16) return false;

//--Do the checknum test
    var sum = 0; 
    var mul = 1; 
    var l = str.length;

//Process back to front
//    for (i = 0; i < l; i++) {
//        digit = str.substring(l-i-1, l-i);
    for (var i = l; i > 0; i--) {
        digit = str.substr(i-1, 1);
        tproduct = parseInt(digit, 10) * mul;
        if (tproduct >= 10)
            sum += (tproduct % 10) + 1;
        else
            sum += tproduct;
        if (mul == 1)
            mul++;
        else
            mul--;
    }

    if ((sum % 10) == 0)
        return (true);
    else
        return (false);
} 
//----------------------------------------------------------------
//Clean the CC Number
function CleanCCNum(str) {
    var cleanText="";

//--make sure input is a string
    str+="";

    for (var idx=0; idx<str.length; idx++) {
        if (str.substring(idx, idx+1) >= "0" && str.substring(idx, idx+1) <= "9") cleanText += str.substring(idx, idx+1);
    }
    return cleanText;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid credit catd date value
//
//  Calling:
//      val = isCCDate(sTemp);
//--------------------------------------------------------------------------------
function isCCDate(sInput) {
    var d = sInput.split("/");
    if (d.length != 2) {
        d = sInput.split("-");
    }

    if (d.length != 2) {
        return false;
    }

    d[2] = d[1];
    d[1] = 1;

//--Validate date parts as being numeric
    var reNumber = /^[0-9]+$/;
    if (!reNumber.test(d[0]) ||!reNumber.test(d[1]) ||!reNumber.test(d[2])) return false;

//--Validate the date parts.
    var mm = d[0];
    var dd = d[1];
    var yy = new Number(d[2]);

//--Require 4 dig. years.
    if (yy < 1000) return false
    if (yy > 2200) return false
//    if (yy < 2000) {
//        if (yy < 50) 
//            yy = yy + 2000.0;
//        else
//            yy = yy + 1900.0
//    }

    if (mm < 1 || mm > 12) return false;
    if (dd < 1)            return false;
    if (yy < 1)            return false;

    if (mm==1 || mm==3 || mm==5 || mm==7 || mm==8 || mm==10 || mm==12)
        if (dd > 31) return false;

    if (mm==4 || mm==6 || mm==9 || mm==11)
        if (dd > 30) return false;

    if (mm==2) {
        var iLeap = yy % 4;
        if (iLeap == 0 && dd > 29) return false;
        if (iLeap >  0 && dd > 28) return false;
    }

//--Reassemble the date using slashes.
    vCleanedDate = d[0] + '/' + d[2];

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid two character country code
//
//  Calling:
//      val = isCountryCode(sTemp);
//--------------------------------------------------------------------------------
function isCountryCode(sInput) {

//--List of valid state codes
    var CountryCodes = "|AD|AE|AF|AG|AI|AL|AM|AN|AO|AQ|AR|AS|AT|AU|AW|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BM|BN|BO|BR|BS|BT|BU|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CS|CT|CU|CV|CX|CY|CZ|DD|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|EH|ER|ES|ET|FI|FJ|FK|FM|FO|FR|FX|GA|GB|GD|GE|GF|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|HV|ID|IE|IL|IN|IO|IQ|IR|IS|IT|JM|JO|JP|JT|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|MG|MH|MI|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NQ|NR|NU|NZ|OM|PA|PC|PE|PF|PG|PH|PK|PL|PM|PN|PR|PT|PU|PW|PY|QA|RE|RO|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TM|TN|TO|TP|TR|TT|TV|TW|TZ|UA|UG|UK|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WK|WS|YD|YE|YT|YU|ZA|ZM|ZR|ZW|"

//--Check for an empty string
    if (sInput == null || sInput == "")
        return false;

    if (CountryCodes.indexOf("|" + sInput.toUpperCase() + "|") == -1)
        return false;

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid date value
//
//  Calling:
//      val = isDate(sTemp);
//--------------------------------------------------------------------------------
function isDate(sInput) {
//    var fCCDate = false;
    var d = sInput.split("/");
    if (d.length != 3) {
        d = sInput.split("-");
    }

/*
    if (d.length != 3) {
//--    Check for a date in the mm/yyyy format. Used for credit card expiration date.
        d = sInput.split("/");
        if (d.length == 2 && (sInput.length == 7 || sInput.length == 6)) {
            d[2] = d[1];
            d[1] = 1;
            fCCDate = true
        }
        else {
            return false;
        }
    }
*/

//--Validate date parts as being numeric
    var reNumber = /^[0-9]+$/;
    if (!reNumber.test(d[0]) ||!reNumber.test(d[1]) ||!reNumber.test(d[2])) return false;

//--Validate the date parts.
    var mm = d[0];
    var dd = d[1];
    var yy = new Number(d[2]);

//--Require 4 dig. years.
// ss on 2/5/2002    if (yy < 1000) return false
    if (yy < 1900) return false
    if (yy > 2200) return false
//    if (yy < 2000) {
//        if (yy < 50) 
//            yy = yy + 2000.0;
//        else
//            yy = yy + 1900.0
//    }


    if (mm < 1 || mm > 12) return false;
    if (dd < 1)            return false;
    if (yy < 1)            return false;

    if (mm==1 || mm==3 || mm==5 || mm==7 || mm==8 || mm==10 || mm==12)
        if (dd > 31) return false;

    if (mm==4 || mm==6 || mm==9 || mm==11)
        if (dd > 30) return false;

    if (mm==2) {
        var iLeap = yy % 4;
        if (iLeap == 0 && dd > 29) return false;
        if (iLeap >  0 && dd > 28) return false;
    }

//--Reassemble the date using slashes.
    vCleanedDate = d[0] + '/' + d[1] + '/' + d[2];

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  Basic e-mail address validation
//
//  Calling:
//      val = isEMailAddress(sTemp);
//--------------------------------------------------------------------------------
function isEMailAddress(sInput) {
  
    var L1 = sInput.indexOf("@");
    var L2 = sInput.indexOf(".");

//--Check the number of dots(.).
    if (L2 > -1) {
        var t1 = sInput.match(/\./g);
        if (t1.length > 1) return false;
    }
    else
        return false;

//--Check the number of @s.
    if (L1 > -1) {
        var t2 = sInput.match(/\@/g);
        if (t2.length > 1) return false;
    }
    else
        return false;

    if (L1 > L2) return false;
    if (L2 > sInput.length-1) return false;

    var reEmail = /^[\s]*[a-zA-Z0-9_\-\.]+\@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)+$/;
    return reEmail.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To test if a value is empty. In Java script that is null or = "".
//
//  Calling:
//      val = isEmpty(sTemp);
//--------------------------------------------------------------------------------
function isEmpty(sInput) {
    if (sInput == null || sInput == "")
        return true;

    var reSpaces = /^ +$/;
    return reSpaces.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check that the data is a valid integer value
//
//  Calling:
//      val = isInteger(sTemp);
//--------------------------------------------------------------------------------
function isInteger(sInput) {
//--Check for valid characters. 0-9, comma, minus
    var reNumber = /^[0-9,\-]+$/;
    return reNumber.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check that the data is valid for a name field
//
//  Calling:
//      val = isInteger(sTemp);
//--------------------------------------------------------------------------------
function isName(sInput) {
//--Check for valid characters. dash, comma, period and apostriphy
    var reName = /^[a-z,.\-\' ]+$/i;
    return reName.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check that the data is a valid number
//
//  Calling:
//      val = isNumber(sTemp);
//--------------------------------------------------------------------------------
function isNumber(sInput) {
//--Check the number of decimal points.
    if (sInput.indexOf('.') > -1) {
        var xxx = sInput.match(/\./g);
        if (xxx.length > 1) return false;
    }
//--Check for valid characters. 0-9, comma, minus, and decimal-point
    var reNumber = /^[0-9\.,\-]+$/;
    return reNumber.test(sInput);
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check that the data is a digits only
//
//  Calling:
//      val = isNumeric(sTemp);
//--------------------------------------------------------------------------------

function isNumeric(sInput) {
//--Check for valid characters. 0-9
    var reNumber = /^[0-9]+$/;
    return reNumber.test(sInput);

}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check a password field
//
//  Calling:
//      val = isPassword(sTemp);
//
//  A valid password is 8 or more characters in length
//  Contains Letters, numbers and special characters.
//--------------------------------------------------------------------------------
function isPassword(sInput) {
    var ret = true;

//--Check for a letter
    if (sInput.search(/[a-zA-Z]/) == -1) ret = false;

//--Check for a number
    if (sInput.search(/[0-9]/) == -1) ret = false;

//--Check for a         ~!@#$%^&*()_+= -`{}.,:;"' / \ [ ] |
    if (sInput.search(/[~!@#$%^&*()_+=\-`{}.,:;"'\/\\\[\]\|]/) == -1) ret = false;

    if (sInput.length < 8) ret = false;

    return ret;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid phone number value, including the Digits only
//
//  Calling:
//      val = isPhoneNumber(sTemp);
// Added by: Saravanan Shanmugam
// When    : 2/5/2002
//--------------------------------------------------------------------------------

function isPhoneNumber4(sInput){

//--check for digits only format

    var isnumeric = isNumeric(sInput);
     	
	if(isnumeric == true ){
		if(sInput.length != 10){
			return false;
		}else{
			return true;
		}
	}else{
		return isPhoneNumber(sInput); 
	}
}

//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid phone number value
//
//  Calling:
//      val = isPhoneNumber(sTemp);
//--------------------------------------------------------------------------------
function isPhoneNumber(sInput) {

//--Step one. Check for anyting entered.
    if (sInput == null || sInput == "") return false;

    var reSpaces = /^ +$/;
    if (reSpaces.test(sInput)) return false;

//--Step two. Seperate the parts.
    var idx;
    var count   = 0;
    var x       = "";
    var delim   = false;
    var args = new Array(10);

    for (idx=0; idx<10; idx++) {
        args[idx] = "";
    }

    for (idx=0; idx<sInput.length; idx++) {
        x = sInput.substring(idx, idx+1);
        if (x == "(" || x == ")" || x == "-" || x == "/" || x == " ") {
            if (delim) {
                
            }
            else {
                delim = true;
                if (args[0] != "") {
                    count++;
                }
            }
        }
        else {
            delim = false;
            args[count] = args[count] + x;
        }
    }

    var InvalidAreaCodes = "|900|800|888|";
    var InvalidPrefixes  = "|555|";
    var InvalidNumbers   = "|1212|";

//--Check the arguments.
    if (count < 2 || count > 4)  return false;
    var reNumber = /^[0-9]+$/;
    count++;

//--prefix & number
    if (count == 2) {
        if (!reNumber.test(args[0]) || !reNumber.test(args[1])) return false;
        if (args[0].length != 3 || args[1].length != 4)         return false;
        if (InvalidPrefixes.indexOf("|" + args[0] + "|") > -1) return false;
        if (InvalidNumbers.indexOf("|" + args[1] + "|") > -1) return false;
    }
        
//--areacode, prefix & number or prefix, number & extension
    if (count == 3) {
        if (!reNumber.test(args[2])) {  // Item 3 is not numeric. Assume prefix, number & extension
            if (!reNumber.test(args[0]) || !reNumber.test(args[1])) return false;
            if (args[0].length != 3 || args[1].length != 4)         return false;
            if (InvalidPrefixes.indexOf("|" + args[0] + "|") > -1) return false;
            if (InvalidNumbers.indexOf("|" + args[1] + "|") > -1) return false;
        }
        else {                          // areacode, prefix & number
            if (!reNumber.test(args[0]) || !reNumber.test(args[1]) || !reNumber.test(args[2]))  return false;
            if (args[0].length != 3 || args[1].length != 3 || args[2].length != 4)              return false;
            if (InvalidAreaCodes.indexOf("|" + args[0] + "|") > -1) return false;
            if (InvalidPrefixes.indexOf("|" + args[1] + "|") > -1) return false;
            if (InvalidNumbers.indexOf("|" + args[2] + "|") > -1) return false;
        }
    }
        
//--areacode, prefix, number & extension
    if (count == 4) {
        if (!reNumber.test(args[0]) || !reNumber.test(args[1]) || !reNumber.test(args[2]))  return false;
        if (args[0].length != 3 || args[1].length != 3 || args[2].length != 4)              return false;
        if (InvalidAreaCodes.indexOf("|" + args[0] + "|") > -1) return false;
        if (InvalidPrefixes.indexOf("|" + args[1] + "|") > -1) return false;
        if (InvalidNumbers.indexOf("|" + args[2] + "|") > -1) return false;
    }

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid two character state code
//
//  Calling:
//      val = isStateCode(sTemp);
//--------------------------------------------------------------------------------
function isStateCode(sInput) {

//--List of valid state codes
//    var StateCodes = "|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP|"
//    var USStateCodes = "|AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY"
//    var TeritoryCodes = "|AS|FM|GU|MH|MP|PR|PW|VI|"
//    var CanadaCodes
    var StateCodes = "|AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY" + "|AS|FM|GU|MH|MP|PR|PW|VI|";

//--Check for an empty string
    if (sInput == null || sInput == "")
        return false;

    if (StateCodes.indexOf("|" + sInput.toUpperCase() + "|") == -1)
        return false;

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid time value
//
//  Calling:
//      val = isTime(sTemp);
//--------------------------------------------------------------------------------
function isTime(sInput) {
    var am_pm = 0;
    var idx   = 0;
    var t = sInput.toLowerCase();

//--Check for an empty string
    if (sInput == null || sInput == "")
        return false;

    var reSpaces = /^ +$/;
    if (reSpaces.test(sInput))
        return false;

//--Check for AM/PM
    idx = t.indexOf("pm");
    if (idx >= 0) {
        am_pm = 12;
        t = t.substring(0, idx-1);
    }

    idx = t.indexOf("am");
    if (idx >= 0) {
        t = t.substring(0, idx-1);
    }
        
//--Split the time into parts
    var args = t.split(":");
    if (args.length > 4) return false;
    if (args.length == 1) {
        args[1] = 0;
        args[2] = 0;
    }
    if (args.length == 2) {
        args[2] = 0;
    }

     
//--Validate time parts as being numeric
    var reNumber = /^[0-9]+$/;
    if (!reNumber.test(args[0]) ||!reNumber.test(args[1]) ||!reNumber.test(args[2])) return false;

//--Validate the time parts.
    if (args[0] < 0  ||  args[0] > 23) return false;
    if (args[1] < 0  ||  args[1] > 59) return false;
    if (args[2] < 0  ||  args[2] > 59) return false;

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To check for a valid zip code
//
//  Calling:
//      val = isZipCode(sTemp);
//--------------------------------------------------------------------------------
function isZipCode(sInput) {

//--Check for an empty string
    if (sInput == null || sInput == "")
        return false;

//--Split the time into parts, if any
    var args = sInput.split("-");
    if (args.length != 2)
        args = sInput.split(" ");

    if (args.length > 2) return false;

    var reNumber = /^[0-9]+$/;

    if (args.length == 1) {
        if (!reNumber.test(args[0])) return false;
        if (args[0].length != 5 && args[0].length != 9) return false;
    }

    if (args.length == 2) {
        if (!reNumber.test(args[0]) ||!reNumber.test(args[1])) return false;
        if (args[0].length != 5) return false;
        if (args[1].length != 4) return false;
    }

    return true;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To create a string of n spaces
//
//  Calling:
//      val = Spaces(n);
//--------------------------------------------------------------------------------
function Spaces(iLen) {
    var sRet = "";
    for (idx=0; idx<iLen; idx++)
        sRet = sRet + " ";
    return sRet;
}
//--------------------------------------------------------------------------------
//Purpose: 
//  To remove leading and trailing spaces from a string
//
//  Calling:
//      val = Trim(sTemp);
//----------------------------------------------------------------
function Trim(str) {
    if (str == '')   return '';
    if (str == null) return '';

    var idxEnd = 0
    var idxStart = str.length
    
    for (var idx=0; idx<=str.length-1; idx++) {
        if (str.substring(idx, idx+1) != ' ') {
            idxStart = idx
            break
        }
    }

    if (idxStart == str.length)
        return ''
        
    for (var idx=str.length-1; idx>=0; idx--) {
        if (str.substring(idx, idx+1) != ' ') {
            idxEnd = idx
            break
        }
    }
    sTemp = str.substring(idxStart, idxEnd+1)
    return sTemp
}
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//For IE we must check all the key scrokes.
//Netscape seems to not pass the tab key to the event handler.
function DisabledFieldKeyTest(field) {
    var ret = false;
window.status = "1";
    if (isIE) {
        e = window.event;
        if (e.keyCode==9 || (e.keyCode>=16 && e.keyCode<=18) || (e.keyCode>=112 && e.keyCode<=123)) ret = true;
    }
//window.status = "ret=" + ret;
    return ret;
}
//--------------------------------------------------------------------------------
//For interstitial popups
var level = 0;
var enable = true;

function  gotoInterstitial(url,type)
{ 
    if(level == 0)
        interstitialPage = 'Interstitials/interstitial.aspx';
    else if(level == 2)
        interstitialPage = '../../Interstitials/interstitial.aspx';
    else
         interstitialPage = '../Interstitials/interstitial.aspx';
   	   
    try{
            if(enable)
            {
                window.open(interstitialPage+'?type='+type+'&src=javascript:window.close()&dest='+ url , 'Interstitial','height=270,width=600,toolbar=0,top=200,screenX=200,screenY=200,resizable=0,menubar=0,scrollbars=0,location=0,status=no');
                return false;
            }
            else
            {
              window.open(url , 'Interstitial','height=270,width=600,toolbar=0,resizable=0,menubar=0,scrollbars=0,location=0,status=no');
              return false;
             }
         }
    catch(e)
    {}
}
 function ChangePageInPortal_ClaimSubmission()
    {
        var btnGotoClaimSubmissionPage = window.top.document.getElementById("btnGotoClaimSubmissionPage");
        btnGotoClaimSubmissionPage.click();
    }
    
    function ChangePageInPortal_Sitemap()
    {
        var btnGotoSitemapPage = window.top.document.getElementById("btnGotoSitemapPage");
        btnGotoSitemapPage.click();
    }
    function ChangePageInPortal_SendEmail()
    {
        var btnGotoSendEmailPage = window.top.document.getElementById("btnGotoSendEmailPage");
        btnGotoSendEmailPage.click();
    }
    function ChangePageInPortal_CorpPhilan()
    {
        var btnGotoCorporatePhilanthropyPage = window.top.document.getElementById("btnGotoCorporatePhilanthropyPage");
        btnGotoCorporatePhilanthropyPage.click();
    }
     function ChangePageInPortal_ContactUs()
    {
        var btnGotoContactUsPage = window.top.document.getElementById("btnGotoContactUsPage");
        btnGotoContactUsPage.click();
    }
  function ChangePageInPortal_RentersToolbox()
    {
        var btnGotoRenterstoolboxPage = window.top.document.getElementById("btnGotoRenterstoolboxPage");
        btnGotoRenterstoolboxPage.click();
    }
