//-----------------------------------------
//       Event Handlers / Functions
//-----------------------------------------

function getDealCheckbox(index) {
    if (dealsExist()) {
        if (aryDealRates.length > 1) {
            return document.mybooking.selectedDeal[index];
        } else {
            return document.mybooking.selectedDeal;
        }
    }
}
function getDealRoomsSelect(index) {
    if (dealsExist()) {
        if (aryDealRates.length > 1) {
            return document.mybooking.rooms[index];
        } else {
            return document.mybooking.rooms;
        }
    }
}

function changeCheckbox(index) {
    if (getDealCheckbox(index).checked) {
        getDealRoomsSelect(index).selectedIndex = 1;
    } else {
        getDealRoomsSelect(index).selectedIndex = 0;
    }
    refreshDisplay();
    return true;
}
function changeSelect(index) {
    if (getDealRoomsSelect(index).selectedIndex > 0) {
        getDealCheckbox(index).checked = true;
    } else {
        getDealCheckbox(index).checked = false;
    }
    refreshDisplay();
    return true;
}


function roundDollar (Val) {
    // fix for MAC IE 5.2 rounding nastiness
    Dollar = Math.floor(Val)
    Val = "" + Math.round(Val * 100)
    Decimal = Val.substring (Val.length-2, Val.length)
    return (Dollar + "." + Decimal);
}


function updateTotals() {
    // generate the total from the mybooking fields
    var total = 0;
    var subtotal = 0;
    var totalRooms = 0;

    // check each deal that may be selected
    if (aryDealRates) {
        for (var i = 0; i < aryDealRates.length; i++) {
            var element = getDealRoomsSelect(i);
            if (typeof(element) != "undefined") {
                if (element && element.selectedIndex > 0) {
                    totalRooms = totalRooms + element.selectedIndex;
                    subtotal = subtotal +  element.selectedIndex * aryDealRates[i];
                }
            }
        }
    }
    
    if (totalRooms == 0) { 
        bookFee = 0; bookingFeeGST = 0; 
    }

    if (subtotal > 0) {
        total = roundDollar(subtotal + getBookingFeeAmount());
    } else {
        total = 0;
    }

    if (dealsExist()) {
        // update the form fields
        document.mybooking.subTotal.value = subtotal;
        document.mybooking.total.value = total;

        // update the display sections
        document.mybooking.totalDisplay.value = total;
        //document.mybooking.subTotalDisplay.value = subtotal;
        //document.mybooking.bookingFeeDisplay.value = getBookingFeeAmount();
    }
    return true;
}

function updateDateCells() {
    if (dealsExist()) {
        for (var i = 0; i < aryDealRates.length; i++) {
            updateDateCell(i);
        }
    }
}

function updateDateCell(index) {
    var dealCheckbox = getDealCheckbox(index);
    var dealDateText = document.getElementById("dateCell" + index);
    if (dealDateText && dealDateText.style) {
        if (dealCheckbox.checked) {
            dealDateText.style.color = "#009900";
            dealDateText.style.fontWeight = "bold";
        } else {
            dealDateText.style.color = "black";
            dealDateText.style.fontWeight = "normal";
        }
    }
}

function dealsExist() {
    return aryDealRates.length > 0;
}

function extraGuests() {
    var count;
    var selectedMaxNumRooms;
    var maxNumRooms;
    var dealObj, dealValue;
    var dealSize = 0;
    if (dealsExist()) {
        dealSize = aryDealRates.length;
    }
    var i;

    selectedMaxNumRooms = 0;
    maxNumRooms = 0;
    
    // Determine highest number of rooms selected, and the maximum possible.
    if (dealSize > 1) {
        // If there is more than 1 deal, we have an array of "rooms" elements.
        for (i=0; i < document.mybooking.rooms.length; i++) {
            dealObj = document.mybooking.rooms[i];
            dealValue = dealObj.options[dealObj.selectedIndex].value;
            if (dealValue != '') {
                dealValue = Number(dealValue);
                if (selectedMaxNumRooms < dealValue) {
                  selectedMaxNumRooms = dealValue;
                }
            }
            val = Number(dealObj.length - 1);
            if ( val > maxNumRooms) {
                maxNumRooms = val;
            }
        }
    } else if (dealSize == 1) {
        // We have only 1 "rooms" element.
        dealObj = document.mybooking.rooms;
        selectedMaxNumRooms = dealObj.options[dealObj.selectedIndex].value;
        maxNumRooms = Number(dealObj.length - 1);
    } // otherwise no deals

    // Work out how many additional fields to display.
    var additionalFieldsToDisplay = 0;
    if (selectedMaxNumRooms > 1) {
        additionalFieldsToDisplay = selectedMaxNumRooms - 1;
    }

    // Show all the required extra guests fields
    for (count=0; count < additionalFieldsToDisplay; count++) {
        showLabel(document.getElementById("guest" + count));
    }
    // Hide the others (blanking any values);
    for (count = additionalFieldsToDisplay; count < maxNumRooms - 1; count++) {
        hideTableRow(document.getElementById("guest" + count));
        document.getElementById("additionalGuest" + count).value = '';
    }
}
