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;

function isNetscape() {
    //if (win.navigator.appName.toLowerCase().indexOf("netscape") > -1) 
    if (document.all) {
        return false;
    }
    else {
        return true;
    }
}

function blockInput(e) {
    return false;
}

function validateData(iMaxGuestsA, iUseFullDateDropdownA, 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", "Please enter the organiser's name."))
        gbSubmit = false;

    //************************************
    // Make sure group/office name entered
    //************************************

    if (!isFieldEntered("txtGroup", "Please enter the group/office name."))
        gbSubmit = false;

    //****************************************
    // Make sure contact email address entered
    //****************************************

    if (!isFieldEntered("txtEmail", "Please enter your e-mail address."))
        gbSubmit = false;

    else if (!validateEmail("txtEmail", "The e-mail address is not in a valid format."))
        gbSubmit = false;

    //*******************************************
    // Make sure contact telephone number entered
    //*******************************************

    if (!isFieldEntered("txtPhone", "Please enter a contact telephone number."))
        gbSubmit = false;

    //*******************************
    // Make sure booking date entered
    //*******************************

    if (!isFieldEntered("txtDateBookingDDMMYYYY", "Please select the date of the booking."))
        gbSubmit = false;

    //*******************************
    // Make sure booking time entered
    //*******************************

    if (!isFieldEntered("selTime", "Please select the time of the booking."))
        gbSubmit = false;

    //***************************
    // Make sure guest data is ok
    //***************************

    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("Please enter details for at least 1 guest.");

        highlightFieldByID("txtGuest1");
        bAllOK = false;
    }

    if (bUserSelectedSpecial == true) {
        if (!isFieldEntered("txtComments", "Please add description for the special(s) you have selected."))
            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("Please select at least 1 course for guest " + iGuestNumberA);

        highlightField(ctl);
    }
    // **********************************************
    // or if a course is selected but no name entered	
    // **********************************************
    else if ((bGuestNameEntered == false) && (bOptionSelected == true)) {
        AddError("Please enter the name of guest " + 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");

    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 = 'EntryValue';
            }
        }
    }

    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 = 'EntryValue';
            }
        }
    }

    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("The booking date cannot be in the past");
        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=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 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 isNetscape() {
    if (document.all) {
        return false;
    }
    else {
        return true;
    }
}

function getForm() {
    if (isNetscape()) {
        gfrm = document.forms["form1"];
    }
    else {
        gfrm = document.form1;
    }
}

function onSubmit() {

    getForm();

    if (gfrm != null)
        gfrm.submit();
    else
        alert("form not found");
}