var $asMinisearchDatepickerDates = new Array();

function linkDatepickerToAjaxDropDowns( 
	$sDatepickerId, 
	$sDateDdlbId, 
	$sMonthYearDdlbId, 
	$sCalendarButtonText,
	$sFullButtonImgPath,
	$sDateFormat
) {
	var $bMonthFieldIncluded = ( $sMonthYearDdlbId != null );
	if( $sDateFormat == undefined )
	{
		$sDateFormat = "dd-mm-yy";
	}
	var $sDatepickerSelector = "#" + $sDatepickerId;
	var $sDateDdlbSelector = "#" + $sDateDdlbId;
	var $sMonthYearDdlbSelector = null;
	var $bBeforeShowCalled = false;
	if( $bMonthFieldIncluded ) $sMonthYearDdlbSelector = "#" + $sMonthYearDdlbId;
	
	var $oDatePicker = $($sDatepickerSelector);
	$oDatePicker.datepicker({
		//disabled : false,
		dateFormat: $sDateFormat,
		buttonImage: $sFullButtonImgPath,
		buttonImageOnly: true,
		buttonText: $sCalendarButtonText,
		showOn: 'both',
		gotoCurrent: false,
		beforeShow: function(input, inst) { 
			//alert( 'beforeShow' );
			$bBeforeShowCalled = true;
			updateCalendarFromAjaxDateField( $sDateDdlbSelector, $sDatepickerSelector); 
			var $sYear = $($sDatepickerSelector).datepicker( 'getDate' ).getFullYear();
			var $sMonth = padDateField( ( $($sDatepickerSelector).datepicker( 'getDate' ).getMonth()+1 ) );
			fetchDatesForMonth($sYear, $sMonth, $sDateDdlbId, $sDatepickerSelector, (!$bMonthFieldIncluded) );
		},
		onChangeMonthYear: function($sYear, $sMonth, $inst) {
			//alert( 'onChangeMonthYear: $bBeforeShowCalled=' + $bBeforeShowCalled);
			var $sDateMonth = 'DA-' + $sYear + "-" + padDateField($sMonth);
			// ML if we use this flag then the second time a datepicker is opened
			// it doesn't work as the month does not change so when the month is changed
			// the bBeforeShowCalled variable stops the next month from being shown.
			if ( $bBeforeShowCalled )
                        {
				$bBeforeShowCalled = false;
                        }
			if ( $bMonthFieldIncluded )
			{
				//alert( 'updating calendar' );
				updateDate( $sMonthYearDdlbSelector, $sDateMonth );
				fetchDatesForMonth($sYear, $sMonth, $sDateDdlbId, $sDatepickerSelector, (!$bMonthFieldIncluded) );
				updateCalendarFromAjaxDateField( $sDateDdlbSelector, $sDatepickerSelector);
				
				$($sDatepickerSelector).datepicker( "refresh" );
			}
			//alert( 'onChangeMonthYear end' );

		},
		beforeShowDay: function($dCalDate) {
		
			var $sYear = $dCalDate.getFullYear();
			var $sMonth = padDateField( ($dCalDate.getMonth()+1) );
			var $sDate = padDateField( $dCalDate.getDate() );
		
			var $sDateStr = $sYear + "-" + $sMonth + "-" + $sDate;
			var $bShow = true;
			if( $asMinisearchDatepickerDates && $asMinisearchDatepickerDates[$sDatepickerSelector] != null )
			{
				var $asDates = $asMinisearchDatepickerDates[$sDatepickerSelector];
				if( $asDates != null )
				{
					var $sValue = $asDates[$sDateStr];
					if($sValue == null || $sValue != "T") $bShow = false;
				}
			}
			var $asResults = Array();
			$asResults[0] = $bShow;
			$asResults[1] = "";
			$asResults[2] = "";
			
			return $asResults;
		},
		onSelect: function($sDate, $inst) {
			//setDate( $sDateDdlbSelector, $sDate, false );
			
			var $oDate = $oDatePicker.datepicker( "getDate" );
			//alert($oDate);
			var $sYear = $oDate.getFullYear();
			var $sMonth = padDateField( $oDate.getMonth()+1 );
			var $sDay = padDateField( $oDate.getDate() );
			var $sFormattedDate = $sYear + "-" + $sMonth + "-" + $sDay;
			//alert($sFormattedDate);
			setDate($sDateDdlbSelector, $sFormattedDate, false);
		}

	});
	
	$($sDatepickerSelector).datepicker( 'disable' );
}

function fetchDatesForMonth($sYear, $sMonth, $sDateDdlbId, $sDatepickerSelector, $bReturnDate)
{
	//alert( 'fetchDatesForMonth' );
	if( $asMinisearchDatepickerDates ) 
	{
		$asMinisearchDatepickerDates[$sDatepickerSelector] = Array();
		var $asDates = $asMinisearchDatepickerDates[$sDatepickerSelector];

		//var $sMonthYearParam = "DA-" + $sMonthYear + ",";
		//alert( $('#'+$sDateDdlbId) );
		//alert( $('#'+$sDateDdlbId).val());
		//alert( $('#'+$sDateDdlbId).html() );
		$("<select>" + $('#'+$sDateDdlbId).html() + "</select>").find("option").each(function() {
			var $sVal = $(this).val();
			var $asFieldVals = $sVal.split(",");
			var $asDateSections = $asFieldVals[0].split("-");
			var $sDate = $asDateSections[1] + "-" + $asDateSections[2] + "-" + $asDateSections[3];
			$asDates[$sDate] = "T";
			//alert( '$sVal ' + $sVal );
		});
		//alert( 'datepicker refresh' );
		$($sDatepickerSelector).datepicker( "refresh" );
	}
	//alert( 'fetchDatesForMonth end' );
}


function getMonthYear($sDropdownValue) 
{
	var $asFieldVals = $sDropdownValue.split(",");
	var $asDateSections = $asFieldVals[0].split("-");
	
	var $month = $asDateSections[2];
	var $year = $asDateSections[1];
	
	return $year + "-" + $month;
}

function getDayMonthYear($sDropdownValue) 
{
	var $asFieldVals = $sDropdownValue.split(",");
	var $asDateSections = $asFieldVals[0].split("-");
	
	var $day = $asDateSections[3];
	var $month = $asDateSections[2];
	var $year = $asDateSections[1];
	
	return $year + "-" + $month + "-" + $day;
}

function setDate($sDdlbSelector, $sMonth, $sYear, $sDay, $bMonth)
{
	var $sDate = "-" + $sYear + "-" + $sMonth;
	if( $bMonth == false ) $sDate = $sDate + "-" + $sDay;
	$sDate = $sDate + ",";
	//alert($sDate);
	updateDate($sDdlbSelector, $sDate);
}

function setDate($sDdlbSelector, $sDateStr, $bMonth)
{
	var $asDateSections = $sDateStr.split("-");
	var $sDate = "-" + $asDateSections[0] + "-" + $asDateSections[1];
	if( $bMonth == false ) $sDate = $sDate + "-" + $asDateSections[2];
	$sDate = $sDate + ",";
	updateDate($sDdlbSelector, $sDate);
}

function updateDate($sDdlbSelector, $sDate)
{
	//alert( 'update date ' + $sDdlbSelector + ', $sDate: ' + $sDate );
	$($sDdlbSelector + " option").each(function(){
		var $sVal = $(this).val();
		if( $sVal.indexOf($sDate) > -1 )
		{
			$($sDdlbSelector).val($sVal);
			//alert("Date matched");
		}
	});
	$($sDdlbSelector).change();
}

function padDateField($sValue) 
{
	if( ($sValue+"").length == 1 ) $sValue = "0" + $sValue;
	return $sValue;
}

// Set the selected date in the given UI to the date contained in the field supplied.
// This field is populated via an ajax call that populates call with SearchOptions.
function updateCalendarFromAjaxDateField($sDateDdlbSelector, $sDatepickerSelector){

	// Example ajax date field value: "DA-2010-10-15,15-Oct-10," (without the quotes).
	//alert( 'called updateCalendarFromAjaxDateField: ' + $sDateDdlbSelector );
	var $sDayFieldVal = $($sDateDdlbSelector).val();
	//alert( 'updateCalendarFromAjaxDateField: ' + $sDayFieldVal );
	//alert( 'sDayFieldVal: ' + $sDayFieldVal );
	if($sDayFieldVal != null && $sDayFieldVal != "-1")
	{
		var $asFieldVals = $sDayFieldVal.split(",");
		var $asDateSections = $asFieldVals[0].split("-");
		
		var $day = $asDateSections[3];
		var $month = $asDateSections[2];
		var $year = $asDateSections[1];
		
		$($sDatepickerSelector).datepicker('setDate', new Date($year, ( $month -1 ), $day));
		//$($sDatepickerSelector).datepicker( "enable" );
	}

}

//Set the selected date in the given UI to the date contained in the fields supplied.
//These field are populated via an ajax call that populates call with SearchOptions.
function updateCalendarFromAjaxMonthField($sDateDdlbSelector, $sMonthYearDdlbSelector, $sDatepickerSelector){

	// Example ajax date field value: "DA-2010-10-15,15-Oct-10," (without the quotes).
	var $sDayFieldVal = $($sDateDdlbSelector).val();
	alert( 'updateCalendarFromAjaxMonthField: ' + $sDayFieldVal );
	var $asFieldVals = $sDayFieldVal.split(",");
	var $asDateSections = $asFieldVals[0].split("-");
	
	var $day = $asDateSections[3];
	var $month = $asDateSections[2];
	var $year = $asDateSections[1];
	
	$($sDatepickerSelector).datepicker('setDate', new Date($year, $month, $day));

}
