var common = new Object();

(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.disallowDate = function(inDate, 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(validDateRanges) != "undefined")
	{
		if (validDateRanges.length == 0)
	    {
			if (typeof(startDate) == "undefined" && typeof(endDate) == "undefined")
				return;
	    	if ((inDate > startDate) && (inDate < stopDate))
	    		return;
	    }
	    else
	    {
	    	var i;
	            
	    	// Iterate through the given date ranges	
	    	for (i = 0; i < validDateRanges.length; i++)
	    	{
	    	    var firstDate = new Date(validDateRanges[i][0]);
	    	    var endDate   = new Date(validDateRanges[i][1]);
	    
	    	    // Ensure the most restrictive range
	        	if (firstDate < startDate && startDate != null)
	        		firstDate = startDate;
	    
	    	    if (endDate > stopDate && stopDate != null)
	        		endDate = stopDate;
	
	    	    if ((inDate >= firstDate) && (inDate <= endDate))
	    	    	return;
	    	}
	        return({value: true, reason: 'Not Valid'});	
	    }
	}
}
