<!--
/*
Bibliotheque de script javascript

23/10/2009 : [PCANAL] Ajout des fonctions générique openPopup, trim, ltrim et rtrim
21/12/2009 : [CGLEIZES] Ajout de la fonction de controle de date
*/

function Popup(page,largeur,hauteur,options) {
  var nbaleatoire=Math.random();
  //if (nbaleatoire<0.5) {window.open("popup4.html","popup4","scrollbars=no,menubar=no,resizable=no,width=250,height=220");}
  if (nbaleatoire<=1) {window.open("popup1.html","popup1","scrollbars=no,menubar=no,resizable=no,width=250,height=220");}
  //if (nbaleatoire>=0.5) {window.open("popup3.html","popup3","scrollbars=no,menubar=no,resizable=no,width=250,height=220");}
}
function StartTimer(delai) {
  // Déclenche le timer à la fin du chargement de la page (delai est en secondes)
  setTimeout("Popup()",delai*300);
}
function estUnEmail(champ)
	{
    var strValeur;
    strValeur = champ.value;	
    var verif     = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]{2,}[.][a-zA-Z]{2,4}$/
		if (verif.exec(strValeur) == null)
		{
		return false;
		}    
return true;
}

// Affiche un message d'erreur avec le nom du champ non complete
function erreur(champ)
{
    alert('Le champ ' + champ + ' est obligatoire.\nVeuillez le renseigner.');
}

// Verifie si un champ obligatoire a bien ete renseigne
function champobligatoire(champ, libelle)
{
    if (champ.value == '') {
        erreur(libelle);
        champ.focus();
        return false;
    } else
        return true;
}

// Verifie si le champ est un reel
function estUnReel(champ, nom_champ)
{
    var dblChamp;
    var i;
    var ch;
    var strChamp;

    strChamp = champ.value;
    for (i = 0; i < strChamp.length; i++) {
        ch = strChamp.charAt(i);
        if ((ch < "0" || "9" < ch) && ch != '.' && ch != ',') {
//            alert(nom_champ + " contient des caracteres non numeriques");
//            champ.focus();
            return false;
        }
//        if (ch == '.') {
//            alert(nom_champ + " contient un '.' au lieu d'une ','");
//            champ.focus();
//            return false;
//        }
    }

    strChamp.replace(",", ".");
    dblChamp = parseFloat(strChamp);
    if (isNaN(dblChamp)) {
//        alert("Veuillez saisir un nombre dans le champ \"" + nom_champ + "\"");
//        champ.focus();
//        champ.select();
        return false;
    }
    return true;
}

// Verifie si le champ est un entier
function estUnEntier(champ, nom_champ)
{
    var j;
    var strVal;
    var bErr;
    
    bErr = 0;
    strVal = champ.value;

    for (j = 0; j < strVal.length; j++)
    {
        if (strVal.charAt(j) < "0" || strVal.charAt(j) > "9")
            bErr = 1;
    }

    if (bErr == 1)
    {
/*        alert("Veuillez saisir un entier dans le champ \"" + nom_champ + "\"");
        champ.focus();
        champ.select();
*/
        return false;
    }
    
    return true;
}

// 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(champ, nom_champ)
{
	var bErr;
	var strValeur;
	var strJour, strMois, strAnnee;
    var intJour, intMois, intAnnee;
	var strSeparateur1, strSeparateur2;

	bErr = 0;
	strValeur = champ.value;
    
    // Verification de la longueur
	if ((strValeur.length != 10) && (strValeur.length != 8))
	    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
    if (strAnnee.length == 2)
        strAnnee = '20' + strAnnee;

    // 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;

	// 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;
        if (intAnnee < 1900 || intAnnee > 9999)
            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)
    {
    /*    alert("Date non valide (champ \"" + nom_champ + "\")");
        champ.focus();
        champ.select();*/
        return false;
    }
    return true;
}

function estUneDate2(champ, nom_champ)
{
	var bErr;
	var strValeur;
	var strJour, strMois, strAnnee;
    var intJour, intMois, intAnnee;
	var strSeparateur1, strSeparateur2;

	bErr = 0;
	strValeur = "01/" + champ.value;
    
    // Verification de la longueur
	if ((strValeur.length != 10) && (strValeur.length != 8))
	    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
    if (strAnnee.length == 2)
        strAnnee = '20' + strAnnee;

    // 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;

	// 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;
        if (intAnnee < 2000 || intAnnee > 9999)
            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)
    {
    /*    alert("Date non valide (champ \"" + nom_champ + "\")");
        champ.focus();
        champ.select();*/
        return false;
    }
    return true;
}

// Verification d'une adresse email
//
function estUnEmail(champ, nomchamp)
{
    var strValeur;

    strValeur = champ.value;

    if (strValeur.indexOf("@") < 3)
    {
        alert("Erreur sur la saisie de l'e-mail.");
        champ.focus();
        champ.select();
        return false;
    }

    if (strValeur.length > 50)
    {
        alert("L'e-mail ne doit pas depasser 50 caracteres");
        champ.focus();
        champ.select();
        return false;
    }

    return true;
}


function getDate(strDate){	  
	    day = strDate.substring(0,2);
		month = strDate.substring(3,5);
		year = strDate.substring(6,10);
		d = new Date();
		d.setDate(day);
		d.setMonth(month);
		d.setFullYear(year); 
		return d;  
	  }
    
    
//Vérifie la validité d'une adresse mail par expression régulière :
// Version V2
function validateEmail(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;
      }

//Surligne en rouge le texte des balise <label></label> en cas d'erreur de saisie de formulaire
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;
      		}
      }
//Réinitialise la classe par défaut de toutes les balise <label></label> du formulaire   
function InitLabelClass(){
	if(document.getElementsByTagName){
  	cLabel=document.getElementsByTagName('label');
  	for(i=0;i<cLabel.length;i++){
			cLabel[i].className="inherit";													 
  	}
  }
}

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[1234568])[ \.\-]?[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 'cp':
				 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 'email':
				 return validateEmail(sValue)
				 break;
		case 'jjmmaaaa':
				 return !(sValue=='jj/mm/aaaa')
		case 'date':
				 return  estUneDate(sValue)
		default :
				 return sValue!="";
				 break;
	}// end - switch
	
}
   
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 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 getIeElementsByName(elementsName){
	if(navigator.appName.indexOf("Explorer")>0){
		var i, l;
		tab = document.all;
		l = tab.length;
		ElementsByName = new Array();
	
	   for (i=0; i<l; i++)
	   {
		  if (tab[i].name==elementsName)
		  ElementsByName[ElementsByName.length] = tab[i];
	   }
	   return ElementsByName;
	}else{
		return document.getElementsByName(elementsName);
	}
}

function reloadCAPTCHA(sObjId){

	if (document.getElementById(sObjId)){
	document.getElementById(sObjId).innerHTML='<img src="/terdav/inc/captcha.asp" style="width:130px;height:30px" alt="Image de controle"  align="middle"  />';
	}
}

function addToFavorites(href, titre)
	{
	if (window.sidebar)
		{
		/* mozille, firefox*/
		window.sidebar.addPanel(titre, href,"");
		}
	else if( document.all )
		{
	window.external.AddFavorite(href, titre);
		}
	}
	
	/* ouvre une poppup classique
	/!\ : le titre de la popup n'est pas passé en paramètre car une valeur non valide
	fera planter le script. et de toute facon, le titre n'apparait Password*/
function openPopup(page, largeur, hauteur) 
	{
	var win = window.open(page,"Terdav","width=" + largeur + ",height=" + hauteur);
	}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function CheckDate(champ,DateDepart,DateNaissance) {
    var Separateur = new RegExp("[^0-9]","g"); /*Filtre pour tous les caractères non numériques*/
    var StructureDate = new RegExp("^(0[1-9]|[1-2][0-9]|[3][0-1])(0[1-9]|[1][0-2])(19|20)?[0-9][0-9]$");/*Filtre pour la structure des dates à 6 ou 8 caractères*/
    var erreur=0;
    var Aujourdhui = new Date();/*Stocke la date du jour au format date javascript*/
    var DateTestee = champ.value.replace(Separateur,"");/*Supprime tous les caractères non numériques dans la date saisie*/
    if (!StructureDate.test(DateTestee)) {erreur=1} /*Vérifie si la date expurgée des caractères non numériques respecte une structure de date à 6 ou 8 caractères*/
    else {
      if (DateTestee.length==6) { /*Si la date saisie contient une année à deux chiffres seulement*/
        if (parseInt(DateTestee.substring(4,6))<50) {DateTestee=DateTestee.substring(0,4)+"20"+DateTestee.substring(4,6)} /*si l'année à deux chiffres est inférieure à 50, on considère que c'est le 21ème siècle*/
        else {DateTestee=DateTestee.substring(0,4)+"19"+DateTestee.substring(4,6)}} /*si l'année à deux chiffres est supérieure ou égal à 50, on considère que c'est le 20ème siècle*/
      var DateJs = new Date(DateTestee.substring(4,8), DateTestee.substring(2,4) - 1, DateTestee.substring(0,2)); /*Transforme la date saisie en date javascript*/
      if(DateJs.getDate()!=DateTestee.substring(0,2)||(DateJs.getMonth()+1)!=DateTestee.substring(2,4)||DateJs.getFullYear()!=DateTestee.substring(4,8)){erreur=2} /*Teste si la date javascript est la même que la date saisie*/
    }
    if (erreur==1) {alert("Veuillez saisir une date au format jjmmaaaa!");return false;}
    if (erreur==2) {alert("La date saisie n'existe pas !");return false;}
    if (DateJs<Aujourdhui && DateDepart==1) {alert("La date de départ doit être postérieure à la date d'aujourd'hui !");return false;}
    if (DateJs>Aujourdhui && DateNaissance==1) {alert("Une date de naissance ne peut pas être postérieure à la date d'aujourd'hui !");return false;}
    champ.value=DateTestee.substring(0,2) + "/" + DateTestee.substring(2,4) + "/" + DateTestee.substring(4,8)
    return true;
  }
// -->
