var cLabels=new Array();

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 RetourProjet(){
 document.forms['frmCoordonnees'].onsubmit='';
 document.forms['frmCoordonnees'].action='devis-voyage.asp';
 document.forms['frmCoordonnees'].submit();
}

function UpdateLibelle(oInput,sValue){
  if(oInput)
	  oInput.value=sValue;
}

function UpdateValue(sIdInput, sValue){
	if(document.getElementById(sIdInput)){
	  document.getElementById(sIdInput).value=sValue;
	}
}
function Show(sObjId, bShow){
	if(document.getElementById(sObjId)){
		if(bShow)
			document.getElementById(sObjId).style.display='inline';
		else
			document.getElementById(sObjId).style.display='none';		
	}
}

function ShowHide(sObjId){
	if(document.getElementById(sObjId)){
		if(document.getElementById(sObjId).style.display=='inline')
			document.getElementById(sObjId).style.display='none';
		else
			document.getElementById(sObjId).style.display='inline';		
	}
}
function CheckAerienInclu(){
	if(document.getElementById('aerienInclus')){
		if(document.getElementById('aerienInclus').checked){
			document.getElementById('aerienInclus').value='on';
		}
		else
			{document.getElementById('aerienInclus').value='';}
	}
}
function VerifAerienInclu(){
	if(document.getElementById('aerienInclus')){
		if(document.getElementById('aerienInclus').value==''){
			document.getElementById('dvvilleDepart').style.display='none';
		}
		else
			{document.getElementById('dvvilleDepart').style.display='inline';}
	}
}


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 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 aErrorDate=false;
	var bErrorDate=false;
	
	m_error+= BuildErrorMessage(oForm.codePays,'- votre destination.\n');
	m_error+= BuildErrorMessage(oForm.nbadultes,'- nombre d\'adulte pour ce voyage.\n');
	m_error+= BuildErrorMessage(oForm.nbenfants,'- nombre d\'enfants pour ce voyage.\n');
	m_error+= BuildErrorMessage(oForm.datedepart,'- date de départ.\n');
	m_error+= BuildErrorMessage(oForm.dateretour,'- date de retour.\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);
	}
	
  if(oForm.dateretour.value=='jj/mm/aaaa'){
	  aErrorDate=true;
	}else{
		var today = new Date()
		var myDate=new Date()
		var rDate=oForm.dateretour.value.split('/');
		if(rDate.length==3){
  		myDate.setFullYear(rDate[2],rDate[1],rDate[0]);
			if( myDate<today)  aErrorDate=true;											
		}else{
  		aErrorDate=true;
		}
  }
  if(aErrorDate){
  	m_error+= '- date de retour (au format jj/mm/aaaa).\n';
  	cLabels[cLabels.length]=GetLabelFor(oForm.dateretour.id);
	}
    if(oForm.typeHebergement)
	{
		if(getRadioVal(oForm.typeHebergement)==''){
		m_error+= '- type d\'hébergement désiré\n';
		cLabels[cLabels.length]=GetLabelFor(oForm.typeHeberg.id);}
	}
	if(oForm.typeTransport)
	{
		if(getRadioVal(oForm.typeTransport)==''){
		m_error+= '- type de transport désiré\n';
		cLabels[cLabels.length]=GetLabelFor(oForm.typeTrans.id);}
	}
	
	m_error+= BuildErrorMessage(oForm.budget,'- votre budget pour ce voyage.\n');	
	if (oForm.aerienInclus.checked){m_error+= BuildErrorMessage(oForm.villeDepart,'- ville de départ pour ce voyage.\n');}

	//if(oForm.m_globalCodProCar.value==''){
  	if(oForm.observations && oForm.observations.value!="" )
  	{
  		if( oForm.observations && oForm.observations.value.length>8000){
  		  m_error+='- description de votre projet: '+oForm.observations.value.length+'car. (max 8000 car.).\n'
  			cLabels[cLabels.length]=GetLabelFor(oForm.observations.id);
  		}
  	}
  	else
  	{
  	m_error+='- description de votre projet.\n'
  	cLabels[cLabels.length]=GetLabelFor(oForm.observations.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 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(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.adresse1.value+oForm.adresse2.value==""){
			//Les deux champs d'adresse sont vides=erreur
  		m_error+='- une adresse.\n';
  		cLabels[cLabels.length]=GetLabelFor(oForm.adresse1.id);
  	}
		m_error+= BuildErrorMessage(oForm.codePostal,'- code postal.\n');
		m_error+= BuildErrorMessage(oForm.ville,'- ville.\n');
		m_error+= BuildErrorMessage(oForm.pays,'- pays.\n');
		
		if(oForm.pays.value=='FR ' && oForm.telephone.value.length>0 && oForm.telephone.value.length<10){
		  m_error+= '- numéro de téléphone (10 chiffres pour la France).\n';
			cLabels[cLabels.length]=GetLabelFor(oForm.telephone.id);
		}
		m_error+= BuildErrorMessage(oForm.telephone,'- numéro de téléphone.\n', 'tel');
		m_error+= BuildErrorMessage(oForm.email,'- 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');	

		
  }
	

	//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 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 'tel':
				 var re = /^[0-9\(\)\+\.\/\-\s]+$/
				 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;
}