/*
    Update Page
    -------------------------------------------------------------------------------*/
    function updatePage(){
    
        
        /* Update Dates (1)
        ---------------------------------------------------------------------------*/
        if((selection_end_julian - selection_start_julian) > MAX_STAY){
            if((selection_end_julian - selection_start_julian) > MAX_STAY_RESET){
                selection_start_julian          = selection_end_julian;
                selection_click                 = 'last';
            } else {
                smuggs_alert('For stay longer than 10 days, please contact our Vacation Planning Specialists at ' + $resoPhone + '.');
                selection_end_julian            = selection_start_julian;
                selection_click                 = 'first';
            }
        }


        if(!selection_start_julian || !selection_end_julian){
            if(!selection_adults){
                showLodging('reset');
                update_package();
                getSelectedPrice();
            }

        
            return false;
        }


        var rate_start                          = $('#C'+selection_start_julian).attr('rate');
        var rate_end                            = $('#C'+selection_end_julian).attr('rate');
        var season_start                        = RATE[rate_start].season;
        var season_end                          = RATE[rate_end].season;
        
        setSeason(RATE[rate_start].season);
        highlightDates();


        if(season_start != season_end){
            selection_start_julian              = ''; 
            selection_end_julian                = '';
            
            resetCalendar('dates');
            smuggs_alert('If you want to book a vacation across seasons, Please call us at '+ $resoPhone +'.');
            
            
            return false;
        }


        var display_date_str                    = '<sup>'+ selection_start_nice +'</sup> - <sup>'+ selection_end_nice +'</sup>';
        $suitcase_dates.html(display_date_str);


        if(selection_start_nice){
            $('#vacation_calendar h2').html('Arrival: <b>'+ selection_start_nice +'</b> Departure: <b>'+ selection_end_nice +'</b><a onclick="resetCalendar(); return false;" href="#">clear your search</a>');
        }
        

        
        /* Update Guests (2)
        ---------------------------------------------------------------------------*/
        if(selection_adults){
            var display_guest_str               = '<sup>'+selection_adults+' adults</sup>';
            if(selection_children               > 0){ display_guest_str += ', <sup>' + selection_children + ' kid(s) 3-17 yrs</sup>'; }
            if(selection_infants                > 0){ display_guest_str += ',<br/> <sup>' + selection_infants + ' kid(s) 0-2 yrs</sup>'; }
            
            $suitcase_guests.html(display_guest_str);
        } else {
            showLodging('reset');
            update_package();
            getSelectedPrice();
            
            
            return false;
        }


        var occupancy                           = parseInt(selection_adults) + parseInt(selection_children) + parseInt(selection_infants);
        
        if(occupancy > 0){
            $('#vacation_guests h2').html(occupancy+' guests');        
        } else {
            $('#vacation_guests h2').html('# guests');        
        }
     
        
        
        /* Update Lodging (3) & Update Package (4)
        ---------------------------------------------------------------------------*/
        if(!selected_package_id){
            $('.vacation_lodging_details').hide();
            $('a.vacation_lodging_details').hide();
        } else {
            $('.vacation_lodging_details').show();
            $('a.vacation_lodging_details').show();
        }
        
        if($('#package_inclusions').attr('class') != selection_season){
            $('#vacation_packages').load('/vacation-planner/includes/vacation_packages.inc.php');
        }
        
        
        selectRoom(selected_room);
        showLodging();
        update_package();

        
        
        /* Update Suitcase & Session
        ---------------------------------------------------------------------------*/
        refreshPricingDivs('updatePage');
        getSelectedPrice();
        saveToSession('updatePage');
            
        // if the correct package is not selected, then select it
        if ( $('[prefixx='+selected_package_prefix+']').attr('class') != 'package_selected' ) {
            $('.package_selected').removeClass('package_selected').addClass('package_title');
            $('[prefixx='+selected_package_prefix+']').addClass('package_selected');
        }
    }





/*
    Calendar Functions
    -------------------------------------------------------------------------------*/


    /* Calendar Coercion
    -------------------------------------------*/
    function calendarDayID(year,month,day){
        return 'DAY_' + year + '_' + month + '_' + day;
    }
    
    function calendarDate(year,month,day){
        if(month < 10){ month = '0' + month + ''; }
        if(day < 10){ day = '0' + day + ''; }
        
        
        return '' + year + '-' + month + '-' + day;
    }
    
    function julianDate(year,month,day){
        // returns #days since Jan 1, 1970
        var date                                = new Date(year, month, day);
        var days                                = Math.floor(date.getTime() / 86400000);
        
        
        return days;
    }
    
    function julianDateFromString(dateString){
        // returns #days since Jan 1, 1970
        var date                                = new Date(dateString);
        var days                                = Math.floor(date.getTime() / 86400000);
        
        if(days < 0){ days                     += 36525; }
        
        
        return days;
    }
    
    function addDaysToDate(year,month,day,offset) {
        // returns #days since Jan 1, 1970
        var Dte                                 = new Date(year,month,day);
        var newDte                              = new Date(Dte.getTime() + (offset*86400000));
        var Y                                   = newDte.getFullYear();
        var M                                   = newDte.getMonth();
        var D                                   = newDte.getDate();
        
        
        return calendarDate(Y,M,D);
    }

    function ymd2julian(y,m,d) {
        m                                      --;
        var date                                = new Date(y,m,d);
        var jsNow                               = Math.floor(date.getTime() / 1000 / (24*3600));
        
        
        return jsNow;
    }
    
    function julian2date(julian) {
        var date                                = new Date(julian * 1000 * 24 * 3600 + 12*3600*1000);
        var y                                   = date.getFullYear();
        var m                                   = date.getMonth() + 1;
        var d                                   = date.getDate();
        
        if(m < 10 ){ m = '0' + m; }
        if(d < 10 ){ d = '0' + d; }
        
        var dStr = y + '-' + m + '-' + d;
        
        
        return dStr;
    }
        
    function julian2nice(julian) {
        var date                                = new Date(julian * 1000 * 24 * 3600 + 12*3600*1000);
        var y                                   = date.getFullYear();
        var m                                   = date.getMonth() + 1;
        var d                                   = date.getDate();
        
        if(m < 10){ m = '0' + m; }
        if(d < 10){ d = '0' + d; }
        
        var dStr = m + '/' + d + '/' + y;
        
        
        return dStr;
    }
            
    
    
    /* Toggle Previous Month
    -------------------------------------------*/
    function prevMonth(){
        if(previous_month_button               == 'dead'){ return false; }
        previous_month_button                   = 'dead';
        
        
        current_month                          --;
        
        if(current_month                        < 1){
            current_month                       = (current_month + 12);
            current_year                       --;
        }
        
        
        last_year                               = current_year;
        last_month                              = current_month;
        
        
        $('#CAL_3').html($('#CAL_2').html());
        $('#CAL_2').html($('#CAL_1').html());
        $('#CAL_1').html($('#CAL_0').html());        
        $('#CAL_0').html('').load('/vacation-planner/includes/index.ajax.php?function=getCalendarHTML', { month : last_month, year : last_year }, function(e){ previous_month_button = 'active'; highlightDates(); });
    }
    
    
    /* Toggle Next Month
    -------------------------------------------*/
    function nextMonth(){
        if(next_month_button                   == 'dead'){ return false; }
        next_month_button                       = 'dead';
        
        current_month                          ++;
        
        if(current_month                        > 12){
            current_month                       = current_month - 12;
            current_year                       ++;
        }
        
        
        next_month                              = current_month + 3;
        next_year                               = current_year;
        
        if(next_month                           > 12){
            next_month                          = next_month - 12;
            next_year                          ++;
        }
        

        $('#CAL_0').html($('#CAL_1').html());
        $('#CAL_1').html($('#CAL_2').html());
        $('#CAL_2').html($('#CAL_3').html());
        $('#CAL_3').html('').load('/vacation-planner/includes/index.ajax.php?function=getCalendarHTML',{ month : next_month, year : next_year }, function(e){ next_month_button = 'active'; highlightDates(); });
    }
    
    
    
    /* Reset Calendar
    -------------------------------------------*/ 
    function resetCalendar(type){
        session_dirty                           = true;
        selection_click                         = 'first';
                                            
        selection_start_julian                  = '';
        selection_start_nice                    = '';
        selection_start                         = '';
        selection_end_julian                    = '';
        selection_end_nice                      = '';
        selection_end                           = '';
        selection_nights                        = '';
                                            
        
        $('#vacation_calendar h2').html('Select your vacation dates');
        resetDateHighlighting('reset');
        
        
        if(type                                != 'dates'){
            $('#vacation_guests h2').html('# guests');
            updateGuests('reset');
            resetGuestDetails(selection_adults,selection_children,selection_infants);
        }
        
        
        $('#vacation_lodging_details').hide();
        $('.book_now').hide();

        
        
        showLodging('reset');
        update_package();
        getSelectedPrice();
        saveToSession('resetCalendar');
        updatePage();
    }
    
    
    /* Reset Date Highlighting
    -------------------------------------------*/
    function resetDateHighlighting(type){
        if(type                                == 'reset'){
            $vacation_calendar.find('td.selected').removeClass('selected');
        } else if(selection_start_julian              != ''){
            for(var i=selection_start_julian; i<=selection_end_julian; i++){
                if($('#C'+i).length){ $('#C'+i).removeClass('selected'); }
            }
        }
    }
    
    
    /* Refresh Pricing (Based on Dates)
    -------------------------------------------*/
    function refreshPricingDivs(note){
        var $data                               = { selection_start : selection_start, selection_end : selection_end, selection_nights : selection_nights, note : note  };
        
        $.ajax({type:'POST', url:'/vacation-planner/includes/index.ajax.php?function=getPricingDivs', data:$data, success:function(jsCode){ eval(jsCode); getPricing(); }, async:false});
    }
    
    
    
    /* Select Date
    -------------------------------------------*/
    function selectDate(julian) {
        var availStr                            = $('#C'+julian).attr('avail');
        $resoPhone                              = '1-800-419-4615';


        if(availStr == '' || availStr == '000000000'){
            $('#reso_phone_display').html($resoPhone);
            $('#lodging_error_phone').html($resoPhone);
            $('#lodging_info_phone').html($resoPhone);
            
            resetCalendar('dates');
            smuggs_alert("<em>The specific date you selected is currently not available online.<br/><br/>Please try another date,<br/>or call </em><b>" + $resoPhone + "</b><em> for more information.</em>", 1);
        } else {
            resetDateHighlighting();
            $('#C'+julian).addClass('selected');
            session_dirty                       = true;
            
            if(selection_click                 == 'first'){
                selection_start_julian          = julian; 
                selection_end_julian            = julian; 
    
                selection_click                 = 'last';
            } else {
                if(julian < selection_start_julian){
                    selection_end_julian        = selection_start_julian; 
                    selection_start_julian      = julian; 
                } else {
                    selection_end_julian        = julian; 
                }
                
                selection_click                 = 'first';
            }
            
        
            var rate_start                      = $('#C'+selection_start_julian).attr('rate');
            setSeason(RATE[rate_start].season);

            
            var rangeOK                         = true;
            for(i=selection_start_julian; i<selection_end_julian; i++){
                var avail                       = $('#C'+i).attr('avail');
                avail.indexOf('1') == -1        ? rangeOK = false : '';
            }
            
            if(rangeOK == false){
                smuggs_alert("<em>The dates you selected include dates currently not available online.<br/><br/>Please try other dates,<br/>or call </em><b>" + $resoPhone + "</b><em> for more information.</em>",1);
                selection_start_julian          = julian; 
                selection_end_julian            = julian; 
            }
                                   
            selection_nights                    = selection_end_julian - selection_start_julian;
            selection_start_nice                = julian2nice(selection_start_julian);
            selection_start                     = julian2date(selection_start_julian);
            selection_end_nice                  = julian2nice(selection_end_julian);
            selection_end                       = julian2date(selection_end_julian);

            $('#C'+julian).removeClass('selected');
            
            
            updatePage();
        }
    }

    
    
    /* Highlight Dates
    -------------------------------------------*/
    function highlightDates(){
        $('#vacation_lodging_details').hide();
        selection_availability                  = '';
        
        for(var i=selection_start_julian; i<=selection_end_julian; i++){
            if($('#C'+i).length){
                $('#C'+i).addClass('selected');
                if(i != selection_end_julian){
                    avail                       = $('#C'+i).attr('avail');
                    selection_availability      = mergeAvail(selection_availability,avail);
                }
            }
        }
        
        selection_nights                        = (selection_end_julian - selection_start_julian);
    }
    
    
    
    /* Merge Availability
    -------------------------------------------*/
    function mergeAvail(A,B){
        if(A == ''){ return B; }
        
        var len                                 = A.length;
        if(B.length > len){ len = B.length; }
        
        
        var avail                               = '';
        for(var i=0; i<len; i++){
            if(A.charAt(i) == '1'              && B.charAt(i) == '1'){
                avail                          += '1';
            } else {
                avail                          += '0';
            }
        }
        
        
        return avail;
    }



    /* Set Season
    -------------------------------------------*/
    function setSeason(season,force){    
        if((season != selection_season) || force){
            selection_season                    = season;
            
            selected_package_id                 = '';
            selected_package_prefix             = '';
        
            session_dirty                       = true;
            saveToSession('setSeason');
        

            if($('#vacation_story').length      > 0){
                $('#vacation_story #story_promo').attr('season') != selection_season ? $('#story_promo').hide() : $('#story_promo').show();
                      
                if($story_titles.find('div.current').attr('season') != selection_season){
                    $story_titles.find('div.current').removeClass('current');
                    $story_titles.find('div h1').removeClass('current');
                    
                    $story_titles.find('div[season="'+selection_season+'"]').addClass('current');
                    $story_titles.find('div.current h1:first').addClass('current');
                }
                
                if($story_values.find('div.current').attr('season') != selection_season){
                    $story_values.find('div.current').removeClass('current');
                    $story_values.find('div img').removeClass('current');
                    $story_values.find('div object').removeClass('current');
                    
                    $story_values.find('div[season="'+selection_season+'"]').addClass('current');
                    $story_values.find('div.current :first-child').addClass('current');
                    
                    if($story_values.find('img.current').attr('url') != ''){            
                        var $video      = $story_values.find('img.current').attr('url');
                        var $image      = $story_values.find('img.current').attr('src');
                        var $video_id   = $story_values.find('img.current').attr('id');
                        
                        swfobject.embedSWF('/media/video_player.swf?video_path='+$video+'&image_path='+$image,$video_id,'300','225','8.0.0','/media/expressInstall.swf','',{'wmode':'transparent'},{'video_path':$video,'styleclass':'current'});
                    } 
                }
                
                if($story_list.find('div.current').attr('season') != selection_season){
                    $story_list.find('div.current').removeClass('current');
                    $story_list.find('div.current a').removeClass('current');
                
                    $story_list.find('div[season="'+selection_season+'"]').addClass('current');
                    $story_list.find('div.current a:first').addClass('current');
                }
                
                
                $story_list.css('top','0px');
                $stories        = $story_list.find('div.current a').length; 
                $story_toggle   = $('#vacation_story dl a#story_toggle');
                $stories < 6 ? $story_toggle.addClass('inactive') : $story_toggle.removeClass('inactive');
            }
            
            
            $rate_keys.children('div[season]').removeAttr('class');
            $rate_keys.children('div[season="'+selection_season+'"]').addClass('current');
            
            
            if($('form#select_lodging').length > 0 && $('form#select_lodging ol div.current').attr('season') != selection_season){
                $('form#select_lodging ol div.current').removeClass('current');
                $('form#select_lodging ol div[season="'+selection_season+'"]').addClass('current');
            }
            
            
            if($('#suitcase_inclusions').length > 0 && $('#suitcase_inclusions dl div.current').attr('season') != selection_season){
                $('#suitcase_inclusions dl div.current').removeClass('current');
                $('#suitcase_inclusions dl div[season="'+selection_season+'"]').addClass('current');
                
                $('#suitcase_inclusions h2').html(SEASON[selection_season].inclusions);
                $('#vacation_lodging h2 i').html(SEASON[selection_season].lodging);
                $('#vacation_lodging_terms p').html(SEASON[selection_season].terms);
                
                
                if(selection_season == 'winter'){
                    $('#suitcase_pricing div a[rel="save"]').attr({'class':'save_20','href':'/pages/winter/promotions/winter-10-qualifications.php','title':'Save up to 20%!'}).show();
                } else if ( selection_season == 'summer' ){ 
                    $('#suitcase_pricing div a[rel="save"]').attr({'class':'save_20','href':'/pages/summer/promotions/ten-percent-qualifications.php','title':'Save up to 20%!'}).show();
                } else if ( selection_season == 'fall' || selection_season == 'spring' || selection_season == 'lateFall' ) { 
                    $('#suitcase_pricing div a[rel="save"]').hide();
                }
                

                $('.MainMenuArea').load('/includes/menu_absolute.'+selection_season+'.php');
                $('.site_footer').load('/includes/footer_absolute.'+selection_season+'.php');
            }
            

            $('#vacation_packages').load('/vacation-planner/includes/vacation_packages.inc.php');
             

            if(selection_season != 'summer'){
                $('#suitcase_pricing h3').removeClass('current');
            } else {
            	$('#suitcase_pricing h3').addClass('current');
            }
        }
    }





/*
    Session Functions
    -------------------------------------------------------------------------------*/


    /* Save to Session
    -------------------------------------------*/
    function saveToSession(area,force) {
        if ( session_dirty == false && force !== true ) { return false; }

        var $data                               =   {
                                                        area                        : area,
                                                        selection_availability      : selection_availability,
                                                        selection_start             : selection_start,
                                                        selection_start_nice        : selection_start_nice,
                                                        selection_start_julian      : selection_start_julian,
                                                        selection_end               : selection_end,
                                                        selection_end_nice          : selection_end_nice,
                                                        selection_end_julian        : selection_end_julian,
                                                        selection_nights            : selection_nights,
                                                        selection_adults            : selection_adults,
                                                        selection_children          : selection_children,
                                                        selection_infants           : selection_infants,
                                                        selected_room               : selected_room,
                                                        selection_season            : selection_season,
                                                        selected_package_id         : selected_package_id,
                                                        selected_package_prefix     : selected_package_prefix,
                                                        vacation_total              : vacation_total,
                                                        vacation_tax                : vacation_tax,
                                                        vacation_grand_total        : vacation_grand_total,
                                                        vacation_deposit            : vacation_deposit,
                                                        selection_description       : encodeURIComponent(selection_description),
                                                        fullDescription             : encodeURIComponent(fullDescription),
                                                        suitcase_inclusions_h2      : encodeURIComponent(SEASON[selection_season].inclusions),
                                                        vacation_lodging_terms_p    : encodeURIComponent(SEASON[selection_season].lodging),
                                                        vacation_lodging_terms_p    : encodeURIComponent(SEASON[selection_season].terms),
                                                        selection_package           : (selected_package_prefix ? selected_package_prefix + '-' + selection_season : '')                                                        
                                                    }

        session_dirty                           = false;

        $.post('/vacation-planner/includes/index.ajax.php?function=saveToSession',$data,function(message){ message ? alert('message'):''; }); 
        trackSession();
    }





/*
    Guest Functions
    -------------------------------------------------------------------------------*/     

    
    /* Update Guests
    -------------------------------------------*/
    function updateGuests(type){
        session_dirty                           = true;
        
        if ( type == 'reset' ) {
            selection_adults                    = '';
            selection_children                  = '';
            selection_infants                   = '';
            kids                                = '';
            occupancy                           = '';
        
            $('#adults').val('0');
            $('#children').val('0');
            $('#infants').val('0');
            
            $suitcase_guests.html('');     
        } else {        
            selection_adults                    = $('#adults').val();
            selection_children                  = $('#children').val();
            selection_infants                   = $('#infants').val();
            kids                                = parseInt(selection_children) + parseInt(selection_infants);
            occupancy                           = parseFloat(selection_adults) + parseFloat(selection_children) + parseFloat(selection_infants);
            
            $('#vacation_guests h2').html(occupancy + ' guests');
            $('#vacation_lodging_details').hide();
            
            
            resetGuestDetails(selection_adults,selection_children,selection_infants);
            updatePage();
            saveToSession('updateGuests', true);
        }
    }
    
    
    /* Show Guests
    -------------------------------------------*/
    function showGuests(){
         $('#adults').val(selection_adults);
         $('#children').val(selection_children);
         $('#infants').val(selection_infants);
         
         occupancy                              = parseFloat(selection_adults) + parseFloat(selection_children);
    }


    /* Reset Guest Details
    -------------------------------------------*/
    function resetGuestDetails(){
        var $data                               = { adults : selection_adults, children : selection_children, infants : selection_infants };
        
        $.post('/vacation-planner/includes/index.ajax.php?function=resetGuestDetails',$data,function(message){ $('#vacation_details ol').html(message); });
    }
    




/*
    Lodging Functions
    -------------------------------------------------------------------------------*/


    /* Show Lodging
    -------------------------------------------*/
    function showLodging(type){
        $('[kind="room"],[lodge]').removeClass('available');
        
        if(type                                == 'reset'){
            selected_room                       = '';   
            selection_availability              = '';
            
            $('[kind="room"],[lodge]').removeAttr('class');
        } else {
            if(selection_start && selection_end && (selection_start != selection_end)){
                if(selection_availability      == ''){                                               
                    if(lodgingCapacityOK(0)    == 1)   $('#ROOM_S').addClass('available'); $('[lodge_id="ROOM_S"]').addClass('available'); 
                    if(lodgingCapacityOK(1)    == 1)  $('#ROOM_1B').addClass('available'); $('[lodge_id="ROOM_1B"]').addClass('available');
                    if(lodgingCapacityOK(2)    == 1) $('#ROOM_1BP').addClass('available'); $('[lodge_id="ROOM_1BP"]').addClass('available');
                    if(lodgingCapacityOK(3)    == 1)  $('#ROOM_2B').addClass('available'); $('[lodge_id="ROOM_2B"]').addClass('available');
                    if(lodgingCapacityOK(4)    == 1) $('#ROOM_2BP').addClass('available'); $('[lodge_id="ROOM_2BP"]').addClass('available');
                    if(lodgingCapacityOK(5)    == 1)  $('#ROOM_3B').addClass('available'); $('[lodge_id="ROOM_3B"]').addClass('available');
                    if(lodgingCapacityOK(6)    == 1) $('#ROOM_3BP').addClass('available'); $('[lodge_id="ROOM_3BP"]').addClass('available');
                    if(lodgingCapacityOK(7)    == 1)  $('#ROOM_4B').addClass('available'); $('[lodge_id="ROOM_4B"]').addClass('available');
                    if(lodgingCapacityOK(8)    == 1)  $('#ROOM_5B').addClass('available'); $('[lodge_id="ROOM_5B"]').addClass('available');
                } else {
                    var noneAvailable           = true;
                    
                    if(lodgingOptionOK(0,selection_availability) == 1){   $('#ROOM_S').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(1,selection_availability) == 1){  $('#ROOM_1B').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(2,selection_availability) == 1){ $('#ROOM_1BP').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(3,selection_availability) == 1){  $('#ROOM_2B').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(4,selection_availability) == 1){ $('#ROOM_2BP').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(5,selection_availability) == 1){  $('#ROOM_3B').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(6,selection_availability) == 1){ $('#ROOM_3BP').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(7,selection_availability) == 1){  $('#ROOM_4B').addClass('available'); noneAvailable = false; }
                    if(lodgingOptionOK(8,selection_availability) == 1){  $('#ROOM_5B').addClass('available'); noneAvailable = false; }
                    
                
                    if(!$('#vacation_lodging ol a.selected').hasClass('available') && $('#vacation_lodging ol a.selected').exists()){
                        $('#vacation_lodging ol a.selected').removeClass('selected');
                        $('#vacation_lodging ol a').removeClass('current');
                        $('#vacation_lodging dl div.current').removeClass('current');
                        
                        $('.vacation_lodging_details').hide();
                        $('.book_now').hide();
                        selected_room           = '';
                        
                        $('#vacation-total').html('0.00');
                        $('#vacation-tax').html('0.00');
                        $('#vacation-deposit').html('0.00');
                        $('#vacation-grand-total').html('0.00');
                
                        smuggs_alert('Please update your lodging selection.',3);
                        $('#vacation_lodging dl div.info').hide();
                        $('#vacation_lodging dl div.err').show();
                    } else {
                        if(noneAvailable && selection_adults != 0){
                            $('#vacation_lodging dl div.info').hide();
                            $('#vacation_lodging dl div.err').show();
                        } else {
                            if(!selected_room){
                                $('#vacation_lodging dl div.info').show();
                                $('#vacation_lodging dl div.err').hide();
                            }
                        }
                    }
                }
            }
        }        
    }


    /* Check Lodging
    -------------------------------------------*/
    function lodgingOptionOK(pos,availability){
    	if(typeof promotion_type               != 'undefined'){
	        if(promotion_type == 'directMail'  && (selection_children == 0 && selection_infants == 0)){
	            return false;
	        } else {
	            if(occupancy                  == 0){ return false; }
	            if(availability               == undefined){ return false; }
	            if(availability.charAt(pos)   != 1){ return false; }
	            
	            var occMin                     = OCC[ OCCabbr[pos] ].min;
	            var occMax                     = OCC[ OCCabbr[pos] ].max;
	            
	            if(occupancy > occMax){ return false; }
	
	
	            return true;
	        }
	    }
    }
    
    
    /* Check Occupancy
    -------------------------------------------*/
    function lodgingCapacityOK(pos){
        if(occupancy                           == 0){ return true; }
        
        var occMin                              = OCC[ OCCabbr[pos] ].min;
        var occMax                              = OCC[ OCCabbr[pos] ].max;

        if(occupancy > occMax){ return false; }
        
        
        return true;
    }


    
    /* Select Room
    -------------------------------------------*/
    function selectRoom(code){
        if(code == ''){ return ''; }
        
        selected_room                           = code;
        session_dirty                           = true;
                                    
        var roomID                              = '#ROOM_' + code;
        var detailID                            = '#DETAIL_' + code;
        

        if($(roomID).hasClass('roomActive')){
            $('.roomSelected').removeClass('roomSelected').addClass('roomActive');
            $(roomID).removeClass('roomActive').addClass('roomSelected');
            
            $('.detailsShowing').removeClass('detailsShowing').addClass('detailsHidden');
            $(detailID).removeClass('detailsHidden').addClass('detailsShowing');
        }


        var display_room_str = '<sup>' + OCC[selected_room].name + '</sup>';
        $('#suitcase_pricing div span cite[details="lodging"]').html(display_room_str);
    }
    
    
    /* Room Index
    -------------------------------------------*/
    function roomIndex(room) {
        if ( room == 'S'   ) return 0;
        if ( room == '1B'  ) return 1;
        if ( room == '1BP' ) return 2;
        if ( room == '2B'  ) return 3;
        if ( room == '2BP' ) return 4;
        if ( room == '3B'  ) return 5;
        if ( room == '3BP' ) return 6;
        if ( room == '4B'  ) return 7;
        if ( room == '5B'  ) return 8;
    }





/*
    Pricing Functions
    -------------------------------------------------------------------------------*/

    
    /* Get Pricing
    -------------------------------------------*/
    function getPricing(){
        if(selection_nights                    == '' ){ return false; }
        if(selection_season                    == '' ){ return false; }
        if(selected_room                       == '' ){ return false; }


        var price                               = 0;
        var promo                               = getPromotionID();
		var season_package                      = SEASON[selection_season].lodging;

        var adults                              = parseInt(selection_adults);
        var children                            = parseInt(selection_children);
        var infants                             = parseInt(selection_infants);
        var people                              = adults + children;
        
        
        if(people                              == 0){ return false; }
                
        var showOriginalPrice                   = '';
        
        if(promo                               != ''){
            var promo_chgNights                 = selection_nights;
            var freeNight                       = PROMO[promo].freeNight;
            
            selection_nights                   >= freeNight && (freeNight != 0) ? promo_chgNights-- : '';
            showOriginalPrice                   = PROMO[promo].showOriginalPrice;
        }

        
        /* Calculate Pricing
        ---------------------------------------*/
        for(packageKey in PACKAGE[selection_season]){
            var packageValue                    = PACKAGE[selection_season][packageKey];
            var day                             = 1;
            var gross                           = parseFloat(0.00);
            var total                           = parseFloat(0.00);
            
            
            $('#debug_area').append('selection_season: '+selection_season+'<br/>');
            
            for(var i=selection_start_julian; i<selection_end_julian; i++) {
                if(true){
                    var date                    = julian2nice(i);
                    var rate                    = $('#C'+i).attr('rate');
                    
                    thisRate                    = packageValue['prefix'] + rate.substr(2);
                    
                    
                    var rateMethod              = RATE[thisRate].season;
                    var name                    = RATE[thisRate].name;
                    var id                      = thisRate + '_' + selected_room + '_' + selection_nights;
                    var aPrice                  = parseFloat(PRICING[id].A);
                    var cPrice                  = parseFloat(PRICING[id].C);
                    var uPrice                  = parseFloat(PRICING[id].U);
                    var oPrice                  = parseFloat(PRICING[id].O);
                    var min                     = parseFloat(PRICING[id].M);
                    
                    
                    $('#debug_area').append(id + ' : '+aPrice+'<br/>');
                    
                    
                    switch(rateMethod){
                        case 'winter'           :   var price = (adults * aPrice) + (children * cPrice);
                                                    people < min ? price += (min - people) * uPrice : '';
                                                    people > min ? price += (people - min) * oPrice : '';
                            
                                                    break;
                        
                        
                        default                 :   var price = aPrice;
                                                    people > min ? price += (people - min) * oPrice : '';
                            
                                                    break;
                    }
                    
                    var originalPrice           = price;
                    
                    
                    if(promo                   != ''){                
                        day == freeNight        ? price = 0 : '';

                        var dayDiscount         = parseInt(PROMO[promo]['dayDiscount_'+selection_nights]);
                        var dayApplied          = parseInt(PROMO[promo]['dayApplied_'+day]);
                        var discountApplies     = 1.00;
                        
                        if(dayDiscount > 0     && dayApplied == 1){
                            var discount        = price * dayDiscount / 100;
                            price               = price - discount;
                        }                
                    }
                    
                    
                    total                      += price;
                    gross                      += originalPrice;

                    $('#debug_area').append(total+', '+price+'<br/>');
                    
                    day++;
                }
            }
            
            
            var tax                             = total * TAX_RATE;
            var grand_total                     = total + tax;
            var grand_total                     = formatCurrency(grand_total);


            $('#package_inclusions [prefixx="'+packageKey+'"]').each(function(e){
            	if($(this).data().requisites && ($(this).data().requisites['screen_pricing'] == 1)){
            		if(check_package($(this))){
            			$(this).siblings('p').children('cite.package_error').hide().remove();
            			$(this).children('strong').html('$' + formatCurrency(gross));
            		}
            	} else {
            		$(this).children('strong').html('$' + formatCurrency(gross));
            	}
            });
        }
        
    }


    /* Get Selected Price
    -------------------------------------------*/
    function getSelectedPrice(){
        var errors                              = 0;
    
        if(selection_nights                    == ''){ $suitcase_dates.html(''); errors++; }
        if(selection_season                    == ''){ errors++; }
        if(selected_room                       == ''){ $suitcase_lodging.html(''); errors++; }
        if(selected_package_id                 == ''){ $suitcase_package.html(''); $suitcase_pricing.html(''); $('a.book_now').hide(); errors++; }

        if(errors                               > 0){ return false; }


        var promo                               = getPromotionID();
		var season_package                      = SEASON[selection_season].lodging;

        var output                              = '';
        output                                 += '<div>';
        output                                 += "<h2>Daily Rate Details <b>including the</b> "+PACKAGE[selection_season][selected_package_prefix].title+"</h2>";
        output                                 += '<p>Here is the daily price for each of your proposed vacation days:<br/>(All prices in U.S. dollars before tax &amp; service fees.)</p>';


        var description                         = '<b>' + OCC[selected_room].name + '</b>';
        var min                                 = OCC[selected_room].min;
        description                            += ' for ' + selection_nights + ' night';
        selection_nights                       != 1 ? description += 's' : '';
        description                            += ' with';
        
        
        var adults                              = parseInt(selection_adults);
        var children                            = parseInt(selection_children);
        var infants                             = parseInt(selection_infants);
        var kids                                = children + infants;
        var people                              = adults + children;
        
        if(people                              == 0){ return false; }
        
        adults                                 == 1 ? A_S = '' : A_S = 's';
        children                               == 1 ? C_S = '' : C_S = 'ren';
        infants                                == 1 ? I_S = '' : I_S = 'ren';

        description                            += ' ' + adults + ' adult' + A_S;
        if(children                             > 0){ description += ', '+children +' child'+C_S+' aged 3-17yrs'; }
        if(infants                              > 0 ){ description += ', '+infants +' child'+I_S+' aged 0-2yrs'  ; }
        
        fullDescription                         = description;
        fullDescription                        += ', Arrival ' + selection_start_nice + ', Departure ' + selection_end_nice;

        output                                 += description;
                                   
        output                                 += ' <dl>';
        output                                 += '     <p>';
        output                                 += '         <label>Date</label>';
        output                                 += '         <label>Rate Period</label>';
        output                                 += '         <label>Price</label>';
        output                                 += '         <label>Avg. Person Daily Rate</label>';
        output                                 += '     </p>';
        
        
        var showOriginalPrice                   = '';
        if(promo                               != ''){
            var promo_chgNights                 = selection_nights;
            var freeNight                       = PROMO[promo].freeNight;
            
            selection_nights                   >= freeNight && freeNight != 0 ? promo_chgNights-- : '';
            showOriginalPrice                   = PROMO[promo].showOriginalPrice;


            var $resoPhone                      = PROMO[promo].resoPhone;
            
            if($resoPhone                      != ''){ 
                $('#reso_phone_display').html($resoPhone);
                $('#lodging_error_phone').html($resoPhone);
                $('#lodging_info_phone').html($resoPhone);
            }
        }


        /* Calculate Pricing
        ---------------------------------------*/
        var day                                 = 1;
        var gross                               = parseFloat(0.00); // before discount
        var total                               = parseFloat(0.00);
        $('#debug_area').append('selection_season: '+selection_season+'<br/>');
        
        for(var i=selection_start_julian; i<selection_end_julian; i++) {
            if(true){
                var date                        = julian2nice(i);
                var rate                        = $('#C'+i).attr('rate');
                var thisRate                    = selected_package_prefix + rate.substr(2);
                var rateMethod                  = RATE[thisRate].season;
                var name                        = RATE[thisRate].name;
                var id                          = thisRate + '_' + selected_room + '_' + selection_nights;
                var aPrice                      = parseFloat(PRICING[id].A);
                var cPrice                      = parseFloat(PRICING[id].C);
                var uPrice                      = parseFloat(PRICING[id].U);
                var oPrice                      = parseFloat(PRICING[id].O);
                var min                         = parseFloat(PRICING[id].M);
                
                
                $('#debug_area').append(id + ' : '+aPrice+'<br/>');
                
                
                switch(rateMethod){
                    case 'winter'               :   var price = (adults * aPrice) + (children * cPrice);
                                                    people < min ? price += (min - people) * uPrice : '';
                                                    people > min ? price += (people - min) * oPrice : '';
                                        
                                                    break;
    
    
                    case 'summer'               :   
                    
                    
                    
                    default                     :   var price  = aPrice;
                                                    people > min ? price += (people - min) * oPrice : '';
                        
                                                    break;
                }
                
                
                var originalPrice               = price;
                
                if(promo != ''){                
                    day == freeNight            ? price = 0 : '';


                    var dayDiscount             = parseInt(PROMO[promo]['dayDiscount_'+selection_nights]); // used to be +day
                    var dayApplied              = parseInt(PROMO[promo]['dayApplied_'+day]);
                    var discountApplies         = 1.00;
                    
                    if(dayDiscount > 0         && dayApplied == 1){
                        var discount            = price * dayDiscount / 100;
                        price                   = price - discount;
                    }                
                }
                
                
                total                          += price;
                gross                          += originalPrice;
                
                var daily                       = price / people;
                price                           = dollars(price);
                originalPrice                   = dollars(originalPrice);
                daily                           = dollars(daily);
                
                $('#debug_area').append(total+', '+price+'<br/>');
                
                output                         += ' <p id="detail_row_' + day + '">';
                output                         += '     <cite>' + date + '</cite>'; 
                output                         += '     <cite>' + name + '</cite>';
                
                originalPrice != price && showOriginalPrice == 'yes' ? output += '  <cite><strike>'+originalPrice+'</strike> <u>'+price+'</u></cite>' : output += '  <cite>'+price+'</cite>';
                
                output                         += '     <cite>' + daily + '</cite>'; 
                output                         += ' </p>';
                
                day                            ++;
            }
        }
        
        
        var tax                                 = total * TAX_RATE;
        var grand_total                         = total + tax;
        var deposit                             = grand_total / 2;
        var totalEach                           = total / people / selection_nights;
        var discountAmt                         = gross - total;
                                    
        var gross                               = formatCurrency(gross);
        var discountAmt                         = formatCurrency(discountAmt);
        var total                               = formatCurrency(total);
        var tax                                 = formatCurrency(tax);
        var grand_total                         = formatCurrency(grand_total);
        var deposit                             = formatCurrency(deposit);
        var totalEach                           = formatCurrency(totalEach);


        output                                 += '</dl>';
        output                                 += '</div>';
        
        $('#vacation_lodging_details').html(output);
        

        totalRow                                = '';
        totalRow                               += ' <p id="detail_row_'+day+'">';
        totalRow                               += '     <cite><b>TOTAL</b></cite>'; 
        totalRow                               += '     <cite><b>'+name+'</b></cite>';
        totalRow                               += '     <cite><b>'+total+'</b></cite>'; 
        totalRow                               += '     <cite><b>'+totalEach+'</b></cite>'; 
        totalRow                               += ' </p>';
        
        $('#detail_row_1').before(totalRow);
        
        
        if(parseInt(total)                     >= 1){
            if(gross                           == total){
                $('#vacation-total').html('<sup>$</sup>'+gross);
                $('#vacation-promo').html('');
                $('#vacation_total_area label').html('Vacation Total');
                $('#vacation_promo_area').hide();
            } else {
                $('#vacation-total').html('<sup>$</sup><strike>'+gross+'</strike>');
                $('#vacation-promo').html('<sup>$</sup>'+total);
                $('#vacation_total_area label').html('Regular Rate');
                $('#vacation_promo_area label').html('Your Rate');
                $('#vacation_promo_area').show();
            }
            
            
            $('#vacation-tax').html('<sup>$</sup>'+tax);
            $('#vacation-deposit').html('<sup>$</sup>'+deposit);
            $('#vacation-grand-total').html('<sup>$</sup>'+grand_total);
            
        
            selection_description               = description;
            vacation_total                      = total;
            vacation_tax                        = tax;
            vacation_grand_total                = grand_total;
            vacation_deposit                    = deposit;


            pageTracker._trackPageview('/vacation_planner/book_now/user_ip='+user_session+'&arrive='+selection_start_nice+'&depart='+selection_end_nice+'&adults='+adults+'&children='+children+'&infants='+infants+'&room='+selected_room+'&grand_total='+grand_total);

            $('.vacation_lodging_details').css('visibility','visible');
            $('.book_now').show();
        }
        

        $('#suitcase_pricing div span cite[details="package"]').html('<sup>'+PACKAGE[selection_season][selected_package_prefix].title+'</sup>');
    }
    
    
    
    /* Format Dollars
    -------------------------------------------*/
    function dollars(price){
        if(price.toFixed){
            return price.toFixed(2);
        } else {
            return Math.round(price * 100) / 100;
        }
    }


    /* Format Currency
    -------------------------------------------*/
    function formatCurrency(strValue){
    	strValue                               = strValue.toString().replace(/\$|\,/g,'');
    	dblValue                               = parseFloat(strValue);
    
    	blnSign                                = (dblValue == (dblValue = Math.abs(dblValue)));
    	dblValue                               = Math.floor(dblValue*100+0.50000000001);
    	intCents                               = dblValue%100;
    	strCents                               = intCents.toString();
    	dblValue                               = Math.floor(dblValue/100).toString();
    	
    	if(intCents<10)
    		strCents = "0" + strCents;
    	for (var i = 0; i < Math.floor((dblValue.length-(1+i))/3); i++)
    		dblValue = dblValue.substring(0,dblValue.length-(4*i+3))+','+
    		dblValue.substring(dblValue.length-(4*i+3));
    	
    	
    	return (((blnSign)?'':'-') + dblValue + '.' + strCents);
    }

    
    
    /* Get Promotion ID
    -------------------------------------------*/
    function getPromotionID() {        
        // for(var promo in PROMO){
        //     var vacationStartDate   = promo.vacationStartDate;
        //     var vacationEndDate     = promo.vacationEndDate;
        //     if ( selection_start < selection_end && 
        //          selection_start >= vacationStartDate && 
        //          selection_end < vacationEndDate ) { 
        //         return promo.id;
        //     }
        // };
        return '';
    }
