// JavaScript Document for Nouvelles Frontières
// Test de l'environnement: navigateur, os, flash
// Author : Dimbi
// Neov S.A 2005, August

// Browser Detection
function detectBrowser () {
	var detect = navigator.userAgent.toLowerCase();
	var browser,version,total,thestring;

	if (checkIt('konqueror'))
	{
		browser = "Konqueror";
		OS = "Linux";
	}
	else if (checkIt('safari')) browser = "safari"
	else if (checkIt('omniweb')) browser = "OmniWeb"
	else if (checkIt('opera')) browser = "opera"
	else if (checkIt('webtv')) browser = "WebTV";
	else if (checkIt('firefox')) browser = "firefox"
	else if (checkIt('msie')) browser = "ie"
	else if (checkIt('netscape')) browser = "netscape"
	else if (!checkIt('compatible'))
	{
		browser = "Netscape Navigator"
		version = detect.charAt(8);
	}
	else browser = "An unknown browser";

	if (!version) version = detect.charAt(place + thestring.length);

	function checkIt(string)
	{
		place = detect.indexOf(string) + 1;
		thestring = string;
		return place;
	}
	
	return browser;
}

function detectOS () {
	var detect = navigator.userAgent.toLowerCase();
	var OS;	
	
	if (!OS)
	{
		if (checkIt('linux')) OS = "linux";
		else if (checkIt('x11')) OS = "unix";
		else if (checkIt('mac')) OS = "mac"
		else if (checkIt('win')) OS = "windows"
		else OS = "an unknown operating system";
	}
	
	function checkIt(string)
	{
		place = detect.indexOf(string) + 1;
		thestring = string;
		return place;
	}
	
	return OS;
}

var userBrowser = detectBrowser();
var userOS = detectOS ();

// Flash plug in Detection 

// moock fpi [f.lash p.layer i.nspector]
// version: 1.3.7
// written by colin moock
// code maintained at: http://www.moock.org/webdesign/flash/detection/moockfpi/
// terms of use posted at: http://www.moock.org/terms/

// =============================================================================
// These are the user defined globals.
// Modify the following variables to customize the inspection behaviour.

var requiredVersion = 6;   // Version the user needs to view site (max 9, min 2)
var useRedirect = false;    // Flag indicating whether or not to load a separate
                           // page based on detection results. Set to true to
                           // load a separate page. Set to false to embed the
                           // movie or alternate html directly into this page.
                           
// Only set next three vars if useRedirect is true...
var flashPage   = ""    // The location of the flash movie page
var noFlashPage = ""  // Page displayed if the user doesn't have the
                                  // plugin or we can't detect it.
var upgradePage = ""  // Page displayed if we detect an old plugin
// =============================================================================

// System globals
var flash2Installed = false;    // boolean. true if flash 2 is installed
var flash3Installed = false;    // boolean. true if flash 3 is installed
var flash4Installed = false;    // boolean. true if flash 4 is installed
var flash5Installed = false;    // boolean. true if flash 5 is installed
var flash6Installed = false;    // boolean. true if flash 6 is installed
var flash7Installed = false;    // boolean. true if flash 7 is installed
var flash8Installed = false;    // boolean. true if flash 8 is installed
var flash9Installed = false;    // boolean. true if flash 9 is installed
var maxVersion = 9;             // highest version we can actually detect
var actualVersion = 0;          // version the user really has
var hasRightVersion = false;    // boolean. true if it's safe to embed the flash movie in the page
var jsVersion = 1.0;  

// Check the browser...we're looking for ie/win
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;    // true if we're on ie
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; // true if we're on windows

// This is a js1.1 code block, so make note that js1.1 is supported.
jsVersion = 1.1;

// Write vbscript detection on ie win. IE on Windows doesn't support regular
// JavaScript plugins array detection.
if(isIE && isWin){
  document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n');
  document.write('on error resume next \n');
  document.write('flash2Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.2"))) \n');
  document.write('flash3Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.3"))) \n');
  document.write('flash4Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.4"))) \n');
  document.write('flash5Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) \n');  
  document.write('flash6Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.6"))) \n');  
  document.write('flash7Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.7"))) \n');
  document.write('flash8Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.8"))) \n');
  document.write('flash9Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.9"))) \n');
  document.write('<\/SCR' + 'IPT\> \n'); // break up end tag so it doesn't end our script
}

// Next comes the standard javascript detection that uses the 
// navigator.plugins array. We pack the detector into a function so that 
// it preloads before being run.

function detectFlash() {  
  // If navigator.plugins exists...
  if (navigator.plugins) {
    // ...then check for flash 2 or flash 3+.
    if (navigator.plugins["Shockwave Flash 2.0"]
        || navigator.plugins["Shockwave Flash"]) {

      // Some version of Flash was found. Time to figure out which.
      
      // Set convenient references to flash 2 and the plugin description.
      var isVersion2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      var flashDescription = navigator.plugins["Shockwave Flash" + isVersion2].description;

      // DEBUGGING: uncomment next line to see the actual description.
      // alert("Flash plugin description: " + flashDescription);
      
      // A flash plugin-description looks like this: Shockwave Flash 4.0 r5
      // We can get the major version by grabbing the character before the period
      // note that we don't bother with minor version detection. 
      // Do that in your movie with $version or getVersion().
      var flashVersion = parseInt(flashDescription.substring(16));

      // We found the version, now set appropriate version flags. Make sure
      // to use >= on the highest version so we don't prevent future version
      // users from entering the site.
      flash2Installed = flashVersion == 2;    
      flash3Installed = flashVersion == 3;
      flash4Installed = flashVersion == 4;
      flash5Installed = flashVersion == 5;
      flash6Installed = flashVersion == 6;
      flash7Installed = flashVersion == 7;
      flash8Installed = flashVersion == 8;
      flash9Installed = flashVersion >= 9;
    }
  }
  
  // Loop through all versions we're checking, and
  // set actualVersion to highest detected version.
  for (var i = 2; i <= maxVersion; i++) {  
    if (eval("flash" + i + "Installed") == true) actualVersion = i;
  }
  
  // If we're on msntv (formerly webtv), the version supported is 4 (as of
  // January 1, 2004). Note that we don't bother sniffing varieties
  // of msntv. You could if you were sadistic...
  if(navigator.userAgent.indexOf("WebTV") != -1) actualVersion = 4;  
  
  // DEBUGGING: uncomment next line to display flash version
  // alert("version detected: " + actualVersion);


  // We're finished getting the version on all browsers that support detection.
  // Time to take the appropriate action.

  // If the user has a new enough version...
  if (actualVersion >= requiredVersion) {
    // ...then we'll redirect them to the flash page, unless we've
    // been told not to redirect.
    if (useRedirect) {
      // Need javascript1.1 to do location.replace
      if(jsVersion > 1.0) {
        // It's safe to use replace(). Good...we won't break the back button.
        window.location.replace(flashPage);  
      } else {
        // JavaScript version is too old, so use .location to load
        // the flash page.
        window.location = flashPage;
      }
    }

    // If we got here, we didn't redirect. So we make a note that we should
    // write out the object/embed tags later.
    hasRightVersion = true;                
  } else {  
    // The user doesn't have a new enough version.
    // If the redirection option is on, load the appropriate alternate page.
    if (useRedirect) {
      // Do the same .replace() call only if js1.1+ is available.
      if(jsVersion > 1.0) {
        window.location.replace((actualVersion >= 2) ? upgradePage : noFlashPage);
      } else {
        window.location = (actualVersion >= 2) ? upgradePage : noFlashPage;
      }
    }
  }
}

detectFlash();
// End Flash plug in Detection
/**
* Fonctions javascript utilisees dans les parties dynamiques
*/
function VerifNumber(){
	if (event.keyCode < 45 || event.keyCode > 57){
	event.returnValue = false;					
	//alert('Le contenu de ce champ doit être numérique');					
	return false ;
	}
}

function Class(Obj, InOut, nomclasse){
	if(InOut){
		Obj.className=nomclasse;
	}
	else{
		Obj.className=nomclasse;
	}
	return true;
}

function pop(url,titre,params){ 
	var w=window.open(url,titre,params);
	var windowX=(screen.width/2)-(800/2);
   	var windowY=(screen.height/2)-(450/2);
	w.moveTo(windowX,windowY);
}


/* ******************************************************************

	FONCTION TRIM

	Description: Enleve les espaces avant et a la fin de la chaine de caracteres inNum

	Syntaxe:     Trim(Str as String) eg: Str = '   stringtest    '

	Used:        On all function javascript

* ******************************************************************/

function Trim(inNum){

	while (inNum.charAt(0) == ' ') {inNum = inNum.substr(1)};

	while (inNum.charAt(inNum.length-1) == ' '){inNum = inNum.substr(0, inNum.length-1)};

	

	return inNum;

}





function emailCheck (emailStr) {
	emailStr = emailStr.toLowerCase();
	if ((emailStr != "")&&(emailStr != null)){
		/* The following variable tells the rest of the function whether or not
		to verify that the address ends in a two-letter country or well-known
		TLD.  1 means check it, 0 means don't. */
		var checkTLD=1;
		/* The following is the list of known TLDs that an e-mail address must end with. */
		var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
		/* The following pattern is used to check if the entered e-mail address
		fits the user@domain format.  It also is used to separate the username
		from the domain. */
		var emailPat=/^(.+)@(.+)$/;
		/* The following string represents the pattern for matching all special
		characters.  We don't want to allow special characters in the address. 
		These characters include ( ) < > @ , ; : \ " . [ ] */
		var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
		/* The following string represents the range of characters allowed in a 
		username or domainname.  It really states which chars aren't allowed.*/
		var validChars="\[^\\s" + specialChars + "\]";
		/* The following pattern applies if the "user" is a quoted string (in
		which case, there are no rules about which characters are allowed
		and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
		is a legal e-mail address. */
		var quotedUser="(\"[^\"]*\")";
		/* The following pattern applies for domains that are IP addresses,
		rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
		e-mail address. NOTE: The square brackets are required. */
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		/* The following string represents an atom (basically a series of non-special characters.) */
		var atom=validChars + '+';
		/* The following string represents one word in the typical username.
		For example, in john.doe@somewhere.com, john and doe are words.
		Basically, a word is either an atom or quoted string. */
		var word="(" + atom + "|" + quotedUser + ")";
		// The following pattern describes the structure of the user
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		/* The following pattern describes the structure of a normal symbolic
		domain, as opposed to ipDomainPat, shown above. */
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
		/* Finally, let's start trying to figure out if the supplied address is valid. */
		/* Begin with the coarse pattern to simply break up user@domain into
		different pieces that are easy to analyze. */
		var matchArray=emailStr.match(emailPat);
		if (matchArray==null) {
			/* Too many/few @'s or something; basically, this address doesn't
			even fit the general mould of a valid e-mail address. */
			//alert("L'adresse E-mail est incorrect (vérifiez @ et .'s)");
			setText("msg_erreur", "L'adresse E-mail est incorrecte (vérifiez @ et .'s)");	
			//ChangeColor("msg_erreur", "FFFFFF", false);
			return false;
		}
		var user=matchArray[1];
		var domain=matchArray[2];
		// Start by checking that only basic ASCII characters are in the strings (0-127).
		for (i=0; i<user.length; i++) {
			if (user.charCodeAt(i)>127) {
				//alert("Le username contient un ou des characters interdits.");
				setText("msg_erreur", "Le username contient un ou des characters interdits.");	
				//ChangeColor("msg_erreur", "FFFFFF", false);
				return false;
			}
		}
		for (i=0; i<domain.length; i++) {
			if (domain.charCodeAt(i)>127) {
				//alert("Le nom de domaine contient un ou des characters interdits.");
				setText("msg_erreur", "Le nom de domaine contient un ou des characters interdits.");	
				//ChangeColor("msg_erreur", "FFFFFF", false);
				return false;
			}
		}
		
		// See if "user" is valid 
		
		if (user.match(userPat)==null) {
		
		// user is not valid
		
			//alert("Le username n'est pas valide.");
			setText("msg_erreur", "Le username n'est pas valide.");	
			//ChangeColor("msg_erreur", "FFFFFF", false);
			return false;
		}
		
		/* if the e-mail address is at an IP address (as opposed to a symbolic
		host name) make sure the IP address is valid. */
		
		var IPArray=domain.match(ipDomainPat);
		if (IPArray!=null) {
			// this is an IP address
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					//alert("L'adresse IP de destination est invalide!");
					setText("msg_erreur", "L'adresse IP de destination est invalide!");	
					//ChangeColor("msg_erreur", "FFFFFF", false);
					return false;
				}
			}
			return true;
		}
		
		// Domain is symbolic name.  Check if it's valid.
		 
		var atomPat=new RegExp("^" + atom + "$");
		var domArr=domain.split(".");
		var len=domArr.length;
		for (i=0;i<len;i++) {
			if (domArr[i].search(atomPat)==-1) {
				//alert("Le nom de domaine n'est pas valide.");
				setText("msg_erreur", "Le nom de domaine n'est pas valide.");	
				//ChangeColor("msg_erreur", "FFFFFF", false);
				return false;
			}
		}
		
		/* domain name seems valid, but now make sure that it ends in a
		known top-level domain (like com, edu, gov) or a two-letter word,
		representing country (uk, nl), and that there's a hostname preceding 
		the domain or country. */
		
		if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) {
			//alert("L'adresse doit se terminer par un domaine précis ou deux lettres " + "pays.");
			setText("msg_erreur", "L'adresse doit se terminer par un domaine précis ou deux lettres " + "pays.");	
			//ChangeColor("msg_erreur", "FFFFFF", false);
			return false;
		}
		
		// Make sure there's a host name preceding the domain.
		if (len<2) {
			//alert("L'adresse ne contient pas de hostname!");
			setText("msg_erreur", "L'adresse ne contient pas de hostname!");	
			//ChangeColor("msg_erreur", "FFFFFF", false);
			return false;
		}
		
		// If we've gotten this far, everything's valid!
		return true;
	}	
}

/**
* verify la vide
*/
function isNotEmpty(tagname,taglabel,nameForm,tagvalue){
	
	ok = true;
	myForm = eval('document.'+nameForm);
	
	tab_tagname = tagname.split(";");
	tab_taglabel = taglabel.split(";");
	if (tagvalue!="") tab_tagvalue = tagvalue.split(";");
	 
	if (tab_tagname.length==tab_taglabel.length){
		
		i=0;
		while (ok && i<tab_tagname.length){	
			    
				if (!Trim(myForm.elements[tab_tagname[i]].value)){
					ok = false;
					setText ("msg_erreur","Le champ "+tab_taglabel[i]+" ne doit pas être vide");
					myForm.elements[tab_tagname[i]].focus();
				}else if (tagvalue!="" && tab_tagname.length==tab_tagvalue.length){
					
					if (myForm.elements[tab_tagname[i]].value==tab_tagvalue[i]){
						ok = false;
						setText ("msg_erreur","Le champ "+tab_taglabel[i]+" doit être modifié");
						myForm.elements[tab_tagname[i]].focus();
					}
				}
			i++;
		}
	}
	
	return ok;
}

function getElement(psID) { 
   if(document.all) { 
      return document.all[psID]; 
   } else if(document.getElementById) { 
      return document.getElementById(psID); 
   } else { 
      for (iLayer = 1; iLayer < document.layers.length; iLayer++) { 
         if(document.layers[iLayer].id == psID) 
            return document.layers[iLayer]; 
      }       
   } 
   return Null; 
} 

function setText(psID, text) { 
	var obj;
	obj = getElement(psID);
	obj.innerHTML = text;
} 

function VerifyNumericValue(IntegerNumber){
	// Pour les nombre entier
	if(IntegerNumber == 'Integer'){
		if (event.keyCode < 48 || event.keyCode > 57) {
			event.returnValue = false; 
			alert('This field must be an integer');
		}
	}
	// Pour les reels (Decimal)
	else if(IntegerNumber == 'Decimal'){
		if (event.keyCode < 44 || event.keyCode > 57) {
			event.returnValue = false; 
			alert('This field must be a decimal');
		}
	}
	else{
		if (event.keyCode < 45 || event.keyCode > 57) {
			event.returnValue = false; 
			alert('This field must have a numeric value');
		}
	}
}

/* ******************************************************************
	FONCTION CheckDecimal(Obj)
	Description: Cette fonction verifie la valeur en decimale saisie
	Syntaxe:     OnBlur="CheckDecimal(this);"
* ******************************************************************/
function CheckDecimal(Obj){
	var ResultValue = Trim(Obj.value);
	// Remplace toutes les virgules (,) par des points (.)
	re = /,/g
	ResultValue = ResultValue.replace(re, ".");
	// Enleve la valeur 0 devant le(s) chiffre(s)
	while (ResultValue.charAt(0) == '0') {ResultValue = ResultValue.substr(1)};
	if(ResultValue == '') ResultValue = '0';
	// Verifie la valeur saisie
	var DecValue = ResultValue.split(".");
	if(DecValue.length == 0) ResultValue = '0.00';
	else if(DecValue.length > 2){
		alert("Invalid value");
		Obj.focus();
	}
	else if(DecValue.length == 2){
		if(DecValue[0] == '') ResultValue = '0.' + DecValue[1];
		if(DecValue[1] == '') ResultValue = DecValue[0] + '.00';
	}
	else ResultValue += '.00';
	Obj.value = ResultValue;
}




function IsEmailValid(TxtMail){
	var Msg = '';
	if (TxtMail != ""){
		var checkTLD = 1;
		var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|mg)$/;
		var emailPat = /^(.+)@(.+)$/;
		var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
		var validChars = "\[^\\s" + specialChars + "\]";
		var quotedUser = "(\"[^\"]*\")";
		var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom = validChars + '+';
		var word = "(" + atom + "|" + quotedUser + ")";
		var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray = TxtMail.match(emailPat);
		if (matchArray == null) {
			alert("Incorrect adress email (check @ and .'s)");
			return false;
		}
		var user = matchArray[1];
		var domain = matchArray[2];
		for (i=0; i<user.length; i++) {
			if (user.charCodeAt(i)>127) {
				alert("Incorrect adress email:\nNo basic ASCII characters are in the user.");
				return false;
			}
		}
		for (i=0; i<domain.length; i++) {
			if (domain.charCodeAt(i)>127) {
				alert("Incorrect adress email:\nNo basic ASCII characters are in the domain.");
				return false;
			}
		}
		
		if (user.match(userPat) == null) {
		
		alert("Incorrect adress email:\nUser is not valid.");
			return false;
		}
		
		var IPArray = domain.match(ipDomainPat);
		if (IPArray != null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					alert("Incorrect adress email:\nMake sure the IP address is valid.");
					return false;
				}
			}
			return true;
		}
		
		var atomPat = new RegExp("^" + atom + "$");
		var domArr = domain.split(".");
		var len = domArr.length;
		for (i=0; i<len; i++) {
			if (domArr[i].search(atomPat) == -1) {
				alert("Incorrect adress email:\nInvalid domaine name.");
				return false;
			}
		}
		
		if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) {
			alert("Incorrect adress email:\nMake sure that it ends in a known top-level domain (like com, edu, gov) or a two-letter word, representing country (uk, nl), and that there's a hostname preceding the domain or country");
			return false;
		}
		
		if (len<2) {
			alert("Incorrect adress email:\nMake sure there's a host name preceding the domain.");
			return false;
		}
		
		return true;
	}
	else{
		alert("The mail adress is required!.");
		return false;
	}
}

/* ***************************************************************
	FONCTION VerifyNumericValue(IntegerNumber)
	VERIFICATEUR EN COURS DE FRAPPE
	Description: Verifie la valeur d'un champs numerique
				 que ce soit entier ou decimal.
	Syntaxe:     OnKeyPress="VerifyNumericValue('Decimal');"
*************************************************************** */
function VerifyNumericValue(IntegerNumber){
	// Pour les nombre entier
	if(IntegerNumber == 'Integer'){
		if (event.keyCode < 48 || event.keyCode > 57) {
			event.returnValue = false; 
			//alert('This field must be an integer');
		}
	}
	// Pour les reels (Decimal)
	else if(IntegerNumber == 'Decimal'){
		if (event.keyCode < 44 || event.keyCode > 57) {
			event.returnValue = false; 
			//alert('This field must be a decimal');
		}
	}
	else{
		if (event.keyCode < 45 || event.keyCode > 57) {
			event.returnValue = false; 
			//alert('This field must have a numeric value');
		}
	}
}
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];}
}
// fonction pour effacer les champs pour les event onFocus
function clearField(obj){
	//obj.value="";
	obj.select();
}
var timeOutID ;
function showHiddenDiv(state){
	clearTimeout(timeOutID) ;
	var message="";
	var idDiv;
	var list = document.body.getElementsByTagName("DIV");
	for(i=0; i<list.length; i++){
		idDiv = list[i].id ;
		if (idDiv.substr(0,3) == "div"){
			divObj = eval(document.all[idDiv].style) ;
			/*if(state=='visible')
				timeOutID = setTimeout("divObj.visibility = 'visible';",100);
			else*/ 
				document.all[idDiv].style.visibility = state;
		}
	}
}

/* AFFECTATION DES VALEURS D'UNE LISTE DES OPTIONS A L'AUTRE */

/* *****************************************************************************************************

	FONCTION move(fbox, tbox)

	Description: Transfert une/les valeur(s) selectionnee(s) d'une liste fbox vers une autre tbox.

	Syntaxe: OnClick="move(Listbox1, ListBox2);"

			 A mettre dans le tag <input type="button" ...>

********************************************************************************************************/


function move(fbox, tbox) {
   
    
	var arrFbox = new Array();

	var arrTbox = new Array();

	var arrLookup = new Array();

	var i;

	

	for (i = 0; i < tbox.options.length; i++) {

		arrLookup[tbox.options[i].text] = tbox.options[i].value;

		arrTbox[i] = tbox.options[i].text;

	}

	

	var fLength = 0;

	var tLength = arrTbox.length;

	

	for(i = 0; i < fbox.options.length; i++) {

		arrLookup[fbox.options[i].text] = fbox.options[i].value;

		if (fbox.options[i].selected && fbox.options[i].value != "") {

				arrTbox[tLength] = fbox.options[i].text;

				tLength++;

		}

		else {

			arrFbox[fLength] = fbox.options[i].text;

			fLength++;

   		}

	}

	

	fbox.length = 0;

	tbox.length = 0;

	var c;

	

	for(c = 0; c < arrFbox.length; c++) fbox[c] = new Option(arrFbox[c], arrLookup[arrFbox[c]], false, false);

	for(c = 0; c < arrTbox.length ; c++) tbox[c] = new Option(arrTbox[c], arrLookup[arrTbox[c]], false, false);
	  

}

/* *****************************************************************************************************

	FONCTION moveAll(fbox, tbox)

	Description: Transfert toutes les valeurs d'une liste fbox vers une autre tbox.

	Syntaxe: OnClick="moveAll(Listbox1, ListBox2);"

			 A mettre dans le tag <input type="button" ...>

********************************************************************************************************/

function moveAll(fbox, tbox) {



	var arrFbox = new Array();

	var arrTbox = new Array();

	var arrLookup = new Array();

	var i;

	

	for (i = 0; i < tbox.options.length; i++) {

		arrLookup[tbox.options[i].text] = tbox.options[i].value;

		arrTbox[i] = tbox.options[i].text;

	}

	

	var fLength = 0;

	var tLength = arrTbox.length;

	

	for(i = 0; i < fbox.options.length; i++) {

		arrLookup[fbox.options[i].text] = fbox.options[i].value;

		if (fbox.options[i].value != "") {

				arrTbox[tLength] = fbox.options[i].text;

				tLength++;

		}

		else {

			arrFbox[fLength] = fbox.options[i].text;

			fLength++;

   		}

	}



	fbox.length = 0;

	tbox.length = 0;

	var c;

	

	for(c = 0; c < arrFbox.length; c++) {

		var no = new Option();

		no.value = arrLookup[arrFbox[c]];

		no.text = arrFbox[c];

		fbox[c] = no;

	}

	

	for(c = 0; c < arrTbox.length; c++) tbox[c] = new Option(arrTbox[c], arrLookup[arrTbox[c]], false, false);

}

/**
* Verification champs fax et telephone
*/
function keypress(e) {
	var browser=detectBrowser ();
	//alert (browser)	;
	//alert(e.which);
	
	
	if (browser=="ie")
	{ 
		//alert (browser)	;
		if (event.keyCode <= 45 || event.keyCode > 57){
			if(event.keyCode==32  || event.keyCode==40 || event.keyCode==41 || event.keyCode==43 || event.keyCode==47){
				event.returnValue = true;
			}
			else{
				event.returnValue = false;
			}
		}  
	}
	 else if (browser=="firefox")
	{
		//if(!({ 8:1,9:1,27:1,32:1,37:1,38:1,39:1,40:1,40:1,41:1,43:1,46:1,47:1,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,3:0,22:0}[e.which||e.keyCode]))         
		//e.preventDefault? e.preventDefault() : e.returnValue = false; 
		if(e.which!=8 && e.which!=9 && e.which!=27 && e.which!=32 && e.which!=37 && e.which!=38 && e.which!=39 && e.which!=40 && e.which!=41 && e.which!=43 && e.which!=46 && e.which!=47 && e.which!=48 && e.which!=49 && e.which!=50 && e.which!=51 && e.which!=52 && e.which!=53 && e.which!=54 && e.which!=55 && e.which!=56 && e.which!=57)  
		{
			//alert (e.which)
			e.preventDefault? e.preventDefault() : e.returnValue = false;
		}
	}
	else if (browser=="safari")
	{
		//alert ("a");
		//if(!({ 8:1,9:1,27:1,32:1,37:1,38:1,39:0,40:0,41:0,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,3:0,22:0}[e.which||e.keyCode]))         
		//e.preventDefault? e.preventDefault() : e.returnValue = false; 
		//if (e.keyCode == 97) 
		if(e.keyCode!=8 && e.keyCode!=9 && e.keyCode!=27 && e.keyCode!=32 && e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40 && e.keyCode!=41 && e.keyCode!=43 && e.keyCode!=46 && e.keyCode!=47 && e.keyCode!=48 && e.keyCode!=49 && e.keyCode!=50 && e.keyCode!=51 && e.keyCode!=52 && e.keyCode!=53 && e.keyCode!=54 && e.keyCode!=55 && e.keyCode!=56 && e.keyCode!=57)  
		{ 
			//alert ("a");
			//e.returnValue = false;
			//e.preventDefault? e.preventDefault() : e.returnValue = false;
			//event.returnValue = false;
			//event.stopPropagation();
			//e.preventDefault()
			//e.stop();
			//event.stop(e);
			//event.returnValue = false;
			//event.cancelBubble = true;
			//window.event.returnValue = false; 
			// e.returnValue = false;
			 //event.returnValue = false;
			 //event.preventDefault();
			//return false;
			//e.preventDefault? e.preventDefault() : e.returnValue = false;
			//event.cancelBubble = true;
			//event.returnValue = false;
			//return false;
			//e.preventDefault();
			// e.stopPropagation();
			//window.event.cancelBubble = true;
			//window.event.returnValue = false;
			//e.stopPropagation();
			//e.preventDefault();
			//return false;
			//bindAsEventListener(this);
			//return false;
			//if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } 
			//if (e.preventDefault) { e.preventDefault(); e.stopPropagation(); } else { e.returnValue = false; e.cancelBubble = true; } 
			/*if(!e){ return false; }
			if(e.preventDefault){
				e.stopPropagation();
				e.preventDefault();
			}else{
				if(window.event){
					window.event.cancelBubble = true;
					window.event.returnValue = false;
				}
			}
			return false;
		   */
			/*
			if (window.event)
				{
				window.event.cancelBubble = true;
				window.event.returnValue = false;
				}
			if (e && e.preventDefault && e.stopPropagation)
				{
				// hmmm, safari gets inside here, but then fails to stop the event, and so a 'jump' rather than a 'scroll' takes place. I can't figure it out...
				e.preventDefault();
				e.stopPropagation();
				}
			return true;
			}
			*/
			//if (e.preventDefault) e.preventDefault(); // DOM Level 2
			//else e.returnValue = false;                      // IE
			//window.event.returnValue = false;
			//return; 
			//window.event.returnValue=false;

			//event.preventDefault() ;
			//event.returnValue = false ;
			//return false ;
			//event.returnValue = false ;
			
			/*if (!e) var e = window.event;
			e.cancelBubble = true;
			if (e.stopPropagation) e.stopPropagation();*/

			if (e.stopPropagation)  // is W3C
			{
				e.stopPropagation();
			} 
			return false ;

		}
		//} 
		
		


	}
}

/**
* Verification champs numerique
*/
function keypress_numeric(e) {  
	var browser=detectBrowser ();
	//alert (browser)	;
	//alert(e.which);
	
	if (browser=="ie")
	{  
		if (event.keyCode < 48 || event.keyCode > 57)  
			{
					//alert("false");
					event.returnValue = false;
			}
	}
	else if (browser=="firefox")
	{
		//if(!({ 8:1,9:1,27:1,32:1,37:1,38:1,39:0,40:0,41:0,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,3:0,22:0}[e.which||e.keyCode]))         
		//e.preventDefault? e.preventDefault() : e.returnValue = false; 
		if(e.which!=8 && e.which!=9 && e.which!=27 && e.which!=32 && e.which!=37 && e.which!=38 && e.which!=48 && e.which!=49 && e.which!=50 && e.which!=51 && e.which!=52 && e.which!=53 && e.which!=54 && e.which!=55 && e.which!=56 && e.which!=57)  
		{
			//alert (e.which)
			e.preventDefault? e.preventDefault() : e.returnValue = false;
		}
	}
	else if (browser=="safari")
	{
		//if(!({ 8:1,9:1,27:1,32:1,37:1,38:1,39:0,40:0,41:0,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,3:0,22:0}[e.which||e.keyCode]))         
		//e.preventDefault? e.preventDefault() : e.returnValue = false; 
		if(e.keyCode!=8 && e.keyCode!=9 && e.keyCode!=27 && e.keyCode!=32 && e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=48 && e.keyCode!=49 && e.keyCode!=50 && e.keyCode!=51 && e.keyCode!=52 && e.keyCode!=53 && e.keyCode!=54 && e.keyCode!=55 && e.keyCode!=56 && e.keyCode!=57)  
		{
			//alert (e.which)
			//e.preventDefault? e.preventDefault() : e.returnValue = false;
			/*if (!e) var e = window.event;
			e.cancelBubble = true;
			if (e.stopPropagation) e.stopPropagation();*/
			if (e.stopPropagation)  // is W3C
			{
				e.stopPropagation();
			}
			return false ;
		}
	} 
	
}

