/**
Initial release (version 1.5) by Julian Robichaux -- http://www.nsftools.com
Modified by Julien - anciennes.net
*/

var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";
var dayArrayShort = new Array('Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di');
var monthArrayLong = new Array('Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre');

// variables
var defaultDateSeparator = "/";        // common values would be "/" or "."
var defaultDateFormat = "dmy"    // valid values are "mdy", "dmy", and "ymd"
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;

var cmonth = "";
var cyear = "";
var cday = "";

var indexdate=1;

var selecteddt = new Date();

	function showEndDateAll()
        {

                 //var num=numb*2+2;
                 var num=2;
                 while (num<=20) {

		       var num2=eval(num)-1;
 		       document.getElementsByName(num+"SY").item(0).selectedIndex=document.getElementsByName(num2+"SY").item(0).selectedIndex;
 		       document.getElementsByName(num+"SM").item(0).selectedIndex=document.getElementsByName(num2+"SM").item(0).selectedIndex;
		       setDays(num);
 		       document.getElementsByName(num+"SD").item(0).selectedIndex=document.getElementsByName(num2+"SD").item(0).selectedIndex;
		       document.getElementsByName(num+"SD").item(0).disabled=document.getElementsByName("oneday")[0].checked;
		       document.getElementsByName(num+"SM").item(0).disabled=document.getElementsByName("oneday")[0].checked;
		       document.getElementsByName(num+"SY").item(0).disabled=document.getElementsByName("oneday")[0].checked;
                       num += 2 ;
                 }
        }
	function showEndDate(num,cb)
	{
		var num2=eval(num)-1;
 		document.getElementsByName(num+"SY").item(0).selectedIndex=document.getElementsByName(num2+"SY").item(0).selectedIndex;
 		document.getElementsByName(num+"SM").item(0).selectedIndex=document.getElementsByName(num2+"SM").item(0).selectedIndex;
		setDays(num);
 		document.getElementsByName(num+"SD").item(0).selectedIndex=document.getElementsByName(num2+"SD").item(0).selectedIndex;
		document.getElementsByName(num+"SD").item(0).disabled=cb.checked;
		document.getElementsByName(num+"SM").item(0).disabled=cb.checked;
		document.getElementsByName(num+"SY").item(0).disabled=cb.checked;

	}



function setDays(num)
{
  var y = document.getElementsByName(num+"SY").item(0).options[document.getElementsByName(num+"SY").item(0).selectedIndex].value;
  var m = document.getElementsByName(num+"SM").item(0).selectedIndex;
  var dateField = document.getElementsByName(num+"SD").item(0);
  var days;

  // find number of days in current month
  if ( (m == 3) || (m == 5) || (m == 8) || (m == 10) ) {
    days = 30;
  }
  else if (m == 1) {
    // check for leapyear - Any year divisible by 4, except those divisible by 100 (but NOT 400)
    if ( (Math.floor(y/4) == (y/4)) && ((Math.floor(y/100) != (y/100)) || (Math.floor(y/400) == (y/400))) )
      days = 29
    else
      days = 28
  }
  else {
    days = 31;
  }


  // if (days in new month > current days) then we must add the extra days
  if (days > dateField.length) {
    for (i = dateField.length; i < days; i++) {
      dateField.length = days;
      dateField.options[i].text = i + 1;
      dateField.options[i].value = i + 1;
    }
  }


  // if (days in new month < current days) then we must delete the extra days
  if (days < dateField.length) {

    //alert(dateField.selectedIndex);
    if (dateField.selectedIndex > days -1)
    dateField.selectedIndex = days - 1;
    dateField.length = days;
  }

}

function initDateNum(num)
{
   document.getElementsByName(num+"SY").item(0).selectedIndex = cyear-2008;
   document.getElementsByName(num+"SM").item(0).selectedIndex = cmonth;

   setDays(num);
   document.getElementsByName(num+"SD").item(0).selectedIndex = cday - 1;
   calcDate(num);
}

function initDate(year, month, day, numb)
{
  cday = day;
  cmonth = month-1;
  cyear = year;

  var currentDate = new Date();
  var num=numb*2+1;

  while (num<=20) {
   document.getElementsByName(num+"SY").item(0).selectedIndex = cyear-2008;
   document.getElementsByName(num+"SM").item(0).selectedIndex = month - 1;

   setDays(num);
   document.getElementsByName(num+"SD").item(0).selectedIndex = day - 1;
   calcDate(num);
    num += 2 ;
  }

  num = 1;
  if (numb*2>=20)
     document.getElementById('addline').style.display="none";
  if (numb>1)
     document.getElementById('supprline').style.display="";
  while (num<numb*2) {
        targetElement = document.getElementById("dateline"+num) ;
        targetElement.style.display = "";
        num=num+2;
  }

  if (numb==0)
  indexdate=1;
  else
  indexdate=((numb-1)*2)+1;
}

function aggregateDate(num)
{
         return new Date(document.getElementsByName(num+"SY").item(0).selectedIndex + cyear, document.getElementsByName(num+"SM").item(0).selectedIndex , document.getElementsByName(num+"SD").item(0).selectedIndex + 1);
}

function calcDate(num)
{
 if (!((eval(num)-1)%2)) //si le num est impair
 {
 var num2=eval(num)+1;
 document.getElementsByName(num2+"SY").item(0).selectedIndex=document.getElementsByName(num+"SY").item(0).selectedIndex;
 document.getElementsByName(num2+"SM").item(0).selectedIndex=document.getElementsByName(num+"SM").item(0).selectedIndex;
 setDays(num2);
 document.getElementsByName(num2+"SD").item(0).selectedIndex=document.getElementsByName(num+"SD").item(0).selectedIndex;
 }
}

function displayDatePicker(num)
{

//  var displayBelowThisObject = document.getElementsByName(num+"SM").item(0);
  var displayBelowThisObject = document.getElementsByName(num+"scalendar").item(0);

  if (document.getElementsByName(num+"SD").item(0).disabled)
		return;
  dateSeparator = defaultDateSeparator;
  dateFormat = defaultDateFormat;

  var x = displayBelowThisObject.offsetLeft;
  var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;

  // deal with elements inside tables and such
  var parent = displayBelowThisObject;
  while (parent.offsetParent) {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop ;
  }

  drawDatePicker(num, x, y);
}

/**
Draw the datepicker object (which is just a table with calendar elements) at the
specified x and y coordinates, using the targetDateField object as the input tag
that will ultimately be populated with a date.
This function will normally be called by the displayDatePicker function.
*/
function drawDatePicker(num, x, y)
{
  selecteddt = aggregateDate(eval(num));

  if (selecteddt == 0)
     selecteddt = new Date(cyear,cmonth,cday);
  if (!document.getElementById(datePickerDivID)) {
    var newNode = document.createElement("div");
    newNode.setAttribute("id", datePickerDivID);
    newNode.setAttribute("class", "dpDiv");
    newNode.setAttribute("style", "visibility: hidden;");
    document.body.appendChild(newNode);
  }

  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.position = "absolute";
  pickerDiv.style.left = x + "px";
  pickerDiv.style.top = y + "px";
  pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
  pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
  pickerDiv.style.zIndex = 10000;

  refreshDatePicker(num, selecteddt.getFullYear(), selecteddt.getMonth(), selecteddt.getDate());
}

/**
This is the function that actually draws the datepicker calendar.
*/
function refreshDatePicker(num, year, month, day)
{
  // if no arguments are passed, use today's date; otherwise, month and year
  // are required (if a day is passed, it will be highlighted later)
  //var thisDay = new Date();
  var thisDay = new Date(cyear,cmonth,cday);

  var currentDate = new Date(cyear,cmonth,cday);
  if ((eval(num)-1)%2) //si le num est pair
     currentDate = aggregateDate(eval(num)-1);

  if ((month >= 0) && (year > 0)) {
    thisDay = new Date(year, month, 1);
  } else {
    day = thisDay.getDate();
    thisDay.setDate(1);
  }
  // the calendar will be drawn as a table
  // you can customize the table elements with a global CSS style sheet,
  // or by hardcoding style and formatting elements below
  var crlf = "\r\n";
  var TABLE = "<table cols=7 class='dpTable'>" + crlf;
  var xTABLE = "</table>" + crlf;
  var TR = "<tr class='dpTR'>";
  var TR_title = "<tr class='dpTitleTR'>";
  var TR_days = "<tr class='dpDayTR'>";
  var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
  var xTR = "</tr>" + crlf;
  var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var TD_no = "<td class='dpTD_no'>"; //no selection
  var TD_title = "<td colspan=5 class='dpTitleTD'>";
  var TD_buttons = "<td class='dpButtonTD'>";
  var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
  var TD_days = "<td class='dpDayTD'>";
  var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var xTD = "</td>" + crlf;
  var DIV_title = "<div class='dpTitleText'>";
  var DIV_selected = "<div class='dpDayHighlight'>";
  var xDIV = "</div>";
 
  // start generating the code for the calendar table
  var html = TABLE;
 
  // this is the title bar, which displays the month and the buttons to
  // go back to a previous month or forward to the next month
  html += TR_title;
  //previous not available
  if ((thisDay.getMonth()<=cmonth) && (thisDay.getYear()<=cyear))
    html += TD_buttons + "<button class='dpButton' disabled>&lt;</button>" + xTD;
   else
    html += TD_buttons + getButtonCode(num, thisDay, -1, "&lt;") + xTD;

  html += TD_title + DIV_title + monthArrayLong[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
  //next month not available if year > 2010
  if ((thisDay.getMonth()==11) && (thisDay.getFullYear()==2012))
    html += TD_buttons + "<button class='dpButton' disabled>&gt;</button>" + xTD;
   else
    html += TD_buttons + getButtonCode(num, thisDay, 1, "&gt;") + xTD;
  html += xTR;
 
  // this is the row that indicates which day of the week we're on
  html += TR_days;
  for(i = 0; i < dayArrayShort.length; i++)
    html += TD_days + dayArrayShort[i] + xTD;
  html += xTR;
 
  // now we'll start populating the table with days of the month
  html += TR;
 
  // first, the leading blanks
  var tmpd = (thisDay.getDay()-1);
  if (tmpd<0) tmpd=6;
  for (i = 0; i < tmpd; i++)
    html += "<td>&nbsp;</td>";
  
  // now, the days of the month
  do {
    dayNum = thisDay.getDate();
    TD_onclick = " onclick=\"updateDateField('" + num + "', '" + thisDay.getFullYear() + "', '" + thisDay.getMonth() + "', '" + thisDay.getDate() + "');\">";
    
    //if ((dayNum == day) && (thisDay.getMonth()== month))
 
 
    if (thisDay <currentDate)
      html += TD_no + dayNum + xTD;
    else
    if ((thisDay > selecteddt) || (thisDay < selecteddt))
      html += TD + TD_onclick + dayNum + xTD;
    else
      html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;

    // if this is a Sunday, start a new row
    if (thisDay.getDay() == 0)
      html += xTR + TR;
    
    // increment the day
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)

  // fill in any trailing blanks
  if (thisDay.getDay() > 1) {
    for (i = 8; i > thisDay.getDay(); i--)
      html += "<td>&nbsp;</td>";
  }
  if (thisDay.getDay() == 0)
      html += "<td>&nbsp;</td>";
  html += xTR;
 
  // add a button to allow the user to easily return to today, or close the calendar
  var today = new Date();
  html += TR_todaybutton + TD_todaybutton;
  html += "<button class='dpTodayButton' onClick='refreshDatePicker(\"" + num + "\");'>Mois courant</button> ";
  html += "<button class='dpTodayButton' onClick='updateDateField(\"" + num + "\");'>X</button>";
  html += xTD + xTR;

  // and finally, close the table
  html += xTABLE;
 
  document.getElementById(datePickerDivID).innerHTML = html;
  // add an "iFrame shim" to allow the datepicker to display above selection lists
  adjustiFrame();
}

/**
Convenience function for writing the code for the buttons that bring us back or forward
a month.
*/
function getButtonCode(num, dateVal, adjust, label)
{
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }

  return "<button class='dpButton' onClick='refreshDatePicker(\"" + num + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}

/**
Convert a JavaScript Date object to a string, based on the dateFormat and dateSeparator
variables at the beginning of this script library.
*/
function getDateString(dateVal)
{
  var dayString = "00" + dateVal.getDate();
  var monthString = "00" + (dateVal.getMonth()+1);
  dayString = dayString.substring(dayString.length - 2);
  monthString = monthString.substring(monthString.length - 2);
 
  switch (dateFormat) {
    case "dmy" :
      return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
    case "ymd" :
      return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
    case "mdy" :
    default :
      return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
  }
}

/**
Convert a string to a JavaScript Date object.
*/
function getFieldDate(dateString)
{
  var dateVal;
  var dArray;
  var d, m, y;
  try {
    dArray = splitDateString(dateString);
    if (dArray) {
      switch (dateFormat) {
        case "dmy" :
          d = parseInt(dArray[0], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
        case "ymd" :
          d = parseInt(dArray[2], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[0], 10);
          break;
        case "mdy" :
        default :
          d = parseInt(dArray[1], 10);
          m = parseInt(dArray[0], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
      }
      if (y<100) y+=2000;
      dateVal = new Date(y, m, d);
    } else if (dateString) {
      dateVal = new Date(dateString);
    } else {
      dateVal = 0;
    }
  } catch(e) {
    dateVal = 0;
  }
  return dateVal;
}

/**
Try to split a date string into an array of elements, using common date separators.
If the date is split, an array is returned; otherwise, we just return false.
*/
function splitDateString(dateString)
{
  var dArray;
  if (dateString.indexOf("/") >= 0)
    dArray = dateString.split("/");
  else if (dateString.indexOf(".") >= 0)
    dArray = dateString.split(".");
  else if (dateString.indexOf("-") >= 0)
    dArray = dateString.split("-");
  else if (dateString.indexOf("\\") >= 0)
    dArray = dateString.split("\\");
  else
    dArray = false;

  return dArray;
}
/**
*/
function hideCalendar()
{
  var pickerDiv = document.getElementById(datePickerDivID);
  if (pickerDiv)
  {
   pickerDiv.style.visibility = "hidden";
   pickerDiv.style.display = "none";
   adjustiFrame();
  }
}

function updateDateField(num, year, month, day)
{
 if (day)
 {
  document.getElementsByName(num+"SM").item(0).selectedIndex=month;
  document.getElementsByName(num+"SY").item(0).selectedIndex=year-cyear;
  document.getElementsByName(num+"SD").item(0).selectedIndex=day-1;
 }

  hideCalendar();
  setDays(num);
  calcDate(num);
}

/**
Use an "iFrame shim" to deal with problems where the datepicker shows up behind
selection list elements, if they're below the datepicker. The problem and solution are
described at:
http://dotnetjunkies.com/WebLog/jking/archive/2003/07/21/488.aspx
http://dotnetjunkies.com/WebLog/jking/archive/2003/10/30/2975.aspx
*/
function adjustiFrame(pickerDiv, iFrameDiv)
{
  // we know that Opera doesn't like something about this, so if we
  // think we're using Opera, don't even try
  var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
  if (is_opera)
    return;
  
  // put a try/catch block around the whole thing, just in case
  try {
    if (!document.getElementById(iFrameDivID)) {
      // don't use innerHTML to update the body, because it can cause global variables
      // that are currently pointing to objects on the page to have bad references
      //document.body.innerHTML += "<iframe id='" + iFrameDivID + "' src='javascript:false;' scrolling='no' frameborder='0'>";
      var newNode = document.createElement("iFrame");
      newNode.setAttribute("id", iFrameDivID);
      newNode.setAttribute("src", "javascript:false;");
      newNode.setAttribute("scrolling", "no");
      newNode.setAttribute ("frameborder", "0");
      document.body.appendChild(newNode);
    }

    if (!pickerDiv)
      pickerDiv = document.getElementById(datePickerDivID);
    if (!iFrameDiv)
      iFrameDiv = document.getElementById(iFrameDivID);
    
    try {
      iFrameDiv.style.position = "absolute";
      iFrameDiv.style.width = pickerDiv.offsetWidth;
      iFrameDiv.style.height = pickerDiv.offsetHeight ;
      iFrameDiv.style.top = pickerDiv.style.top;
      iFrameDiv.style.left = pickerDiv.style.left;
      iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
      iFrameDiv.style.visibility = pickerDiv.style.visibility ;
      iFrameDiv.style.display = pickerDiv.style.display;
    } catch(e) {
    }
 
  } catch (ee) {
  }
 
}


function ajouter()
{
  var targetElement;
  indexdate=indexdate+2;
  targetElement = document.getElementById("dateline"+indexdate) ;
  targetElement.style.display = "";
  if (indexdate>=19)
     document.getElementById('addline').style.display="none";
  document.getElementById('supprline').style.display="";
}

function supprimer()
{
  var targetElement;
  targetElement = document.getElementById("dateline"+indexdate) ;
  targetElement.style.display = "none";
  initDateNum(indexdate);
  initDateNum(indexdate+1);
  indexdate=indexdate-2;
  if (indexdate<=1)
     document.getElementById('supprline').style.display="none";
  document.getElementById('addline').style.display="";
}


/**
UPDATE COUNTER
*/


function update() {
   var old = document.formadd.counter.value;
   document.formadd.counter.value=2000-document.formadd.description.value.length;
   if(document.formadd.counter.value < 0 && old >= 0) {
     alert('La description est de 2000 caractères maximum');
     if(document.styleSheets) {
       document.formadd.counter.style.fontWeight = 'bold';
       document.formadd.counter.style.color = '#ff0000'; } }
   else if(document.formadd.counter.value >= 0 && old < 0
	   && document.styleSheets ) {
       document.formadd.counter.style.fontWeight = 'normal';
       document.formadd.counter.style.color = '#999999'; }
   }
function update2() {
   var old = document.formadd.counter2.value;
   document.formadd.counter2.value=250-document.formadd.adresse.value.length;
   if(document.formadd.counter2.value < 0 && old >= 0) {
     alert('L\'adresse est composée de 250 caractères maximum');
     if(document.styleSheets) {
       document.formadd.counter2.style.fontWeight = 'bold';
       document.formadd.counter2.style.color = '#ff0000'; } }
   else if(document.formadd.counter2.value >= 0 && old < 0
	   && document.styleSheets ) {
       document.formadd.counter2.style.fontWeight = 'normal';
       document.formadd.counter2.style.color = '#999999'; }
   }


