/*
Objet Calendrier

Pour utiliser, inclure les lignes suivantes dans le fichier

Au début de la page :
<link rel="stylesheet" type="text/css" href="calendar.css">
<script language="JavaScript" type="text/javascript" src="calendar.js">
</script>

Sur body (pour traduire):
<body onload="JavaScript:jscal_set_language('language_code');jscal_div_name='toto';">
language_code = fr ou en

À la fin de la page:
<div name="div_calendar" id="div_calendar" style="position:absolute;visibility:hidden;width=250px;border-style:solid;">              
</div>
*/
var jscal_div_name = "div_calendar";
var jscal_d = new Date();
var jscal_currDay = jscal_d.getDate();
var jscal_currMonth = jscal_d.getMonth() + 1;
var jscal_currYear = jscal_d.getFullYear();
var jscal_date_return = "";
var jscal_language = "fr";
var jscal_oldDay = jscal_d.getDate();
var jscal_oldMonth = jscal_d.getMonth() + 1;
var jscal_oldYear = jscal_d.getFullYear();
var jscal_can_close = true;
var jscal_show_today = false;
var jscal_special_function = "";

var jscal_input_format = "yyyy-mm-dd";
//var jscal_input_format = "mm-dd-yyyy";
//var jscal_input_format = "dd-mm-yyyy";
var jscal_output_format = "yyyy-mm-dd";
//var jscal_output_format = "mm-dd-yyyy";
//var jscal_output_format = "dd-mm-yyyy";

//Indique si doit appeler la fonction 'js_hide_select' permettant de masquer les SELECT
var jscal_hide_select = false;

var jscal_months_fr = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
var jscal_months_en = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var jscal_days_fr = new Array("Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam");
var jscal_days_en = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); 

function jscal_set_language(var_lang) {
  switch (var_lang) {
    case "en":
      jscal_language = "en";
      break;
    default:
      jscal_language = "fr";
      break;
  }
}

function jscal_close() {
  if (document.getElementById(jscal_div_name).style.visibility == "visible") {
    if (jscal_can_close) {    
      document.getElementById(jscal_div_name).style.visibility = "hidden";
			if (jscal_hide_select){
			  js_hide_select_cal(false);
			}
    }
  }
}
  
function jscal_show_calendar(obj_name, topOff, leftOff) {
  var obj_value = document.getElementById(obj_name).value;
  var obj = document.getElementById(obj_name);
  var y = findPosY(obj) + topOff;
  var x = findPosX(obj) + leftOff;
	
  jscal_set_return_object(obj_name);
  jscal_set_date(obj_value);    
  jscal_draw_calendar(x, y);  
}  

function jscal_set_return_object(obj_name) {
  jscal_date_return = obj_name;
}
  
function jscal_set_date(obj_date) {
  var d1 = "";
  var m1 = "";
  var d;
  var m;
  var y;
  var x;
  
  if (obj_date != ""){
    switch (jscal_input_format){
      case "mm-dd-yyyy":
        y = obj_date.substring(6, 10);        
    
        m1 = obj_date.substring(0, 2);
        x = m1.substring(0, 1);
        if (x == "0") { m = m1.substring(1, 2); } else { m = m1;}     
      
        d1 = obj_date.substring(3, 5);
        x = d1.substring(0, 1);
        if (x == "0") { d = d1.substring(1, 2); } else { d = d1;}                                 
        break;
      case "dd-mm-yyyy":
        y = obj_date.substring(6, 10);        
    
        m1 = obj_date.substring(3, 5);
        x = m1.substring(0, 1);
        if (x == "0") { m = m1.substring(1, 2); } else { m = m1;}     
      
        d1 = obj_date.substring(0, 2);
        x = d1.substring(0, 1);
        if (x == "0") { d = d1.substring(1, 2); } else { d = d1;}                                       
        break;
      case "yyyy-mm-dd":
      default:
        y = obj_date.substring(0, 4);        
    
        m1 = obj_date.substring(5, 7);
        x = m1.substring(0, 1);
        if (x == "0") { m = m1.substring(1, 2); } else { m = m1;}     
      
        d1 = obj_date.substring(8, 10);
        x = d1.substring(0, 1);
        if (x == "0") { d = d1.substring(1, 2); } else { d = d1;}                           
        break;                
    }
  }else{
    var new_d = new Date();    
    d = new_d.getDate();
    m = new_d.getMonth() + 1;
    y = new_d.getFullYear();
    jscal_oldYear = y;
    jscal_oldMonth = m;
    jscal_oldDay = d;    
    }
  m = m - 1;
  jscal_set_date_all(d, m, y);
/*
  var d1 = "";
  var m1 = "";
  var d;
  var m;
  var y;
  var x;
  var new_d;
  
  if (obj_date != "") {
    y = obj_date.substring(0, 4);        
    
    m1 = obj_date.substring(5, 7);
    x = m1.substring(0, 1);
    if (x == "0") { m = m1.substring(1, 2); } else { m = m1;}     
    
    d1 = obj_date.substring(8, 10);
    x = d1.substring(0, 1);
    if (x == "0") { d = d1.substring(1, 2); } else { d = d1;}                     
  }      
  else {
    new_d = new Date();
    d = new_d.getDate();
    m = new_d.getMonth() + 1;
    y = new_d.getFullYear();    
    //d = jscal_d.getDate();
    //m = jscal_d.getMonth() + 1;
    //y = jscal_d.getFullYear();
    jscal_oldYear = y;
    jscal_oldMonth = m;
    jscal_oldDay = d;    
  }
  m = m - 1;
  jscal_set_date_all(d, m, y);
*/  
}
  
function jscal_set_date_all(d, m, y) {
  jscal_currDay = d;
  jscal_currMonth = m;
  jscal_currYear = y;
        
  jscal_d.setDate(d);
  jscal_d.setMonth(m);
  if (y < 1000) {
    y = y + 1900;
  }
  jscal_d.setYear(y);  
  
  jscal_oldYear = jscal_d.getFullYear();
  jscal_oldMonth = jscal_d.getMonth() + 1;
  jscal_oldDay = jscal_d.getDate();
}

function jscal_draw_calendar(x, y) {  
  var div_content = "";
  
  if (document.getElementById(jscal_div_name).style.visibility == "visible" && jscal_can_close) {
    document.getElementById(jscal_div_name).style.visibility = "hidden";
	
  	if (jscal_hide_select){
	    js_hide_select_cal(false);
  	}		
  } 
  else {    
  	if (jscal_hide_select){
	    js_hide_select_cal(true);
  	}	
	
    div_content = jscal_build_calendar_content();
    document.getElementById(jscal_div_name).innerHTML = div_content;
    document.getElementById(jscal_div_name).style.top = y + "px";
    document.getElementById(jscal_div_name).style.left = x + "px";
    document.getElementById(jscal_div_name).style.visibility = "visible";
  }   
}

function jscal_get_month_text() {
  var d_month;
  var m = jscal_d.getMonth();
  d_month = eval("jscal_months_" + jscal_language + "[m]");
  if (d_month == null) d_month = jscal_months_en[m];  
  return d_month;
}

function jscal_get_month_text2(month) {
  var d_month;
  //var m = jscal_d.getMonth();
  d_month = eval("jscal_months_" + jscal_language + "[month]");
  if (d_month == null) d_month = jscal_months_en[month];  
  return d_month;
}
  
function jscal_build_calendar_content() {
  var cal_content = "";
  var d_month;
  var d_year;
  var t_month;
  var cpt = 0;
  var l = 0;
  var d_color = "jscal_normal";
  var x = jscal_d.getDate();
  jscal_d.setDate(1);
  var wday = jscal_d.getDay();
  jscal_d.setDate(x);  
  var last_day = jscal_last_day_of_month();
  var i;  
  var myfunc;

  var var_days;
  switch (jscal_language)
    {
    case "en":
      var_days = jscal_days_en;
      wrd_close = "Close";
      wrd_today = "Today";
      wrd_tip_1 = "Previous year";
      wrd_tip_2 = "Next year";
      wrd_tip_3 = "Previous month";
      wrd_tip_4 = "Next month";
      break;
    default:
      var_days = jscal_days_fr;
      wrd_close = "Fermer";
      wrd_today = "Aujourd'hui";
      wrd_tip_1 = "Année précédente";
      wrd_tip_2 = "Année suivante";
      wrd_tip_3 = "Mois précédent";
      wrd_tip_4 = "Mois suivant";      
      break;
    }
    
  //d_month = jscal_get_month_text();  
  d_month = "<select class=\"jscal_title\" onchange=\"JavaScript:jscal_set_month(this);\">";
  for(i=0;i<12;i++)
    {
    t_month = jscal_get_month_text2(i);
    d_month = d_month + "<option";
    if (i == jscal_d.getMonth())
      {
      d_month = d_month + " selected";
      }
    d_month = d_month + " value=\"" + i + "\">";
    d_month = d_month + t_month;
    d_month = d_month + "</option>";
    }
  d_month = d_month + "</select>\n";
  //d_year = jscal_d.getFullYear();
  d_year = "<select class=\"jscal_title\" onchange=\"JavaScript:jscal_set_year(this);\">";
  for(i=1900;i<=2100;i++)
    {
    d_year = d_year + "<option";
    if (i == jscal_d.getFullYear())
      {
      d_year = d_year + " selected";
      }
    d_year = d_year + " value=\"" + i + "\">";
    d_year = d_year + i;
    d_year = d_year + "</option>";
    }
  d_year = d_year + "</select>";
  if (d_year < 1000)
    {
    d_year = d_year + 1900;
    } 
    
	cal_content = "<table class=\"jscal_form\" border=\"0\" style=\"width:250px;\">";
  // ENTETE
  cal_content = cal_content + "<tr>";
  cal_content = cal_content + "<td class=\"jscal_href\" align=\"left\">";
  cal_content = cal_content + "<a href=\"JavaScript:jscal_prev_year();\"><img src=\"img/jscal_prev2.gif\" border=\"0\" align=\"center\" alt=\""+wrd_tip_1+"\" title=\""+wrd_tip_1+"\"></a>";
  cal_content = cal_content + "<a href=\"JavaScript:jscal_prev_month();\"><img src=\"img/jscal_prev.gif\" border=\"0\" align=\"center\" alt=\""+wrd_tip_3+"\" title=\""+wrd_tip_3+"\"></a>";
  cal_content = cal_content + "</td>";
  cal_content = cal_content + "<td class=\"jscal_title\" colspan=\"5\" align=\"center\">";  
  cal_content = cal_content + d_month + d_year;          
  cal_content = cal_content + "</td>";      
  cal_content = cal_content + "<td class=\"jscal_href\" align=\"right\">";
  cal_content = cal_content + "<a href=\"JavaScript:jscal_next_month();\"><img src=\"img/jscal_next.gif\" border=\"0\" align=\"center\" alt=\""+wrd_tip_4+"\" title=\""+wrd_tip_4+"\"></a>";
  cal_content = cal_content + "<a href=\"JavaScript:jscal_next_year();\"><img src=\"img/jscal_next2.gif\" border=\"0\" align=\"center\" alt=\""+wrd_tip_2+"\" title=\""+wrd_tip_2+"\"></a>";
  cal_content = cal_content + "</td>";  
  cal_content = cal_content + "</tr>";
  // LIGNE JOURS  
  cal_content = cal_content + "<tr>";
  for (var n=0;n<=6;n++)
    {
    cal_content = cal_content + "<td class=\"jscal_days_title\" align=\"center\">" + var_days[n] + "</td>";
    }
  cal_content = cal_content + "</tr>";
  // CALENDRIER
  cal_content = cal_content + "<tr>";
  for(var k=0;k<wday;k++)
    {
    cpt++;
    cal_content = cal_content + "<td bgcolor=\"#ffffff\" align=\"right\">&nbsp;</td>";    
    }
  for(var i=1;i<=last_day;i++)
    {
    d_color = "jscal_normal";
    //if (jscal_currMonth == jscal_oldMonth)
    //  {
      if ((i == jscal_oldDay) && ((jscal_d.getMonth() + 1) == jscal_oldMonth))
        { 
        d_color = "jscal_today";
        }
    //  }
    if (cpt >= 7)
      {
      cal_content = cal_content + "</tr>";
      cal_content = cal_content + "<tr>"; 
      cpt = 0;
      }
    cpt++;
    myfunc = "jscal_select_date('" + i + "');";
    cal_content = cal_content + "<td align=\"right\" class=\"" + d_color + "\"><a href=\"JavaScript:" + myfunc + "\">" + i + "</a></td>";
    l = cpt;  
    }
  for (j=l+1;j<=7;j++)
    {
    cal_content = cal_content + "<td class=\"jsclass_normal\" align=\"right\">&nbsp;</td>";
    }
  cal_content = cal_content + "</tr>";
  cal_content = cal_content + "<tr>";
  if (jscal_show_today || jscal_can_close) {  
    cal_content = cal_content + "<td class=\"jscal_href\" colspan=\"7\" align=\"left\"><hr>";
    cal_content = cal_content + "</td>";
    cal_content = cal_content + "</tr>";
    cal_content = cal_content + "<tr>";
    cal_content = cal_content + "<td class=\"jscal_href\" colspan=\"4\" align=\"left\">";
    if (jscal_show_today) {
      cal_content = cal_content + "<a href=\"JavaScript:jscal_goto_today();\">" + wrd_today + "</a>";
    }
    cal_content = cal_content + "</td>";
    cal_content = cal_content + "<td class=\"jscal_href\" colspan=\"3\" align=\"right\">";
    if (jscal_can_close) {
      cal_content = cal_content + "<a href=\"JavaScript:jscal_close_calendar();\">" + wrd_close + "</a>";
    }
    cal_content = cal_content + "</td>";
    cal_content = cal_content + "</tr>";
  }    
  cal_content = cal_content + "</table>";
  return cal_content;
}

function jscal_set_month(obj) {
  jscal_d.setMonth(obj.value);
  jscal_currMonth = jscal_d.getMonth() + 1;
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;  
}
  
function jscal_set_year(obj) {
  jscal_d.setYear(obj.value);
  jscal_currYear = jscal_d.getFullYear();
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;  
}

function jscal_goto_today() {
  var d = new Date();
  jscal_d = d;
  
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;      
}
  
function jscal_next_month() {  
  var m = jscal_d.getMonth();
  var y = jscal_d.getFullYear();
  if (m == 11) {
    jscal_d.setMonth(0);
    jscal_currMonth = jscal_d.getMonth() + 1;
    y = y + 1;
    jscal_d.setYear(y);
    jscal_currYear = jscal_d.getFullYear();
  }
  else {
    m = m + 1;
    jscal_d.setMonth(m);
    jscal_currMonth = jscal_d.getMonth() + 1;    
  }
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;  
}

function jscal_prev_month() {  
  var m = jscal_d.getMonth();
  var y = jscal_d.getFullYear();
  if (m == 0) {
    jscal_d.setMonth(11);
    jscal_currMonth = jscal_d.getMonth() + 1;
    y = y - 1;
    jscal_d.setYear(y);
    jscal_currYear = jscal_d.getFullYear();
  }
  else {
    m = m - 1;    
    jscal_d.setMonth(m);
    jscal_currMonth = jscal_d.getMonth() + 1;
  }
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;  
}

function jscal_next_year() {  
  var y = jscal_d.getFullYear();
  y = y + 1;
  jscal_d.setYear(y);
  jscal_currYear = jscal_d.getFullYear();
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;  
}

function jscal_prev_year() {  
  var y = jscal_d.getFullYear();
  y = y - 1;
  jscal_d.setYear(y);
  jscal_currYear = jscal_d.getFullYear();
  var div_content = jscal_build_calendar_content();
  document.getElementById(jscal_div_name).innerHTML = div_content;  
}
  
function jscal_close_calendar() {
  document.getElementById(jscal_div_name).style.visibility = "hidden";
	if (jscal_hide_select){
	  js_hide_select_cal(false);
	}
}
    
function jscal_select_date(d_day) {  
  var s_month;
  var s_day;
  var s_year
  var full_date;
  
  jscal_currDay = d_day;
  
  s_month = jscal_currMonth;
  s_day = jscal_currDay;  
  s_year = jscal_currYear;
  jscal_d.setDate(jscal_currDay);
  var my_t = parseInt(parseFloat(jscal_d.getMonth() + 1));  
  if (my_t < 10){
    s_month = "0" + (my_t);
  }else{
    s_month= my_t;
  }   
  if (jscal_d.getDate() < 10){
    s_day = "0" + jscal_currDay;
  }
  if (jscal_d.getFullYear() < 1000){
    s_year = jscal_d.getFullYear() + 1900;
  }
  switch (jscal_output_format){
    case "yyyy-mm-dd":
      full_date = s_year + "-" + s_month + "-" + s_day;      
      break;
    case "mm-dd-yyyy":
      full_date = s_month + "-" + s_day + "-" + s_year;
      break;
    case "dd-mm-yyyy":
      full_date = s_day + "-" + s_month + "-" + s_year;
      break;
    default:
      full_date = s_year + "-" + s_month + "-" + s_day;
      break;                  
  }  
  document.getElementById(jscal_date_return).value = full_date;    
  if (jscal_special_function != "") {
    eval(jscal_special_function + "('" + full_date + "');");
  }
  if (jscal_can_close){
    document.getElementById(jscal_div_name).style.visibility = "hidden";
		if (jscal_hide_select){
  		js_hide_select_cal(false);
		}    
  }
/*
  var s_month;
  var s_day;
  var s_year
  var full_date;
  
  jscal_currDay = d_day;
  
  s_month = jscal_currMonth;
  s_day = jscal_currDay;  
  s_year = jscal_currYear;
  jscal_d.setDate(jscal_currDay);  
  
  if (jscal_d.getMonth() < 9) {
    s_month = "0" + (jscal_d.getMonth() + 1);
  }else{
    s_month = (jscal_d.getMonth() + 1);
  } 
  if (jscal_d.getDate() < 10) {
    s_day = "0" + jscal_currDay;
  }
  if (jscal_d.getFullYear() < 1000) {
    s_year = jscal_d.getFullYear() + 1900;
  }
  full_date = s_year + "-" + s_month + "-" + s_day; 
  document.getElementById(jscal_date_return).value = full_date;
  if (jscal_special_function != "") {
    eval(jscal_special_function + "('" + full_date + "');");
  }
  if (jscal_can_close) {
    document.getElementById(jscal_div_name).style.visibility = "hidden";
		if (jscal_hide_select){
  		js_hide_select_cal(false);
		}
  }
*/
}

function jscal_last_day_of_month() {
  var rep = 31;
  
  var d = new Date();
  var y = jscal_d.getFullYear();
  var m = jscal_d.getMonth();
  
  d.setYear(y);
  d.setMonth(m);
  d.setDate(1);
  for (var i=28;i<=31;i++) {
    d.setDate(i);    
    if (d.getMonth() > m) {
      rep = i - 1;
      break;
    } 
  }
  return rep;
}
  
function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)	{
		while (obj.offsetParent) {
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		curleft += obj.x;
  }
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)	{
		while (obj.offsetParent) {      
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y) {
		curtop += obj.y;
  }
	return curtop;
}
