﻿

        /* state = 1 - show element
        state = 0 - hide element
        */
        function toggleDiv(divID, state) {
            if (document.layers) { //netscape 4+

                document.layers[divID].visibility = state ? "show" : "hide";
                document.layers[divID].display = state ? "block" : "none";

            } else if (document.getElementById) { //netscape 6 internetExplorer 5+

                document.getElementById(divID).style.visibility = state ? "visible" : "hidden";
                document.getElementById(divID).style.display = state ? "block" : "none";

            } else {    //Internet Explorer 4

                document.all[divID].style.visibility = state ? "visible" : "hidden";
                document.all[divID].style.display = state ? "block" : "none";

            }
        }

        function isBrowserSupp() {
            // Get the version of the browser
            version = parseFloat(navigator.appVersion);

            if ((version >= 2.0) && (version < 2.1) && (navigator.appName.indexOf("Netscape") != -1)) {
                return false;
            } else {
                return true;
            }

            return true;
        }

        function isLeapYear(yrStr) {
            var leapYear = false;
            var year = parseInt(yrStr, 10);
            // every fourth year is a leap year
            if (year % 4 == 0) {
                leapYear = true;
                // unless it's a multiple of 100
                if (year % 100 == 0) {
                    leapYear = false;
                    // unless it's a multiple of 400
                    if (year % 400 == 0) {
                        leapYear = true;
                    }
                }
            }
            return leapYear;
        }

        function getDaysInMonth(mthIdx, YrStr) {
            // all the rest have 31
            var maxDays = 31
            // expect Feb. (of course)
            if (mthIdx == 1) {
                if (isLeapYear(YrStr)) {
                    maxDays = 29;
                } else {
                    maxDays = 28;
                }
            }

            // thirty days hath...
            if (mthIdx == 3 || mthIdx == 5 || mthIdx == 8 || mthIdx == 10) {
                maxDays = 30;
            }
            return maxDays;
        }

        function displayHotel() {
            toggleDiv('hotelTable', 1);
            toggleDiv('carTable', 0);
            toggleDiv('flightTable', 0);
            toggleDiv('cruiseTable', 0);

            document.getElementById('air').checked = false;
            document.getElementById('car').checked = false;
            document.getElementById('hotel').checked = true;
            document.getElementById('cruise').checked = false;
        }

        function displayCar() {
            toggleDiv('hotelTable', 0);
            toggleDiv('carTable', 1);
            toggleDiv('flightTable', 0);
            toggleDiv('cruiseTable', 0);

            document.getElementById('air').checked = false;
            document.getElementById('car').checked = true;
            document.getElementById('hotel').checked = false;
            document.getElementById('cruise').checked = false;
        }

        function displayCruise() {
            toggleDiv('hotelTable', 0);
            toggleDiv('carTable', 0);
            toggleDiv('flightTable', 0);
            toggleDiv('cruiseTable', 1);

            document.getElementById('air').checked = false;
            document.getElementById('car').checked = false;
            document.getElementById('hotel').checked = false;
            document.getElementById('cruise').checked = true;
        }

        function displayFlight() {
            toggleDiv('hotelTable', 0);
            toggleDiv('carTable', 0);
            toggleDiv('flightTable', 1);
            toggleDiv('cruiseTable', 0);

            document.getElementById('air').checked = true;
            document.getElementById('car').checked = false;
            document.getElementById('hotel').checked = false;
            document.getElementById('cruise').checked = false;
        }

        //the function which does some magic to the date fields
        // return non-zero if it is the last day of the month
        function adjustDate(mthIdx, Dt) {
            var value = 0;

            var today = new Date()
            var theYear = parseInt(today.getYear(), 10)

            if (mthIdx < today.getMonth()) {
                theYear = (parseInt(today.getYear(), 10) + 1)
            }
            if (theYear < 100) {
                theYear = "19" + theYear
            } else {
                if ((theYear - 100) < 10) {
                    theYear = "0" + (theYear - 100)
                } else {
                    theYear = (theYear - 100) + ""
                }
                theYear = "20" + theYear
            }


            var numDays = getDaysInMonth(mthIdx, theYear);

            if (mthIdx == 1) {
                if (Dt.options.selectedIndex + 1 < numDays) {
                    return 0;
                } else {
                    Dt.options.selectedIndex = numDays - 1;
                    //check for leap year
                    if (numDays == 29) {
                        return 99;
                    } else {
                        return 1;
                    }
                }
            }

            if (Dt.options.selectedIndex + 1 < numDays) {
                value = 0;
            } else {
                if (Dt.options.selectedIndex + 1 > numDays) {
                    Dt.options.selectedIndex--;
                    value = 3;
                } else {
                    //index is 31 or 30
                    value = 2;
                }
            }
            return value;
        }

        //changes departure month when arrival month is changed
        function amadChange(inM, inD, outM, outD) {
            if (!isBrowserSupp()) {
                return;
            }

            var res = adjustDate(inM.options.selectedIndex, inD);
            if (res != 0) {
                outD.options.selectedIndex = 0;
                if (outM.options.selectedIndex == 11) {
                    outM.options.selectedIndex = 0
                } else {
                    outM.options.selectedIndex = inM.options.selectedIndex + 1;
                    outD.options.selectedIndex = 1;
                }
            } else {
                outM.options.selectedIndex = inM.options.selectedIndex;
                if (outD.options.selectedIndex <= inD.options.selectedIndex) {
                    outD.options.selectedIndex = inD.options.selectedIndex + 2;
                }
            }
            return;
        }


        function dmddChange(outM, outD) {
            if (!isBrowserSupp()) {
                return;
            }

            adjustDate(outM.options.selectedIndex, outD);
            return;
        }



        function OpenWindow(file, name, width, height) {
            OpenWindow(file, name, width, height, false);
        }

        function OpenWindow(file, name, width, height, showLeftTopScrollbar) {
            var attr = "";
            if (showLeftTopScrollbar) {
                attr += "top=50,left=50,scrollbars=1,";
            }
            attr += "width=" + width + ",height=" + height + ",resizeable=1";
            window.open(file, name, attr);
        }

        function loadDefaultDates() {
            var airArrival = new Date();
            var airDeparture = new Date();
            var carArrival = new Date();
            var carDeparture = new Date();
            var hotelArrival = new Date();
            var hotelDeparture = new Date();

            var hotelAdvanceArrival = 21;
            var hotelAdvanceDeparture = 23;
            var carAdvanceArrival = 7;
            var carAdvanceDeparture = 8;
            var airAdvanceArrival = 14;
            var airAdvanceDeparture = 15;

            airArrival.setDate(airArrival.getDate() + airAdvanceArrival);
            airDeparture.setDate(airDeparture.getDate() + airAdvanceDeparture);
            carArrival.setDate(carArrival.getDate() + carAdvanceArrival);
            carDeparture.setDate(carDeparture.getDate() + carAdvanceDeparture);
            hotelArrival.setDate(hotelArrival.getDate() + hotelAdvanceArrival);
            hotelDeparture.setDate(hotelDeparture.getDate() + hotelAdvanceDeparture);

            document.forms['airForm'].departureMonth.value = airArrival.getMonth();
            document.forms['airForm'].returnMonth.value = airDeparture.getMonth();
            document.forms['airForm'].departureDay.value = airArrival.getDate();
            document.forms['airForm'].returnDay.value = airDeparture.getDate();

            document.forms['carForm'].pickUpMonth.value = carArrival.getMonth();
            document.forms['carForm'].dropOffMonth.value = carDeparture.getMonth();
            document.forms['carForm'].pickUpDay.value = carArrival.getDate();
            document.forms['carForm'].dropOffDay.value = carDeparture.getDate();

            document.forms['hotForm'].arrivalMonth.value = hotelArrival.getMonth();
            document.forms['hotForm'].departureMonth.value = hotelDeparture.getMonth();
            document.forms['hotForm'].arrivalDay.value = hotelArrival.getDate();
            document.forms['hotForm'].departureDay.value = hotelDeparture.getDate();

        }

        function validateDepWindow(formName) {
            if (document.forms[formName].tempDepTime[document.forms[formName].tempDepTime.selectedIndex].value == ('M')) {
                window.document.forms[formName].tripWindow.value = '5';
                window.document.forms[formName].departureTime.value = '7AM';
            } else if (document.forms[formName].tempDepTime[document.forms[formName].tempDepTime.selectedIndex].value == ('A')) {
                window.document.forms[formName].tripWindow.value = '5';
                window.document.forms[formName].departureTime.value = '3PM';
            } else if (document.forms[formName].tempDepTime[document.forms[formName].tempDepTime.selectedIndex].value == ('E')) {
                window.document.forms[formName].tripWindow.value = '5';
                window.document.forms[formName].departureTime.value = '8PM';
            } else if (document.forms[formName].tempDepTime[document.forms[formName].tempDepTime.selectedIndex].value == ('ANT')) {
                window.document.forms[formName].tripWindow.value = '9';
                window.document.forms[formName].departureTime.value = '12PM';
            } else {
                window.document.forms[formName].tripWindow.value = '5';
                window.document.forms[formName].departureTime.value = document.forms[formName].tempDepTime.value;
            }
        }

        function validateRetWindow(formName) {
            if (document.forms[formName].tempRetTime[document.forms[formName].tempRetTime.selectedIndex].value == ('M')) {
                window.document.forms[formName].returnTime.value = '7AM';
            } else if (document.forms[formName].tempRetTime[document.forms[formName].tempRetTime.selectedIndex].value == ('A')) {
                window.document.forms[formName].returnTime.value = '3PM';
            } else if (document.forms[formName].tempRetTime[document.forms[formName].tempRetTime.selectedIndex].value == ('E')) {
                window.document.forms[formName].returnTime.value = '8PM';
            } else if (document.forms[formName].tempRetTime[document.forms[formName].tempRetTime.selectedIndex].value == ('ANT')) {
                window.document.forms[formName].returnTime.value = '12PM';
            } else {
                window.document.forms[formName].returnTime.value = window.document.forms[formName].tempRetTime.value;
            }
        }




        function update(themonth, theday) {
            document.forms[fName].elements[formType + 'Day'].options[theday - 1].selected = true;
            document.forms[fName].elements[formType + 'Month'].options[themonth].selected = true;

            testWindow.close();
        }


        function loadCalendar(viewMonth) {


            testWindow.document.close();
            testWindow.document.open();


            var day_of_week = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
            var month_of_year = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

            var dateObj = new Date();
            var year = dateObj.getYear();  // Returns year
            var month = dateObj.getMonth();  // Returns month (0-11)
            var today = dateObj.getDate();   // Returns day (1-31)
            var weekday = dateObj.getDay();  // Returns day (1-31)

            var DAYS_OF_WEEK = 7;   // "constant" for number of days in a week
            var DAYS_OF_MONTH = 31; // "constant" for number of days in a month
            var cal;                // Used for printing

            if (viewMonth < month) {
                year = year + 1;
            }

            if (year < 1900) {
                year += 1900; //done to solve the problem of netscape and mozilla returning year in form 10X for years > 2000
            }

            month = viewMonth;
            dateObj.setDate(1);      // Start the calendar day at '1'
            dateObj.setMonth(month); // Start the calendar month at now
            dateObj.setYear((year));

            // VARIABLES FOR FORMATTING
            var TR_start = '<TR>';
            var TR_end = '</TR>';
            var highlight_start = '<TD WIDTH="30"><TABLE CELLSPACING=0 BORDER=1 BGCOLOR=DEDEFF BORDERCOLOR=CCCCCC><TR><TD WIDTH=20><B><CENTER>';
            var highlight_end = '</CENTER></TD></TR></TABLE></B>';
            var TD_start = '<TD WIDTH="30"><CENTER>';
            var TD_end = '</CENTER></TD>';
            var prevM = month - 1;
            var nextM = month + 1;

            if (nextM == 12) {
                nextM = 0;
            }

            if (prevM == -1) {
                prevM = 11;
            }

            // BEGIN CODE FOR CALENDAR
            cal = '<html><head><title>Calendar</title></head><body>';
            cal += "<style>a:link{cursor: hand}a:active{cursor: hand}a:hover{cursor: hand}a:visited{cursor: hand}body{cursor: default}</style>";

            cal += '<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0" BORDERCOLOR="BBBBBB" width="100%" height="200"><TR><TD>';
            cal += '<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2" width="100%">' + TR_start;
            cal += '<TD COLSPAN="' + DAYS_OF_WEEK + '" BGCOLOR="#EFEFEF"><CENTER><B>';
            cal += month_of_year[month] + '   ' + year + '</B>' + TD_end + TR_end;
            cal += TR_start;

            ///////////////////////////////////
            // DO NOT EDIT BELOW THIS POINT  //
            ///////////////////////////////////

            // LOOPS FOR EACH DAY OF WEEK
            for (index = 0; index < DAYS_OF_WEEK; index++) {
                // PRINTS DAY
                cal += TD_start + day_of_week[index] + TD_end;
            }

            cal += TD_end + TR_end;
            cal += TR_start;

            // FILL IN BLANK GAPS UNTIL TODAY'S DAY
            for (index = 0; index < dateObj.getDay(); index++) {
                cal += TD_start + '  ' + TD_end;
            }

            // LOOPS FOR EACH DAY IN CALENDAR
            for (index = 0; index < DAYS_OF_MONTH; index++) {
                if (dateObj.getDate() > index) {
                    // RETURNS THE NEXT DAY TO PRINT
                    week_day = dateObj.getDay();

                    // START NEW ROW FOR FIRST DAY OF WEEK
                    if (week_day == 0) {
                        cal += TR_start;
                    }

                    if (week_day != DAYS_OF_WEEK) {
                        // SET VARIABLE INSIDE LOOP FOR INCREMENTING PURPOSES
                        var day = dateObj.getDate();

                        // PRINTS DAY
                        cal += TD_start + "<span onclick='window.opener.update(" + month + "," + day + ")' style='cursor:hand;font-weight:bold;background:#EFEFEF;width:22px;'>" + day + "</span>" + TD_end;
                    }

                    // END ROW FOR LAST DAY OF WEEK
                    if (week_day == DAYS_OF_WEEK) {
                        cal += TR_end;
                    }
                }

                // INCREMENTS UNTIL END OF THE MONTH
                dateObj.setDate(dateObj.getDate() + 1);

            } // end for loop

            cal += '</td></TR></TABLE></TABLE><br>';
            cal += '<div align="center"><a href="javascript:" onClick="window.opener.loadCalendar(' + prevM + ');"><<</a>    ';
            cal += '<a href="javascript:" onClick="window.opener.loadCalendar(' + nextM + ');">>></a><br><br></div>';
            cal += '<div align="right"><a href="javascript:window.close();">close</a></div>';
            cal += '</body></html>';

            //  PRINT CALENDAR
            testWindow.document.write(cal);
        }

        var testWindow;
        var formType;
        var fName;

        function openCalendar(formName, type) {
            formType = type;
            fName = formName;
            testWindow = window.open('', 'dates', 'width=360,height=300,resizable=1,status=1,menubar=0,location=0');
            loadCalendar(document.forms[fName].elements[formType + 'Month'].selectedIndex);
        }




        function groups(form) {
            if (form.numberOfRooms.selectedIndex == 8) {
                window.location = "http://travel.ian.com/index.jsp?pageName=groups&cid=315619";
                return false;
            }
            return submitGuestInfoForm(form);
        }




        // NOTE: customize variables in this javascript block as appropriate.
        var defaultAdults = "2";
        var cellStyle = " class='index-text'";
        var childHelp = "Please provide the ages of children in each room. Children's ages should be their age at the time of travel.";
        var adultHelp = "";
        var textRooms = "Rooms:";
        var textAdults = "Adults: (age 19+)";
        var textChildren = "Children: (0-18)";
        var textChildError = "Please specify the ages of all children.";
        var pad = '<img src="http://travel.ian.com/images/p.gif" width="5" height="1">';
        // NOTE: Question marks ("?") get replaced with a numeric value
        var textRoomX = "Room ?:";
        var textChildX = "Child ?:";





        var adultsPerRoom = new Array(defaultAdults);
        var childrenPerRoom = new Array();
        var childAgesPerRoom = new Array();
        var numRooms = 1;
        var maxChildren = 0;

        refresh();

        function setChildAge(room, child, age) {
            if (childAgesPerRoom[room] == null) {
                childAgesPerRoom[room] = new Array();
            }
            childAgesPerRoom[room][child] = age;
        }

        function setNumAdults(room, numAdults) {
            adultsPerRoom[room] = numAdults;
        }

        function setNumChildren(room, numChildren) {
            childrenPerRoom[room] = numChildren;
            refresh();
        }

        function setNumRooms(x) {
            numRooms = x;
            for (i = 0; i < x; i++) {
                if (adultsPerRoom[i] == null) {
                    adultsPerRoom[i] = 2;
                }
                if (childrenPerRoom[i] == null) {
                    childrenPerRoom[i] = 0;
                }
            }
            refresh();
        }

        function renderRoomSelect() {
            var x = '';
            x += '<select name="numberOfRooms" onchange="setNumRooms(this.options[this.selectedIndex].value);">';
            for (var i = 1; i < 9; i++) {
                x += '<option value="' + i + '"' + (numRooms == i ? ' selected' : '') + '>' + i;
            }
            x += '<option value="9"' + (numRooms == 9 ? ' selected' : '') + '>9+';
            x += '</select>';
            return x;
        }

        function refresh() {
            maxChildren = 0;
            for (var i = 0; i < numRooms; i++) {
                if (childrenPerRoom[i] > maxChildren) {
                    maxChildren = childrenPerRoom[i];
                }
            }

            var x = '';
            if (adultHelp.length > 0) {
                x = adultHelp + "<p>\n";
            }

            if (numRooms > 8) {
                x += textRooms;
                x += renderRoomSelect();

            } else {
                x += '<table border="0" cellspacing="2" cellpadding="0">\n';
                x += '<tr><td' + cellStyle + '>' + textRooms + pad + '</td>';
                if (numRooms > 1) {
                    x += '<td' + cellStyle + '> </td>';
                }
                x += '<td' + cellStyle + '><nobr>' + textAdults + pad + '</nobr></td><td' + cellStyle + '><nobr>' + textChildren + pad + '</nobr></td></tr>\n';
                for (var i = 0; i < numRooms; i++) {
                    x += '<tr><td' + cellStyle + '>';
                    if (i == 0) {
                        x += renderRoomSelect();
                    } else {
                        x += ' ';
                    }
                    x += '</td>';
                    if (numRooms > 1) {
                        x += '<td' + cellStyle + '><nobr>' + getValue(textRoomX, i + 1) + pad + '</nobr></td>';
                    }
                    x += '<td' + cellStyle + '>';
                    x += buildSelect('room-' + i + '-adult-total', 'setNumAdults(' + i + ', this.options[this.selectedIndex].value)', 1, 4, adultsPerRoom[i]);
                    x += '</td><td' + cellStyle + '>';
                    x += buildSelect('room-' + i + '-child-total', 'setNumChildren(' + i + ', this.options[this.selectedIndex].value)', 0, 6, childrenPerRoom[i]);
                    x += '</td></tr>\n';
                }
                x += '</table>\n';

                var didHeader = false;
                for (var i = 0; i < numRooms; i++) {
                    if (childrenPerRoom[i] > 0) {
                        if (!didHeader) {
                            x += '<table border="0" cellpadding="0" cellspacing="2">\n';
                            x += '<tr><td' + cellStyle + ' colspan="' + (maxChildren + 1) + '">';
                            x += '<img src="/images/p.gif" width="1" height="5"><br>';
                            x += childHelp;
                            x += '<img src="/images/p.gif" width="1" height="5"><br>';
                            x += '</td></tr>\n<tr><td' + cellStyle + '> </td>';
                            for (var j = 0; j < maxChildren; j++) {
                                x += '<td' + cellStyle + '><nobr>' + getValue(textChildX, j + 1) + pad + '</nobr></td>\n';
                            }
                            didHeader = true;
                        }
                        x += '</tr>\n<tr><td' + cellStyle + '><nobr>' + getValue(textRoomX, i + 1) + pad + '</nobr></td>';
                        for (var j = 0; j < childrenPerRoom[i]; j++) {
                            x += '<td' + cellStyle + '>';
                            var def = -1;
                            if (childAgesPerRoom[i] != null) {
                                if (childAgesPerRoom[i][j] != null) {
                                    def = childAgesPerRoom[i][j];
                                }
                            }
                            x += '<select name="room-' + i + '-child-' + j + '-age" onchange="setChildAge(' + i + ', ' + j + ', this.options[this.selectedIndex].value);">';
                            x += '<option value="-1"' + (def == -1 ? ' selected' : '') + '>-?-';
                            x += '<option value="0"' + (def == 0 ? ' selected' : '') + '><1';
                            for (var k = 1; k <= 18; k++) {
                                x += '<option value="' + k + '"' + (def == k ? ' selected' : '') + '>' + k;
                            }
                            x += '</td>';
                        }
                        if (childrenPerRoom[i] < maxChildren) {
                            for (var j = childrenPerRoom[i]; j < maxChildren; j++) {
                                x += '<td' + cellStyle + '> </td>';
                            }
                        }
                        x += '</tr>\n';
                    }
                }
                if (didHeader) {
                    x += '</table>\n';
                }
            }

            document.getElementById("hot-search-params").innerHTML = x;
        }

        function buildSelect(name, onchange, min, max, selected) {
            var x = '<select name="' + name + '"';
            if (onchange != null) {
                x += ' onchange="' + onchange + '"';
            }
            x += '>\n';
            for (var i = min; i <= max; i++) {
                x += '<option value="' + i + '"';
                if (i == selected) {
                    x += ' selected';
                }

                x += '>' + i + '\n';
            }
            x += '</select>';
            return x;
        }

        function validateGuests(form) {
            if (numRooms < 9) {
                var missingAge = false;
                for (var i = 0; i < numRooms; i++) {
                    var numChildren = childrenPerRoom[i];
                    if (numChildren != null && numChildren > 0) {
                        for (var j = 0; j < numChildren; j++) {
                            if (childAgesPerRoom[i] == null || childAgesPerRoom[i][j] == null || childAgesPerRoom[i][j] == -1) {
                                missingAge = true;
                            }
                        }
                    }
                }

                if (missingAge) {
                    alert(textChildError);
                    return false;
                } else {
                    return true;
                }
            } else {
                return true;
            }
        }

        function submitGuestInfoForm(form) {
            if (!validateGuests(form)) {
                return false;
            }
            return true;
        }

        function getValue(str, val) {
            return str.replace(/\?/g, val);
        }

   
