/*** display calendar V2 by Fabrice Sanna 16/02/2009 ***/

var date = new Date();
var annee = date.getFullYear();
var mois = date.getMonth();
var LesMois = ["Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet","Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre"];
var LesMois2 = ["Jan","F&eacute;v","Mar","Avr","Mai","Jui","Juil","Aou","Sep","Oct","Nov","D&eacute;c"];
var LesJours = ["Dim","Lun","Mar","Mer","Jeu","Ven","Sam","Dim"];
var LesChambres = ["Chambres 2 pers.","Chambres 2 pers.<br /> Vue Mer","Chambres 2 pers. <br />Vue jardin / colline","Chambres 2 pers.<br /> C&ocirc;t&eacute; Rue","Chambres 3 pers.","Chambres 3 pers. <br />Vue Mer","Chambres 3 pers.<br />Vue jardin / colline","Chambres 3 pers. <br />C&ocirc;t&eacute; Rue","Chambres 4 pers.","Chambre Handicap&eacute;"];
var statSelected = 'free';
var val;
var dateArray = new Array();

// initialisation du tableau

for ( var init = $('select')[0].value; init < ( parseInt( $('select')[0].value) + parseInt( $('select').length ) ); init++ ) {
	dateArray[init] = "";
}


/****** Calendrier verticale sur 1 année ********/
function yearCalendarV( display ) {

	var afficher  = new Date();
	var calendrier = "<table id='calendarTable' title='" + display +"'>";

	//En-tête du calendrier
	calendrier += "<tr class='colH'>";
	calendrier += "<td class='col1'>&nbsp</td>";

	for( var i=1; i<32; i++ ) {
		calendrier+="<td>"+i+"</td>";
	}
	calendrier += "</tr>";

	afficher.setYear( display );

	//Lignes contenant les mois
	for( var j=0; j<12; j++) {

		calendrier += "<tr>";
		calendrier += "<td class='colV'>"+LesMois[j]+"</td>";

		for( i=0; i<31; i++ ) {
			afficher.setDate(i+1);
			afficher.setMonth(j);
			calendrier+="<td id='"+(i+1)+"-"+(j+1)+"-"+display+"'";

			//Rempli la case
			if(afficher.getDate()!=i+1) {
				calendrier+=">&nbsp";
				afficher.setDate(i+1);
			}
			else {
				//Si la case correspond a un jour existant, on affiche le numero de la semaine quand la souris passe dessus
				calendrier += "class='undefined' title='Le " +(i+1)+"-"+(j+1)+"-"+display+ " Semaine N°"+Sem(display,j,i)+"'>";
				calendrier += LesJours[afficher.getDay()];
			}
			calendrier+="</td>";
		}
		calendrier+="</tr>";
	}

	calendrier+="</table>";

	//Affichage du calendrier
	$("calendar").innerHTML = calendrier;
}

/******** calendrier sur 1 mois avec services par ligne *************************/

function yearCalendarHotels( display ) {

	var afficher = new Date();
	var year = afficher.getFullYear();
	var daydisplay;
	var calendrier;

	calendrier="<table id='calendarTable' title='" + display + "'>";

	//En-tête du calendrier
	calendrier += "<tr class='colH'>";
	calendrier+="<td class='col1' >&nbsp;</td>";

	for( var i=1; i<32; i++ ) {
		calendrier+="<td >"+i+"</td>";
	}
	calendrier+="</tr>";

	//Lignes contenant les mois
	for(var j=0; j<10; j++) {

		calendrier+="<tr>";
		calendrier+="<td class='colV' id='R" + j + "'>" +LesChambres[j]+"</td>";

		for( i=0; i<31; i++ ) {
			afficher.setDate(i+1);
			afficher.setMonth(display-1);
			calendrier+="<td id='" + (i+1) + "-" + display + "-" + year + "|R"  + j + "'";

			//Rempli la case
			if(afficher.getDate()!=i+1) {
				calendrier+=">&nbsp";
				afficher.setDate(i+1);
			}
			else {
				/*Si la case correspond a un jour existant, on affiche le numero de la semaine quand la souris passe dessus*/
				calendrier+="class='undefined' title='Le " +(i+1)+"-"+(j+1)+"-"+year+ " Semaine N°"+Sem(year,j,i)+"'>";

				daydisplay = LesJours[afficher.getDay()]

				if ( daydisplay == "Sam" ) {
					calendrier+="<span style='color:#000'>" + daydisplay + "</span>";
				}
				else {
					calendrier+=daydisplay;
				}
			}
			calendrier+="</td>";
		}
		calendrier+="</tr>";
	}

	calendrier+="</table>";

	//Affichage du calendrier
	$("calendar").innerHTML=calendrier;
}

/******************************************************/

function setAllIntervalDateInMemory (display) {

	var dispoDate;
	if ( dateArray[display] != "" ) {

		var yearArray =	dateArray[display].split(';');

		for ( var i=0; i < yearArray.length; i++) {

			dispoDate = yearArray[i].split(",") ;
			setIntervalDate ( dispoDate[0], dispoDate[1], dispoDate[2] );
		}
	}
}

/******************************************************/

function setIntervalDate (begDate,enddate,dispo) {
	var dateAdd;
	var dateId;
	var inc;
	var nbDays;
	var mode;  // permet de savoir si mode année ou au mois

	if ( ! begDate ) { return; }

	// Format de la chaine recue: j-m-aaaa ou si mode line j-m-aaaa|Rn
	var idsplitbegDate = begDate.split('|');
	if ( idsplitbegDate[1] ) { mode = 1; }

	var idsplitendDate = enddate.split('|');

	var bDate = idsplitbegDate[0].split("/");
	var eDate = idsplitendDate[0].split("/");


	if ( begDate == enddate ) { nbDays = 1; }
	else { nbDays = getDuration(new Date(bDate[2],(bDate[1]-1),bDate[0]),new Date(eDate[2],(eDate[1]-1),eDate[0])); }

	var begindate = new Date(bDate[2],(bDate[1]-1),bDate[0]);

	for ( inc = 0 ; inc < (parseInt(nbDays) + 1) ; inc++)
	{

		if (inc > 0) {
			begindate = new Date(begindate.getTime() + 86400000 );

			// pour les problèmes de decallage horraire
			if ( begindate.getHours() == "23" ) { begindate = new Date( begindate.getTime() + (60 * 60 * 1000) ); }

		}

		dateId = begindate.getDate() + "-" + (begindate.getMonth()+1) + "-" + begindate.getFullYear();

		try
		{

			if ( mode == 1 ) {
				switch(dispo) {
					case "0": $(dateId + "|" + idsplitbegDate[1]).className = "booked"; break;
					case "1": $(dateId + "|" + idsplitbegDate[1]).className = "free"; break;
					case "2": $(dateId + "|" + idsplitbegDate[1] ).className = "closed"; break;
					default: $(dateId + "|" + idsplitbegDate[1] ).className = "undefined"; break;
				}
			}
			else {
				switch(dispo) {
					case "0": $(dateId).className = "booked"; break;
					case "1": $(dateId).className = "free"; break;
					case "2": $(dateId).className = "closed"; break;
					default: $(dateId).className = "undefined"; break;
				}
			}
		}
		catch (error) { }

	}
}

/******************************************************/

//Fonction chargée de renvoyer le numero de la semaine de la date passée en paramètres
function Sem(A,M,J)
{
	date.setYear(A);
	date.setMonth(M);
	date.setDate(J);
	var date2 = new Date(A,0,1);
	var x = 1;
	//Cherche le premier Lundi de l'année
	do
	{
		date2.setDate(x);
		x++;
	}
	while(date2.getDay()!=1);
	var temps = date.getTime()-date2.getTime()+24*60*60*1000;
	var sem = temps/(1000*60*60*24*7);
	return Math.ceil(sem);
}

function setState(id) {
	document.getElementById(id).className = statSelected;
}

function setStateManydays(id) {

	var dateAdd;
	var idDateAdd;

	// Format de la chaine recue: j-m-aaaa ou si mode line j-m-aaaa|Rn
	var idsplit = id.split('|');
	if ( idsplit[1] ) { var idline = idsplit[1]; }


	var elem = idsplit[0].split('-');

	var idDay = elem[0];
	var idMonth = elem[1];
	var idYear = elem[2];


	var idDate = new Date(idYear,(idMonth-1),idDay);

	var maxDays = document.getElementById('nbDays').value;

	for (var inc=1; inc < maxDays; inc++ )
	{
		dateAdd = new Date(idDate.getTime() + (86400000 * inc));
		idDateAdd = dateAdd.getDate() + "-" + ( dateAdd.getMonth()+1 ) + "-" + dateAdd.getFullYear();

		try
		{
			if ( idline ) { $(idDateAdd + "|" + idline).className = statSelected; }
			else { $(idDateAdd).className = statSelected; }
		}
		catch (error) { }

	}
}

function testInt(nbJourValue) {

	if (isNaN(nbJourValue.value)==false) { nbJourValue.value=parseInt(nbJourValue.value); }
	else { nbJourValue.value=7; }
}

function selectState (itemSelected) {

  var selectStyle = "2px solid #ff0000";

  for (var i = 1 ; i < 5 ; i++) {

		if ( document.getElementById("tdState"+i) == document.getElementById("tdState"+itemSelected) ) {
				document.getElementById("tdState"+i).style.border = selectStyle;
				document.getElementById("tdStateTxt"+i).style.color = "#ff0000";
		}
		else {
			document.getElementById("tdState"+i).style.border = "none";
			document.getElementById("tdStateTxt"+i).style.color = "#000000";
		}

	}
}

function getDuration(date1,date2,unitdate)
{
	var result;

  if (date2>date1) {

		switch(unitdate) {
			case "week":result=Math.abs(Math.round((date2-date1)/604800000));break;
			case "hours":result=Math.abs(Math.round((date2-date1)/86400000));break;
			case "minutes":result=Math.abs(Math.round((date2-date1)/60000));break;
			case "seconds":result=Math.abs(Math.round((date2-date1)/1000));break;
			default:result=Math.abs(Math.round((date2-date1)/86400000));break;
		}
	}
	else { result=false; }

	return result;
}

