// Script JS : Liste de fonctions outils
// ================================================================================================



// ================================================================================================


// ------------------------------------------------------------------------------------------------
/**
* Definition du Handler de clavier
*/
var oldkey = 0;
function keyhandler(myevent)
{		
	// Recuperer la touche pressée
	var KeyPressed = '';
	if 		( typeof window.event != 'undefined') 	{ KeyPressed = window.event.keyCode; }
	else if	( typeof myevent != 'undefined') 		{ KeyPressed = myevent.keyCode; }
		
	// Traitement
	switch(KeyPressed)
	{
		// ENTER 
		case 13 : 
		{
			if ( oldkey == 17 && typeof KCtrlEnter != 'undefined') { KCtrlEnter(); oldkey = 0; }
			else if ( oldkey == 16 && typeof KShiftEnter != 'undefined') { KShiftEnter(); oldkey = 0; }
			else if ( typeof KEnter != 'undefined') { KEnter(); } 
			break;
		}
		
		// ESCAPE
		case 27 : 
		{
			if ( oldkey == 16 && typeof KShiftEscape != 'undefined') { KShiftEscape(); oldkey = 0; } 			
			break;
		}
		
		// INSERT
		case 45 : 
		{
			if ( typeof KInsert != 'undefined') { KInsert(); } 
			break;
		}
		
		case 36 : if ( oldkey == 17 && typeof KCtrlHome != 'undefined') { KCtrlHome(); oldkey = 0; } break;		
		case 46 : if ( oldkey == 17 && typeof KCtrlDelete != 'undefined') { KCtrlDelete(); oldkey = 0; } break;
		
		
		// --------------------------------------------------------------------
		case 16 : oldkey = 16; break;	// SHIFT
		case 17 : oldkey = 17; break;	// CTRL
		case 18 : oldkey = 18; break;	// ALT
		
		//default: alert(KeyPressed+' - '+oldkey); break;
	}	
	return true;
}	
document.onkeydown = keyhandler;




// ================================================================================================


// ------------------------------------------------------------------------------------------------
/**
* Fait "flasher" un champ (ex: une ligne de tableau)
*
*		EX: <td id="myfield"> <input type="button" onclick="FadeColor('myfield');"> ... </td>
*/
function FadeColor(field, i, oldcolor) 
{
	if ( typeof document.getElementById(field) != 'undefined')
	{
		var mybox = document.getElementById(field);
		
		if (typeof oldcolor == 'undefined')  { oldcolor = mybox.style.backgroundColor; }		
		
		if (typeof i == 'undefined') { i = 192; }
		
		if (i < 255)
		{
			hexnum = dec2hex(i);  mybox.style.backgroundColor = "#"+hexnum+hexnum+hexnum; 
		
			i += 1;
			var action = "FadeColor('"+field+"', "+i+", '"+oldcolor+"')"; setTimeout(action, 25);
		}
		else
		{
			if ( oldcolor.indexOf("#") != -1 )	{ mybox.style.backgroundColor = oldcolor; }	
			else { mybox.style.backgroundColor =''; mybox.className = oldcolor; }
		}
	}
}


// ================================================================================================
// FONCTIONS BASIQUES (mais bien pratiques)


// ------------------------------------------------------------------------------------------------
/**
* Fonction de verification du navigateur
*
* Le chargement du script initialise la variable globale 'browserid'.
*/
function checkbrowser()
{
	// Decide browser via Navigation
	var browser = "iexplorer";
	var detect = navigator.userAgent.toLowerCase();	
	
	if (detect.indexOf('opera') != -1) { browser = "opera"; }
	else if (detect.indexOf('msie') != -1) { browser = "iexplorer"; }
	else if (detect.indexOf('compatible') == -1) { browser = "netscape"; }
	else { browser = "none"; }
	
	// Decide browser version
	var op5 = (browser == "opera")?true:false;
	var ns4 = (document.layers)? true:false;
	var ns6 = (document.getElementById)? true:false;
	var ie4 = (document.all)? true:false;
	var ie5 = false;

	// Netscape Borwser test
	var browserid = 'ns4';
	if (ns6) { browserid = 'ns6';}
	     
	// Microsoft Stupidity Check(tm).
	if (op5) 
	{ 
		browserid = 'op5'; 
		if (ns6) { ns6 = false;	}
	}
	else if (ie4) 
	{
		browserid = 'ie4';
		if ((navigator.userAgent.indexOf('MSIE 5') > 0) || (navigator.userAgent.indexOf('MSIE 6') > 0)) 
		{
			ie5 = true; browserid = 'ie5';
		}
		if (ns6) { ns6 = false;	}
	}

	return browserid;		
}

// ------------------------------------------------------------------------------------------------
// Fonction qui remplace les '\n' en '<br>'
function nl2br(strText)
{	
	while (	(pos = strText.indexOf("\n")) != -1 )
	{
		strText = strText.substring(0,pos)+"<br>"+strText.substring(pos+1);	
	}
	return strText;
} 


// ------------------------------------------------------------------------------------------------
// Fonction d'affichage des erreurs
function showerror(msgError, alertbox)
{
	if (document.getElementById('errorfield') == undefined)
		return;
		
	browser = checkbrowser();
	
	if (browser == 'ie4' || browser == 'ie5')
	{	
		document.all.errorfield.innerText = msgError;
		document.all.errorfield.style.visibility = (msgError)?'visible':'hidden';
		document.all.errorfield.style.display = (msgError)?'block':'none';
	}
	else if (browser == 'ns6')
	{
		document.getElementById('errorfield').innerHTML = nl2br(msgError);
		document.getElementById('errorfield').style.visibility = (msgError)?'visible':'hidden';
		document.getElementById('errorfield').style.display = (msgError)?'block':'none';
	}
	else if (browser == 'ns4')
	{
		document.layers.errorfield.innerHTML= nl2br(msgError);
		document.layers.errorfield.visibility = (msgError)?'show':'hide';
	}
	
	if (msgError!="" && alertbox == true)
	{
		alert(msgError);
	}
}

function showinfos(msgInfo, infofield)
{
	browser = checkbrowser();
	
	if (browser == 'ie4' || browser == 'ie5')
	{	
		document.all[infofield].innerText = msgInfo;
		document.all[infofield].style.visibility = (msgInfo)?'visible':'hidden';
		document.all[infofield].style.display = (msgInfo)?"block":'none';
	}
	else if (browser == 'ns6')
	{
		document.getElementById(infofield).innerHTML = nl2br(msgInfo);
		document.getElementById(infofield).style.visibility = (msgInfo)?'visible':'hidden';
		document.getElementById(infofield).style.display = (msgInfo)?"block":'none';
	}
	else if (browser == 'ns4')
	{
		document.layers[infofield].innerHTML= nl2br(msgInfo);
		document.layers[infofield].visibility = (msgInfo)?'show':'hide';
	}
}

function modifyinfos(msgInfo, infofield)
{
	browser = checkbrowser();
	
	if (browser == 'ie4' || browser == 'ie5')
	{	
		document.all[infofield].innerText = msgInfo;		
	}
	else if (browser == 'ns6')
	{
		document.getElementById(infofield).innerHTML = msgInfo;		
	}
	else if (browser == 'ns4')
	{
		document.layers[infofield].innerHTML= msgInfo;		
	}
}

// ------------------------------------------------------------------------------------------------
/** 
* Fonction de verification des données d'un formulaire
*
* Les param. sont passer par groupe de 3 comme décrit ci-dessous
*
* Param 0: Id du champ dans le formulaire
* Param 1: Titre du champ
* Param 2: Contrainte
*/
function validateForm()
{ 

	var i; 			// Compteur de balayage des champs
    var p;			// 
    var q;			
    
    var num; 
    var min,max; 
    var tmp; 
    
    var msgError=''; 					// Chaine utilisee pour le message d'erreur
    var objForm;						// Element de formulaire contenant la valeur a tester (args[0])
    var nameField;						// Nom (description) du champ a testert (args[1])
    var strTest;						// Chaine de contrainte de test (args[2])
    var args = validateForm.arguments; 	// Arguments de la fonction    
    var browser = checkbrowser();		// Identifiant du navigateur
   
    
	/**************************************************************************
	Chaines de TEST
	
	R 			- Champ requis
	isEmail 	- Adresse email
	isStr:xx	- Chaine (avec max. xx caracteres)
	isInt		- Nombre entier
	inRange:x:y	- Nombre entre x et y
	isUp:x		- Est plus grand ou egal a x.
	isDo:y		- Est plus petit ou egal a x.
	
	**************************************************************************/	

    
    // ----------------------------------------------------------------------------------
   
    
    for (i=0; i<(args.length-2); i+=3) 
    {       
		// Initialisation du test
		objForm = MM_findObj(args[i]); 	  
		nameField=args[i+1];
		strTest = args[i+2];
        	 
		if (objForm) 
		{ 
  	        // ----------------------------------------------------------------
  	        // Champs non-vide
  	    	if ((objForm=objForm.value)!="") 
  	    	{
          		
          		// ------------------------------------------------------------
          		// Verfier la validite d'une adresse mail
          		if (strTest.indexOf('isEmail')!=-1) 
				{             
            		pos = objForm.indexOf('@');
            		if (pos < 1 || p == (objForm.length-1) ) 
              		{
              			msgError+='"'+nameField+'" doit contenir une adresse Email.\n';
              		}
          		}
           		
				// ------------------------------------------------------------
				// Chaine de caractères
          		else if (strTest!='R' && strTest.indexOf('isStr')!=-1)
          		{ 
          			if ( (p=strTest.indexOf(':')) != -1)
          			{ 
          				strlen = strTest.substring(p+1);
          				if (objForm.length > strlen )
          				{
          					msgError+='"'+nameField+'" doit contenir une chaine de maximum '+strlen+' caractère(s).\n';
          				}
          			}          			
          		}
          		
          		// ------------------------------------------------------------
          		// Nombres
				else if	(strTest!='R')
				{
					// Remplacer les "," par des "." et supprimer les espaces.
					while(objForm.indexOf(' ') != -1)
					{
						p=objForm.indexOf(' ');	
						objForm = objForm.substring(0,p)+objForm.substring(p+1);
					}
			
					if( objForm.indexOf(',') != -1)
					{
						p=objForm.indexOf(',');
						objForm = objForm.substring(0,p)+"."+objForm.substring(p+1);
					}
					num = parseFloat(objForm);
            
                    // --------------------------------------------------------
                    // Nombre entier
                    if ( objForm.indexOf('.') != -1 && strTest.indexOf('isInt')!=-1)
            		{
            			msgError+='"'+nameField+'" doit contenir un nombre entier.\n';
            		}

					// --------------------------------------------------------
					// Nombre reel            
        			else if (isNaN(objForm))
            		{ 
              			msgError+='"'+nameField+'" doit contenir un nombre.\n';
            		}            
            
		        	// --------------------------------------------------------
		        	// Nombre dans l'interval
		        	else if (strTest.indexOf('inRange') != -1) 
            		{ 
              			p=strTest.indexOf(':'); min=strTest.substring(8,p); max=strTest.substring(p+1);
              			if (num<min || max<num) 
                		{
                			msgError+='"'+nameField+'" doit contenir un nombre entre '+min+' et '+max+'.\n';
                		}
            		}
            		
            		// --------------------------------------------------------
            		// Nombre inferieur a... 
            		else if (strTest.indexOf('isUp:') != -1)
            		{
              			p=strTest.indexOf(':'); level=strTest.substring(p+1);
              			if(num < level)
                		{
                			msgError+='"'+nameField+'" doit etre supérieur à '+level+'.\n';
                		}
            		}
            		
            		// --------------------------------------------------------
            		// Nombre superieur a ...
            		else if (strTest.indexOf('isDo:') != -1)
            		{
              			p=strTest.indexOf(':'); level=strTest.substring(p+1);
               			if(num > level)
               			{
                			msgError+='"'+nameField+'" doit etre inférieur à '+level+'.\n';
                		}
            		}
          		} 
        	}
        	
        	// ----------------------------------------------------------------
        	// Champs 'simplement' obligatoire
        	else if (strTest.charAt(0) == 'R')
        	{ 
          		msgError += 'Le champ "'+nameField+'" doit contenir une valeur.\n'; 
        	}
		}
    }
    showerror(msgError, true);

    return (msgError != "")?false:true;
}


// ------------------------------------------------------------------------------------------------
/**
* Converti un nombre decimal en hexadecimal
*/
function dec2hex(decnumber)
{
	var hexnumber = "";
	var digit = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
	
	do {
		rest = decnumber%16; hexnumber = digit[rest]+""+hexnumber;
		decnumber = Math.floor(decnumber/16);       		
	}
	while (decnumber > 15);	
	hexnumber = digit[decnumber]+""+hexnumber;

	return hexnumber;
}
    
    
// ------------------------------------------------------------------------------------------------
/**
* Fonction qui ferme la fenetre courrante meme si elle n'a pas ete ouverte par un "window.open()"
*/
function thisClose()
{
	opener = self; self.close();
}                                                                                                 


// ================================================================================================
// FONCTIONS MACROMEDIA

// ------------------------------------------------------------------------------------------------
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; 
  for(i=0; a && i<a.length && (x=a[i]) && x.oSrc; i++) 
  	x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
