//@(#)$Id: socle.js,v 1.1 2005/12/19 11:02:19 IDF+ccapochi Exp $
// Ce fichier javascript est automatiquement copié dans l'arborescence du site
// s'il n'est pas présent ou si sa taille diffère de celui présent
// Il contient les fonctions de vérification de champs pour les formulaires

// variable tableau pour les champs obligatoire d'un formulaire
var champsObli="";

// Variable qui contient tous les champs obligatoires
function aChecker(controle){champsObli=champsObli+controle;}

// CallBack pour ne plus intercepter les erreurs javascript
function bloqueErreur()
{return true; }

// fonction qui vérifie que tous les champs obligatoires d'un formulaire sont saisis
function checkVide(formulaire)
{
if (champsObli == "") return true;
var monChamp;
var retour = true;
var i=0;
while ( (monChamp = formulaire.elements[i]))
{
    if (monChamp.type != "submit")
    {
        if(monChamp.value == "" && champsObli.indexOf(monChamp.name) >= 0 )
        {
            if (retour == true) {
                alert("Tous les champs obligatoires ne sont pas saisis.\nVeuillez saisir les champs signalés par un astérisque.");
                if (retour == true)
                     selectionne(monChamp);
            }
            retour = false;
    		monChamp.style.backgroundColor ="orange";
        }
            else monChamp.style.backgroundColor ="white";
    }   
i++;
}
return retour;
}

// fonction de sélection d'un champ
function selectionne (champ)
{
    window.onerror = bloqueErreur;
    if (champ.type != "select-one")
        champ.select();
    champ.focus();
}

// Fonction pour verifier la validite d'une date
function check_date(field){
  var checkstr = "0123456789";
  var DateField = field;
  var Datevalue = "";
  var DateTemp = "";
  var seperator = "/";
  var day;
  var month;
  var year;
  var leap = 0;
  var err = 0;
  var i;
  err = 0;
  DateValue = DateField.value;
  /* Delete all chars except 0..9 */
  var pos = parseInt(field.value.search(seperator));
  for (i = 0; i < DateValue.length; i++) {
    if (checkstr.search(DateValue.substr(i,1)) >= 0) {
      DateTemp = DateTemp + DateValue.substr(i,1);
	}
  }
  DateValue = DateTemp;
  /* Always change date to 8 digits - string*/
  /* if year is entered as 2-digit / always assume 20xx */
  if (DateValue.length == 5) {
    DateValue = DateValue.substr(0,2) + '0' + DateValue.substr(2,1)+'20'+DateValue.substr(3,2); }
  if (DateValue.length == 7) {
		if (pos == 2){
  	DateValue = DateValue.substr(0,2) + '0' + DateValue.substr(2,5); 
		}else{
		DateValue =  '0' + DateValue.substr(0,7); 
		}
  }
  if (DateValue.length == 6) {
  	if (pos == 1){
  	DateValue = '0'+DateValue.substr(0,1) + '0' + DateValue.substr(1,5); 
  }else{
    DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
  }
  if (DateValue.length != 8) {
     err = 19;}
  /* year is wrong if year = 0000 */
  year = DateValue.substr(4,4);
  if (year == 0) {
     err = 20;
  }
  
  /* Validation of month*/
  month = DateValue.substr(2,2);
  if ((month < 1) || (month > 12)) {
     err = 21;
  }
  
  /* Validation of day*/
  day = DateValue.substr(0,2);
  if (day < 1) {
    err = 22;
  }
  
  /* Validation leap-year / february / day */
  if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
     leap = 1;
  }
  if ((month == 2) && (leap == 1) && (day > 29)) {
     err = 23;
  }
  if ((month == 2) && (leap != 1) && (day > 28)) {
     err = 24;
  }
  /* Validation of other months */
  if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
     err = 25;
  }
  if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
     err = 26;
  }

  /* if 00 ist entered, no error, deleting the entry */
  if ((day == 0) && (month == 0) && (year == 00)) {
     err = 0; day = ""; month = ""; year = ""; seperator = "";
  }

  /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
  if (err == 0) {
     DateField.value = day + seperator + month + seperator + year;
  }
  /* Error-message if err != 0 */
  else {
	  alert("Erreur sur la date ! Veuillez saisir correctement la date !");
	  DateField.value = "";
	  DateField.focus();
  }
}


function validite(controle,format,mini,maxi) {

// Les differents tests possibles :
// On affecte a la variable 'RE' le test d'expression reguliere souhaite

   // On ne fera les tests que si le champ est rempli d'au moins un caractere (pas vide)
	if (controle.value.length > 0) {


      //	I	: Integer
   	if ( format == "N" || format == "I" ) {
   	   RE = /^\d+([\.]|[\,])*\d*$/;
   	   // Si on ne trouve pas dans le champ l'expression reguliere recherchee
      	if (format != "C" && !RE.test(controle.value)) {
            // Envoi d'une alerte
            selectionne (controle);
            alert('Veuillez saisir un nombre.');
            return false;
         }
      }
   
      //	D	: Date (xx/xx/xx ou xx/xx/xxxx ou xx-xx-xx ou xx-xx-xxxx)
   	if ( format == "D" ) {
   	   if (check_date(controle)) {
            // Envoi d'une alerte
            selectionne (controle);
            alert('Veuillez saisir une date.');
            return false;
   	   }
   	}

      // Tests de longueur du champ (nombre de caracteres saisis)
      // Si il a ete specifie '0', le test n'est pas effectue
		if ( mini != 0 ) {

         // Si la longueur de la saisie est inferieure au minimum demande
			if ( controle.value.length < mini ) {
               selectionne (controle)
               alert('Ce champ est obligatoire. Veuillez saisir au moins ' + mini + ' caractères.');
               return false;
			}
      }
   
      // Si la longueur de la saisie est superieure au maximum demande
		if ( maxi != 0 ) {
			if ( controle.value.length > maxi ) {
            selectionne (controle)
   			alert('Vous ne devez pas saisir plus de ' + maxi + ' caractères.');
   			return false;
			}
		}
	}
	else
	{
	   if (mini > 0)
       	{
             selectionne (controle)
             alert('Ce champ est obligatoire. Veuillez saisir au moins ' + mini + ' caractères.');
             return false;
       	}
    else
        return true;
	}
	
	return true;
}

// mise en capitale des premières lettres de chaque mot
// ou tout le mot si tout est à true
function CAP (champ, tout)
{
    if (champ.value)
    {
        if (tout == true)
        {
            champ.value = champ.value.toUpperCase();
        }
    else
        {
            var valeur = champ.value;
            var expression = /((^|[ \.-])[a-zéçàèìòùâêîôû])/g;
            var resultat = valeur.match (expression);
            
            if (resultat)
            {
                for(j=0; j<resultat.length ;j++){
                    expression = "\(^|[ \.-])["+resultat[j]+"]";
                    valeur = valeur.replace (new RegExp(expression,"g"),resultat[j].toUpperCase());
                }
            }
            champ.value=valeur;
        }
    }
}


//fonction qui affiche une fenetre d'impression automatiquement
function imprimer() { 
    var targeturl;
    
    targeturl=document.location.href+"&imprimer=1";
    newwin=window.open(targeturl,"Impression","scrollbars,resizable");
        if (document.all || document.getElementById){ 
        newwin.moveTo((screen.availWidth)*1/8,(screen.availHeight)*1/8);
        newwin.resizeTo((screen.availWidth)*3/4,(screen.availHeight)*3/4); 
        }
	newwin.print(); 
}

//fonction qui affiche la fenetre d'aide en ligne
function aide() {
	var targeturl;
    targeturl=document.location.href+"&aide=1";
	newwin=window.open(targeturl,"Aide","width=650 , height=400 ,scrollbars");
	newwin.focus();
	//newwin.moveTo(0,0);
}


// fonction qui affiche le calendrier
// nécessite CalendarPopup.js
function afficheCalendrier (champ)
{
    if (!champ.value) champ.value = formatDate(new Date(), 'dd/MM/yyyy');
    var cal=new CalendarPopup('calendrier');
    cal.setCssPrefix ('SocleCal');
    cal.select (champ,'ancre'+champ.name,'dd/MM/yyyy');
}


//fonction qui ouvre une fenêtre à partir d'un lien url
function ouvre_url(url, titre) {
	var targeturl;
		/*
	pos=url.indexOf("://", 0);
	pos2=url.indexOf(".php", 0);
	
	if(pos==-1 && pos2 == -1)
	{
		targeturl="http://"+url;
	}
	else*/ targeturl=url;
	
	newwin=window.open(targeturl,titre);
	newwin.focus();
}

// test du type de Navigateur, renvoie true si Netscape
var isNN = ( navigator.appName.indexOf( "Netscape" ) != -1 ); 
 
// fonction de tabultation automatique
function autoTab( champ,taille, event ) { 
	var keyCode	= ( isNN ) ? event.which : event.keyCode; 
    var keyMajuscule = ( isNN ) ?(event.modifiers & Event.SHIFT_MASK) : event.shiftKey;
	
	if (keyCode == 9 && keyMajuscule)
	    return true;
	
    var filter	= ( isNN ) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46,36,35,34,33]; 
	if( champ.value.length >= taille && !tableauContient( filter, keyCode )) { 
     	champ.value = champ.value.slice( 0, taille );
    	selectionne (champ.form[( getIndex( champ ) + 1 ) % champ.form.length]); 
	} 
	return true; 
} 
 
// existence d'un élément dans un tableau
function tableauContient( arr, ele ) { 
	var found = false, index = 0; 
	while( !found && index < arr.length ) 
    	if( arr[index++] == ele ) {
    		found = true; 
    	} 
	return found; 
} 

// index d'un champ 
function getIndex( champ ) { 
	var index = -1, i = -1;
	while ( ++i < champ.form.length && index == -1 ) 
	{
    	if ( champ.form[i] == champ )
    		index = i; 
	}
	return index; 
} 



//fermeture de la fenêtre après confirmation
function quitte(_confirm) {

    if (_confirm)
    {
        if ( confirm("Désirez-vous quitter l'application ?"))
            window.close();
    }
    else
        window.close();

}
