//////////////////////////////////////CALENDAR!!!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

/* GENERAL SETTINGS : feel free to adapt to your needs! */
//appel par: function open_cal(nom input, nom form, langage, formatage date)
//Local Settings

var Language; //The current language
D_Language="FR"; //the langage par excellence

// other languages="EN", "SP","DE"; etc...

function setlang() {
	switch (Language) {
	case "EN":
	Day_Name=["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
	Month_Name=["January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December"];
	FirstDay=0; // the week begins on sunday
	break;
	case "SP":
	Day_Name=["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "S&aacute;"];
	Month_Name=["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", 
	"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];	
	FirstDay=0;
	break;
	case "DE":
	Day_Name=["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
	Month_Name=["Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli",
	"August", "September", "Oktober", "November", "Dezember"];
	FirstDay=0;
	break;
	default:
	Day_Name=["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"];
	Month_Name=["Janvier", "F&eacute;vrier", "Mars", "Avril", "Mai", "Juin", "Juillet", 
	"Ao&ucirc;t", "Septembre", "Octobre", "Novembre", "D&eacute;cembre"];
	FirstDay=1; // la semaine commence lundi	
	break;
	}
}

//Specify the Default Date Format

var Template; // The current date format
D_Template="DD-MM-YYYY"; // Its default


	/* Other examples : "DD-MM-YYYY", "DD MM YY", etc... Accepts "DD" for day, "MM" for month,  
	"YYYY" and "YY" for 4-digit and 2-digit year respectively */


	

//Calendar Dimensions

cell_width=22;
border_width=2;
table_width=7*(cell_width+border_width)+16;
cal_width=table_width+80;
cal_heigth=200;


//Calendar Appearence

body_sty=     "font-family:Verdana, Arial, Helvetica, sans-serif; font_size: 12px; background-color:  F1F1F1 ;padding:0; margin:0;align:center; text-align:center; overflow-x:hidden, overflow-y:hidden ";
margin_sty=   "background-color : White; margin:auto; width:"+table_width+";"; //lignes du tableau
bandeau_sty=  "background-color :Black; font-size: 11px; color: White; width:"+cell_width+"px;text-align:center;"; //nom des jour
cell_sty=     "text-align: background-color: #EAEAEA; center;border-width:"+border_width+";border-style:outset;";
cell_on_sty=  "background-color : white; font-size: 10px; font-weight: bold; cursor:pointer;"; //cellule normales
cell_off_sty= "background-color :#cccccc; font-size: 10px; font-weight: bold; text-align:center;";  // jours off
cell_we_sty=  "background-color :#EED7A6; font-size: 10px; font-weight: bold; cursor:pointer;";  //week end
hodie_sty=    "background-color :#ff7800; font-size: 10px; font-weight: bold; color: White; cursor:pointer;"; //today

onmouse=" onmouseover=\"this.style.borderStyle='inset'\""+ 
	" onmouseout=\"this.style.borderStyle='outset'\"";



/* End of GENERAL SETTINGS ------------------------------ */

// Date initialization


var cur_date;  // cur_date is the currently selected date


var Hodie; // Today in the current date format



// The main function 
function open_cal() { // arguments : invoker, [language], [template]

    var argv=open_cal.arguments;
    var na=argv.length; 			
    
    invoker=argv[0]; // the first argument is the id of the 'client' control; 
		     // store it in global variable invoker
	// the name of the form
	if (na>0) {formInvok=argv[1];}
    else {formInvok=0;} //the default 
	
    if (na>2) {Language=argv[2];}
    else {Language=D_Language;} //the default
    setlang();	

    if (na>3) {Template=argv[3];} 
    else {Template=D_Template;}	

	
    // Date initialization

    cur_date= new Date(); // the default for cur_date is today
    
    // set Hodie
    Hodie= format(cur_date.getFullYear(),cur_date.getMonth()+1,cur_date.getDate());

   
    // recover cur_date	from the client control  (unless invalid)
	if (!invoker)
		alert('la');
	else
		{
    	var date0=unformat(this.document.forms[formInvok].elements[invoker].value);
		}
    if (date0 !="invalid")
    	{cur_date=new Date(date0);}
    
	
    open_cal0();
}

// Open the calendar pop-up 
function open_cal0() {

    calwin = window.open("", "Calendrier", "width="+cal_width+",height="+cal_heigth+",top=200,left=200,resizable=no,scrollbars=no,status=no,toolbar=no");
	
    calwin.document.close();
    calwin.focus();
    show_month();

}


// fill in the calendar popup with data for the current month
 
function show_month() {
    	
    var month=cur_date.getMonth()+1;
    var year=cur_date.getFullYear();
    
    // length of this and previous months	
    var longueur=month_length(month,year);
    var longueur_prec=month_length(month-1,year);
    
    //  compute number of empty cells on first line
    var premier_jour=the_first(month,year)-FirstDay;
    if (premier_jour<0) {premier_jour+=7;}
    
    var ornement;
    var val;
	var onBlur="";
    var onBlur=" onBlur=\"window.close();\"";
    if (isIE()>0) {onBlur="onBlur=\"self.focus();\"";}   //Eh oui; un patchounet pour IE, et un!
	
    //  build the html code = entete+navbar+bandeau+mois+fin    

    var entete="<head><link href=\"./scripts/style.css\" rel=\"stylesheet\" type=\"text/css\"></head><html><body"+setsty(body_sty)+onBlur+"><div align=\"center\"><table><tr><td align=center>";

    var fin="</td></tr></table></div></html></body>";

    var navbar="<table width=\"90%\" id=\"Ppage\"><tr><td>&nbsp;</td><td"+setincr(-1)+"><b> <img src='../../images/boutons_divers/prev.gif' style='cursor:pointer'> </b></td><td width=125 align=center><b>"+Month_Name[month-1]+" "+year+"</b></td><td"+setincr(1)+"><b> <img src='../../images/boutons_divers/next.gif' style='cursor:pointer'> </b></td><td>&nbsp;</td></tr></table>";
   // version avec boutons pour changer d'année 
   //var navbar="<table width=\"90%\" id=\"Ppage\"><tr><td"+setincr(-12)+" ><b> <img src='../../images/boutons_divers/prev_year.gif' style='cursor:pointer'> </b></td><td"+setincr(-1)+"><b> <img src='../../images/boutons_divers/prev.gif' style='cursor:pointer'> </b></td><td width=125 align=center><b>"+Month_Name[month-1]+" "+year+"</b></td><td"+setincr(1)+"><b> <img src='../../images/boutons_divers/next.gif' style='cursor:pointer'> </b></td><td"+setincr(12)+"><b> <img src='../../images/boutons_divers/next_year.gif' style='cursor:pointer'> </b></td></tr></table>";
    
	var bandeau="<table width=\"90%\" id=\"Ppage\"><tr><td align=center><div "+setsty(margin_sty)+"><table width=auto><tr>";
    for (i=0 ; i<7 ; i++) {
        var i_loc=i+FirstDay; if (i_loc> 6) {i_loc+=-7;}
        bandeau+="<td "+setsty(bandeau_sty)+"><B>"+ Day_Name[i_loc] + "</b></td>";
        }
    bandeau+="</tr>";

    // compute how many weeks to display

    var s_max=Math.ceil((longueur+premier_jour)/7);

    var mois="";
    for (s=0; s<s_max; s++) {
        mois+="<tr>";
	
        for (i=0 ; i< 7 ; i++) {
			ornement="";
			
			var i_loc=i+FirstDay; if (i_loc> 6) {i_loc+=-7;}
			if (i_loc==0 || i_loc==6)
				{ornement+=setsty(cell_sty+cell_we_sty);}

			valeur= 7*s + i - premier_jour +1;
			if (valeur > 0 && valeur <= longueur) 
				{val=format(year,month,valeur);
				ornement+=setsty(cell_sty+cell_on_sty)+set_date(invoker,val)+onmouse;
				if (val==Hodie) {ornement=setsty(cell_sty+hodie_sty)+ornement;}
				}
			else
				{ornement=setsty(cell_off_sty);
	      			if (valeur > longueur)
					{valeur-=longueur;}
				if (valeur <=0)                		
					{valeur+=longueur_prec;}
				}
            	 					

			mois+="<td " + ornement + ">" + valeur + "</td>";

        }
        mois+="</tr>";
    }
    mois+="</table></div></td></tr></table>";
    
    calwin.document.write(entete+navbar+bandeau+mois+fin);
    calwin.document.close();

}

// set the style (just for legibility)

function setsty(style) {
    return " style='"+style+"'";
}

// specify the onClick property of a calendar cell
function set_date(control,val) {
		
   	 return " onClick='javascript:window.opener.set_control(\"" + control +  "\",\"" + val + "\");window.close();' ";
}

// sets the client control to the date selected
function set_control(control,val) {
	
	this.document.forms[formInvok].elements[control].value=val;
	//this.document.getElementById(control).value =val;
}


// specify the onClick property of a navbar cell 
function setincr(Num) {
    return " onClick='javascript:window.opener.incmonth("+ Num +");'";
}

// change months accordingly
function incmonth(Num) {
    monat=cur_date.getMonth()+Num;
    cur_date.setMonth(monat);
  //  if (isIE()<1) {window.close();}  // Et de deux!
    open_cal0();
}

// Auxilliary functions

// length of a month
function month_length(month,year) {
    var d0=new Date(year,month-1,1);
    var d1=new Date(year,month,1);
    return Math.round((d1.getTime()-d0.getTime())/86400000);
}

// weekday of the 1st day of a month
function the_first(month,year) {
    var d0=new Date(year,month-1,1);
    return d0.getDay();
}


//Conversion

function format(year,month,day) { //produces a string according to the Template
    var DAY= chaine(day, 2);
    var MONTH= chaine(month, 2);
    var YEAR= chaine(year,4);
    var AR=chaine(year,2);
    var output=Template.replace("DD",DAY);
	output=output.replace("MM",MONTH);	
	output=output.replace("YYYY",YEAR);
	output=output.replace("YY",AR);
	return output;
}

function unformat(dies) { //converts dies from Template format to timestamp (in millliseconds)	
	var DD=dies.substr(Template.indexOf("DD"),2);
	var MM=dies.substr(Template.indexOf("MM"),2);
	var YY;
	var YYYY;	

	if (Template.indexOf("YYYY")==-1) {
		YY=dies.substr(Template.indexOf("YY"),2);
		if (YY <"70")
			{YYYY="20"+YY;}
		else
			{YYYY="19"+YY;}
		}
	else 
		{YYYY=dies.substr(Template.indexOf("YYYY"),4);}
	//check for validity/plausibility
	if (+(DD)<1 || +(DD) >31 || +(MM)< 1 || +(MM)> 12 || +(YYYY)<1900 || +(YYYY)>2100) {return "invalid";}
	var dp=Date.parse(MM + "/" + DD + "/" +YYYY); 
	if (dp!=+(dp)) {return "invalid";}
	
	return dp;
}


function chaine(number,l) { //crudely converts an integer < 10000 to a string of length l < 5 
    	var str="0000"+number;
	return str.substr(str.length-l,l);		
}


function isIE() {				   	
    // My personal experience is that sometimes, a Bach Cantata helps
    // in times of disheartenment.
    return navigator.userAgent.indexOf("MSIE")+1;   
}

