﻿
function SetDepartureVoyage(checkbox, voyageID) {
    if (checkbox.checked) {
        document.getElementById(hdnDepartureVoyageID).value = voyageID;
    }
    return true;
}
function SetReturnVoyage(checkbox, voyageID) {
    if (checkbox.checked) {
        document.getElementById(hdnReturnVoyageID).value = voyageID;
    }
    return true;
}

function ShowAvailabilityDiv(divID, dayDiv) {
    // departure or return calendar clicked?
    var departOrReturn = divID.substring(0, 6);

    // Un-highlight previously selected day, if applicable
    var selectedDayHiddenField;
    var previouslySelectedDayDiv;
    switch (departOrReturn) {
        case "depart":
            selectedDayHiddenField = document.getElementById(hdnDepartureSelectedDay);
            if (selectedDayHiddenField && selectedDayHiddenField.value) {
                previouslySelectedDayDiv = document.getElementById(selectedDayHiddenField.value);
            }
            break;
        case "return":
            selectedDayHiddenField = document.getElementById(hdnReturnSelectedDay);
            if (selectedDayHiddenField && selectedDayHiddenField.value) {
                previouslySelectedDayDiv = document.getElementById(selectedDayHiddenField.value);
            }
            break;
        default:
            selectedDayHiddenField = null;
            previouslySelectedDayDiv = null;
    }
    if (previouslySelectedDayDiv) {
        var existingClass = previouslySelectedDayDiv.className;
        if (existingClass) {
            var newClass = existingClass.substring(0, existingClass.indexOf(' calSelected'));
            previouslySelectedDayDiv.className = newClass;
        }
    }
    
    // Highlight newly selected day, and store its ID in hidden field.
    dayDiv.className += ' calSelected';
    selectedDayHiddenField.value = dayDiv.id;

    // Show new availability div    
    var availabilityDiv = document.getElementById(divID);
    var parentDiv = availabilityDiv.parentNode;
    var children = parentDiv.childNodes;
    for (i = 0; i < children.length; i++) {
        if (children[i].tagName) {
            var tag = children[i].tagName.toLowerCase();
            if (tag == 'div') {
                children[i].style.display = 'none';
            }
        }
    }
    availabilityDiv.style.display = 'block';
    
    // Clear radio button and hidden field value for previously selected voyage, if switching to a new availability div
    var hdnDiv;
    var hdnField;
    switch (departOrReturn) {
        case "depart":
            if (hdnVisibleDepartureDiv) {
                hdnDiv = document.getElementById(hdnVisibleDepartureDiv);
                hdnField = document.getElementById(hdnDepartureVoyageID);
            }
            break;
        case "return":
            if (hdnVisibleReturnDiv) {
                hdnDiv = document.getElementById(hdnVisibleReturnDiv);
                hdnField = document.getElementById(hdnReturnVoyageID);
            }
            break;
        default:
            hdnDiv = null;
    }
    if (hdnDiv) {
        if (hdnDiv.value != divID) {
            var divToClear;
            if (hdnDiv.value) {
                divToClear = document.getElementById(hdnDiv.value);
            }
            hdnDiv.value = divID;
            if (divToClear) {
                hdnField.value = '';
                return clearRadios(divToClear);
            } else {
                return true;
            }
        }
    }
    return false;
}

function clearRadios(div) {
    if (div) {
        var tbody = div.childNodes[0].childNodes[1]; // FF, Safari, Opera, Chrome
        if (!tbody) {
            tbody = div.childNodes[0].childNodes[0]; // IE
        }
        for (i = 0; i < tbody.childNodes.length; i++) {
            if (tbody.childNodes[i].tagName && tbody.childNodes[i].tagName.toLowerCase() == 'tr') {
                var tr = tbody.childNodes[i];
                for (j = 0; j < tr.childNodes.length; j++) {
                    if (tr.childNodes[j].tagName && tr.childNodes[j].tagName.toLowerCase() == 'td') {
                        var td = tr.childNodes[j];
                        var radio = td.childNodes[0];
                        if (radio && radio.tagName && radio.tagName.toLowerCase() == 'input') {
                            radio.checked = false;
                        }
                    }
                }
            }
        }
    }
    return true;
}

function departureVoyageSelected(sender, args) {
    args.IsValid = document.getElementById(hdnDepartureVoyageID).value != '';
}

function validateReturnAfterDeparture(sender, args) {
    var departID = document.getElementById(hdnDepartureVoyageID).value;
    var returnID = document.getElementById(hdnReturnVoyageID).value;
    if (returnID == '' || returnID == '0') {
        args.IsValid = true;
    } else {
        var departDate = htVoyageTimes[departID];
        var returnDate = htVoyageTimes[returnID];
        args.IsValid = departDate < returnDate;
    }
}
