function CalendarControl (){
	this.callbackUrl;
	this.paramControlUri = true; // or Get
	this.divControlId;
	this.divResultId;
	this.isAjax = false;
	this.year;
	this.month;
	this.day;
	this.spinnerUrl;
	this.lang = 'fr';
	this.type;
	this.objectName;
	
	// SETTERS
	this.setName = function(name){
		this.objectName = name;
	}
	
	this.setCurrentDay = function(year,month,day){
		this.year = year;
		this.month = month;
		this.day = day;
	}
	this.setCallbackUrl = function(url){
		this.callbackUrl = url;
	}
	this.setType = function(type){
		this.type = type;
	}
	this.setParamControlGet = function() {
		this.paramControlUri = false;
	}
	this.setDivControlId = function(divControlId){
		this.divControlId = divControlId;	
	}
	this.setDivResultId = function(divResultId){
		this.divResultId = divResultId;
	}
	this.setAjaxControl = function(isAjax){
		if(isAjax){
			isAjax = true;
		}
		this.isAjax = isAjax;
	}
	this.setSpinnerUrl = function(spinnerUrl){
		this.spinnerUrl = spinnerUrl;
	}
	this.setLang = function(lang){
		this.lang = lang;
	}
	
	//Private GETTERS
	
	this.getQueryString = function(calendarType){
		d=new Date()
		time = d.getTime();
		if(this.paramControlUri){
			return calendarType+'/'+this.month+'/'+this.year+'/'+this.day+'/'+this.type+'/'+time;
		}else{
			return '?request='+calendarType+'&lang='+this.lang+'&month='+this.month+'&year='+this.year+'&day='+this.day+'&type='+this.type+'&time='+time;
		}
	}
	
	//AJAX FUNCTIONS
	
	this.writeResponse = function(target,response){
		$("#"+target).html(response);
		
	}
	
	this.makeCalendarAjax = function(){
		var title = "";
		var days = $('.dayrow a');
		for(i =0; i < days.length;i++ ){
			title = $(days[i]).attr("title");
			var day = title.substring(3,5);
			
			days[i].href = 'javascript:'+this.objectName+'.navigate(\''+day+'\')';
		}
	}
	this.makeControlsAjax = function(){
		$('#prev_month').attr('href','javascript:'+this.objectName+'.requestPreviousMonth()');
		$('#reload_month').attr('href','javascript:'+this.objectName+'.requestMonth()');
		$('#next_month').attr('href','javascript:'+this.objectName+'.requestNextMonth()');
		if(this.isAjax){
			$('#du_date').attr('disabled','disabled');
			$('#au_date').attr('disabled','disabled');
			$('#frm_calendar_search').bind('submit',function() {
				return false;
			     });
			$('#evenementMois').attr('href','javascript:'+this.objectName+'.navigate(\'0\')');
			$('#btn_calendar_search').live('click',{obj : this},function(event){event.data.obj.search();});
		}
		
		
	}
	
	this.makeEventsAjax = function(){
		closeText = 'Fermer';
		openText = 'Suite de l\'horaire ';
		$('.click').click(function() {
			$('ul#lvl1').css('display','none');
			id = $(this).attr('id');
			id = id.replace('event_','');
			openDialog('#showdetails');
			calendrier.showDetails(id);
			return false;
		});
		$('#overlay').live('click', function(event) {
			theTarget = $(event.target).attr('id');
			if(theTarget == 'overlay' || theTarget == 'blanket'){
				closeDialog($('#showdetails'));
			}
		});
		if (this.lang == 'en'){
			closeText = 'Close';
			openText = 'More';
		}
		$('.moredates').hide();	
		$('#moredates').toggle(function(){
				$('.moredates').show();
				$('#moredates').text('[ '+closeText+' ]');
			}, function(){
				$('.moredates').hide();
				$('#moredates').text('[ '+openText+' ]');
			});
		$('#showdetails')
		.find('.cancel')
		.live('click', function() {
			closeDialog(this);
		})                            
		.end()
		.find('.cancel')
		.live('click', function() {
			return false;
		});
	}
	
	this.makeAjax = function(){
		this.makeControlsAjax();
		if(this.isAjax){
			this.makeCalendarAjax();
		}
		this.makeEventsAjax();
	}
	
	//NAVIGATION FUNCTIONS
	
	this.navigate = function(day){
		this.day = day;
		
		$('#'+this.divResultId).html('<img src="'+this.spinnerUrl+'" />');
		
		$('.current').removeClass('current');
		$('td#day'+day).addClass('current');
		
		var myUrl = this.callbackUrl+this.getQueryString('details');
	
	
	
		$.ajax({ url: myUrl, context: this, success: function(data){
			this.writeResponse(this.divResultId,data);
			this.makeEventsAjax();
		      }});

	}
	
	this.showDetails = function(id){
		this.day = id;
		
		$('#showdetails_content').html('<img src="'+this.spinnerUrl+'" />');

		var myUrl = this.callbackUrl+this.getQueryString('id');

		$.ajax({ url: myUrl, context: this, success: function(data){
			$('#showdetails_content').html(data);
			this.makeEventsAjax();
		}});

	}
	
	this.search = function(){
		d=new Date()
		
		time = d.getTime();
		var du_date_value = $('#du_date').val();
		var au_date_value = $('#au_date').val();
		var keyword_value = $('#mot_cle').val();
		
		$('#'+this.divResultId).html('<img src="'+this.spinnerUrl+'" />');
		
		var myUrl = this.callbackUrl+this.getQueryString('details');
		
		$.ajax({ url: myUrl, type: 'POST', context: this, data: { du_date: du_date_value, au_date: au_date_value, mot_cle: keyword_value }, success: function(data){
			this.writeResponse(this.divResultId,data);
			this.makeEventsAjax();
		      }});
		
		return false;
	}
	
	this.requestMonth = function(){
		
		$('#'+this.divControlId).html('<img src="'+this.spinnerUrl+'" />');
		$('#'+this.divResultId).html('');
		
		var myUrl = this.callbackUrl+this.getQueryString('calendrier');
		
		$.ajax({ url: myUrl, context: this, success: function(data){
			this.writeResponse(this.divControlId,data);
			$('.current').removeClass('current');
			
			this.makeAjax();
		      }});
	}
	this.requestNextMonth = function (){
		if(this.month != 12){
			this.month++;
		}else{
			this.year++;
			this.month = 1;
		}
		this.requestMonth(this.year,this.month);
	}
	this.requestPreviousMonth = function (){
		if(this.month != 1){
			this.month--;
		}else{
			this.year--;
			this.month = 12;
		}
		this.requestMonth(this.year,this.month);
	}
	
}

function check_date_diff() {
	
	var du_date_value = $('#du_date').val();
	var au_date_value = $('#au_date').val();
	
	var year = du_date_value.substring(0,4);
	var month = (du_date_value.substring(5,7) - 1);
	var day = du_date_value.substring(8,10);

	var date_du = new Date(year, month, day) //Month is 0-11 in JavaScript
	
	year = au_date_value.substring(0,4);
	month = (au_date_value.substring(5,7) - 1);
	day = au_date_value.substring(8,10);

	var date_au = new Date(year, month, day) //Month is 0-11 in JavaScript
	var one_day=1000*60*60*24

	//Calculate difference btw the two dates, and convert to days
	
	if (du_date_value != "" && au_date_value != ""){
		var jours_diff = Math.ceil((date_au.getTime()-date_du.getTime())/(one_day));
		if (jours_diff <= 0)
		{
			alert("La date de fin doit être plus grande que la date de départ.");
			$('#au_date').val("");
		}
	}
}
