var cLabels=new Array();
var m_chgVotreProjet = 0;

function maxlength(text,length) {
  if(text.value.length>length){
    text.value=text.value.substr(0,length);
  }
  document.getElementById("nbCarac").innerHTML=text.value.length; 
}



function getRadioVal(rb)
{var L=rb.length;var ret="";
for (var i = 0 ; i< L ; i++)
{if(rb[i].checked) {ret=rb[i].value;break;}}
return(ret);
}

function ViderProjet(oText){
  if(oText.value=='Indiquez ici les modifications que vous souhaitez lui apporter.')
  	oText.value='';
}

function RetourProjet(){
 document.forms['frmCoordonnees'].onsubmit='';
 document.forms['frmCoordonnees'].action='demande_projet.asp';
 document.forms['frmCoordonnees'].submit();
}

function RetourCoordonnees(){
 document.forms['frmReglement'].onsubmit='';
 document.forms['frmReglement'].action='demande_coordonnees.asp';
 document.forms['frmReglement'].submit();
}

function UpdateLibelle(oInput,sValue){
  if(oInput)
	  oInput.value=sValue;
}

function UpdateValue(sIdInput, sValue){
	if(document.getElementById(sIdInput)){
	  document.getElementById(sIdInput).value=sValue;
	}
}
function ShowHide(sDivId, ddlValue){
		if(document.getElementById(sDivId)){
			if(ddlValue.toLowerCase()=='7')
		     document.getElementById(sDivId).style.display='inline';
			else
					document.getElementById(sDivId).style.display='none';
		}
	}
function ShowHideHoraires(sObjId, ddlValue){
  if(document.getElementById(sObjId)){
  	if(ddlValue.toLowerCase()=='telephone')
       document.getElementById(sObjId).style.display='inline';
  	else
  			document.getElementById(sObjId).style.display='none';
}
}

function Show(sObjId, bShow){
	if(document.getElementById(sObjId)){
		if(bShow)
			document.getElementById(sObjId).style.display='inline';
		else
			document.getElementById(sObjId).style.display='none';		
	}
}

function CheckTel(telVal){
	if(telVal.substr(0,2)=='06' || telVal.substr(0,4)=='(0)6' || telVal.substr(0,4)=='(06)')
		Show('telDetail', false);
	else
		Show('telDetail', true);
}
function ValidateCoordonnees(){
	var m_error='';
	var oForm=document.forms['frmCoordonnees'];
	var cNomEnfants=new Array();
	var cPrenomEnfants = new Array();
	var cDateNaissEnfants = new Array();
	var cCiviliteAdulte = new Array();
	var cNomAdultes=new Array();
	var cPrenomAdultes = new Array();
	var bMessageDone=false;
	//initialisation à vide du tableau des labels à mettre en rouge en cas d'erreur
	cLabels=new Array();
	InitLabelClass();
	if (oForm.tdm.value!="1" && oForm.tdmVS.value!="1"){
		oForm.action="demande_confirmation.asp";
	}
	else
	{
    if(oForm.EnableTDMPayment.value=="1")
		  oForm.action="demande_reglement.asp";
		else
		  oForm.action="demande_confirmation.asp";
	}
	if(document.getElementsByName){
		//Récupération des collections de champs pour les civilités, noms, prénoms et dates de naissance des passagers
		cNomEnfants=document.getElementsByName('nomenfant');
		cPrenomEnfants=document.getElementsByName('prenomenfant');
		cDateNaissEnfants=document.getElementsByName('datenaissanceenfant');
		cCiviliteAdulte=document.getElementsByName('civiliteadulte');
		cNomAdultes=document.getElementsByName('nomadulte');
		cPrenomAdultes=document.getElementsByName('prenomadulte');

		//Partie Vos coordonnées
	  m_error+= BuildErrorMessage(oForm.civilite,'- civilité.\n');
		m_error+= BuildErrorMessage(oForm.nom,'- nom.\n');
		m_error+= BuildErrorMessage(oForm.prenom,'- prénom.\n');
		if(oForm.adresse.value+oForm.adresse2.value==""){
			//Les deux champs d'adresse sont vides=erreur
  		m_error+='- une adresse.\n';
  		cLabels[cLabels.length]=GetLabelFor(oForm.adresse.id);
  	}
		m_error+= BuildErrorMessage(oForm.codepostal,'- code postal.\n');
		if(oForm.codepostal.value.length>0){
			if(oForm.pays.value=='FR ' ){
      //CMG - 03/03/2008 - pb de validation
			//m_error+= BuildErrorMessage(oForm.codepostal,'- code postal (5 chiffres pour la France).\n','cpFR');
			}
			m_error+= BuildErrorMessage(oForm.codepostal,'- code postal valide.\n','cp');
		}
		m_error+= BuildErrorMessage(oForm.ville,'- ville.\n');
		m_error+= BuildErrorMessage(oForm.pays,'- pays.\n');
		
		m_error+= BuildErrorMessage(oForm.telephone,'- numéro de téléphone.\n');
		if(oForm.telephone.value.length>0){
			if(oForm.pays.value=='FR ' ){
			  m_error+= BuildErrorMessage(oForm.telephone,'- numéro de téléphone (10 chiffres pour la France).\n', 'telFR');
			}
			m_error+= BuildErrorMessage(oForm.telephone,'- numéro de téléphone.\n', 'tel');
		}
		m_error+= BuildErrorMessage(oForm.mail,'- adresse email.\n', 'email');
		
		//Informations voyageurs (adultes puis enfants)	
		m_error+= BuildErrorMessage(cCiviliteAdulte,'- civilité pour tous les adultes.\n');
		m_error+= BuildErrorMessage(cNomAdultes,'- nom pour tous les adultes.\n');
		m_error+= BuildErrorMessage(cPrenomAdultes,'- prénom pour tous les adultes.\n');
		
		m_error+= BuildErrorMessage(cNomEnfants,'- nom pour tous les enfants.\n');
		m_error+= BuildErrorMessage(cPrenomEnfants,'- prénom pour tous les enfants.\n');
		m_error+= BuildErrorMessage(cDateNaissEnfants,'- date de naissance pour tous les enfants.\n');
		m_error+= BuildErrorMessage(cDateNaissEnfants,'- date de naissance valide pour tous les enfants.\n', 'date');
		m_error+= BuildErrorMessage(cDateNaissEnfants,'- date de naissance valide pour tous les enfants.\n','jjmmaaaa');	
							
		
		//partie Mieux vous connaitre, si "autre" sélectionné alors vérifie que le champ autre n'est pas vide
		if(oForm.connaissance.value=='7' && oForm.autre.value==""){
			m_error+= BuildErrorMessage(oForm.autre,'- préciser comment vous avez connu Voyageurs du Monde.\n');
		}
		if (oForm.consultbrochure){
			if(oForm.consultbrochure[0] && oForm.consultbrochure[1] && !oForm.consultbrochure[0].checked && !oForm.consultbrochure[1].checked){
			m_error+= '- consultation de brochure.\n';
				cLabels[cLabels.length]=GetLabelFor("consultbrochure");
			}else{
						if((oForm.consultbrochure[1] && oForm.consultbrochure[1].checked) 
							&& oForm.commandbrochure[0] && !oForm.commandbrochure[0].checked 
								&& oForm.commandbrochure[1] && !oForm.commandbrochure[1].checked){
								//Avez vous consulté = non et aucune option sélectionnée pour souhaitez vous la recevoir
								m_error+= '- commande de brochure.\n';
								cLabels[cLabels.length]=GetLabelFor("commandbrochure");
								Show('consultbrochure', true)
						}
			}
		}
		if(oForm.contact && oForm.horaires && oForm.contact.value=='Telephone' && oForm.horaires.value==""){
		  m_error+= BuildErrorMessage(oForm.horaires,'- créneau horaire.\n');
		}
  }
	

	//Mise en évidence des labels associés aux champs en erreur
	for(i=0;i<cLabels.length;i++)
  		if(cLabels[i])
  		 cLabels[i].className="error";
	
	//Vérification de la présence d'erreur
	if(m_error!=""){
		//des erreurs existent -> pas de soumission du form
		m_error='Les informations suivantes semblent être manquantes ou incorrectes :\n'+m_error;
		alert(m_error);
		return false;
	}else{
		//aucune erreur -> soumission du form
		return true;
	}
	
}

function ValidateProjet(){

	var m_error='';
	var oForm=document.forms['DemandeDeDevis'];

	if(!oForm) return false;

	//initialisation à vide du tableau des labels à mettre en rouge en cas d'erreur
	cLabels=new Array();
	InitLabelClass();

	var bErrorDate=false;
	m_error+= BuildErrorMessage(oForm.datedepart,'- date de départ.\n');
	//m_error+= BuildErrorMessage(oForm.datedepart,'- date de départ (au format jj/mm/aaaa).\n', 'date');
	if(oForm.datedepart.value=='jj/mm/aaaa'){
	  bErrorDate=true;
	}else{
		var today = new Date()
		var myDate=new Date()
		var aDate=oForm.datedepart.value.split('/');
		if(aDate.length==3){
  		myDate.setFullYear(aDate[2],aDate[1],aDate[0]);
			if( myDate<today)  bErrorDate=true;											
		}else{
  		bErrorDate=true;
		}
  }
  if(bErrorDate){
  	m_error+= '- date de départ (au format jj/mm/aaaa).\n';
  	cLabels[cLabels.length]=GetLabelFor(oForm.datedepart.id);
	}
    
	m_error+= BuildErrorMessage(oForm.villedepart,'- ville de départ pour ce voyage.\n');	
	m_error+= BuildErrorMessage(oForm.dureevoyage,'- durée pour ce voyage (chiffre uniquement, ex: 15).\n', 'isInt');
	m_error+= BuildErrorMessage(oForm.nbadultes,'- nombre d\'adultes pour ce voyage (chiffre uniquement, ex: 2).\n', 'isInt');
	if(oForm.nbenfants.value!="" && oForm.nbenfants.value!="0") m_error+= BuildErrorMessage(oForm.nbenfants,'- nombre d\'enfants pour ce voyage (chiffre uniquement, ex: 2).\n', 'isInt');
	m_error+= BuildErrorMessage(oForm.budget,'- budget pour ce voyage (chiffre uniquement, ex: 500).\n', 'isInt');

	if(oForm.typegroupe)
	{
		if(getRadioVal(oForm.typegroupe)==''){
		m_error+= '- Vous êtes...\n';
		cLabels[cLabels.length]=GetLabelFor(oForm.typeGrp.id);}
	}
	
	if (oForm.tdm.value!="1" && oForm.tdmVS.value!="1"){
		budgetMin = PrixMinArray[oForm.projet_indexzone.value][1] * (parseInt(oForm.dureevoyage.value) - 1);
		if (oForm.budget && oForm.budget.value!='' && parseInt(oForm.budget.value) < budgetMin){
		alert("Vous souhaitez effectuer un voyage et nous vous remercions d'avoir pensé à Voyageurs du Monde.\n\n" +
		  "Le budget que vous nous indiquez ne nous permet pas de répondre à votre demande pour cette destination et un voyage de cette durée.\n\n" +
		  "Nous vous invitons à reformuler votre projet ou à consulter nos offres promotionnelles\net séjours \" prêts à partir \" sur notre site.");
		oForm.budget.focus();
		oForm.budget.select();
		return false;
	   }
	}

	if(oForm.m_globalCodProCar.value==''){
		if((oForm.votreprojet && oForm.votreprojet.value!="" && m_chgVotreProjet==1) || (oForm.votreprojet && oForm.votreprojet.value!=="Indiquez ici les modifications que vous souhaitez lui apporter." && oForm.votreprojet.value!==""))
		{
			if( oForm.votreprojet && oForm.votreprojet.value.length>8000){
			  m_error+='- description de votre projet: '+oForm.votreprojet.value.length+'car. (max 8000 car.).\n'
				cLabels[cLabels.length]=GetLabelFor(oForm.votreprojet.id);
			}
		}
		else
		{
		//alert('rien na changé');
		m_error+='- description de votre projet.\n'
		cLabels[cLabels.length]=GetLabelFor(oForm.votreprojet.id);
		}
	}
	if(oForm && oForm.nbenfants && oForm.nbadultes){
	  var NbAdultes=parseInt(oForm.nbadultes.value);
		var NbEnfants=0;
		if(parseInt(oForm.nbenfants.value))
			NbEnfants=parseInt(oForm.nbenfants.value);
  	if(oForm.nbchambres && (oForm.nbchambres.value=="" || oForm.nbchambres.value=="0" || isNaN(parseInt(oForm.nbchambres.value-0)) || !(parseInt(oForm.nbchambres.value)<=parseInt(NbEnfants+NbAdultes)))){
  	  m_error+='- nombre de chambres (chiffre uniquement, ex: 2).\n';
  		cLabels[cLabels.length]=GetLabelFor(oForm.nbchambres.id);
  	}
	}//end if

	if( oForm.projetprecisions && oForm.projetprecisions.value.length>8000){
	  m_error+='- description de vos souhaits d\'hébergement (max 8000 car.)'
		cLabels[cLabels.length]=GetLabelFor(oForm.projetprecisions.id);
	}

	if(oForm.souhaitvoiture && oForm.souhaitvoiture.value.length>8000){
	  m_error+='- description de vos souhaits de voiture (max 8000 car.)'
		cLabels[cLabels.length]=GetLabelFor(oForm.souhaitvoiture.id);
	}
	
	if(oForm.volinterieur && oForm.volinterieur.checked){
			m_error+= BuildErrorMessage(oForm.aerienlocalprecision,'- vols intérieurs souhaités.\n');	
			if(oForm.aerienlocalprecision.value.length>8000){
			  m_error+='- description des vols intérieurs (max 8000 car.)'
				cLabels[cLabels.length]=GetLabelFor(oForm.aerienlocalprecision.id);
			}
	}
	

	for(i=0;i<cLabels.length;i++){
		if(cLabels[i])
		 cLabels[i].className="error";
	}
	
	if(m_error!=""){
		m_error='Les information suivantes semblent être manquantes ou incorrectes :\n'+m_error;
		alert(m_error);
		return false;
	}else{
		return true;
	}
}

function InitLabelClass(){
	if(document.getElementsByTagName){
  	cLabel=document.getElementsByTagName('label');
  	for(i=0;i<cLabel.length;i++){
			cLabel[i].className="inherit";													 
  	}
  }
}

function GetLabelFor(sInputId){
		if(document.getElementsByTagName){
			cLabel=document.getElementsByTagName('label');
			
			for(iLabel=0;iLabel<cLabel.length;iLabel++){
				if(cLabel[iLabel].htmlFor==sInputId){return cLabel[iLabel];}
			}
			return null;
		}
}

function BuildErrorMessage(oInput, sMessage, sControl){
		var m_sError='';
		var bMessageDone=false;

		if (!oInput) return '';
		
		if(!oInput.type){
			//Il s'agit d'un tableau d'inputs
  		for(i=0; i<oInput.length;i++){
  			if(!ControlValueOk(oInput[i].value, sControl)){
  				if (!bMessageDone){
  					 m_sError=sMessage;
  					 bMessageDone=true;
  				}// end - if (!bMessageDone)
  				cLabels[cLabels.length]=GetLabelFor(oInput[i].id);
  			}// end - if(oInput[i].value=="")
  		}// end - for(i=0; i<oInput.length;i++)
			
		}else{
			//il s'agit d'un input isolé
			if(!ControlValueOk(oInput.value, sControl)){
    		m_sError=sMessage;
    		cLabels[cLabels.length]=GetLabelFor(oInput.id);
    	}
		}// end - if(oInput.length)
		
		
		return m_sError;
}

function ControlValueOk(sValue, sControl){
  
	switch (sControl){
		case 'isInt':
    		 var re = /^[0-9]+$/
				 return sValue.match(re) && parseInt(sValue)>0;
				 //return parseInt(sValue);
				 break;
		case 'telFR':
				 var re = /^(0[12345689])[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/	// Accepte un numero de téléphone de type 'national' y compris numéros en '08'.
				 return sValue.match(re);
				 break;
		case 'tel':
				 var re = /^[0-9\(\)\+\.\/\-\s]+$/	// Accepte un numero de téléphone de type 'international'. Ex : (+33) 1 34 12 52 30
				 return sValue.match(re);
				 break;
		case 'cpFR':
				 var re = /^([A-Z]+[A-Z]?\-)?[0-9]{1,2} ?[0-9]{3}$/	// Accepte une chaine de type 'code postal'. Ex : F-33370 ou 33 370 ou 33370 ou F-1 370				 
				 return sValue.match(re);
				 break;
		case 'cp':
				 var re = /^([a-zA-Z0-9-\/ ().]{4,8})$/	// Accepte une chaine de type 'code postal' autre que la France. Ex : NH- 5JT				 
				 return sValue.match(re);
				 break;
		case 'email':
				 return validateEmailv2(sValue)
				 break;
		case 'jjmmaaaa':
				 return !(sValue=='jj/mm/aaaa')
		case 'date':
				 return  estUneDate(sValue)
		default :
				 return sValue!="";
				 break;
	}// end - switch
	
}


function validateEmailv2(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

// Une annee bisextile tous les 4 ans (a cause de la rotation de 365j -> un quart <-)
// et on ote une annee bisextile tous les 400 ans (car ce n'est pas tout a fait un quart).
// Une année est bissextile si elle est divisible par quatre et pas par 100
// (à moins qu'elle ne soit aussi divisible par 400)
function AnneeBisextile(intAnnee)
{
    if (intAnnee % 100 == 0) {
        if (intAnnee % 400 == 0)
            return true;
    } else
    if (intAnnee % 4 == 0)
        return true;
    return false;
}

// Verifie si le champ saisi est une date valide
//
function estUneDate(value)
{
	var bErr;
	var strValeur;
	var strJour, strMois, strAnnee;
    var intJour, intMois, intAnnee;
	var strSeparateur1, strSeparateur2;

	bErr = 0;
	strValeur = value;
    
    // Verification de la longueur
	if (strValeur.length != 10)
	    bErr = 1;

    // Separation des chaines j/m/a
	strJour = strValeur.substring(0, 2);        // jour
	strSeparateur1 = strValeur.substring(2, 3); // '/'
	strMois = strValeur.substring(3, 5);        // mois
	strSeparateur2 = strValeur.substring(5, 6); // '/'
	strAnnee = strValeur.substring(6);          // année

    // Conversion des chaines en entier
    intJour = parseInt(strJour, 10);
    if (isNaN(intJour))
        bErr = 1;
    intMois = parseInt(strMois, 10);
    if (isNaN(intMois))
        bErr = 1;
    intAnnee = parseInt(strAnnee, 10);
    if (isNaN(intAnnee))
        bErr = 1;
	if (intAnnee < 1900 || intAnnee > 2099)
        bErr = 1;

	// Erreurs de base
	//

        if (intJour < 1 || intJour > 31)
            bErr = 1;
        if (strSeparateur1 != '/')
            bErr = 1;
        if (intMois < 1 || intMois > 12)
            bErr = 1;
        if (strSeparateur2 != '/')
            bErr = 1;


	// Erreurs avancées

	// Mois comportant 30 jours
	if (intMois == 4 || intMois == 6 || intMois == 9 || intMois == 11)
	{
		if (intJour == 31)
		    bErr = 1;
	}

	// Février, année bisextile
	if (intMois == 2)
	{
        if (intJour > 29)
		    bErr = 1;
        if ((intJour == 29) && (!AnneeBisextile(intAnnee)))
            bErr = 1;
	}

    if (bErr == 1)
    {
        return false;
    }

    return true;
}

