;SF.CALYPSO = 
{
        
    $form: null, 
 
    fieldMappings: 
    {
        CDP_htlCity: 'Destination'
    }, 
 
    init: function()
    {
        this.$form = $('#cdp_calypsoForm');
        this.setupForm();
        this.setupValidation();
    },
  
    setupForm: function()
    {     
        this.$form.find('#cdp_checkInDate').val(SF.DATETIME.futureDateDays(4));
        this.$form.find('#cdp_todaysDate').val(SF.DATETIME.todaysDate());
        this.$form.find('#cdp_checkInDate, #cdp_weekFromTodaysDate').val(SF.DATETIME.futureDateDays(4));
        
        $(document).ready(function()
        {
            SF.CALYPSO.$form.find('#cdp_checkInDate').datepicker($.extend(SF.datePicker, { minDate: 4 }));
        });
        
        // Setup destinations select
        $calSelect = this.$form.find('#cdp_htlCity');
        $.get('/quickbeds/query/regionlist.aspx?q=Calypso', function(data)
        {
           $(data).find('Calypso CR').each(function()
            {
               var $calOptParent = $calSelect.append('<option value="' +  $(this).attr('sRegionCode') + '" class="regionHeading">' + $(this).attr('sRegion') + '</option>');
               $(this).children().each(function()
               {
                   $calOptParent.append('<option value="' +  $(this).attr('sSubRegionCode') + '">' + $(this).attr('sSubRegion') + '</option>');
               });
            });
        });
        
        // When number of children in drop down selected, send value of selected item to displayChildLists to display child ages select elements
        this.$form.find('#cdp_childNum').bind('change', function()
        {
            SF.CALYPSO.displayChildLists($(this).val());
        });
        
        // If on stage, change form action to be stage version
        if(SF.getEnv() == 'staging')
        {
            this.$form.attr('action', 'http://clienttest.tt.com.au/apps/ccn/exp/cdp_fit.html');
        };
        
    },   
    
    displayChildLists: function(selectedNumber) 
    {
        if(selectedNumber == 0)
        {
            SF.CALYPSO.$form.find('#cdp_childAgesContainer').hide();
            return;
        }
        
        var numChildSelects = this.$form.find('#cdp_childAgesContainer select').length;
        var count = numChildSelects;
        while(count >= 1)
        {
            if(count > selectedNumber)
            {
                this.$form.find('#cdp_' + 'child' + count  + 'AgeList').hide();
            }
            else
            {
                this.$form.find('#cdp_' + 'child' + count  + 'AgeList').show();
            }
            count--;
        }
        this.$form.find('#cdp_childAgesContainer').show();
    },
    
    setHotelName: function()
    {
        var hotelName = this.$form.find('#cdp_htlCity option:selected').text();
		var hotelNameAfterState = hotelName + ' Hotels';
		if(hotelName == 'New South Wales Hotels' 
		    || hotelName == 'Queensland Hotels' 
		    || hotelName == 'Northern Territory Hotels' 
		    || hotelName == 'Australian Capital Territory Hotels' 
		    || hotelName == 'South Australia Hotels' 
		    || hotelName == 'Tasmania Hotels' 
		    || hotelName == 'Victoria Hotels' 
		    || hotelName == 'Western Australia Hotels')
	    {
		    hotelName = hotelNameAfterState;
		}

		this.$form.find('#cdp_heading').val(hotelName);
    },
    
    setRoomMixes: function()
    {
        var numAdults = this.$form.find('#cdp_adultsList').val();
    
        var childNum1 = this.$form.find('#cdp_child1AgeList').attr('selectedIndex');
        var childNum2 = this.$form.find('#cdp_child2AgeList').attr('selectedIndex');
        var childNum3 = this.$form.find('#cdp_child3AgeList').attr('selectedIndex');
        var childNum4 = this.$form.find('#cdp_child4AgeList').attr('selectedIndex');
        var childNum5 = this.$form.find('#cdp_child5AgeList').attr('selectedIndex');
        var childNum6 = this.$form.find('#cdp_child6AgeList').attr('selectedIndex');
        var childNum7 = this.$form.find('#cdp_child7AgeList').attr('selectedIndex');
        var childNum8 = this.$form.find('#cdp_child8AgeList').attr('selectedIndex');
        
        var cNum;
        var roomMixes;
        
        if (childNum1=='') roomMixes = numAdults + 'A';
        if (childNum1!='') roomMixes = numAdults + 'A1C-' + childNum1;
        if (childNum2!='') roomMixes = numAdults + 'A2C-' + childNum1 + '-' + childNum2;
        if (childNum3!='') roomMixes = numAdults + 'A3C-' + childNum1 + '-' + childNum2 + '-' + childNum3;
        if (childNum4!='') roomMixes = numAdults + 'A4C-' + childNum1 + '-' + childNum2 + '-' + childNum3 + '-' + childNum4;
        if (childNum5!='') roomMixes = numAdults + 'A5C-' + childNum1 + '-' + childNum2 + '-' + childNum3 + '-' + childNum4 + '-' + childNum5;
        if (childNum6!='') roomMixes = numAdults + 'A6C-' + childNum1 + '-' + childNum2 + '-' + childNum3 + '-' + childNum4 + '-' + childNum5 + '-' + childNum6;
        if (childNum7!='') roomMixes = numAdults + 'A7C-' + childNum1 + '-' + childNum2 + '-' + childNum3 + '-' + childNum4 + '-' + childNum5 + '-' + childNum6 + '-' + childNum7;
        if (childNum8!='') roomMixes = numAdults + 'A8C-' + childNum1 + '-' + childNum2 + '-' + childNum3 + '-' + childNum4 + '-' + childNum5 + '-' + childNum6 + '-' + childNum7 + '-' + childNum8;
    
        this.$form.find('#cdp_roomMixes').val(roomMixes);
    },
    
    setStartDate: function()
    {
        var d = this.$form.find('#cdp_checkInDate').val().split('/');
        var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
		this.$form.find('#cdp_startDate').val(d [0] + months[parseInt(d[1], 10)-1] + d[2].substring(2));
    },
  
    setupValidation: function()
    {
        jQuery.validator.addMethod('cdp_childAges', function(value, element, params) 
        {
            var result = true;
            var numChildAges = SF.CALYPSO.$form.find('#cdp_childNum').val();
            SF.CALYPSO.$form.find('#cdp_childAgesContainer select:lt('+ numChildAges +')').each(function()
            {
                if($(this).val() == -1)
                {
                    result = false;
                    return false;
                }
            });
            
            return result;
        }, jQuery.format('Not all child ages have been specified. Please provide missing childs age'));
 
        // Once validation passes, set destination to match in intDestinations object
        this.$form.validate(
        {
            rules: 
            {
                checkInDate: 'required',
                CDP_htlCity: 'required',
                childNum: 'cdp_childAges'
            },

            highlight: function(element, errorClass) {
                 $(element).css('background-color', 'LemonChiffon')
             },

            invalidHandler: function(form, validator) {
                var strError ='';
                var errorMessage = '';
                var intErrors = validator.numberOfInvalids();   
                
                for (var formError in validator.errorMap) {
                    strError += SF.CALYPSO.fieldMappings[formError] + ': ' + validator.errorMap[formError] + '\n'                               
                }
                if (strError != '') {
                    alert(strError);
                };
                        
            },
 
            submitHandler: function(form)
            {
                SF.CALYPSO.setStartDate();
                SF.CALYPSO.setHotelName();
                SF.CALYPSO.setRoomMixes();
                form.submit();
            }
        }); 
    }
};
SF.CALYPSO.init();
