/*---------------------------------------------------------------------------------------
| Génération des jsCalendar pour la date de début ***ET*** la date de fin de séjour.
|
| Il est convenu que les jours ont une valeur de 0 à 6, 0 étant dimanche et 6 samedi.
|
| Arguments :
| - as_modele   : string : jours actifs, sous forme "0,1,2,3,4,5,6" ou ",1,,,,5,"...
| - as_name     : string : nom du calendrier (ex : deb, fin, c23...
| - as_first    : string : numéro du jour affiché en PREMIER sur le calendrier.
| - as_today    : string : date du jour sous forme jj/mm/aaaa.
| - as_min      : string : date d'ouverture minimum sous forme jj/mm/aaaa.
| - as_max      : string : date d'ouverture maximum sous forme jj/mm/aaaa.
| - as_trigger  : string : nom de l'élément HTML servant de trigger de déclenchement.
| - as_input    : string : nom de l'éléement HTML affichant "en clair" la date dans la page.
| - as_position : string : position du calendrier par rapport à l'élement trigger.
| - as_handler  : string : code javascript appelé après sélection d'une date.
---------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------
DERN. MODIF. :
  ac-16-10-09 enlève affichage si as_today incorrect car parfois des problème avec FF, alors que la date est correcte...
---------------------------------------------------------------------------------------*/

function makeCalendar(as_modele, as_name, as_first, as_today, as_min, as_max, as_trigger, as_input, as_position, as_handler, as_lang) {

	//document.write("<br />as_modele : "+ as_modele +"*");
	//document.write("<br />as_name : "+ as_name +"*");
	//document.write("<br />as_first : "+ as_first +"*");
	//document.write("<br />as_today : "+ as_today +"*");
	//document.write("<br />as_min : "+ as_min +"*");
	//document.write("<br />as_max : "+ as_max +"*");
	//document.write("<br />as_trigger : "+ as_trigger +"*");
	//document.write("<br />as_input : "+ as_input +"*");
	//document.write("<br />as_position : "+ as_position +"*");
	//document.write("<br />as_handler : "+ as_handler +"*");
	/*---------------------------------------------------------------------------------------
	| Modèle passé en arguement, sous la forme :
	| as_modele = "0,1,2,3,4,5,6" tout est actif.
	| as_modele = ",1,,,,5," seuls les lundi et les vendredi sont actifs.
	|
	| /!\ ATTENTION TOUJOURS mettre dimanche en PREMIER !!! Indice 0 !
	|
	---------------------------------------------------------------------------------------*/

	// -- ------------
	var ls_test = "";
	// -- ------------

	// -- Test de validité des arguments
	ls_test = /^([0-6]{0,1},){6}[0-6]{0,1}$/;
	if(!ls_test.test(as_modele)) {
		document.write("<br />Arg as_modele "+ as_modele +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	ls_test = /\s/;
	if(ls_test.test(as_name)) {
		document.write("<br />Arg as_name "+ as_name +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	ls_test = /^[0-6]{1}$/;
	if(!ls_test.test(as_first)) {
		document.write("<br />Arg as_first "+ as_first +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	ls_test = /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$/; // -- Format mm/dd/yyyy
	if(!ls_test.test(as_today)) {
		//document.write("<br />Arg as_today "+ as_today +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	if(!ls_test.test(as_min)) {
		document.write("<br />Arg as_min "+ as_min +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	if(!ls_test.test(as_max)) {
		document.write("<br />Arg as_max "+ as_max +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	ls_test = /\s/;
	if(ls_test.test(as_trigger)) {
		document.write("<br />Arg as_trigger "+ as_trigger +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	ls_test = /\s/;
	if(ls_test.test(as_input)) {
		document.write("<br />Arg as_input "+ as_input +" ("+ as_name +") non conforme.<br />");
		return false;
	}
	// -- Le dernier argument n'est pas testé

	// -- ------------
	var ls_prepareCalendar = ""; // -- Paramétrage du calendrier (SEL_DATE + WEEKEND)
	var ls_makeCalendar = ""; // -- Constructeur du calendier
	var ls_valide = ""; // -- Propriété jours actifs : dateStatusFunc de Calendar.setup sous la forme "date.getDay() != indiceJourX || date.getDay() != indiceJourY
	var ls_TTSEL_DATE = ""; // -- Propriété Calendar._TT["SEL_DATE"] qui spécifie le texte écrit en bas du calendrier
	var ls_TTWEEKEND = ""; // -- Propriété Calendar._TT["WEEKEND"] qui spécifie les jours week-end - mis en "valeur" sur le calendrier
	var ls_selection = ""; // -- Termes sélectionner un / select a suivant la langue
	var ls_unJour = ""; // -- Terme jour / day suivant la langue

	var li_nbJoursActifs = 0; // -- Nombre de jours actifs du modèle

	var la_tParam = as_modele.split(","); // -- Tableau string du modèle paramètre
	var la_tExec  = new Array(la_tParam.length); // -- Tableau booléen du modèle de traitement
	// -- ------------


	// -- Parcours du modèle paramètre
	// -- Set à true ou false l'indice du jour si actif / non actif, compte le nb de jours actifs
	for(li_i = 0 ; li_i < la_tParam.length ; li_i++) {
		la_tExec[li_i] = la_tParam[li_i]=='' ? 0 : (1, li_nbJoursActifs+=1) ;
	}

	// -- Quitte la fonction aucun jour n'est actif
	if(!li_nbJoursActifs) {
		document.write("<br />Arg as_modele "+ as_modele +" ("+ as_name +") non conforme.<br />");
		return false;
	}


	// -- Initialisation
	switch(as_lang) {
		case "FR" :
			ls_selection = "S\" + String.fromCharCode(233) + \"lectionnez un ";
			ls_unJour = "jour";
			break;
		default :
			ls_selection = "Select a ";
			ls_unJour = "day";
	}

	// -- Construction ls_valide, ls_TTSEL_DATE
	for(li_i = 0 ; li_i < la_tExec.length ; li_i++) {
		ls_valide = la_tExec[li_i] ? ls_valide += "date.getDay() != "+ li_i +" && " : ls_valide ; // -- Construit le test d'activation du jour pour dateStatusFunc

		ls_TTSEL_DATE = ( la_tExec[li_i] && li_nbJoursActifs == 1 ) ? "\"+Calendar._DN["+ li_i +"]+\"" : ls_TTSEL_DATE ; // -- li_nbJoursActifs = 1
		ls_TTSEL_DATE = ( la_tExec[li_i] && (li_nbJoursActifs > 1 && li_nbJoursActifs < 5 ) ) ? ls_TTSEL_DATE+="\"+Calendar._SDN["+ li_i +"]+\", " : ls_TTSEL_DATE ; // -- li_nbJoursActifs = 2, 3, 4

		ls_TTWEEKEND = la_tExec[li_i] ? ls_TTWEEKEND+=li_i+"," : ls_TTWEEKEND ; // -- Liste jour "sans vide" 1,5,6, ...
	}

	// -- Mise en forme
	ls_valide = ls_valide.substring(ls_valide.length-3, ls_valide.length)=="&& " ? ls_valide.substring(0, ls_valide.length-3) : ls_valide ;
	ls_valide = ls_valide!="" ? "("+ ls_valide +") || " : ls_valide ;

	ls_TTSEL_DATE = ls_selection + ls_TTSEL_DATE;
	ls_TTSEL_DATE = ls_TTSEL_DATE.substring(ls_TTSEL_DATE.length-2, ls_TTSEL_DATE.length)==", " ? ls_TTSEL_DATE.substring(0, ls_TTSEL_DATE.length-2) : ls_TTSEL_DATE ;
	ls_TTSEL_DATE = li_nbJoursActifs >= 5 ? ls_TTSEL_DATE+=ls_unJour : ls_TTSEL_DATE ; // -- li_nbJoursActifs >= 5

	ls_TTWEEKEND = ls_TTWEEKEND.substring(ls_TTWEEKEND.length-2, ls_TTWEEKEND.length)==", " ? ls_TTWEEKEND.substring(0, ls_TTWEEKEND.length-2) : ls_TTWEEKEND ;



	// -- Calendar._TT
	//ls_prepareCalendar = "" +
	ls_makeCalendar = "" +
	"<script type=\"text/javascript\">" +
	"\n//<![CDATA[\n"+
		"Calendar._TT[\"SEL_DATE\"] = \""+ ls_TTSEL_DATE +"\";"+
		"Calendar._TT[\"WEEKEND\"] = \""+ ls_TTWEEKEND +"\";"+
	"\n//]]>\n"+
	"</script>\n\n";
	//document.write(ls_prepareCalendar);


	//document.write("<hr /><br />as_modele : "+ as_modele +"*");
	//document.write("<br />as_name : "+ as_name +"*");
	//document.write("<br />as_first : "+ as_first +"*");
	//document.write("<br />as_today : "+ as_today +"*");
	//document.write("<br />as_min : "+ as_min +"*");
	//document.write("<br />as_max : "+ as_max +"*");
	//document.write("<br />as_trigger : "+ as_trigger +"*");
	//document.write("<br />as_input : "+ as_input +"*");
	//document.write("<br />as_position : "+ as_position +"*");
	//document.write("<br />as_handler : "+ as_handler +"*");


	// -- Calendar.setup
	ls_makeCalendar +=
	"<script type=\"text/javascript\">" +
	"\n//<![CDATA[\n"+
		"today = new Date(\""+ as_today +"\");"+
		"today = today.getTime();"+
		"d"+ as_name +"Min = new Date(\""+ as_min +"\");"+
		"d"+ as_name +"MinY= d"+ as_name +"Min.getFullYear();"+
		"d"+ as_name +"MinT= d"+ as_name +"Min.getTime();"+
		"d"+ as_name +"Max = new Date(\""+ as_max +"\");"+
		"d"+ as_name +"MaxY= d"+ as_name +"Max.getFullYear();"+
		"d"+ as_name +"MaxT= d"+ as_name +"Max.getTime();"+

		//"\ndocument.write(\"<br /><br />as_min="+ as_min +"\");"+
		//"\ndocument.write(\"<br />d"+ as_name +"Min=\"+d"+ as_name +"Min);"+
		//"\ndocument.write(\"<br />d"+ as_name +"MinY=\"+d"+ as_name +"MinY);"+
		//"\ndocument.write(\"<br />d"+ as_name +"MinT=\"+d"+ as_name +"MinT);"+
		//"\ndocument.write(\"<br />d"+ as_name +"Max=\"+d"+ as_name +"Max);"+
		//"\ndocument.write(\"<br />d"+ as_name +"MaxY=\"+d"+ as_name +"MaxY);"+
		//"\ndocument.write(\"<br />d"+ as_name +"MaxT=\"+d"+ as_name +"MaxT);"+

		"Calendar.setup({"+
			"inputField : \""+ as_input +"\","+
			"ifFormat : \"%m/%d/%Y\","+
			"button : \""+ as_trigger +"\","+
			//"onSelect : function() {"+ as_handler + " this.hide();},"+
			"onClose : function() {"+ as_handler + " this.hide();},"+
			"align : \""+ as_position +"\","+
			"singleClick : true,"+
			"range : [d"+ as_name +"MinY,d"+ as_name +"MaxY],"+
			"firstDay : "+ as_first +","+
			"firstDate : \""+ as_min +"\","+
			"dateStatusFunc : function (date) {"+ // -- Désactive les autres jours que les samedis et la date du jour
				"d"+ as_name +"Tmp = date.getTime();"+
				"if("+ ls_valide +" (d"+ as_name +"Tmp < d"+ as_name +"MinT || d"+ as_name +"Tmp > d"+ as_name +"MaxT) ) {"+ // -- Jour désactivé ou hors ouverture planning
					"return (d"+ as_name +"Tmp != today) ? true : false;"+ // -- Autre jour que today
				"} else {"+ // -- Jour actif et dans ouverture planning
					"return false;"+
				"}"+
			"}"+

		"});"+
	"\n//]]>\n"+
	"</script>";
	//document.write(ls_makeCalendar);
	return ls_makeCalendar;
}