var common = new Object();
common.promotionCityDateRanges = new Array();
(function($){
	   
    $.fn.extend({
        ttDatePicker : function(s)
        {

            s.renderCallback = function($td, thisDate, month, year)
                                {
                                    $($td).data("hoverText", thisDate.asString("dd mmmm yyyy"));                                
                                    if (s.dpExcludeDates)
                                    {
                                    	var status = s.dpExcludeDates(thisDate);
                                        if (status && status.value)
                                        {
                                            $td.addClass('disabled');
                                            if (status.reason)
                                                $($td).data("hoverText", status.reason);
                                        }
                                    }             
                                }                   
            s.displayClose = true;                     
            $(this).each
            (
                function()
                {
                    var dps = $.extend({}, $.fn.datePicker.defaults, s);
                
                    var $mydp = $(this);
                    $mydp.datePicker(dps)
                    .bind(
                        'dpDisplayed',
                        function(event, datePickerDiv)
                        {
                            $(datePickerDiv).append($('<div id="dp-hover-div"> </div>'));
                        }
                            
                    );
                }
            )
            return(this);           
            
        }
    });
})(jQuery);

common.isInvalidDate = function (inDate, inCity, inNegDow)
{
	var day = inDate.getDay();
    
    if (day == 0)
        day = 7;
	for (i = 0; i < inNegDow.length; i++)
	{
		var currNegDowArr = inNegDow[i].split("|");
		var negDowStartDate = new Date(currNegDowArr[1].substring(0,4), parseInt(currNegDowArr[1].substring(5,7), 10) - 1, currNegDowArr[1].substring(8));
		var negDowEndDate = new Date(currNegDowArr[2].substring(0,4), parseInt(currNegDowArr[2].substring(5,7), 10) - 1, currNegDowArr[2].substring(8));
		if (inDate >= negDowStartDate && inDate <= negDowEndDate)
		{
			if (currNegDowArr[0].indexOf(day) >= 0)
				return({value: true, reason: 'No Flights Available'});
			break;
		}
	}

	if (typeof(common.promotionCityDateRanges[inCity]) == "undefined" || typeof(common.promotionCityDateRanges[inCity][1]) == "undefined")
	{
		if (typeof(startDate) == "undefined" && typeof(endDate) == "undefined")
			return;
		if ((inDate > startDate) && (inDate < stopDate))
			return;
	}
	else
	{
	   	var i = 0;
	   	while(1)
	   	{
	   		i++;
	   		
	   		if (typeof(common.promotionCityDateRanges[inCity][i]) == "undefined")
	   			break;
	   		var dateRanges = common.promotionCityDateRanges[inCity][i].split("|");
	   	
	   		// the given date ranges, index 0 has the start date and index 1 has the end date	
	   		var firstDate = new Date(dateRanges[0]);
	   		var endDate   = new Date(dateRanges[1]);
	   		var start_date = new Date(startDate);
	   		var end_date = new Date(stopDate);
	    
	   		// Ensure the most restrictive range
	   		if (startDate != null && firstDate < start_date)
	   			firstDate = start_date;
	   		if (stopDate != null && endDate > end_date)
	   			endDate = end_date;
	   		if ((inDate >= firstDate) && (inDate <= endDate))
	   			return;
	   	}
	   	return({value: true, reason: 'Not Valid'});
	}
	return;
}
