/** 
 * @class calendar
 * @package CalendarUtil
 * @version 1.1
 * @author Frédéric LECOINTRE<frederic.lecointre@burnweb.net>
 * 
 */


/**
 * Initialise un calendrier
 * @param string sId 
 * @param string sDate
 * @param integer iDate
 * @param function fSelectHandler
 * @return void
 */
CalendarUtil = new Object();
CalendarUtil.lastDates = new Object();
CalendarUtil.initCalendar = function(sId, sDate, iDate, fSelectHandler, oOptions){

	$.dpText = {
		TEXT_PREV_YEAR		:	'Année précédente',
		TEXT_PREV_MONTH		:	'Mois précédent',
		TEXT_NEXT_YEAR		:	'Année suivante',
		TEXT_NEXT_MONTH		:	'Mois suivant',
		TEXT_CLOSE			:	'Fermer',
		TEXT_CHOOSE_DATE	:	'Choisir une date'
	};
	
	CalendarUtil.lastDates[sId] = sDate;

	oOptions = $.extend(
				{	
					startDate: '01/01/1900',
					createButton: false,
					displayClose: true,
					initialDisplayString: null
				}
				, oOptions);

	var fInternalHandler = function(e, selectedDate, $td){
									$('#display' + sId).attr('innerHTML',selectedDate.asString());
									$('#' + sId).attr('value', selectedDate.asString());
									$('#display' + sId).dpClose();
								};//end function
								
	$('#display' + sId)
			.datePicker(oOptions)
			.dpSetOffset(20, 20)
			.bind('click',
				function(){
					$(this).dpDisplay();
					this.blur();
				}//end function
			)
			.bind('dateSelected', 
				(fSelectHandler) ?  fSelectHandler : fInternalHandler
			)
			.dpSetSelected(sDate);
	
	if(oOptions.initialDisplayString){
		$('#display' + sId).html(oOptions.initialDisplayString);
	}//end if
	
}//end function

/**
 * Convertit une chaîne de caractère de la forme jour/mois/année en objet Date
 * @param string sDate 
 * @return Date
 */
CalendarUtil.stringToDate = function(sDate){
	if(sDate.length > 0){
		var aDate = sDate.split('/');
		return new Date(aDate[2], aDate[1] -1, aDate[0]);
	}//end if
	else{
		return new Date();
	}//end else
}//end function

/**
 * Convertit la valeur du champ sField en objet Date. voir stringToDate(sDate)
 * @param string sField 
 * @return Date
 */
CalendarUtil.fieldToDate = function(sField){
	var sDate = window.document.getElementById(sField).value;
	return stringToDate(sDate);
}//end function

/**
 * Renvoie true si le champ sField est vide
 * @param string sField 
 * @return Date
 */
CalendarUtil.isFieldEmpty = function(sField){
	return (window.document.getElementById(sField).value.length == 0);
}//end function

/**
 * Renvoie true si l'élément sArea est vide
 * @param string sArea 
 * @return Date
 */
CalendarUtil.isDisplayAreaEmpty = function(sArea){
	return (window.document.getElementById(sArea).innerHTML.length == 0);
}//end function

/**
 * Renvoie 0 si les dates représentent le même jour, 1 si la premiere est postérieur à la seconde, -1 sinon 
 * 
 * @param Date oDate1 
 * @param Date oDate2
 * @return Date
 */
CalendarUtil.compareDate = function(oDate1, oDate2){

	if(	oDate1.getDay() == oDate2.getDay() && 
			oDate1.getMonth() == oDate2.getMonth() &&
			oDate1.getYear() == oDate2.getYear()){
		return 0;
	}//end if
	else if(oDate1.getTime() > oDate2.getTime()){
		return 1;
	}//end elseif
	else{
		return -1;
	}//end else
	
}//end function

/**
 * 
 * @param boolean bDateLimit 
 * @param string sId
 * @return void
 */

CalendarUtil.switchDipslayField = function (bDateLimit, sId, sDateTime){
						
	if(bDateLimit == undefined){
		bDateLimit = (window.document.getElementById(sId + 'UI').style.display == 'none');
	}//end if
	
	window.document.getElementById(sId + 'UI').style.display = (bDateLimit) ? 'block' : 'none';
	window.document.getElementById('add' + sId + 'UI').style.display = (!bDateLimit) ? 'block' : 'none';
	
	if(!bDateLimit){
		CalendarUtil.lastDates[sId] = window.document.getElementById(sId).value;
		window.document.getElementById(sId).value = 0;
	}//end if
	else{
	
		if(CalendarUtil.lastDates[sId].length != 0){
		
			window.document.getElementById(sId).value = CalendarUtil.lastDates[sId];
		}
		else{
			
			window.document.getElementById(sId).value = sDateTime;
			
		}
	}//end else
	
	
}//end function