var ttForm = new Object();
var minFltDuration = 4;
ttForm.depCalObj = '';
ttForm.retCalObj = '';

$(document).ready(function() 
{
	var date_selected;
    var $tabs = $("#tt_search").tabs();
    $tabs.tabs('select', '#' + tt_selectedTab);
  
    $.dpText = {
        TEXT_PREV_YEAR      :   'Previous year',
        TEXT_PREV_MONTH     :   'Previous month',
        TEXT_NEXT_YEAR      :   'Next year',
        TEXT_NEXT_MONTH     :   'Next month',
        TEXT_CLOSE          :   'Close',
        TEXT_CHOOSE_DATE    :   'Choose a date',
        TEXT_IMAGE_LOCN     :   '/static/goh/resources/images/booking_form/icon_calendar.png',
        HEADER_FORMAT       :   'mmmm yyyy'
    };
    
    Date.format = "ddmmmyy";
    
    if (typeof(tt_selectedDate) == "undefined")
    	date_selected = tt_todaysDate;
    else
    	date_selected = tt_selectedDate;
    
    if (!tt_cdpStartDate)
    {
        jQuery('.tt_jq_start_date').each(
            function(inIdx){
                this.value = Date.fromString(tt_todaysDate).addDays(tt_offset).asString();
            }
        )
    }
    
    jQuery('.tt_jq_basic_cal').ttDatePicker(
      { 
        startDate: Date.fromString(tt_todaysDate).addDays(tt_offset).asString(),
        endDate: Date.fromString(tt_todaysDate).addYears(1).asString(),

        hoverCallback:function($inTd)
        {
    	    jQuery('#dp-hover-div').html($inTd.data("hoverText"));
        },
        unhoverCallback:function($inTd)
        {
        	jQuery('#dp-hover-div').html("");
        }
      }
    );

    ttForm.depCalObj = jQuery('#tt_byo_departure_date').ttDatePicker(
      { 
        startDate: Date.fromString(tt_todaysDate).addDays(tt_offset).asString(),
        endDate: Date.fromString(tt_todaysDate).addDays(365).asString(),
        dpExcludeDates:function(thisDate)
        {
    	  if (ttForm.disallowDate(thisDate, "depart"))
    	  {
    		  return({value: true, reason: 'No flights available'});
    	  }
        },
        hoverCallback:function($inTd)
        {
        	jQuery('#dp-hover-div').html($inTd.data("hoverText"));
        },
        unhoverCallback:function($inTd)
        {
        	jQuery('#dp-hover-div').html("");
        }
      }
    )
    .bind(
        'dpClosed',
        function(e, selectedDates)
        {
            var d = selectedDates[0];
            var retDate;
            if (d) {
            	d = new Date(d);
            	retDate = ttForm.SetReturnDate(d);
            	jQuery('#tt_byo_return_date').dpSetStartDate(d.addDays(minFltDuration).asString());
            	jQuery('#tt_byo_return_date').dpSetEndDate(d.addDays(99 - minFltDuration).asString());
            	jQuery('#tt_byo_return_date').dpSetSelected(retDate.asString());
            }
        }
    );

    ttForm.retCalObj = jQuery('#tt_byo_return_date').ttDatePicker(
      { 
        startDate: Date.fromString(date_selected).addDays(minFltDuration).asString(),
        endDate: Date.fromString(date_selected).addDays(99).asString(),
        dpExcludeDates:function(thisDate)
        {
    	  if (ttForm.disallowDate(thisDate, "return"))
    	  {
    		  return({value: true, reason: 'No flights available'});
    	  }
        },
        hoverCallback:function($inTd)
        {
        	jQuery('#dp-hover-div').html($inTd.data("hoverText"));
        },
        unhoverCallback:function($inTd)
        {
        	jQuery('#dp-hover-div').html("");
        }
      }
    );
    ttForm.setBYODates();
    ttForm.showTabs();
    
    //add tooltips to select boxes in ie6
    if ($.browser.msie && $.browser.version.substr(0,1)<7) {
    	$('#tt_htl_frm_child_age select').tooltip();
    }
}); 

ttForm.showTabs = function()
{
	document.getElementById("tt_search_hotel").style.display = "";
	document.getElementById("tt_search_byo").style.display = "";
	document.getElementById("tt_search_ss").style.display = "";
}

ttForm.displayChildAgeBoxes = function(numChildFld, divName, totNum)
{
    var numChild = document.getElementById(numChildFld).value;   
    document.getElementById(divName).style.display = numChild > 0 ? "" : "none";

    for (i = 1; i <= numChild; i++)
        document.getElementById(divName + i).style.display = "block";

    for (; i <= totNum; i++)
        document.getElementById(divName + i).style.display = "none";
}

ttForm.byoOnSubmit = function(inPrefix)
{
    if (!ttForm.setRoomMix(inPrefix)) return(false);
    if (!ttForm.setPackage(inPrefix)) return(false);
    if (!ttForm.CheckAdultInfant(inPrefix)) return(false);
    return(ttForm.setDuration(inPrefix));
}

ttForm.setDuration = function(inPrefix)
{
	client.clearErrorMsg("tt_date_error");
    var returnValue = document.getElementById("tt_byo_return_date").value;
    var deptValue = document.getElementById("tt_byo_departure_date").value;
    
    if (returnValue == null || returnValue.length == 0 || deptValue == null || deptValue.length == 0)
        return(client.setErrorMsg("tt_date_error", "Must specify both a departure and return date"));

    var returnDate = Date.fromString(returnValue);
    var deptDate = Date.fromString(deptValue);
    
    if (returnDate < deptDate)
        return(client.setErrorMsg("tt_date_error", "Return date must be after the departure date"));
 
    document.getElementById("tt_byo_duration").value = deptDate.getDaysTo(returnDate);
       
    return(true);        
}

ttForm.setPackage = function(inPrefix)
{
    var hasTransfer = document.getElementById("byo_include_transfers").checked;
    var hasModule = document.getElementById("byo_include_tours").checked;
    var set_package = "goh_f";
    if (hasTransfer)
    	set_package += "t";
       
    set_package += "h";

    if (hasModule)
    	set_package += "m"; 
        
    document.getElementById("byo_package").value = set_package;
    return(true);
}

ttForm.setRoomMix = function(inPrefix)
{
    document.getElementById(inPrefix + '_room_mix').value = ttForm.getRoomMix(inPrefix);
 
    return(true);
}

ttForm.getRoomMix = function(inPrefix)
{
    var roomMixes = "";
    var adultCount = document.getElementById(inPrefix + "_adults").value;
    var childCount = document.getElementById(inPrefix + "_children").value;
    
    if (adultCount == 0) return roomMixes;
    
    roomMixes = adultCount + "A";
    
    if (childCount > 0)
    {
        roomMixes += childCount + "C";

        for (i=1; i<= childCount; i++)
        {
            roomMixes += "-" + document.getElementById(inPrefix + "_sel_child_age" +  i).value ;
        }
    }

    return(roomMixes);  
}

ttForm.disallowDate = function(thisDate, inFltType)
{
    var day = thisDate.getDay();
    
    if (day == 0)
        day = 7;
    if (bkFormFltSched)
    {
    	var i;
    	var dep_city, flt_to_city;
    	if (inFltType = 'depart')
    	{
    		dep_city = document.getElementById("tt_byo_departure").value;
    		flt_to_city = document.getElementById("tt_byo_destination").value;
    	}
    	else
    	{
    		flt_to_city = document.getElementById("tt_byo_departure").value;
    		dep_city = document.getElementById("tt_byo_destination").value;
    	}
    	var status = common.disallowDate(thisDate, bkFormFltSched[dep_city][flt_to_city]);
    	if (status && status.value)
    		return(true);
    }
    return(false);
}

ttForm.setBYODates = function()
{
	var start_date = Date.fromString(document.getElementById("tt_byo_departure_date").value);
	var end_date = Date.fromString(document.getElementById("tt_byo_return_date").value);
    
	while(ttForm.disallowDate(start_date, "depart"))
	{
		start_date.addDays(1);
	}
	
	var duration = start_date.getDaysTo(end_date);
	
	if (duration < minFltDuration)
	{
		end_date.addDays(minFltDuration - duration);
	}
	
	while(ttForm.disallowDate(end_date, "return"))
	{
		end_date.addDays(1);
	}

	document.getElementById("tt_byo_departure_date").value = start_date.asString()
	document.getElementById("tt_byo_return_date").value = end_date.asString();
	ttForm.depCalObj.dpSetSelected(start_date.asString());
	ttForm.retCalObj.dpSetSelected(end_date.asString());
}

ttForm.SetReturnDate = function(inDate) 
{
	var start_date = inDate;
	var end_date = Date.fromString(document.getElementById("tt_byo_return_date").value);
	
	var duration = start_date.getDaysTo(end_date);
	
	if (duration < minFltDuration)
	{
		end_date.addDays(minFltDuration - duration);
	}
	
	while(ttForm.disallowDate(end_date, "return"))
	{
		end_date.addDays(1);
	}
	document.getElementById("tt_byo_return_date").value = end_date.asString();
	return end_date;
}

ttForm.CheckAdultInfant = function(inPrefix)
{
	var i, child_age = 0, number_infant = 0;
	if (inPrefix != 'tt_byo_frm')
		return(true);
	
	client.clearErrorMsg("tt_pax_error");
	
	if (!client.CheckAdultInfantNo(inPrefix + "_adults", inPrefix + "_children", inPrefix + "_sel_child_age"))
		return(client.setErrorMsg("tt_pax_error", "Number of infants can not be greater than number of adults on flights"));
	return(true);
}
