var menuactive = 0;

/////////////////////////////////////////////////////
// Fonction qui permet de afficher un menu par id
/////////////////////////////////////////////////////
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
///////////////////////////////////////////////////////
// Fonction qui permet de partir un timer pour rendre un menu invisible lors d'un mouseout d'un sous-menu
///////////////////////////////////////////////////////
function outTimer()
{		
		timeOn = setTimeout("timerOut()",150);
		menuactive=0
}

/////////////////////////////////////////////////////
// Fonction qui call la fonction TimerOut lorsque le timer est attein xx ms et que la variable menuactive soit = 0
///////////////////////////////////////////////////
function timerOut(layerName)
{
	if (menuactive == 0) montre();
}
/////////////////////////////////////////////////////

/*jumps to the next control if the maximum length is reached*/
function doAutoTab(e, maxLength, strNext) {
	var charCode;
	var source;
	objNext = document.getElementById(strNext);
	if (document.all) {
		// Get the character code of the key pressed
		charCode = window.event.keyCode
		// Get a handle on the element (control) that raised the event
		source = window.event.srcElement
	} else {
		// Get the character code of the key pressed
		charCode = e.which
		// Get a handle on the element (control) that raised the event
		source = e.target
	}
	
	// Check If the key is a valid alphanumeric key
	if ( (charCode >= 48 && charCode <= 57) ||    // 0..9
		(charCode >= 96 && charCode <= 122) ||   //a..z
		(charCode >= 65 && charCode <= 90)       //A..Z
		){
		// If maxLength is exceeded, set focus to next control
		if (source.value.length >= maxLength) {
		objNext.focus()
		}
	}
}

function validateNumbers(frm) {
	var status = false;
	var status1 = false;
	var status2 = false;
	var status3 = false;
	status1 = /^\d{3}$/.test(frm.elements[0].value);
	status2 = /^\d{3}$/.test(frm.elements[1].value);
	status3 = /^\d{4}$/.test(frm.elements[2].value);
	
	var msg = document.getElementById("errormessage");
	
	if(!status1 || !status2 || !status3) {
		alert(msg.value);
	} else {
		status = true;
	}
	return status;
}

function ValidPhone(intNumber) {
	var status = false;
	status = /^\d{10}$/.test(intNumber);
	
	if(!status)
		return false
	else
		return true;
}

//Permet d'enveler les caracteres spéciaux dans une chaine
/****************************************************************************************************/
function cleanString(strName){
/****************************************************************************************************/
	strName = trimAll(strName.toLowerCase());
	strName = strReplace(strName, ' ', '');
	strName = strReplace(strName, '-', '');
	strName = strReplace(strName, '_', '');
	strName = strReplace(strName, '.', '');
	strName = strReplace(strName, ',', '');
	strName = strReplace(strName, ':', '');
	strName = strReplace(strName, ';', '');
	strName = strReplace(strName, '(', '');
	strName = strReplace(strName, ')', '');
	strName = strReplace(strName, '[', '');
	strName = strReplace(strName, ']', '');
	strName = strReplace(strName, '{', '');
	strName = strReplace(strName, '}', '');
	strName = strReplace(strName, '\'', '');
	strName = strReplace(strName, '"', '');
	strName = strReplace(strName, '/', '');
	strName = strReplace(strName, '\\', '');
	strName = strReplace(strName, '|', '');
	strName = strReplace(strName, ':', '');
	strName = strReplace(strName, '\&', '');
	strName = strReplace(strName, '*', '');
	strName = strReplace(strName, '<', '');
	strName = strReplace(strName, '>', '');
	strName = strReplace(strName, '~', '');
	
	return strName;
}

/****************************************************************************************************/
//Fonction qui remplace une chaine 'strSeatextrch' par une chaine 'by' dans une chaine 'string'
/****************************************************************************************************/
function strReplace(string,text,by){
    var strLength = string.length, txtLength = text.length;
    
	if ((strLength == 0) || (txtLength == 0))
		return string;

    var i = string.indexOf(text);
	
    if ((!i) && (text != string.substring(0,txtLength)))
		return string;
		
    if (i == -1)
		return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += strReplace(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}


/*********************************************************************************/
function getChecked(){
/**********************************************************************************
Fonction qui permet de créer la liste des cases à cocher qui sont cochés
Retourne les noms des champs de type 'checkbox' qui sont cochés sous forme de liste de noms séparés par des '¶'.
Retourne "" si aucune case n'est cochée
**********************************************************************************/
	var strFieldName = ""; //Liste de noms de checkbox qui sont cochés
	
	//Liste des objets (buttons, text, hidden, checkbox, etc) qui se trouve
	//dans le premier form de la page
	arrObjets = document.forms[0].elements;

	//Pour tous les objets de la liste
	for (i = 0; i < arrObjets.length; i++){
		
		//Si l'objet i est un checkbox
		if(arrObjets[i].type == "checkbox"){
			
			//Si le checkbox i est coché et que ce n'est pas la case qui permet de tout cocher
			if(arrObjets[i].checked == true && arrObjets[i].name != "chkInactif" && arrObjets[i].name != "all"){
				
				//Si c'est le premier nom de la liste
				if(strFieldName != "")
					strFieldName = strFieldName + "¶";
				
				//Ajout du nom du checkbox à la liste des cases cochées
				strFieldName = strFieldName + arrObjets[i].name;
			}
		}
	}
	
	//Retourne la liste de noms
	return strFieldName;
}

/*********************************************************************************
Fonction qui cache un objet donné en parametre
**********************************************************************************/
function hideObject(objName)
/*********************************************************************************
objName:  ID de l'objet textbox à cacher
**********************************************************************************/
{
	var strLabelName = 'lbl'+objName;
	
	obj = document.getElementById(objName);
	obj.style.visibility = 'hidden';

	//Si une étiquette existe pour ce champ
	if(document.getElementById(strLabelName) != null){
		objLabel = document.getElementById(strLabelName);
		objLabel.style.visibility = 'hidden';
	}
}

/*********************************************************************************
Fonction qui affiche un objet donné en parametre
**********************************************************************************/
function showObject(objName)
/*********************************************************************************
objName:  ID de l'objet textbox à afficher
**********************************************************************************/
{
	var strLabelName = 'lbl'+objName;
	
	obj = document.getElementById(objName);
	obj.style.visibility = 'visible';

	//Si une étiquette existe pour ce champ
	if(document.getElementById(strLabelName) != null){
		objLabel = document.getElementById(strLabelName);
		objLabel.style.visibility = 'visible';
	}
}

/////////////////////////////////////////////////////
//Fonction qui coupe (trim) les espaces devant une chaine donnée en parametre
//strString: Chaine à trimmer
/////////////////////////////////////////////////////
function leftTrim(strString){
	while (strString.substring(0,1) == ' ')
		strString = strString.substring(1, strString.length);
	
	return strString;
}

/////////////////////////////////////////////////////
//Fonction qui coupe (trim) les espaces derrière une chaine donnée en parametre
//strString: Chaine à trimmer
/////////////////////////////////////////////////////
function rightTrim(strString){
	while (strString.substring(strString.length-1, strString.length) == ' ')
		strString = strString.substring(0,strString.length-1);
	
	return strString;
}

/////////////////////////////////////////////////////
//Fonction qui coupe (trim) les espaces devant ET derrière une chaine donnée en parametre
//strString: Chaine à trimmer
/////////////////////////////////////////////////////
function trimAll(strString){
	strString = leftTrim(strString);
	strString = rightTrim(strString);
	
	return strString;
}


/*********************************************************************************
Fonction qui valide le format d'une adresse courriel
(retourne TRUE si l'adresse est bonne; sinon retourne FALSE)
**********************************************************************************/
function ValidEmail(addr){
/*********************************************************************************
addr:  Adresse de courrier électronique (courriel) à valider
**********************************************************************************/
	//Séparation de l'adresse en 2 parties
	var arr = addr.split("@");
	var local = arr[0];
	var domain = arr[1];
	
	/*** Expressions régulières représentant la facon valide de construire une adresse courriel ***/
	//ER pour la partie 'locale' de l'adresse
	var regexLocal = /^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$/i
	
	//ER pour la partie 'domaine' de l'adresse
	var regexDomain = /^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$/i
	
	//Comparaisons des parties de l'adresse avec leur expression régulière respective
	var match_local = regexLocal.test(local);
	var match_domain = regexDomain.test(domain);
	
	//Retourne TRUE si les deux matchs sont valides
	if (match_local && match_domain)
		return (true)
	else //Retourne FALSE si un ou les deux matchs sont invalides
	   return (false);
}


// Fonction qui permet de créer un popup centré 
// Url: Adresse de la page à ouvrir en popup
// Larg: Largeur désirée du Popup
// Haut: Hauteur désirée du Popup
// Option: Saisie des options du Popup
// Nom: Nom de la fenêtre -->
function popup(url, larg, haut, options, nom){
	var top=(screen.height-haut)/2;
	var left=(screen.width-larg)/2;
	
	nom = window.open(url,nom,"top="+top+",left="+left+",width="+larg+",height="+haut+","+options).focus();
}

/*********************************************************************************/
function validateForm(){
/**********************************************************************************
Fonction qui permet de valider les champs d'un formulaire .

Chaque parametre séparer par une virgule doit etre créé en 3 partie séparer par ¶. 
La première partie est le nom réel du champ
La seconde est le libellé qui doit être dans le message d'erreur
La troisieme est le type de données (email, integer, etc.) [cette partie est optionnelle]
P.S: Le premier parametre doit être obligatoirement le nom du formulaire.

Exemple: onsubmit="validateForm(form1,'test1¶Libellé1¶Type1','test2¶Libellé2¶Type2');"
**********************************************************************************/

var numFields = arguments.length; //Détermine le nombre de paramètre
var Myerreur = ""; // Initialisation de la variable de mesage d'erreur
var MyFormName = arguments[0]; //Récupération du nom du formulaire
var firstField = null;

	//Boucle qui vérifie tous les champs passés en parametre	
	for(i=1; i<numFields; i++){
		strErrMessage = "";
		Mystring = arguments[i].split("¶");

		objField = document.getElementById(Mystring[0]);		
		if(objField.value == ""){
			strErrMessage = 'Veuillez compléter ce champ obligatoire';
			Myerreur = Myerreur + " <li style=\"color:#FFFFFF;\"> '" +  Mystring[1] + "' : " + strErrMessage + "</li>\n";
			
			if(Mystring[2] && Mystring[2] == "phone")
				objField = document.getElementById('TELEPHONE');
				
			objField.className = objField.className + " red";
		}
		else{
			//Si un type est spécifié
			if(Mystring[2]){
				switch(Mystring[2]){
					case 'phone': 
									if(!ValidPhone(objField.value))
										strErrMessage = 'Veuillez entrer un numéro de téléphone de 10 chiffres valide';
									objField = document.getElementById('TELEPHONE');
									break;
									
					case 'email': 
									if(!ValidEmail(objField.value))
										strErrMessage = 'Veuillez entrer une adresse de courriel valide';
									break;
									
					case 'annee':
									if(!(/^\d{4}$/.test(objField.value)))
										strErrMessage = 'Veuillez entrer une année valide';
									break;
					
					case 'km':
									if(!(/^([0-9]*)$/.test(objField.value)))
										strErrMessage = 'Veuillez entrer un kilométrage valide';
									break;
									
					case 'date':
									if(!ValidDateTime(objField.value, false))
										strErrMessage = 'Veuillez entrer une ' + Mystring[1].toLowerCase() + ' valide';
									break;
				}//switch(Mystring[2]){
				
				if(strErrMessage != ""){
					Myerreur = Myerreur + " <li style=\"color:#FFFFFF;\"> '" +  Mystring[1] + "' : " + strErrMessage + "</li>\n" ;
					objField.className = objField.className + " red";
				}
				else
					objField.className = objField.className.replace(' red', '');
			}//if(Mystring[2]){
			else
				objField.className = objField.className.replace(' red', '');
				
		}//if(objField.value == ""){
	}//for(i=1; i<numFields; i++){
	
	if (Myerreur != ""){
		Myerreur = "<strong>Les champs suivants requièrent votre attention:</strong><br>\n<ul>\n" + Myerreur + "</ul>";		
		document.getElementById('errMessage').innerHTML = Myerreur;
		document.getElementById('errMessage').className = "";
		return false;
	}
	else{
		document.getElementById('errMessage').innerHTML = "";
		document.getElementById('errMessage').className = "hide";
		document.getElementById('form1').submit();
	}
}


/*********************************************************************************/
function ValidateTextForm(){
/**********************************************************************************
Fonction qui permet de vérifier les champs textes obligatoires .

Chaque parametre séparer par une virgule doit etre créé en 2 partie séparer par ¶. 
La première partie est le nom réel du champ  et l'autre le libellé qui doit être dans le message d'erreur.
P.S: Le premier parametre doit être obligatoirement le nom du formulaire.

Exemple: onsubmit="ValidateTextForm(form1,'test1¶Libellé1','test2¶Libellé2');"
**********************************************************************************/
var numFields = arguments.length; //Détermine le nombre de paramètre
var Myerreur = ""; // Initialisation de la variable de mesage d'erreur
var MyFormName = arguments[0]; //Récupération du nom du formulaire
var firstField = null;

	//Boucle qui vérifie tous les champs passés en parametre	
	for(i=1; i<numFields; i++){
		Mystring = arguments[i].split("¶");

		if(document.forms[MyFormName].elements[Mystring[0]].value == ""){
			if(firstField == null)
				firstField = document.forms[MyFormName].elements[Mystring[0]];
			
			Myerreur = Myerreur + " - " +  Mystring[1] + "\n" ;
		}
	}
	
	if (Myerreur != ""){
		alert("Les informations suivantes sont obligatoires:\n" + Myerreur);

		if(firstField.type != 'hidden'){
			firstField.focus();
			firstField.select();
		}
		
		return false;
	}
	return true;
}

/*********************************************************************************
Fonction qui valide une date (retourne TRUE si le format de date est bon; sinon retourne FALSE)
Le format valide est: 2005-12-31 ou 2005-12-31 - 22:59
**********************************************************************************/
function ValidDateTime(mydate, boolTime){
/*********************************************************************************
mydate:   Date à valider
[mytime]: Booléen déterminant si l'heure est inclu dans la variable date (paramètre optionel)
**********************************************************************************/
	/*** Expression régulière représentant la facon valide de construire une date ***/
	//Si le temps est concatené au bout ed la date
	if(boolTime)
		var regex = /^[0-9]{4}[\/|-][0-1][0-9][\/|-][0-3][0-9] - [0-2][0-9]:[0-5][0-9]$/i
	else
		var regex = /^[0-9]{4}[\/|-][0-1][0-9][\/|-][0-3][0-9]$/i
		
	//Comparaisons de la date avec son expression régulière
	var matchDate = regex.test(mydate);
	
	//Retourne TRUE si le match est valide
	if (matchDate)
		return (true)
	else //Retourne FALSE si le match est invalide
	   return (false);
}
/**********************************************************************************/

/////////////////////////////////////////////////////
// Fonction qui permet de recharger la page parente à un popup en lui envoyant
// les variables GET dont il a besoin
//
// Modification à apporter éventuellement:
//  - enlever le OrderBy des GET pour éviter que l'ordre de tri de l'opener change lors du refresh
///////////////////////////////////////////////////
function refreshOpener(){
	//Vérifie si la fenêtre parent est toujours ouverte
	if(!opener.closed){
		//Chemin complet de la page qui a appelé le popup
		var strPath = opener.location.pathname;
	
		//Permet de trouver seulement le nom de la page sans le chemin complet
		while(strPath.indexOf("/") >= 0)
			strPath = strPath.substring(strPath.indexOf("/") + 1);
		
		//Rafraichit la page en lui envoyant aussi les variables GET
		opener.location.href = strPath + opener.location.search;
	}
}
/////////////////////////////////////////////////////

