nb_of_weeks = 0;

function show_calendar(str_datetime)
{
 /* DEBUT wording */
 if (typeof js_fermer == 'undefined')
   js_fermer='Quitter';
 if (typeof calendar_msg == 'undefined')
   calendar_msg='Vous ne pouvez pas choisir cette date';
 if (typeof arr_months == 'undefined')
   arr_months=['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
		'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];
 if (typeof week_days == 'undefined')
   week_days=['DI', 'LU', 'MA', 'ME', 'JE', 'VE', 'SA'];
 if (typeof next_month == 'undefined')
   next_month='Mois suivant';
 if (typeof prev_month == 'undefined')
   prev_month='Mois précédent';
 if (typeof path_img == 'undefined' )
   path_img = '../img/calendar/';
 /* FIN wording */

 if (typeof date_end == 'undefined' )
 {
  dt_end = '';
  deY = -1;
  deM = -1;
  deD = -1;
  deDate = -1;
 }
 else
 {
  dt_end = new Date(str2dt(date_end));
  deY=dt_end.getYear();
  deM=dt_end.getMonth();
  deD=dt_end.getDay(); 
  deDate=dt_end.getDate();
 }

 /* day week starts from (normally 0 or 1) */
 var n_weekstart = 6; 

 var dt_datetime = str_datetime;
 if (dt_datetime == null || dt_datetime == '')
 {
    dt_datetime = new Date();
    dt_datetime.setDate(dt_datetime.getDate() + 1);
 }
 else
 {
   dt_datetime = str2dt(dt_datetime)
 }
 if (dt_datetime==0) return;

 dtdY = dt_datetime.getYear();
 dtdM = dt_datetime.getMonth();
 dtdDate = dt_datetime.getDate();
 
 var dt_today = new Date();
 dt_today.setDate(dt_today.getDate() + 1);
 dtY=dt_today.getYear();
 dtM=dt_today.getMonth();
 dtD=dt_today.getDay();
 dtDate=dt_today.getDate();
 
 var dt_prev_month = new Date(dt_datetime);
 dt_prev_month.setMonth(dt_datetime.getMonth()-1);
 
 var dt_next_month = new Date(dt_datetime);
 dt_next_month.setMonth(dt_datetime.getMonth()+1);
 
 var dt_firstday = new Date(dt_datetime);
 dt_firstday.setDate(1);
 dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
 dtfM = dt_firstday.getMonth();
 
 var dt_lastday = new Date(dt_next_month);
 dt_lastday.setDate(0);
 dtlY=dt_lastday.getYear();
 dtlM=dt_lastday.getMonth();
 
 var dt_current_day = new Date(dt_firstday);
 dtcdY=dt_current_day.getYear();
 dtcdM=dt_current_day.getMonth();
 dtcdD=dt_current_day.getDay();
 dtcdDate=dt_current_day.getDate();

 /* print calendar header */
 var str_buffer_1 = 
  '<table cellspacing="0" cellpadding="0" border="0" id="tableCal" width="183">\n'+
  '<tr><td class="menuCal">';

 var str_buffer_2 = '<a href="javascript:refreshCalendar(\''+dt2dtstr(dt_prev_month)+'\');">';

 var str_buffer_3 = '<img src="'+path_img+'prev.gif" width="16" height="16" border="0"'+' alt="'+prev_month+'" title="'+prev_month+'">';

 var str_buffer_4 = '</a>';

 var str_buffer_5 = '</td><td class="menuCal" colspan="5" align="center">'+arr_months[dt_datetime.getMonth()]+' '+dt_datetime.getFullYear()+'</td>\n'+
  '<td class="menuCal">';

 var str_buffer_6 = '<a href="javascript:refreshCalendar(\''+dt2dtstr(dt_next_month)+'\');">';

 var str_buffer_7 = '<img src="'+path_img+'next.gif" width="16" height="16" border="0"'+' alt="'+next_month+'" title="'+next_month+'">';

 var str_buffer_8 = '</a>';

 var str_buffer = '</td>\n</tr>\n';
 
 /* print weekdays titles */
 str_buffer += '<tr>\n';
 for (var n=0; n<7; n++)
 {
   str_buffer += '<td class="jSem">\n'+week_days[(n_weekstart+n)%7]+'</td>\n';
 }
 
 /* print calendar table */
 str_buffer += '</tr>\n';
 nb_of_weeks = 0;
 first = true;
 the_first = '';
 the_end = '';

 while( dtcdM == dtdM || dtcdM == dtfM )
 {
  /* print row header */
  str_buffer += '<tr>\n';
  nb_of_weeks++;
  for ( var n_current_wday = 0; n_current_wday < 7 ; n_current_wday++ )
  {
   if ( first ) { the_first = new Date(dt_current_day); first = false; }

   if ( dtcdDate == dtdDate && dtcdM == dtdM && dtcdY == dtdY ) {
   /* current day */
      str_buffer += '<td class="jour">'; }
   else if ( dtcdD == 0 || dtcdD == 6 ) {
   /* weekend days */
      str_buffer += '<td class="we">'; }
   else {
   /* print working days of current month */
      str_buffer += '<td class="sem">'; }

   if ( dtcdM == dtdM ) {
   /* print days of current month */
		if ( lt(dtcdY,dtcdM,dtcdDate,dtY,dtM,dtDate) || ( (deY != -1 && gt(dtcdY,dtcdM,dtcdDate,deY,deM,deDate) ) || deY == -1 ) ) {
      		str_buffer+='<span class="passe">'+dtcdDate+'</span>'; }
		else {
	  		str_buffer+='<a href="javascript:setValue(\''+dt2dtstr(dt_current_day)+'\');calClose();" >'+
                    '<span class="ok">'+dtcdDate+'</span></a>'; }
   } else {
		if ( lt(dtcdY,dtcdM,dtcdDate,dtY,dtM,dtDate) || ( (deY != -1 && gt(dtcdY,dtcdM,dtcdDate,deY,deM,deDate) ) || deY == -1 ) ) {
      		str_buffer+='<span class="passe">'+dtcdDate+'</span>'; first = true; }
		else {
			str_buffer+='<a href="javascript:setValue(\''+dt2dtstr(dt_current_day)+'\');calClose();" >'+
                    '<span class="mNext">'+dtcdDate+'</span></a>'; }
   }
					
   str_buffer +=  '</td>\n';
   the_end = new Date(dt_current_day);
   dt_current_day.setDate(dt_current_day.getDate()+1);
   dtcdY=dt_current_day.getYear();
   dtcdM=dt_current_day.getMonth();
   dtcdD=dt_current_day.getDay();
   dtcdDate=dt_current_day.getDate();
  }
  /* print row footer */
  str_buffer += '</tr>\n';
 }
 /* print calendar footer */
 str_buffer += '<tr><td colspan="7" class="fermer"><a href="javascript:calClose();">[x] '+js_fermer+'</a></td>\n</tr>\n';
 str_buffer += '</table>\n';

 var str_b = str_buffer_1;

 var first = true;
 the_first.setDate(the_first.getDate()-1);
 tfY = the_first.getYear();
 tfM = the_first.getMonth();
 tfDate = the_first.getDate();

 if ( lt(tfY,tfM,tfDate,dtY,dtM,dtDate) ) { first = false; }

 var end = true;
 the_end.setDate(the_end.getDate()+1);
 teY = the_end.getYear();
 teM = the_end.getMonth();
 teDate = the_end.getDate();
 if ( gt(teY,teM,teDate,deY,deM,deDate) ) { end = false; }

 if ( first ) {
  str_b += str_buffer_2;
  str_b += str_buffer_3;
  str_b += str_buffer_4;
 }
 str_b += str_buffer_5

 if ( end ) {
  str_b += str_buffer_6;
  str_b += str_buffer_7;
  str_b += str_buffer_8;
 }
 str_b += str_buffer;

 return str_b;
}

function lt(d1Y,d1M,d1D,d2Y,d2M,d2D)
{
 if ((d1Y<d2Y) || (d1Y==d2Y && d1M<d2M) || (d1Y==d2Y && d1M==d2M && d1D<d2D)) { return true; }
 return false;
}

function gt(d1Y,d1M,d1D,d2Y,d2M,d2D)
{
 if ((d1Y>d2Y) || (d1Y==d2Y && d1M>d2M) || (d1Y==d2Y && d1M==d2M && d1D>d2D)) { return true; }
 return false;
}

function initCalendar(str_datetime)
{
 var str_buffer = show_calendar(str_datetime);
 var v = window.parent.document.getElementById('iframeCalendrier');
 var w = document.getElementById('divCalendrier');

 w.innerHTML = str_buffer;
 v.style.width = '183px';
 v.style.height = (70+20*nb_of_weeks)+'px';
 v.style.zIndex = 999;
 w.style.display = 'block';
 w.style.zIndex = 999;
}

function refreshCalendar(str_datetime)
{
 var v = window.parent.document.getElementById('iframeCalendrier');
 var w = document.getElementById('divCalendrier');

 str_buffer = show_calendar(str_datetime);
 w.innerHTML = str_buffer;
 v.style.height = (70+20*nb_of_weeks)+'px';
}

/* datetime parsing and formatting routimes. modify them if you wish other datetime format */
function str2dt(str_datetime)
{
 if ( typeof js_format_invalide == 'undefined' )
  js_format_invalide = 'Format de date invalide:';

 var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
 if (!re_date.exec(str_datetime))
 {
   alert(js_format_invalide+' '+str_datetime);
   return 0;
 }
 if (RegExp.$3.length==2)
    return (new Date(20+RegExp.$3,RegExp.$2-1,RegExp.$1));
 else
    return (new Date(RegExp.$3, RegExp.$2-1, RegExp.$1));
}

/* fonction qui permet de transformer une date en date au format string.
 *
 */
function dt2dtstr(dt_datetime)
{
 month = dt_datetime.getMonth()+1;
 day= dt_datetime.getDate();
 if (month<10) month = "0" + month; 
 if (day<10) day = "0" + day;
 return (new String(day+"/"+month+"/"+dt_datetime.getFullYear()));
}

/* fonction qui masque le calendrier
 *
 */
function calClose()
{
 var v = window.parent.document.getElementById('iframeCalendrier');
 v.style.display = 'none';
}

/* fonction appelée pour mettre à jour les select du moteur (mois et jours)
 * en fonction de la date choisie dans le calendrier
 */
function setValue(val)
{
  window.parent.document.getElementById('dateDepart').value = val;
  var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
  re_date.exec(val);
  var jour = RegExp.$1;
  var mois = RegExp.$2;
  var annee = RegExp.$3;

  /* on met a jour le select des mois */
  window.parent.selectedMonth(val);
  /* on met a jour le select des jours du mois */
  window.parent.updateDays();
  /* si le jour est plus petit que 10 alors on supprime le 1er caractere
     cela donnera : 01 => 1, 02 => 2, ...
   */

  if (jour < 10)
  {
    jour = jour.substr(1,1);
  }
  /* on met a jour le select des jours */
  window.parent.selectedDays(jour);
  /* on initialise l'iframe calendrier avec la date choisiée */
  initCalendar(val);

  window.parent.updateCalendar();
  window.parent.MoteurPV.filterAsc();
}
