var weekday = new Array("Dim.", "Lun.", "Mar.", "Mer.", "Jeu.", "Ven.", "Sam.");
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var DoCheck = true;
var DeltaGMT = -60;

function IsEmptyField(aField)
{
	 var i = 0;
	 var start = 0;
	 var end = aField.length;
	 var startmark = 0;
	 var endmark = 0;

	 if (aField == "") return true;
	 
	 for(i; i<aField.length; i++)
	 {
		if(aField.charAt(i) == ' ')
		{
			if(startmark == 0)
				start = i + 1;
		}
		else
			startmark++;

		if(aField.charAt(aField.length-i-1) == ' ')
		{
			if(endmark == 0)
				end = aField.length-i-1;
		}	
		else
			endmark++;		
	 }

	 if(start > end) return true;
	 aField = aField.substring(start,end);
	 if (aField == "") return true;
	 return false;
}

function SetDateTime()
{
	   var dt = new Date();
	   var hour = parseInt(dt.getHours());
	   document.form1.DayOfWeek.value = weekday[dt.getDay()];
	   document.form1.Month.selectedIndex = dt.getMonth();
	   SetDaysInMonth();
	
	   if (dt.getDate() < 10)
	      document.form1.DayOfMonth.value = "0" + dt.getDate();
	   else
	      document.form1.DayOfMonth.value = dt.getDate();
	   if (dt.getYear() < 1900)
	      document.form1.Year.value = dt.getYear() + 1900;
	   else
	      document.form1.Year.value = dt.getYear();
	   if (hour == 0)
	      hour = 12;
	   else if (hour > 12)
	      hour = hour - 12;
	   if (dt.getHours() < 12) {
	      document.form1.FromAmPm.value = 0;
	   } else  {
	      document.form1.FromAmPm.value = 1;
	   }
	   
	   setSelectBox(document.form1.DayOfWeek , document.form1.FromHour);
	   document.form1.DayOfMonth.selectedIndex = (dt.getDate()-1);
}

function SetDayOfWeek()
{
	   var f = document.form1;
	   var dt = new Date(f.Year.value, f.Month.selectedIndex, f.DayOfMonth.value);
	   document.form1.DayOfWeek.value = weekday[dt.getDay()];
	
	   setSelectBox(document.form1.DayOfWeek , document.form1.FromHour);
}

function SetDaysInMonth()
{
		f = document.form1;
		box = f.Month;
		days = f.DayOfMonth;
		removeOptions(days);
		for (i=1;i<=daysInMonth[f.Month.selectedIndex];i++)
			{
			addOption(days, i,i);
			}		
}

function setSelectBox(day, box)
{
	   removeOptions(box);
	   
	   if (day.value != "Dimanche" || day.value != "Samedi") {
			addOption(box, "07h30-08","07h30 - 08h");
			addOption(box, "08-09","08h - 09h");
			addOption(box, "09-10","09h - 10h");
			addOption(box, "10-11","10h - 11h");		
			addOption(box, "11-12","11h - 12h");		
			addOption(box, "12-13","12h - 13h");
			addOption(box, "13-14","13h - 14h");
			addOption(box, "14-15","14h - 15h");
			addOption(box, "15-16","15h - 16h");
			addOption(box, "16-17","16h - 17h");
			addOption(box, "17-18","17h - 18h");
			addOption(box, "18-19","18h - 19h");
			addOption(box, "19-19h30","19h - 19h30");
	   }
}

function addOption(selectbox, value, text)
{
		var optn = document.createElement("OPTION");
		optn.text = text;
		optn.value = value;
		selectbox.options.add(optn);
}

function removeOptions(selectbox)
{
		var i;
		for(i=selectbox.options.length-1;i>=0;i--)
		{
			selectbox.remove(i);
		}
}

function GetDateValue(year, month, day, hour, min, sec)
{
		return new Date(year, month, day, hour, min, sec);
}

function MakeTimeStr(year, month, day, hour, min, sec)
{
	   var d = new Date(year, month, day, hour, min, sec);
	   var year;
	
	   year = d.getYear();
	   if (year < 1900)
	      year += 1900;
	  
	   var str = year + "-";
	   str = str + (d.getMonth()+1) + "-";
	   str = str + d.getDate() + " ";
	   
	   hour = d.getHours();
	   if (hour < 10) str = str + "0";
	   str = str + hour + ":";
	   
	   min = d.getMinutes();
	   if (min < 10) str = str + "0";
	   str = str + min + ":";   
	   
	   sec = d.getSeconds();
	   if (sec < 10) str = str + "0";
	   str = str + sec;   
	
	   return str;
}

function CheckAllowedCharacters(Str, Allowed)
{
	   for (i = 0; i < Str.length; i++)
	   {
	      if (Allowed.search(Str.charAt(i)) < 0)
	         return false;
	   }
	   return true;
}

function ValidPhoneNumber(pn)
{
	   if (pn.length < 10  || !CheckAllowedCharacters(pn, '0123456789'))
	         return false;
	   return true;
}

function IsLeapYear(year)
{
	   if (year < 1900)
	      year += 1900;
	   if ((year % 4) == 0)
	   {
	      if ((year % 100 != 0) || (year % 400 == 0))
	         return true;
	   }
	   return false;
}

function compter(f) 
{
		var txt=f.Subject.value;
		var nb=txt.length;
		var max = 254;
		if (nb>max) { 
			var maxAffichage = max+1;
			alert("Pas plus de "+maxAffichage+" caractères dans ce champ");
			f.Subject.value=txt.substring(0,max);
			nb=max;
		}
		f.nbcar.value=max - nb; // 255 caractères maxi	
		
}

function DoSubmit() 
{

	var f = document.form1;
	var messageErreur="";
	var erreurZone=null;

	// borne min de la plage horaire selectionnée
	f.FromDate.value = MakeTimeStr(f.Year.value, f.Month.selectedIndex, f.DayOfMonth.value, f.FromHour.value.substr(0, 2), DeltaGMT, 0);
	// borne max de la plage horaire selectionnée
	f.ToDate.value   = MakeTimeStr(f.Year.value, f.Month.selectedIndex, f.DayOfMonth.value, f.FromHour.value.substr(3, 2), DeltaGMT, 0);

   // Ajout d'un test afin d'interdire les demandes de rappel le dimanche.
   if (f.DayOfWeek.value == "Dimanche" || f.DayOfWeek.value == "Samedi") {
	  messageErreur += 'Nos conseillers sont disponibles du lundi au vendredi !\n';
		if (erreurZone == null) {
			erreurZone = f.DayOfMonth;
		}
   } 

   // Ajout d'un contrôle sur les jours fériés de 2006 et 2007
	if (
			 (f.Year.value=="2006" 	   && f.Month.selectedIndex==4 && f.DayOfMonth.value==25) // 25 mai 2006) 
		  || (f.Year.value=="2007" 	   && f.Month.selectedIndex==4 && f.DayOfMonth.value==17) // 17 mai 2007) 
		  || (f.Month.selectedIndex==1 && f.DayOfMonth.value==1)  // 1er janvier
		  || (f.Month.selectedIndex==4 && f.DayOfMonth.value==1)  // 1er mai
 		  || (f.Month.selectedIndex==4 && f.DayOfMonth.value==8)  // 8 mai
 		  || (f.Month.selectedIndex==6 && f.DayOfMonth.value==14) // 14 juillet
 		  || (f.Month.selectedIndex==7 && f.DayOfMonth.value==15) // 15 aout
 		  || (f.Month.selectedIndex==10 && f.DayOfMonth.value==1) // 1er novembre
 		  || (f.Month.selectedIndex==10 && f.DayOfMonth.value==11)// 11 novembre 		  
 		  || (f.Month.selectedIndex==11 && f.DayOfMonth.value==25)// 25 décembre
		 ) {
		 	messageErreur += 'Le service n\'est pas disponible à la date sélectionnée.\n';
			if (erreurZone == null) {
				erreurZone = f.DayOfMonth;
			}
		}	

   if (!ValidPhoneNumber(f.TELEPHONE.value)) {
      messageErreur += 'Entrez un numéro de téléphone valide !\n';
		if (erreurZone == null) {
			erreurZone = f.TELEPHONE;
		}
   }

   if (!CheckAllowedCharacters(f.DayOfMonth.value, "0123456789")) {
      messageErreur += 'Entrez un jour correct par rapport au mois !\n';
		if (erreurZone == null) {
			erreurZone = f.DayOfMonth;
		}
   }
   if (!CheckAllowedCharacters(f.Year.value, "0123456789")) {
      messageErreur += 'Entrez une année valide !\n';
      f.Year.focus();
		if (erreurZone == null) {
			erreurZone = f.Year;
		}
   }
  // controle de l annee bixectile
  if (IsLeapYear(f.Year.value))
     daysInMonth[1] = 29;

  if (f.DayOfMonth.value < 0 || f.DayOfMonth.value > daysInMonth[f.Month.selectedIndex])
  {
  	 messageErreur += 'Entrez un jour correct par rapport au mois !\n';
  } 


   var curDate = new Date();
	// permet un controle entre l'heure du serveur et de la borne maximale selectionnée
	var d = GetDateValue(f.Year.value, f.Month.selectedIndex, f.DayOfMonth.value, f.FromHour.value.substr(3, 2), 0, 0);
	var tranche_horaire_basse = GetDateValue(f.Year.value, f.Month.selectedIndex, f.DayOfMonth.value, f.FromHour.value.substr(0, 2), 0, 0);
	if(d < curDate)
	{
		messageErreur += 'Veuillez sélectionner une date/heure correcte !\n';
	}
	// controle de fin de journée
	if (f.DayOfWeek.value != "Dimanche" || f.DayOfWeek.value != "Samedi")
	{
		if(d.getDate() == curDate.getDate() && d.getMonth() == curDate.getMonth() && d.getYear() == curDate.getYear())
		{
			if ( (f.DayOfWeek.value == "Samedi" && d.getHours() == '17' && curDate.getHours() >= '16' && curDate.getHours() < '17') 
			  || (f.DayOfWeek.value != "Samedi" && d.getHours() == '20' && curDate.getHours() >= '18' && curDate.getHours() < '20')  )
			{
				messageErreur += 'Cette tranche horaire est déjà complète. \nMerci de bien vouloir choisir un autre jour.\n';
			}
		}		
	}
	
	// controle ecart jour
	ecart_minutes = Math.ceil( (tranche_horaire_basse.getTime() - curDate.getTime() ) / (1000*60));
	ecart_max = 60*24*6; //en jours, ici 60minutes*24heures*6jours
	if ((ecart_max < ecart_minutes) || (ecart_minutes < 0))
	{
		messageErreur += 'Attention à choisir un délais de rappel de moins de 6 jours!\n';
		//messageErreur += 'ecart_max : '+ecart_max+' ecart_minutes : '+ecart_minutes+'\n'+curDate.getDay()+'/'+curDate.getMonth()+'/'+curDate.getYear();
		messageErreur += curDate.getYear()+" "+d.getYear();
	}
	else
	{
		var random_quart;
		random_quart = Math.floor(Math.random() * 5);
		f.DELAI.value = ecart_minutes+(random_quart*15) ;
	}
	
	// Affichage du message d'erreur 
	if (messageErreur != "") {
		alert("Avant d'envoyer votre questionnaire : \n" + messageErreur);
		if (erreurZone != null) {
			erreurZone.focus();
		}
		return false;
	}
   
}

