var gfrm;
var gtdError;
var gctlFirstFieldInError;
var giTabInError;
var gsHighlightColour = "khaki"	//"#C8CFC3";	//"yellow";	 "#EFF0F0";	//
var bUserSelectedSpecial;
var ns = (navigator.appName.indexOf("Netscape") != -1);
var d = document;
var gbSubmit;
var gbBadDate;
var gbSubmitted = false;
var gdtSubmitted = null;
var bHelpVisible = false;
var sShowInfoParam = new String('');
var m_ctlTreeView = null;
var m_ctlContent = null;
var m_ctlTrailer = null;

function isNetscape() {
    //if (win.navigator.appName.toLowerCase().indexOf("netscape") > -1) 
    if (document.all) {
        return false;
    }
    else {
        return true;
    }
}

function blockInput1(e) {
    return false;
}

function blockInput(e) {

    var ikeyValue = window.event.keyCode;

    var keyChar = String.fromCharCode(ikeyValue);

    if (String.fromCharCode(9) == keyChar) 
    {
        return true;
    }
    else 
    {
        return false;
    }
}

function validateData(iMaxGuestsA, iYearNowA, iMonthNowA, iDayNowA,
                      sCtlCourse1A, sCtlCourse2A, sCtlCourse3A,
                      sCtlCourse4A, sCtlCourse5A, sCtlCourse6A) {
    // ***************************************************************
    // This function will get called when the user clicks the Submit
    // button as it is specified in the onSubmit property ot the form.
    // If it returns true, the form will be submitted.
    // If it returns false, the submit will be cancelled.
    // ***************************************************************

    //**********************************
    // Clear out the error messages cell
    //**********************************

    gtdError = document.getElementById("tdError");

    if (gtdError != null)
        gtdError.innerHTML = "";

    //********************************
    // Assume we will submit this form	
    //********************************

    gbSubmit = true;
    gbBadDate = false;
    bUserSelectedSpecial = false;

    gctlFirstFieldInError = null;
    giTabInError = 1;

    //*********************************
    // Make sure organiser name entered
    //*********************************

    if (!isFieldEntered("txtOrganiser", gsEnterOrganiserMsg))
        gbSubmit = false;

    //************************************
    // Make sure group/office name entered
    //************************************

    if (!isFieldEntered("txtGroup", gsEnterGroupMsg))
        gbSubmit = false;

    //****************************************
    // Make sure contact email address entered
    //****************************************

    if (!isFieldEntered("txtEmail", gsEnterEmailMsg))
        gbSubmit = false;

    else if (!validateEmail("txtEmail", gsBadEmailMsg))
        gbSubmit = false;

    //*******************************************
    // Make sure contact telephone number entered
    //*******************************************

    if (!isFieldEntered("txtPhone", gsEnterPhoneNumberMsg))
        gbSubmit = false;

    //*******************************
    // Make sure booking date entered
    //*******************************

    if (!isFieldEntered("txtDateBooking", gsEnterBookingDateMsg))
        gbSubmit = false;

    //*******************************
    // Make sure booking time entered
    //*******************************

    if (!isFieldEntered("selTime", gsEnterBookingTimeMsg))
        gbSubmit = false;

    //***************************
    // Make sure guest data is ok
    //***************************

    //debugger
    
    if (!validateAllGuests(iMaxGuestsA, sCtlCourse1A, sCtlCourse2A, sCtlCourse3A,
                           sCtlCourse4A, sCtlCourse5A, sCtlCourse6A))
        gbSubmit = false;

    if (gbSubmit == false) {
        if (gctlFirstFieldInError != null) {
            selectTab(1);

            if (giTabInError == 1) {
                gctlFirstFieldInError.focus();

                if ((gctlFirstFieldInError.type == 'text') || (gctlFirstFieldInError.type == 'textarea'))
                    gctlFirstFieldInError.select();
            }
        }

        window.scrollTo(0, 0);
    }

    return gbSubmit;
}

function validateAllGuests(iMaxGuestsA,
                           sCtlCourse1A, sCtlCourse2A, sCtlCourse3A,
                           sCtlCourse4A, sCtlCourse5A, sCtlCourse6A) {
    var iGuestCount;
    var bAllOK;
    var bEntryOK;
    var iGuest;

    // *********************
    // Assume all will be ok
    // *********************
    bAllOK = true;

    // *******************
    // Reset guest counter
    // *******************
    iGuestCount = 0;

    // ********************
    // Check each guest row 
    // ********************
    for (iGuest = 1; iGuest <= iMaxGuestsA; iGuest++) {

        // ***************************
        // Is name of guest x entered?
        // ***************************
        if (isFieldEntered("txtGuest" + iGuest, ""))

        // *****************************
        // Yes - increment guest counter
        // *****************************
            iGuestCount = iGuestCount + 1;

        // ********************
        // Validate guest x row
        // ********************
        bEntryOK = validateGuestInfo(iGuest, sCtlCourse1A, sCtlCourse2A, sCtlCourse3A,
                                     sCtlCourse4A, sCtlCourse5A, sCtlCourse6A);

        // ************************
        // Keep a cumulative result
        // ************************
        bAllOK = bAllOK && bEntryOK;
    }

    // ******************
    // Any guests added	?
    // ******************
    if (iGuestCount == 0) {
        AddError(gsEnterOneGuestMsg);

        highlightFieldByID("txtGuest1");
        bAllOK = false;
    }

    if (bUserSelectedSpecial == true) {
        if (!isFieldEntered("txtComments", gsEnterSpecialDescMsg))
            gbSubmit = false;
    }

    if (bAllOK == false)
        giTabInError = 2;

    return bAllOK;
}

function validateGuestInfo(iGuestNumberA,
                           sCtlCourse1A, sCtlCourse2A, sCtlCourse3A,
                           sCtlCourse4A, sCtlCourse5A, sCtlCourse6A) {
    var ctl;
    var bGuestNameEntered;
    var bOptionSelected;
    var bInfoOK;

    // ************************	
    // Assume guest data is bad
    // ************************	
    bInfoOK = false;

    // **************************************************
    // This flag set to true if atleast 1 course selected	
    // **************************************************
    bOptionSelected = false;

    // **************************
    // Check if course 1 selected	
    // **************************
    if ((sCtlCourse1A != undefined) && (sCtlCourse1A.length > 0)) {
        //alert(sCtlCourse1A + iGuestNumberA);
        ctl = document.getElementById(sCtlCourse1A + iGuestNumberA);

        if ((ctl != null) && (trimString(ctl.value) != "")) {
            bOptionSelected = true;

            if (ctl.value.substr(0, 3) == "SP_")
                bUserSelectedSpecial = true;
        }
    }

    // **************************
    // Check if course 2 selected	
    // **************************
    if ((sCtlCourse2A != undefined) && (sCtlCourse2A.length > 0)) {
        ctl = document.getElementById(sCtlCourse2A + iGuestNumberA);

        if ((ctl != null) && (trimString(ctl.value) != "")) {
            bOptionSelected = true;

            if (ctl.value.substr(0, 3) == "SP_")
                bUserSelectedSpecial = true;
        }
    }

    // **************************
    // Check if course 3 selected	
    // **************************
    if ((sCtlCourse3A != undefined) && (sCtlCourse3A.length > 0)) {
        ctl = document.getElementById(sCtlCourse3A + iGuestNumberA);

        if ((ctl != null) && (trimString(ctl.value) != "")) {
            bOptionSelected = true;

            if (ctl.value.substr(0, 3) == "SP_")
                bUserSelectedSpecial = true;
        }
    }

    // **************************
    // Check if course 4 selected	
    // **************************
    if ((sCtlCourse4A != undefined) && (sCtlCourse4A.length > 0)) {
        ctl = document.getElementById(sCtlCourse4A + iGuestNumberA);

        if ((ctl != null) && (trimString(ctl.value) != "")) {
            bOptionSelected = true;

            if (ctl.value.substr(0, 3) == "SP_")
                bUserSelectedSpecial = true;
        }
    }

    // **************************
    // Check if course 5 selected	
    // **************************
    if ((sCtlCourse5A != undefined) && (sCtlCourse5A.length > 0)) {
        ctl = document.getElementById(sCtlCourse5A + iGuestNumberA);

        if ((ctl != null) && (trimString(ctl.value) != "")) {
            bOptionSelected = true;

            if (ctl.value.substr(0, 3) == "SP_")
                bUserSelectedSpecial = true;
        }
    }

    // **************************
    // Check if course 6 selected	
    // **************************
    if ((sCtlCourse6A != undefined) && (sCtlCourse6A.length > 0)) {
        ctl = document.getElementById(sCtlCourse6A + iGuestNumberA);

        if ((ctl != null) && (trimString(ctl.value) != "")) {
            bOptionSelected = true;

            if (ctl.value.substr(0, 3) == "SP_")
                bUserSelectedSpecial = true;
        }
    }

    // ***************************
    // Check if Guest name entered	
    // ***************************
    ctl = document.getElementById("txtGuest" + iGuestNumberA);

    if ((ctl != null) && (trimString(ctl.value) != ""))
        bGuestNameEntered = true;
    else
        bGuestNameEntered = false;

    // *****************************************
    // Show error if name entered but no courses
    // *****************************************
    if ((bGuestNameEntered == true) && (bOptionSelected == false)) {
        AddError(gsEnterOneCourseMsg.replace("%0", iGuestNumberA));

        highlightField(ctl);
    }
    // **********************************************
    // or if a course is selected but no name entered	
    // **********************************************
    else if ((bGuestNameEntered == false) && (bOptionSelected == true)) {
        AddError(gsEnterGuestNameMsg.replace("%0", iGuestNumberA));

        highlightField(ctl);
    }
    else {
        // ******************************************************************
        // Otherwise clear any previous highlighting and flag that data is ok
        // ******************************************************************		
        unhighlightField(ctl);
        bInfoOK = true;
    }

    return bInfoOK;
}

function trimString(sInString) {
    sInString = sInString.replace(/^\s+/g, ""); // strip leading

    return sInString.replace(/\s+$/g, ""); // strip trailing

}

function AddError(sErrorMsgA) {
    if (gtdError != null) {
        if (gtdError.innerHTML.length == 0)
            gtdError.innerHTML = "*** " + sErrorMsgA;
        else
            gtdError.innerHTML = gtdError.innerHTML + '<br>' + "*** " + sErrorMsgA;
    }
}

function highlightField(ctlA) {
    if (ctlA != null) {
        //ctlA.style.borderColor = "red";

        ctlA.style.backgroundColor = gsHighlightColour;

        if (gctlFirstFieldInError == null)
            gctlFirstFieldInError = ctlA;
    }
}

function unhighlightField(ctlA) {
    if (ctlA != null) {
        //ctlA.style.borderColor = "";

        ctlA.style.backgroundColor = "";
    }
}

function highlightFieldByID(sFieldNameA) {
    highlightField(document.getElementById(sFieldNameA));
}

function unhighlightFieldByID(sFieldNameA) {
    unhighlightField(document.getElementById(sFieldNameA));
}

function resetField(sFieldNameA) {
    var ctl = document.getElementById(sFieldNameA);

    if (ctl != null) {
        //alert (sFieldNameA + '-' + ctl.value);
        ctl.style.backgroundColor = "";
        ctl.value = '';
        return true;
    }
    else
        return false;
}

function resetSelField(sFieldNameA) {
    var ctl = document.getElementById(sFieldNameA);

    if (ctl != null) {
        //alert (sFieldNameA + '-' + ctl.value);
        ctl.style.backgroundColor = "";
        ctl.selectedIndex = 0;
        return true;
    }
    else
        return false;
}

function resetFieldByPrefix(sFieldPrefixA) {

    var frm;
    var ctl;
    var iLen;
    var i;

    if (isNetscape())
        frm = document.forms["theForm"];
    else
        frm = document.theForm;

    iLen = sFieldPrefixA.length;

    for (i = 0; i < frm.elements.length; i++) {

        if (frm.elements[i].name.substr(0, iLen) == sFieldPrefixA) {

            ctl = frm.elements[i];

            if (ctl != null) {
                ctl.style.backgroundColor = "";
                ctl.value = '';
            }
        }

    }

    return true;
}

function resetSelFieldByPrefix(sFieldPrefixA) {

    var frm;
    var ctl;
    var iLen;
    var i;

    if (isNetscape())
        frm = document.forms["theForm"];
    else
        frm = document.theForm;

    iLen = sFieldPrefixA.length;

    for (i = 0; i < frm.elements.length; i++) {

        if (frm.elements[i].name.substr(0, iLen) == sFieldPrefixA) {

            ctl = frm.elements[i];

            if (ctl != null) {
                ctl.style.backgroundColor = "";
                ctl.selectedIndex = 0;
            }
        }

    }

    return true;
}

function isFieldEntered(sFieldNameA, sErrorMsgA) {
    var ctl = document.getElementById(sFieldNameA);

    if ((ctl != null) && (trimString(ctl.value) == "")) {
        if (sErrorMsgA.length > 0) {
            highlightField(ctl);

            AddError(sErrorMsgA);

        }
        return false;
    }
    else {
        unhighlightField(ctl);

        return true;
    }
}

function validateEmail(sFieldNameA, sErrorMsgA) {
    var ctl = document.getElementById(sFieldNameA);

    if (ctl == null)
        return true;

    var sEmail = trimString(ctl.value);
    var at = "@";
    var dot = ".";
    var lat = sEmail.indexOf(at);
    var lstr = sEmail.length;
    var ldot = sEmail.indexOf(dot);
    var bOK;

    bOK = true;

    if (sEmail.indexOf(at) == -1)
        bOK = false;

    if (sEmail.indexOf(at) == -1 || sEmail.indexOf(at) == 0 || sEmail.indexOf(at) == lstr)
        bOK = false;

    if (sEmail.indexOf(dot) == -1 || sEmail.indexOf(dot) == 0 || sEmail.indexOf(dot) == lstr)
        bOK = false;

    if (sEmail.indexOf(at, (lat + 1)) != -1)
        bOK = false;

    if (sEmail.substring(lat - 1, lat) == dot || sEmail.substring(lat + 1, lat + 2) == dot)
        bOK = false;

    if (sEmail.indexOf(dot, (lat + 2)) == -1)
        bOK = false;

    if (sEmail.indexOf(" ") != -1)
        bOK = false;

    if (!bOK && (sErrorMsgA.length > 0)) {
        highlightField(ctl);

        AddError(sErrorMsgA);
    }

    return bOK;
}

function doReset(iMaxGuestsA) {

    var frm;
    var selQty;
    var iGuest;
    var iDrink;
    var iSideOrder;

    resetField("txtOrganiser");
    resetField("txtGroup");
    resetField("txtEmail");
    resetField("txtPhone");
    resetSelField("selDay");
    resetSelField("selMonth");
    resetSelField("selYear");
    resetSelField("selTime");
    resetSelField("selDay");
    resetField("txtComments");
    resetField("txtDateBooking");

    resetFieldByPrefix("txtGuest");
    resetSelFieldByPrefix("sel_C");

    if (m_iDrinkSelCount > 0) {

        for (iDrink = 1; iDrink <= 999; iDrink++) {

            selQty = document.getElementById("selDrinks" + iDrink);

            if (selQty == null)
                break;

            selQty.style.backgroundColor = "";

            if (selQty.selectedIndex > 0) {
                selQty.selectedIndex = 0;

                var tdDrink = document.getElementById("tdDrink" + iDrink);

                if (tdDrink != null)
                    tdDrink.className = 'FormValue';
            }
        }
    }

    if (m_iSideOrderSelCount > 0) {

        for (iSideOrder = 1; iSideOrder <= 999; iSideOrder++) {

            selQty = document.getElementById("selSideOrders" + iSideOrder);

            if (selQty == null)
                break;

            selQty.style.backgroundColor = "";

            if (selQty.selectedIndex > 0) {

                selQty.selectedIndex = 0;

                var tdSideOrder = document.getElementById("tdSideOrder" + iSideOrder);

                if (tdSideOrder != null)
                    tdSideOrder.className = 'FormValue';
            }
        }
    }

    var tdError = document.getElementById("tdError");

    if (tdError != null)
        tdError.innerHTML = "";

    return true;
}

function validateDateTime(iYearNowA, iMonthNowA, iDayNowA) {

    var ctlDay = document.getElementById("selDay");
    var ctlMonth = document.getElementById("selMonth");
    var ctlYear = document.getElementById("selYear");
    var ctlTime = document.getElementById("selTime");

    // Can't validate if we can't find controls
    if ((ctlDay == null) || (ctlMonth == null) || (ctlYear == null) || (ctlTime == null))
        return true;

    var dtBooking = new Date(ctlYear.value, ctlMonth.value, ctlDay.value);
    var dtNow = new Date(iYearNowA, iMonthNowA, iDayNowA);

    if (dtNow.valueOf() > dtBooking.valueOf()) {
        AddError(gsDateInPastMsg);
        highlightField(ctlDay);

        return false;
    }
    else
        return true;

}

function popUp(url) {
    var sWindowName;

    // Create a random name for the new window
    sWindowName = String(Math.random());

    sWindowName = "Win" + sWindowName.substr(2, 8);

    sealWin = window.open(url, sWindowName, 'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=800,height=600,top=60,left=60');
    self.name = "right";
}

function OpenWindow(url) {

    var sWindowName;

    // Create a random name for the new window
    sWindowName = String(Math.random());

    sWindowName = "Win" + sWindowName.substr(2, 8);

    sealWin = window.open(url, sWindowName, 'toolbar=1,location=0,directories=0,status=0,menubar=1,scrollbars=1,resizable=1,width=984,height=600,top=20,left=20');
    self.name = "right";
}

function OpenWindow800x600(url) {
    var sWindowName;

    // Create a random name for the new window
    sWindowName = String(Math.random());

    sWindowName = "Win" + sWindowName.substr(2, 8);

    sealWin = window.open(url, sWindowName, 'toolbar=1,location=0,directories=0,status=0,menubar=1,scrollbars=1,resizable=1,width=800,height=600,top=20,left=20');
    self.name = "right";
}

function OpenWindowNormal(url) {
    sealWin = window.open(url, "win", 'toolbar=1,location=1,directories=1,status=1,menubar=1,scrollbars=1,resizable=1');
}

function BlockNonNumerics() {

    var ikeyValue = window.event.keyCode;

    var keyChar = String.fromCharCode(ikeyValue);

    if ((keyChar < "0" || "9" < keyChar) &&
       (String.fromCharCode(8) != keyChar) &&
       (String.fromCharCode(9) != keyChar)) {

        window.event.returnValue = null;
    }
    else {
        return;
    }
}

function BlockNonCcyNumerics() {

    var ikeyValue = window.event.keyCode;

    var keyChar = String.fromCharCode(ikeyValue);

    if ((keyChar < "0" || "9" < keyChar) &&
       (keyChar != ".") &&
       (keyChar != ",") &&
       (String.fromCharCode(8) != keyChar) &&
       (String.fromCharCode(9) != keyChar)) {

        window.event.returnValue = null;
    }
    else {
        return;
    }
}

function BlockNonNumerics1(e) {
    var keyChar;
    var ikeyValue;

    if (isNetscape()) {
        if (e == null)
            return true;

        ikeyValue = e.which;

        if (ikeyValue == 0)
            return true;
    }
    else {
        ikeyValue = e.keyCode;
    }

    keyChar = String.fromCharCode(ikeyValue);

    if ((keyChar < "0" || "9" < keyChar) && (String.fromCharCode(8) != keyChar) && (String.fromCharCode(9) != keyChar)) {
        return false;
    }
    else {
        return true;
    }
}

function BlockNonAlphaNumerics(e) {
    var keyChar;
    var ikeyValue;

    if (isNetscape(window)) {
        if (e == null)
            return true;

        ikeyValue = e.which;

        if (ikeyValue == 0)
            return true;
    }
    else {
        ikeyValue = event.keyCode;
    }

    keyChar = String.fromCharCode(ikeyValue);

    if ((keyChar >= "0" && "9" >= keyChar) ||
	    (keyChar >= "a" && "z" >= keyChar) ||
	    (keyChar >= "A" && "Z" >= keyChar) ||
	    (String.fromCharCode(8) == keyChar) ||
	    (String.fromCharCode(9) == keyChar)) {
        return true;
    }
    else {
        return false;
    }
}

function getForm() {

    if (isNetscape()) {
        gfrm = document.forms["aspnetForm"];

        if (gfrm == null)
            alert("NS Form not found");
    }
    else {
        gfrm = document.aspnetForm;

        if (gfrm == null)
            alert("IE Form not found");
    }

}

function onSubmit() {

    getForm();

    if (gfrm != null)
        gfrm.submit();
    else
        alert("form not found");
}

function SelectAll(chkListName) {
    // Select all entries in a list of checkboxes
    // which have the same name

    var chkList = document.getElementsByName(chkListName);

    if (chkList != null) {

        var i;

        // If only one entry in list, length property is invalid
        if (chkList.length == null)

            chkList.checked = true;

        else {
            for (i = 0; i < chkList.length; i++) {
                chkList[i].checked = true;
            }
        }
    }

    return;
}

function SelectNone(chkListName) {

    // Deselect all entries in a list of checkboxes
    // which have the same name

    var chkList = document.getElementsByName(chkListName);

    if (chkList != null) {

        var i;

        // If only one entry in list, length property is invalid
        if (chkList.length == null)

            chkList.checked = false;

        else {
            for (i = 0; i < chkList.length; i++) {
                chkList[i].checked = false;
            }
        }
    }

    return;
}

function onHoverTvw(node) {

    node.style.textDecoration = 'underline';

}

function onUnhoverTvw(node) {

    node.style.textDecoration = 'none';

}

function onToggleTvw(imgID, childblockID) {

    var img = document.getElementById(imgID);

    if (img != null) {

        var pos = img.src.indexOf('tvwP');

        if (pos == -1)
            img.src = img.src.replace('tvwM', 'tvwP');
        else
            img.src = img.src.replace('tvwP', 'tvwM');
    }

    if (childblockID != '') {

        var div = document.getElementById(childblockID);

        if (div != null) {

            if (div.style.display == 'none')
                div.style.display = 'block';
            else
                div.style.display = 'none';

        }
    }
}

function getScrollPosParams() {

    var sParams = '';
    var sPos;
    
    var ctlTextBox = document.getElementById('txtTreeScrollPos');

    if (ctlTextBox != null) {

        sPos = ctlTextBox.value;
        
        if (sPos != '')
            sParams = '&tvp=' + sPos;
    }

    ctlTextBox = document.getElementById('txtListScrollPos');

    if (ctlTextBox != null) {

        sPos = ctlTextBox.value;

        if (sPos != '')
            sParams = sParams + '&lsp=' + sPos;
    }

    return sParams;
}

function onBK() {

    var sURL = '../MemberPages/Bookings.aspx?K=BK';

    window.location.href = sURL;
}

function onBKD(sDateA) {

    var sURL = '../MemberPages/Bookings.aspx?K=BD_' + sDateA;

    window.location.href = sURL;
}

function onBKM(iYearA, iMonthA, iLastDayOfMonthA) {

    var sMonth = iMonthA.toString();

    if (sMonth.length == 1)
        sMonth = '0' + sMonth;

    var sStart = iYearA.toString() + '-' + sMonth + '-01';
    var sEnd = iYearA.toString() + '-' + sMonth + '-' + iLastDayOfMonthA.toString();

    var sURL = '../MemberPages/Bookings.aspx?K=BM_' + sStart + '&From=' + sStart + '&To=' + sEnd;

    window.location.href = sURL;
}

function onBKY(iYearA) {

    var sStart = iYearA.toString() + '-01-01';
    var sEnd = iYearA.toString() + '-12-31';

    var sURL = '../MemberPages/Bookings.aspx?K=BY_' + sStart + '&From=' + sStart + '&To=' + sEnd;

    window.location.href = sURL;
}

function getAbsoluteTop(ctlA) {

    var iTop = ctlA.offsetTop;
    var iUltimatePatentTop = 0;

    var ctlParent = ctlA.offsetParent;

    while (ctlParent != null) {

        iTop += ctlParent.offsetTop;

        if (ctlParent.offsetParent == null) {
            iUltimatePatentTop = ctlParent.clientTop;
            break;
        }

        ctlParent = ctlParent.offsetParent;
    }

    iTop += iUltimatePatentTop;

    return iTop;
}

function createCookie(sNameA, sValueA, iMinutesA) {

    var sExpires = "";

    if (iMinutesA) {
    
        var date = new Date();

        date.setTime(date.getTime() + (iMinutesA * 60 * 1000));

        sExpires = "; expires=" + date.toGMTString();

    }

    document.cookie = sNameA + "=" + sValueA + sExpires + "; path=/";
}

function readCookie(sNameA) {

    var sNameEQ = sNameA + "=";

    var ca = document.cookie.split(';');

    for (var i = 0; i < ca.length; i++) {

        var c = ca[i];

        while (c.charAt(0) == ' ')
            c = c.substring(1, c.length);

        if (c.indexOf(sNameEQ) == 0)
            return c.substring(sNameEQ.length, c.length);
    }

    return '';
}

function eraseCookie(sNameA) {
    createCookie(sNameA, "", -1);
}

function saveDivScrollPos(sIDDivA, sKeyA) {

    var ctlDiv = document.getElementById(sIDDivA);

    if (ctlDiv != null) {

        var iPos = ctlDiv.scrollTop;

        createCookie(sKeyA, iPos, 10);
    }
}

function setDivScrollPos(sIDDivA, sKeyA) {

    var ctlDiv = document.getElementById(sIDDivA);

    if (ctlDiv != null) {

        var sPos = readCookie(sKeyA);

        if (sPos != '') {
            ctlDiv.scrollTop = sPos;
        }
    }
}

function setDivScrollPosToTop(sIDDivA) {

    var ctlDiv = document.getElementById(sIDDivA);

    if (ctlDiv != null) {

        ctlDiv.scrollTop = 0;        
    }
}

function setFocus(ctlIDA) {

    var ctl = document.getElementById(ctlIDA);

    if (ctl != null)
        ctl.focus();
}

function onPrint(sPrintURLA, sExtraPrintParamA) {

    if (!sExtraPrintParamA)
        sExtraPrintParamA = '';

    OpenWindow(sPrintURLA + sShowInfoParam + sExtraPrintParamA);
}

function onHelp(sHelpURLA) {
    OpenWindow(sHelpURLA);
}

function showInfo(sDivHelpClientIDA) {

    var lnk = document.getElementsByName('lnkHelp');

    if ((lnk != null) && (lnk.length > 0)) {

        if (bHelpVisible == false)
            lnk[0].innerHTML = 'Hide Help';
        else
            lnk[0].innerHTML = 'Help';

    }

    var ctl = document.getElementById(sDivHelpClientIDA);

    if (ctl != null) {

        if (bHelpVisible == false) {

            ctl.style.display = 'block';
            bHelpVisible = true;
            sShowInfoParam = '&Info=Y'
        }
        else {

            ctl.style.display = 'none';
            bHelpVisible = false;
            sShowInfoParam = '';
        }

    }

}

function doResize() {

    if ((m_ctlTreeView != null) && (m_ctlContent != null) && (m_ctlTrailer != null)) {

        /*
        var sMsg = '';

            sMsg = sMsg + 'ctlTreeView.style.height=' + ctlTreeView.style.height + '\n';
        sMsg = sMsg + 'ctlContent.style.height=' + ctlContent.style.height + '\n';
        */
        var iPageHeight;

        if (document.all)
            iPageHeight = document.body.offsetHeight - 25;
        else
            iPageHeight = window.innerHeight - 35;

        var iTopContent = getAbsoluteTop(m_ctlContent);
        var iTopTreeView = getAbsoluteTop(m_ctlTreeView);
        var iTrailerHeight = m_ctlTrailer.offsetHeight;

        var iHeightContent = iPageHeight - (iTopContent + iTrailerHeight);
        var iHeightTree = iPageHeight - (iTopTreeView + iTrailerHeight);

        if (iHeightContent < 100)
            iHeightContent = 100;

        if (iHeightTree < 100)
            iHeightTree = 100;

        m_ctlTreeView.style.height = iHeightTree.toString() + 'px';
        m_ctlContent.style.height = iHeightContent.toString() + 'px';

        /*
        sMsg = sMsg + 'iPageHeight=' + iPageHeight.toString() + "\n";
        sMsg = sMsg + 'iTopContent=' + iTopContent.toString() + "\n";
        sMsg = sMsg + 'iTopTreeView=' + iTopTreeView.toString() + "\n";
        sMsg = sMsg + 'iHeightContent=' + iHeightContent.toString() + "\n";
        sMsg = sMsg + 'iHeightTree=' + iHeightTree.toString() + "\n";
        sMsg = sMsg + 'ctlTreeView.style.height=' + ctlTreeView.style.height + '\n';
        sMsg = sMsg + 'ctlContent.style.height=' + ctlContent.style.height + '\n';

            alert(sMsg);
        */
    }
        
    return true;
}

function getCheckboxSelectedCount(sChkNameA) {

    var iSelCount = 0;

    // Find the checkboxes
    var chk = document.getElementsByName(sChkNameA);

    // Found them?
    if ((chk != null) && (chk.length > 0)) {
    
        // Yes - count how many are selected
        for (i = 0; i < chk.length; i++) {

            if (chk[i].checked == true)
                iSelCount++;
        }
    }

    return iSelCount;
}

// Regular Expression Validator
function Match() 
{
    this.Text = null;
    this.Groups = new Array();
}

function ExtractMatches(oRegExA, sFieldValueA) 
{
    var results = new Array();
    var arr = oRegExA.exec(sFieldValueA);

    while (arr != null) 
    {    
        var match = new Match();
        match.Text = arr[0];

        for (var i = 1; i < arr.length; i++) 
        {
            match.Groups[i - 1] = arr[i];
        }

        results[results.length] = match;
        
        arr = oRegExA.exec(sFieldValueA);
    }
    
    return results;
}

function CheckRegex(sFieldNameA, sPatternA, sErrorMsgA) 
{
    if (sPatternA.length == 0) 
    {
        alert("You must enter a pattern to use.");
        return false;
    }

    var ctl = document.getElementById(sFieldNameA);

    if (ctl == null) 
        return true;

    var sFieldValue = trimString(ctl.value);

    if (sFieldValue.length == 0) 
    {
        unhighlightField(ctl);
        return true;
    }
        
    var matches = ExtractMatches(new RegExp(sPatternA, "g"), sFieldValue);

    if (matches.length > 0) 
    {
        unhighlightField(ctl);
        return true;
    }

    if (sErrorMsgA.length > 0) 
    {            
        highlightField(ctl);

        AddError(sErrorMsgA);
    }

    return false;
}
