// JavaScript Questionnaire 360°


/* ========================================================================================
	::	Variables globales
======================================================================================== */

	/* 	- VARIABLES_001 -------------------------------------------------------------------
	|	VARIABLES UTILISEES PAR LES FONCTIONS
	|		:: nomFonction()
	------------------------------------------------------------------------------------ */
	var menuActif	= "";
	var sTexte		= "";
	var nav			= "";


	// Détection du navigateur
	switch(window.navigator.appName){
		case "Netscape":
			switch(window.navigator.vendor){
				case "Firefox": nav = "Firefox" ; break; // FireFox
				case "Netscape": // Netscape
				default: nav = "Netscape"; break;
			}
		break;
		case "Microsoft Internet Explorer": // Internet Explorer
		default: nav = "IE"; break;
	}


	var ns4 = (document.layers)?true:false;
	var ie4 = (document.all)?true:false;
	var dom = (document.getElementById)?true:false; // NS 7.02, Mozilla FireFox, Mozilla, IE6

/* fin Variables globales=============================================================================== */




	window.attachEvent("onload", getTimeSession);






/* ========================================================================================
	::	Scripts Généraux
======================================================================================== */

	/*
		oError = {
			"oForm"		: Référence à l'objet formulaire ,
			"sErreur"	: Message d'erreur,
			"iError"	: Nombre d'erreurs,
			"aFocus"	: Tableau indiquant les id des éléments qui doivent avoir le focus
		}
	*/
	function formErrorValidation(oError){

		var sError		 = "";							// construction du message d'erreur par concaténation successives
		var f			 = oError.oForm;				// référence au formulaire à analyser
		var iError		 = oError.iError;				// nombre d'erreurs

		if(iError != 0) {
			sError += "--------------------------------------------------------\n";
			sError += "*     "+(iError > 1 ? _aTranslation["formErrorValidation"]["001_header_errors"].replace(/%i/,iError) : _aTranslation["formErrorValidation"]["001_header_error"].replace(/%i/,iError))+" :     *\n";
			sError += "--------------------------------------------------------\n";
			sError += "                                                    \n";
			sError += oError.sErreur;
			alert(sError);
			if(oError.aFocus[0]!=null) eval("f." + oError.aFocus[0]).focus();
			return false;
		}else{
			return true;
		}
	}








	/**
	 *
	 * @access public
	 * @return void
	 **/
	function getTimeSession(){

		var sId		 = "timeSessionNotFormatted";
		var oSpan	 = getObjet(sId);

		if(oSpan){
			sCurrentTime = oSpan.innerHTML;
			updateTimeSession(sCurrentTime);
		}


	}


	/**
	 *
	 * @access public
	 * @return void
	 **/
	function updateTimeSession(sCurrentTime){

		var sData	 = "";

		if(sCurrentTime == 0){

			var _iD = 0; // Jours
			var _iH = 0; // Heures
			var _iI = 0; // Minutes
			var _iS = 0; // Secondes

		}else{

			// Format récupéré : "D:0|H:10|I:09|S:21"
			var oReg = new RegExp("[|]+","g");
			var aTime = sCurrentTime.split(oReg);
			for (var i=0; i<aTime.length; i++) {
				var oReg2 = new RegExp("[:]+","g");
				var aTime2 = aTime[i].split(oReg2);
				switch(aTime2[0]){
					case "D": var _iD = aTime2[1]; break; // Jours
					case "H": var _iH = aTime2[1]; break; // Heures
					case "I": var _iI = aTime2[1]; break; // Minutes
					case "S": var _iS = aTime2[1]; break; // Secondes
				}
			}

		}

		// Incrémentation d'une seconde
		_iS++;
		if(_iS >= 60){
			// Ajout d'une minute
			_iS = 0;
			_iI++;
			if(_iI >= 60){
				// Ajout d'une heure
				_iI = 0;
				_iH++;
				if(_iH >= 24){
					// Ajout d'un jour
					_iH = 0;
					_iD++;
				}
			}
		}


		if(_iI >= 1){
			_iS = 0;
			_iI = 0;
			_iH = 0;
			_iD = 0;
			keepSessionActiveNow();
			// Appel d'un script pour garder la session active !

		}

		// sData	 = _iD+" jours et "+_iH+":"+_iI+":"+_iS;
		// sData	 = "<b>"+_iD+" </b>j.<b> "+(_iH>9 ? _iH : "0"+_iH)+"</b>H<b>"+(_iI>9 ? _iI : "0"+_iI)+"</b>'<b>"+(_iS>9 ? _iS : "0"+_iS)+"</b>";
		sData	 = "<b>"+(_iD.toString().length == 1 ? "0"+_iD:_iD)+" </b>j.<b> "+(_iH.toString().length == 1 ? "0"+_iH:_iH)+"</b>H<b>"+(_iI.toString().length == 1 ? "0"+_iI:_iI)+"</b>'<b>"+(_iS.toString().length == 1 ? "0"+_iS:_iS)+"</b>";
		sNewTime = "D:"+_iD+"|H:"+_iH+"|I:"+_iI+"|S:"+_iS;

		var sId		 = "timeSession";
		var oSpan	 = getObjet(sId);
		if(oSpan){
			oSpan.innerHTML = sData;
			setTimeout("updateTimeSession('"+ sNewTime +"')",1000);
		}

	}





	function keepSessionActiveNow(){

		// on prépare les champs en les nettoyant !
		var xhr_object			 = getHTTPObject();
		var sResponse		   	 = "";
		var bMode		    	 = false;			 // mode synchrone
		var sMethod			  	 = "POST";
		var sAction			  	 = "adm/prive/ajax/ajax_keepSessionActive.php";
		var sData 		   		 = "";
		var oSpan				 = getObjet("sessionActivated");

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse				 = xhr_object.responseText;
				oSpan.innerHTML			 = "Session " + sResponse + " activée";
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}









	function changeLangSession(sDefaultLang,iIdfLang){

    	// on prépare les champs en les nettoyant !
		var xhr_object			 = getHTTPObject();
		var sResponse		   	 = "";
		var bMode		    	 = false;			 // mode synchrone
		var sMethod			  	 = "POST";
		var sAction			  	 = "adm/prive/ajax/ajax_ChangeLangSession.php";
		var sData 		   		 = "default_lang="+escape(sDefaultLang);
		sData   		   	  	+= "&idf_langue="+escape(iIdfLang);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				changeUrl(document.location.href);
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}





	function changeLangNoSession(sDefaultLang,iIdfLang){

    	// on prépare les champs en les nettoyant !
		var xhr_object			 = getHTTPObject();
		var sResponse		   	 = "";
		var bMode		    	 = false;			 // mode synchrone
		var sMethod			  	 = "POST";
		var sAction			  	 = "adm/prive/ajax/ajax_ChangeLangNoSession.php";
		var sData 		   		 = "default_lang="+escape(sDefaultLang);
		sData   		   	  	+= "&idf_langue="+escape(iIdfLang);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				changeUrl(document.location.href);
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}













	/* 	- changeClassName() -------------------------------------------------------
	|	Description :
	|		-	Modifier la classe d'un objet
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : objId		=>	identifiant de l'objet sur lequel agir
	|		- argument 1 (string)	 : newClassName	=>	nom de la nouvelle classe de style à appliquer
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function changeClassName(objId,newClassName){

		var o = getObjet(objId);
		if(o){
			o.setAttribute("class",newClassName);
			o.setAttribute("className",newClassName);
		}

	}
	// fin Fonction changeClassName(objId,newClassName)--------------------------------------











	/* 	- changeUrl() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour recharger une nouvelle url et donc changer de page.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : url	=>	url de la nouvelle page à charger
	|	Fonctions appellées :
	|		- changeClassName()
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function changeUrl(url){

		document.location.href = url;

	}
	// fin Fonction changeUrl(url)-------------------------------------------------------







	/* 	- getHTTPObject() ----------------------------------------------------------
	|	Description :
	|		-	Instanciation d'un objet XmlHttpRequest
	|			quelque soit le navigateur
	|	Return :
	|		- référence à un objet XmlHttpRequest
	------------------------------------------------------------------------------------ */
	function getHTTPObject(){

		var xmlhttp = false;

		// Compilation conditionnelle d'IE
		/*@cc_on
		@if (@_jscript_version >= 5)
			try{
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			}catch (e){
				try{
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				}catch (E){
					xmlhttp = false;
				}
			}
		@else
			xmlhttp = false;
		@end @*/

		// on essaie de créer l'objet si ce n'est pas déjà fait
		if (!xmlhttp && typeof XMLHttpRequest != 'undefined'){
			try{
				xmlhttp = new XMLHttpRequest();
			}catch (e){
				xmlhttp = false;
			}
		}

		if (xmlhttp){
			// on définit ce qui doit se passer quand la page répondra
			xmlhttp.onreadystatechange = function(){
				// 4 : état "complete"
				if (xmlhttp.readyState == 4){
					// 200 : code HTTP pour OK
					if (xmlhttp.status == 200){
						/*
						Traitement de la réponse.
						Ici on affiche la réponse dans une boîte de dialogue.
						*/
						alert(xmlhttp.responseText);
					}
				}
			}
		}

		return xmlhttp;

	}
	// fin Fonction getHTTPObject()-----------------------------------------------






	/* 	- getObjet() -----------------------------------------------------------------------
	|	Description :
	|		-	Atteindre un objet en fonction du navigateur utilisé
	|	Variables Globales Utilisées :
	|		- dom (bool)
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : id		=>	id de l'objet à atteindre
	|	Return :
	|		- une référence à l'objet dont l'id est passé en paramètre
	|	Infos :
	|		- plusieurs fonction utilisent cette fonction dans leur scripts
	------------------------------------------------------------------------------------ */
	function getObjet(id){

		if(id){
			if (dom) obj = window.document.getElementById(id);
			else if (ie4) obj = window.document.all[id];
			else if (ns4) obj = window.document.layers[id];
		}else{
			obj = false;
		}
		return obj;

	}
	// fin Fonction getObjet(id)-----------------------------------------------------------




	/* 	- setValue() ----------------------------------------------------------
	|	Description :
	|		-	Modifier la valeur d'une balise
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : idObj		=>	identifiant de l'objet à modifier
	|		- argument 1 (string)	 : newValue		=>	nouvelle valeur de l'objet
	|	Fonctions appellées :
	|		- getObjet()
	|	Pages appellantes :
	|		- toutes les pages avec des formulaires d'ajout/modification/suppression
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function setValue(idObj,newValue){

		var obj = getObjet(idObj);
		if(obj)	{
			obj.value = newValue;
		}

	}
	// fin Fonction setValue(idObj,newValue)-----------------------------------------------









	/* 	- testerMotif() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour vérifier le motif d'un masque sur une expression à tester
	|			dans le module d'inscription des sociétés.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sMotif		=>	motif à tester
	|		- argument 0 (string)	 : sExpression	=>	expression sur laquelle tester le motif
	|	Pages appellantes :
	|		- inc/clients_partenaires.php
	|	Return :
	|		- true : si l'expression testée respecte le motif
	|		- false: si l'expression testée ne respecte pas le motif
	------------------------------------------------------------------------------------ */
	function testerMotif(sMotif,sExpression){

		// Création de l'expression régulière
		var rControle = new RegExp(sMotif);

		// Test du motif
		return rControle.test(sExpression);

	}
	// fin Fonction testerMotif()-------------------------------------------------------




	/* 	- radioIsChecked() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour vérifier qu'au moins un bouton radio est coché
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sName	=>	nom du bouton radio à tester
	|	Pages appellantes :
	|		- prive/bons_commandes.php
	|	Return :
	|		- true	 : au moins un bouton radio est coché
	|		- false	 : aucun bouton radio est coché
	------------------------------------------------------------------------------------ */
	function radioIsChecked(sName){

		var oR		 = document.getElementsByName(sName);	// bouton radio à cocher
		var total	 = oR.length;							// nombre total de cases à cocher
		var bIsChecked = false;

		// on vérifie qu'au moins un bouton radio est coché
		for(i=0;i<total;i++){
			if(oR[i].checked){
				bIsChecked = true;
				break;
			}
		}

		return bIsChecked;

	}
	// fin Fonction radioIsChecked(sName)----------------------------------





	/* 	- getRadioCheckedValue() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour retourner la valeur du bouton radio coché
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sName	=>	nom du bouton radio à tester
	|	Pages appellantes :
	|		- index.php
	|	Return :
	|		- true	 : au moins un bouton radio est coché
	|		- false	 : aucun bouton radio est coché
	------------------------------------------------------------------------------------ */
	function getRadioCheckedValue(sName){

		var oR		 = document.getElementsByName(sName);	// bouton radio à cocher
		var total	 = oR.length;							// nombre total de cases à cocher
		var sValue	 = "";

		// on vérifie qu'au moins un bouton radio est coché
		for(i=0;i<total;i++){
			if(oR[i].checked){
				sValue = oR[i].value;
				break;
			}
		}

		return sValue;

	}
	// fin Fonction getRadioCheckedValue(sName)----------------------------------







/* fin Scripts Généraux================================================================================= */