// détermine le navigateur de l'utilisateur
// (4+ = versions 4 et ultérieures)
var nn4 = (document.layers); // Netscape 4.xx
var dom = (document.getElementById); // IE 5+, Netscape 6+, Mozilla
var iex = (document.all); // IE 4+

// le constructeur de la classe Calque admet 2 arguments :
// - l'id du layer
// - si le layer est visible ou pas (false/true) :
//   si cet argument est omis, le layer est rendu visible
function Calque(id) {
  this.id = id;
  this.x = null;
  this.y = null;
  this.layer = null;
  this.style = null;
  if (arguments.length == 2) this.visible = arguments[1];
  else this.visible = true;
  if (nn4) {
     if (document.layers[id]) {
        this.layer = document.layers[id];
        this.style = document.layers[id];
     }
  }
  else if (dom) {
     if (document.getElementById(id)) {
        this.layer = document.getElementById(id);
        this.style = document.getElementById(id).style;
     }
  }
  else if (iex) {
     if (document.all[id]) {
        this.layer = document.all[id];
        this.style = document.all[id].style;
     }
  }
  if (this.style) this.z = this.style.zIndex;
  else this.z = null;
}

// permet de masquer le calque
Calque.prototype.masquer = function() {
  if (this.style) {
     this.style.visibility = nn4 ? "hide" : "hidden";
     this.visible = false;
  }
}

// permet de réafficher le calque
Calque.prototype.montrer = function() {
  if (this.style) {
     this.style.visibility = nn4 ? "show" : "visible";
     this.visible = true;
  }
}

// déplace le calque de dx horizontalement et de dy verticalement
Calque.prototype.deplacer = function(dx, dy) {
  if (this.style) {
     this.x = parseInt(this.style.left) + dx;
     this.y = parseInt(this.style.top) + dy;
     this.style.left = this.x;
     this.style.top = this.y;
  }
}

// déplace le calque vers le point (x, y)
Calque.prototype.deplacer_vers = function(x, y) {
  if (this.style) {
     this.x = x;
     this.y = y;
     this.style.left = x;
     this.style.top = y;
  }
}

// affecte le contenu en argument au calque
Calque.prototype.changer_contenu = function(valeur) {
  if (this.style) {
     if (nn4) {
        this.layer.document.write(valeur);
        this.layer.document.close();
     }
     else this.layer.innerHTML = valeur;
  }
}


function GestionCalques() {
  this.calques = new Array(); // tableau des calques
  this.calque_cour = -1; // calque en cours ou dernier calque traité
}

// détermine quel indice de this.calques correspond à l'id
// si aucun calque n'a cette id, on en crée un nouveau
GestionCalques.prototype.cherche_id = function(id) {
  this.calque_cour = -1;
  for (var i=0;i<this.calques.length;i++) {
     if (this.calques[i].id == id) {
        this.calque_cour = i;
        break;
     }
  }
  if (this.calque_cour == -1) {
     this.calques[this.calques.length] = new Calque(id);
     this.calque_cour = this.calques.length - 1;
  }
}

// cache le calque d'id "id"
GestionCalques.prototype.masquer = function() {
  if (arguments.length == 1) this.cherche_id(arguments[0]);
  this.calques[this.calque_cour].masquer();
}

// réaffiche le calque d'id "id"
GestionCalques.prototype.montrer = function() {
  if (arguments.length == 1) this.cherche_id(arguments[0]);
  this.calques[this.calque_cour].montrer();
}

// déplace un calque vers le point (x, y)
// un 3e argument facultatif indique l'id du calque à déplacer
GestionCalques.prototype.deplacer_vers = function(x, y) {
  if (arguments.length == 3) this.cherche_id(arguments[2]);
  this.calques[this.calque_cour].deplacer_vers(x, y);
}

// déplace un calque de dx horizontalement et de dy verticalement
// un 3e argument facultatif indique l'id du calque à déplacer
GestionCalques.prototype.deplacer = function(dx, dy) {
  if (arguments.length == 3) this.cherche_id(arguments[2]);
  this.calques[this.calque_cour].deplacer(dx, dy);
}

// change le contenu du calque
// un 2e argument facultatif indique l'id du calque à déplacer
GestionCalques.prototype.changer_contenu = function(valeur) {
  if (arguments.length == 2) this.cherche_id(arguments[1]);
  this.calques[this.calque_cour].changer_contenu(valeur);
}
//ouvre une fenêtre et la positionne en premier plan


var popup_url='';

function open_url(lien){
	if(popup_url)
		  {
			if(!popup_url.closed) popup_url.close();//popup_url.focus();
		  }
		  popup_url = open(lien, 'popup_url', '');
}


//fonction de vérification de formulaire
//zone : nom du champ
//mini : nombre de caractéres minum, 1 pour champ obligatoire, "" pour les autres
//maxi : nombre de caractéres maximum
//ligne : nom de la ligne qui changera de couleur
//format : type du test
//couleur de la ligne en cas d'erreur

function vfrm(zone, mini, maxi, ligne, format, couleur, etiquette)
{

	var msg=""; //message renvoyé
	var chaine=""; //extension du fichier
	
	//Si le champ est obligatoire, on controle
	// Si le champ est facultatif, on controle uniquement si le champ est renseigné

	if (mini>0 || zone.value!=""){
		
		//le champ est-il vide
		if (zone.value==""){
			document.all[ligne].style.background=couleur;
			zone.focus();
			alert("Veuillez renseigner "+etiquette);
			return false;
		}
		else{
			document.all[ligne].style.background="";
		}
		
			
		// Vérifie la validité du format de la chaine saisie
		function testFormat()
		{
			//on vérifie le formatage du champ saisie
			if (!RE.test(zone.value))
			{
				document.all[ligne].style.background=couleur;
				zone.focus();
				alert("Erreur de saisie :\n"+ etiquette + " est incorrect "+msg);
				return false;
			}
			else
			{
				document.all[ligne].style.background="#FFFFFF";
			}
		
		}

		// Vérifie la validité de la longueur maximum du champ saisie
		function testMaxi()
		{
		
			if (maxi!=0)
			{
				if (zone.value.length>maxi )
				{
					document.all[ligne].style.background=couleur;
					zone.focus();
					alert("Vous ne pouvez pas saisir plus de " + maxi + " caractères" + " pour " + etiquette);
					return false;
				}
				else
				{
					document.all[ligne].style.background="";
				}
			}
		
		}

	
		//penser à ajouter le controle du  Mini + champ vide
		//mise en majuscule du format 
		format=format.toUpperCase();
		
		switch (format){
		
			// A : alphabétique
			case "A" :
				RE = /^([A-Za-z]+[ ]*[-]*[A-Za-z]*)+$/;
				msg="alphabéthique (az)";
				if (testFormat()==false)return false;
				if (testMaxi()==false)return false;
				break;
				
			// AN : alphanumérique
			case "AN" :
				RE = /^[A-Za-zàâäéèêëîïôùûç.!€\?&:;\"()\/-°\s\%\@\#\+,'0-9\-]+$/;
				msg="alphanumérique";
				if (testFormat()==false)return false;
				if (testMaxi()==false)return false;
				break;
				
			// N : numérique
			case "N" :
				RE = /^[-\d]+[.]?\d*$/;
				remplace(zone, ",", ".")
				if (testFormat()==false)return false;
				if (testMaxi()==false)return false;
				break;
	
			// CP : code postal français (5 chiffres)
			case "CP" :
				RE = /^\d{5}$/;
				msg="(ex : 79000)";
				if (testFormat()==false)return false;
				if (testMaxi()==false)return false;
				break;
			
			// EMAIL : courriel
			case "EMAIL" :
				RE = /^[A-Za-z0-9\.\-_]+[@][A-Za-z0-9\-\.]+[\.][A-Za-z][A-Za-z][A-Za-z]?$/;
				msg="(ex : jacques.martin@deux-sevres.com)";	
				if (testFormat()==false)return false;
				if (testMaxi()==false)return false;
				break;
			
			//fichier image	
			case "IMAGEFILE" :
			
				//récupération de l'extension du fichier
				var deb=zone.value.length-4;
				var chaine=zone.value.substr(deb,4);
				chaine=chaine.toLowerCase();
			
				if (chaine.indexOf(".jpg")<0 && chaine.indexOf(".gif")<0){
					document.all[ligne].style.background=couleur;
					alert("Seul les images gif ou jpg sont autorisées pour" + etiquette);
					zone.select();
					return false;
				}
				else{
					document.all[ligne].style.background="";
				}
				
				break;
				
			//fichier bureautique - documents
			case "DOCUMENTFILE" :
				
				//récupération de l'extension du fichier
				var deb=zone.value.length-4;
				var chaine=zone.value.substr(deb,4);
				chaine=chaine.toLowerCase();		
			
				if (chaine.indexOf(".rtf")<0 && chaine.indexOf(".xls")<0 && chaine.indexOf(".doc")<0 && chaine.indexOf(".pdf")<0 && chaine.indexOf(".ppt")<0 ){
					document.all[ligne].style.background=couleur;
					alert("Seul les documents Word, Excel, Powerpoint, RTF ou Acrobat PDF sont autorisés pour " + etiquette);
					zone.select();
					return false;			
				}
				else{
					document.all[ligne].style.background="";
				}
				break;
			
			//RADIO : controle qu'un élément du bouton radio est sélectionné
			
			case "RADIO" :
			
				var test=0; // =1 si un élément est sélectionné
				
				for (zz=0;zz<zone.length;zz++){
				
					var tempobj=zone[zz];
					
					if (tempobj.checked==true) {
						test=1;
					} 
					
				}
	
				if (test==1){
					document.all[ligne].style.background=couleur;
					alert("Veuillez sélectionner " + etiquette);
					return false;
				}
				else{
					document.all[ligne].style.background="";
				}
				
				break;
				
			//DATE : Validité de la date (xx/xx/xxxx ou xx-xx-xxxx)
			// la date doit être dans un champ text
			case "DATE" :
			
				// DATE : Date (xx/xx/xxxx ou xx-xx-xxxx)
				RE = /^\d{2}([\/]|[\-])+\d{2}([\/]|[\-])+\d{4}$/;
				msgc="(ex : xx/xx/xxxx ou xx-xx-xxxx)";	
				
				if (testFormat()==false)return false;
				
				//récupération des jour / mois / année
				var j=(zone.value.substring(0,2));
				var m=(zone.value.substring(3,5));
				var a=(zone.value.substring(6));
	
				//Création d'une date avec les valeurs saisie
				// si la date générer est la même que celle saisie alors la date est valide
				var d2=new Date(a,m-1,j);
				j2=d2.getDate();
				m2=d2.getMonth()+1;
				a2=d2.getYear();
				
				if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
					
					document.all[ligne].style.background=couleur;
					zone.focus();
					alert("La date "+chainedate+" n'existe pas !");
					return false;
				}
				else{
					document.all[ligne].style.background="";
				}	
			
				break;
			
			//LISTE : vérifié qu'un élément est sélectionné dans la liste
			case "LISTE" :
			
				if (zone.options[0].selected==true ){
					document.all[ligne].style.background=couleur;
					zone.focus();
					alert("Veuillez sélectionner un élément dans " + etiquette);
					return false;
				}
				else{
					document.all[ligne].style.background="";
				}
				
				break;
			
		} // fin switch
	
	} // fin si obligatoire / facultatif
	
	return true;
	
}


function chgcolor(td,classe){	
	td.className=classe;
}

//rétabli la couleur initiale au tr dans le menu

function backcolor(td,classe){
	cellule=td;
	dernierstyle=td.className;
	td.className=classe;
}


//fonction de remplacement d'un caractére
//champ : nom du champ concerné
//txtsearch : texte recherché
//txtreplace : chaine qui remplacera le texte recherché
function remplace(champ, txtsearch, txtreplace){
	chaine = champ.value;
	chainemodif = eval('chaine.replace(/'+txtsearch+'/g,"'+txtreplace+'")');
	champ.value = chainemodif;
}

// tooltips : affiche un calque avec message au survol de la souris
// nécessite de placer un calque "toolTipLayer" et initialisé tooltip dans le body
// <div id="toolTipLayer" style="position:absolute; visibility: hidden; padding:2px;text-align:center;"></div>
// <script language="JavaScript" type="text/javascript"><!--initToolTips(); //--> <script>
// appel : javascript:toolTip('message', 'couleurtypo', 'couleurfond');

var ns4 = document.layers;
var ns6 = document.getElementById && !document.all;
var ie4 = document.all;
offsetX = -5;
offsetY = 15;
var toolTipSTYLE="";
function initToolTips()
{
  if(ns4||ns6||ie4)
  {
    if(ns4) toolTipSTYLE = document.toolTipLayer;
    else if(ns6) toolTipSTYLE = document.getElementById("toolTipLayer").style;
    else if(ie4) toolTipSTYLE = document.all.toolTipLayer.style;
    if(ns4) document.captureEvents(Event.MOUSEMOVE);
    else
    {
      toolTipSTYLE.visibility = "visible";
      toolTipSTYLE.display = "none";
    }
    document.onmousemove = moveToMouseLoc;
  }
}
function toolTip(title, msg, fg, bg)
{
  if(toolTip.arguments.length < 1) // hide
  {
    if(ns4) toolTipSTYLE.visibility = "hidden";
    else toolTipSTYLE.display = "none";
  }
  else // show
  {
    if(!fg) fg = "#777777";
    if(!bg) bg = "#FFFFFF";
    var content =
    '<table border="0" cellspacing="0" cellpadding="2" bgcolor="white"><tr><td>' +
    '<table cellspacing="0" cellpadding="1" style="background-color:' + bg + ';border:1px solid #C0C0C0;">' + // border:1px solid #cccccc;
    '<tr class="altern"><td style="font-family:Verdana, sans-serif;font-size:9;color:#6688A0;font-weight:bold;text-transform: uppercase;">&nbsp\;' + title +'</td></tr>'+ //color:#87A1B3;
	'<tr><td align="left"><font face="sans-serif" color="' + fg +
    '" size="1">&nbsp\;' + msg +
    '&nbsp\;</font></td><tr></table></td></tr></table>';
    if(ns4)
    {
      toolTipSTYLE.document.write(content);
      toolTipSTYLE.document.close();
      toolTipSTYLE.visibility = "visible";
    }
    if(ns6)
    {
      document.getElementById("toolTipLayer").innerHTML = content;
      toolTipSTYLE.display='block'
    }
    if(ie4)
    {
      document.all("toolTipLayer").innerHTML=content;
      toolTipSTYLE.display='block'
    }
  }
}
function moveToMouseLoc(e)
{
  if(ns4||ns6)
  {
    x = e.pageX;
    y = e.pageY;
  }
  else
  {
    x = event.x + document.body.scrollLeft;
    y = event.y + document.body.scrollTop;
  }
  toolTipSTYLE.left = x + offsetX;
  toolTipSTYLE.top = y + offsetY;
  return true;
}

function impression(){
window.print();
}
