
var ENGLISH  = 0;
var FRANCAIS = 1;
var eCalendar;

function CCalendar(p_sParent, p_calendarID, p_objDate, page_type ,page_id){
	var m_arDays;
	var m_arMonths;

	var m_objDate;
	var length;
	var m_Month;
	var m_Date;
	var m_Day;
	var m_Year;
	var m_FirstDay;
	var m_ePrev;
	var m_eNext;
	var m_eToday;
	var m_NextImg;
	var m_PreviousImg;
	var m_nLanguage;
	var m_eCalendar;
	var p_calendarID;
	var m_defParent;
	
	var page_type;
	var page_id;

	this.m_NextImg = "";
	this.m_PreviousImg = "";

	this.m_arYear		= new Array();
	this.m_arYear		= new Array('2006', '2007', '2008', '2009');

	this.m_arActive		=  "0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0";

	this.m_arDays		= new Array();
	this.m_arDays[ENGLISH]	= new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
	this.m_arDays[FRANCAIS]	= new Array('Dimanche','Lunid','Mardi','Mercredi','Jeudi','Vendredi','Samedi');

	this.m_arMonths		= new Array();
	this.m_arMonths[ENGLISH]	= new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	this.m_arMonths[FRANCAIS]	= new Array('Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','D&eacute;cembre');

	//this.id = id;

	if (typeof CCalendar_prototype == 'undefined'){
		CCalendar_prototype = true;
		// Interface
		CCalendar.prototype.buildCalendar		= CCalendar_buildCalendar;
		CCalendar.prototype.getFormattedDate	= CCalendar_getFormattedDate;
		CCalendar.prototype.showCalendar		= CCalendar_showCalendar;
		CCalendar.prototype.attachEvent			= CCalendar_attachEvent;
		CCalendar.prototype.setLanguage			= CCalendar_setLanguage;
		CCalendar.prototype.refresh				= CCalendar_refresh;
		CCalendar.prototype.nextMonth			= CCalendar_nextMonth;
		CCalendar.prototype.previousMonth		= CCalendar_previousMonth;
		CCalendar.prototype.gotoToday			= CCalendar_gotoToday;
		CCalendar.prototype.goto				= CCalendar_goto;

		// fonctions internes
		CCalendar.prototype.changeMonth			= CCalendar_changeMonth;
		CCalendar.prototype.initInstance		= CCalendar_initInstance;
		CCalendar.prototype.attachChangeMonthEvent	= CCalendar_attachChangeMonthEvent;
		CCalendar.prototype.getLength			= CCalendar_getLength;
	}

	// Initialisation des données membres
	this.initInstance(this, p_objDate);

	this.m_nLanguage = FRANCAIS;

	this.p_calendarID = p_calendarID;
	
	this.page_type = page_type;
	this.page_id = page_id;
	
	var innerHTML = this.buildCalendar(p_calendarID);

	this.m_defParent = document.getElementById(p_sParent);
	this.m_defParent.innerHTML = innerHTML;

	this.m_eCalendar = document.getElementById(p_calendarID);

	this.attachChangeMonthEvent();
	
	CCalendar_changeMonth(this, 0);
	
	
}

function CCalendar_attachChangeMonthEvent(){
	this.m_ePrev = document.getElementById("nav_previous");
	this.m_ePrev.onclick = this.previousMonth;
	this.m_ePrev._calendar = this;
	//this.m_ePrev.setAttribute('_calendar', this);

	this.m_eNext = document.getElementById("nav_next");
	this.m_eNext.onclick = this.nextMonth;
	this.m_eNext._calendar = this;
	//this.m_eNext.setAttribute('_calendar', this);

	this.m_eToday = document.getElementById("nav_today");
	this.m_eToday.onclick = this.gotoToday;
	this.m_eToday._calendar = this;
	
	var month_select = document.getElementById("month_select");
	month_select.onchange = this.goto;
	month_select._calendar = this;

	var year_select = document.getElementById("year_select");
	year_select.onchange = this.goto;
	year_select._calendar = this;
}

function CCalendar_buildCalendar(p_calendarID){	
	if ((this.m_arYear[this.m_arYear.length - 1] == this.m_objDate.getFullYear()) && (this.m_objDate.getMonth() == 11))
		display_next = "none";
	else
		display_next = "block";

	if ((this.m_arYear[0] == this.m_objDate.getFullYear()) && (this.m_objDate.getMonth() == 0))
		display_previous = "none";
	else
		display_previous = "block";
		
	var sCalendar = '<div class="ui-datepicker-inline" style="margin: 20px 0pt;">'+
	'	<div class="ui-datepicker-links">'+
	'		<div class="ui-datepicker-prev">'+
	'			<div style="display:' + display_previous + '"><img id="nav_previous" src="/chmp/img/calendar/nav-left.gif" /></div>'+
	'		</div>'+
	'		<div class="ui-datepicker-current">'+
	'				<img id="nav_today" src="/chmp/img/calendar/today.gif"/>'+
	'		</div>'+
	'		<div class="ui-datepicker-next">'+
	'			<div style="display:' + display_next + '"><img id="nav_next" src="/chmp/img/calendar/nav-right.gif" /></div>'+
	'		</div>'+
	'	</div>'+
	'	<div class="ui-datepicker-one-month ui-datepicker-new-row">'+
	'		<div class="ui-datepicker-header">'+
	'			<div class="slectdate">'+
	'			<select id="month_select" class="ui-datepicker-new-month">';
					for(i=0; i<12; i++){
						if(i == this.m_objDate.getMonth())
							sCalendar += '<option value="' + i + '" selected>' + this.m_arMonths[this.m_nLanguage][i] + '</option>'
						else
							sCalendar += '<option value="' + i + '">' + this.m_arMonths[this.m_nLanguage][i] + '</option>'
					}
				sCalendar += '</select>'+
	'			<select id="year_select" class="ui-datepicker-new-year" onclick="javascript:;" onChange="javascript:;">';
					for(i=0; i<this.m_arYear.length; i++){
						if(this.m_arYear[i] == this.m_objDate.getFullYear())
							sCalendar += '<option value="' + this.m_arYear[i] + '" selected>' + this.m_arYear[i] + '</option>'
						else
							sCalendar += '<option value="' + this.m_arYear[i] + '">' + this.m_arYear[i] + '</option>'
					}
				sCalendar += '</select>'+
	'		</div>'+
	'	</div>'+
	
	'	<table class="ui-datepicker" cellspacing="0" cellpadding="0">'+
	'		<thead>'+
	'		    <tr class="ui-datepicker-title-row">'+
	'		    	<td><a title="Dimanche" onClick="javascript:;">Di</a></td>'+
	'		    	<td><a title="Lundi" onClick="javascript:;">Lu</a></td>'+
	'			    <td><a title="Mardi" onClick="javascript:;">Ma</a></td>'+
	'			    <td><a title="Mercredi" onClick="javascript:;">Me</a></td>'+
	'			    <td><a title="Jeudi" onClick="javascript:;">Je</a></td>'+
	'			    <td><a title="Vendredi" onClick="javascript:;">Ve</a></td>'+
	'			    <td><a title="Samedi" onClick="javascript:;">Sa</a></td>'+
	'		    </tr>'+
	'	    </thead>'+
	'		<tbody>';
			var d = this.m_objDate;
			d.setDate(1);
			var today = d.getDay();
			
			var lastDay = this.getLength(this);
			for(i=0; i<today; i++){
				sCalendar += '<td class="ui-datepicker-days-cell ui-datepicker-other-month ui-datepicker-unselectable"> </td>';
			}
			for(i=today; i<lastDay+today; i++){
				if((i==7) || (i==14) || (i==21) || (i==28) || (i==35)){
					sCalendar += '</tr><tr class="ui-datepicker-days-row">';
				}
				if(this.m_arActive.charAt((i-today+1)*2) == "1"){
					
					//var href = "day=" + ((i+1)-today) + "&month=" + (this.m_objDate.getMonth() + 1) + "&year=" +  this.m_objDate.getFullYear();
					var href =  this.m_objDate.getFullYear() + ':' + (this.m_objDate.getMonth() + 1) + ':' + ((i+1)-today);
					
					sCalendar += '<td class="ui-datepicker-days-cell" onClick="javascript:;"><a onclick="javascript:getActivite(' +"'"+ href +"'"+ ')"><b style=" color:#2a97e4">' + ((i+1)-today) + '</b></a></td>';
				}else{
					sCalendar += '<td class="ui-datepicker-days-cell" style="text-align:center;">' + ((i+1)-today) + '</td>';
				}
			}
	sCalendar += '	</tbody>'+
	'	</table>'+
	'</div>';
	return sCalendar;
}

function CCalendar_getFormattedDate(){
	return days[this.m_Day] + ', ' + months[this.m_Month] + ' ' + this.m_Date + ', ' + this.m_Year;
	//return this.month + '/' + this.date + '/' + this.year;
}

function CCalendar_getLength(p_objThis){
	switch(p_objThis.m_Month){
		case 1:
			if((p_objThis.m_objDate.getFullYear()%4==0&&p_objThis.m_objDate.getFullYear()%100!=0)||p_objThis.m_objDate.getFullYear()%400==0)
				return 29;
			else
				return 28;
		case 3:
			return 30;
		case 5:
			return 30;
		case 8:
			return 30;
		case 10:
			return 30
		default:
			return 31;
	}
}

function CCalendar_nextMonth(event){
	if ((!event) && (window.event))
		event = window.event;
	if (event){
		var eTarget = (event.target) ? event.target : event.srcElement;

		if (eTarget){
			CCalendar_changeMonth(eTarget._calendar, 1);
		}
	}
}

function CCalendar_previousMonth(event){
	if ((!event) && (window.event)){
		event = window.event;
	}
	if (event){
		var eTarget = (event.target) ? event.target : event.srcElement;

		if (eTarget){
			CCalendar_changeMonth(eTarget._calendar, -1);
		}
	}
}

function CCalendar_gotoToday(event){
	if ((!event) && (window.event)){
		event = window.event;
	}
	if (event){
		var eTarget = (event.target) ? event.target : event.srcElement;

		if (eTarget){
			var p_objThis = eTarget._calendar;
			var objToday = new Date();
			
			var offset = (objToday.getFullYear() - p_objThis.m_objDate.getFullYear()) * 12 + (objToday.getMonth() - p_objThis.m_objDate.getMonth());
			CCalendar_changeMonth(p_objThis, offset);
		}
	}
}

function CCalendar_goto(event){
	if ((!event) && (window.event)){
		event = window.event;
	}
	if (event){
		var eTarget = (event.target) ? event.target : event.srcElement;

		if (eTarget){
			var year = document.getElementById("year_select").value;
			var month = document.getElementById("month_select").value;

			var p_objThis = eTarget._calendar;

			var offset = (year - p_objThis.m_objDate.getFullYear()) * 12 + (month - p_objThis.m_objDate.getMonth());
			CCalendar_changeMonth(p_objThis, offset);
		}
	}
}

function CCalendar_attachEvent(p_eEvent, p_sDayID){
}

function CCalendar_showCalendar(){
	if (this.m_defParent){
		this.m_eCalendar.style.visibility = "visible";
	}
}

function CCalendar_setLanguage(p_nLanguage){
	if ((p_nLanguage = ENGLISH) || (p_nLanguage = FRANCAIS))
		this.m_nLanguage = p_nLanguage
	else
		this.m_nLanguage = ENGLISH;
}

function CCalendar_refresh(){
	this.m_defParent.innerHTML = this.buildCalendar();

	this.m_ePrev = document.getElementById("nav_previous");
	this.m_ePrev.onclick = this.previousMonth;
	this.m_ePrev.setAttribute('_calendar', this);

	this.m_eNext = document.getElementById("nav_next");
	this.m_eNext.onclick = this.nextMonth;
	this.m_eNext.setAttribute('_calendar', this);

	this.m_eToday = document.getElementById("nav_today");
	this.m_eToday.onclick = this.gotoToday;
	this.m_eToday.setAttribute('_calendar', this);
}

function CCalendar_changeMonth(p_objThis, p_nOffset){
	p_objThis.m_objDate.setMonth(p_objThis.m_objDate.getMonth() + p_nOffset);
	p_objThis.m_Month	= p_objThis.m_objDate.getMonth();
	p_objThis.m_Date	= p_objThis.m_objDate.getDate();
	p_objThis.m_Day		= p_objThis.m_objDate.getDay();
	p_objThis.m_Year	= p_objThis.m_objDate.getFullYear();
	p_objThis.length	= p_objThis.getLength(p_objThis);
	
	AC.ajax(p_objThis, p_nOffset);
}
	

function CCalendar_changeMonth2(p_objThis, p_nOffset){	
	p_objThis.m_defParent.innerHTML = p_objThis.buildCalendar();
	p_objThis.m_ePrev = document.getElementById("nav_previous");
	p_objThis.m_ePrev.onclick = p_objThis.previousMonth;
	p_objThis.m_ePrev._calendar = p_objThis;

	p_objThis.m_eNext = document.getElementById("nav_next");
	p_objThis.m_eNext.onclick = p_objThis.nextMonth;
	p_objThis.m_eNext._calendar = p_objThis;

	p_objThis.m_eToday = document.getElementById("nav_today");
	p_objThis.m_eToday.onclick = p_objThis.gotoToday;
	p_objThis.m_eToday._calendar = p_objThis;

	var month_select = document.getElementById("month_select");
	month_select.onchange = p_objThis.goto;
	month_select._calendar = p_objThis;

	var year_select = document.getElementById("year_select");
	year_select.onchange = p_objThis.goto;
	year_select._calendar = p_objThis;	
}

function CCalendar_initInstance(p_objThis, p_objDate){
	p_objThis.m_objDate = p_objDate;	// new Date();

	p_objThis.m_Month	= p_objThis.m_objDate.getMonth();
	p_objThis.m_Date	= p_objThis.m_objDate.getDate();
	p_objThis.m_Day		= p_objThis.m_objDate.getDay();
	p_objThis.m_Year	= p_objThis.m_objDate.getFullYear();
	p_objThis.length	= p_objThis.getLength(p_objThis);

	p_objThis.m_objDate.setDate(1);
	p_objThis.m_FirstDay = p_objThis.m_objDate.getDay();
	p_objThis.m_objDate.setDate(p_objThis.m_Day);
}


AC = {

	ajax:function(p_objThis, p_nOffset)
	{
		var params = {year: p_objThis.m_Year, month: p_objThis.m_Month, pageType: p_objThis.page_type, pageId: p_objThis.page_id};
		
		
		$j.post("/calendarGetInfo", params, function(data)
		{
			p_objThis.m_arActive = data;
			CCalendar_changeMonth2(p_objThis, p_nOffset);
		}); 
			
	}
};