// g_2_gen_function.js, developped by G. Guerin
// Copyright (C) 2005 G. GUERIN - Do not Distribute
// File Rev: 1
// Derniere maj : 2007.03.27

// ----------------------------------
// ** function addLoadListener(fn) **
// ----------------------------------
// Fonction generale pour brancher des evenements
// basee sur infos trouvee sur sitepoint.com
// specialement dans le livre "The Javascript Anthology", page 15
// Permet de brancher des evenements en fin de chargement de page
// tels que :
// 		mise en forme sur groupe de champs,
//		remplissage automatique de champs,
//		lecture de cookies,
//		etc...
// Remarque importante : certains de mes sites utilise un redimensionnement
// automatique (function adjustLayout() de "g_site.js"
// utilisant specialement xAddEventListener (plus complet mais plus difficile d'emploi) :
//		window.onload = function()
//		{
//		  xAddEventListener(window, "resize", adjustLayout, false);
//		  adjustLayout();
//		}									  
// Apparemment, addLoadListener est OK avec cela dans la mesure ou il est appele APRES l'inclusion
// de g_site.js
//
// Par exemple :
//		addLoadListener(init);
//		
//		function init()
//		{
//		  var contactForm = document.forms["contactForm"];
//		  var oldValue = contactForm["firstName"].value;
//		  contactForm["firstName"].value = "Zaphod";
//		
//		  return true;
//		};

function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}
// ----------------------------------


// ----------------------------------
// ** function trim(str) **
// ----------------------------------
// Fonction de supression des espace a gauche et a droite
function trim(str) {return str.replace(/^\s+|\s+$/g,'');}
// ----------------------------------


// ----------------------------------
// ** function isEmail(str) **
// ----------------------------------
// Fonction de determination une chaine est un email valide ou non
function isEmail(str)
{
	var regex = /^[-_.a-z0-9]+@(([-_a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
    return regex.test(str);
}
// ----------------------------------


// ----------------------------------
// ** function gCheckValueNotEmpty(oField,cNameFR,cNameEN,cLangue) **
// ----------------------------------
// Fonction de test d'un champ de formulaire - est-ce un champ non vide ?
// 		OField : objet champ de formulaire
// 		cNameFR : nom en clair du champ en francais - pour affichage libelle sur message erreur
// 		cNameEN : nom en clair du champ en anglais - pour affichage libelle sur message erreur
// 		cLangue : langue a utiliser ('FR' ou 'EN')
// Retourne true si ok, false si pas OK

// Par exemple :
// 		if (gCheckValueNotEmpty(formName.telephone,"Téléphone","Contact number",cLangue) == false)
//			{formName.btnSubmit.value=cSubmitValue;return false};
function gCheckValueNotEmpty(oField,cNameFR,cNameEN,cLangue)
{
	if (trim(oField.value)=="")
		{
			if (cLangue == "FR")
				{alert("'"+cNameFR+"' n'est pas renseigné");}
			else
				{alert("'"+cNameEN+"' is not filled in");}
			oField.focus();
			oField.select();
			return false;
		}
	return true;
}
// ----------------------------------


// ----------------------------------
// ** function gCheckValueNotEmail(oField,cNameFR,cNameEN,cLangue) **
// ----------------------------------
// Fonction de test d'un champ de formulaire - est-ce une adresse email valide ?
// 		OField : objet champ de formulaire
// 		cNameFR : nom en clair du champ en francais - pour affichage libelle sur message erreur
// 		cNameEN : nom en clair du champ en anglais - pour affichage libelle sur message erreur
// 		cLangue : langue a utiliser ('FR' ou 'EN')
// Retourne true si ok, false si pas OK

// Par exemple :
// 		if (gCheckValueNotEmail(formName.email,"Email","Email address",cLangue) == false)
//			{formName.btnSubmit.value=cSubmitValue;return false};
function gCheckValueNotEmail(oField,cNameFR,cNameEN,cLangue)
{
	if (!isEmail(trim(oField.value)))
		{
			if (cLangue == "FR")
				{alert("Le format '"+cNameFR+"' est invalide: ["+trim(oField.value)+"]");}
			else
				{alert("Format of '"+cNameEN+"' is invalid: ["+trim(oField.value)+"]");}
			oField.focus();
			oField.select();
			return false;
		}
	return true;
}
// ----------------------------------


// ----------------------------------
// ** function gFormWrite (cForm, cChamp, Valeur) **
// ----------------------------------
// Fonction elementaire de mise a jour d'un champ de formulaire
// basee sur infos trouvee sur sitepoint.com
// specialement dans le livre "The Javascript Anthology", page 105
// 		cForm : nom du formulaire
// 		cChamp : nom du champ
// 		Valeur : valeur du champ
// Par exemple :
//		gFormWrite("contactForm", "nom", "Dupont");
//
//	<form id="contactForm" action="">
//    <fieldset>
//      <label for="nom">Nom :</label>
//      <input id="nom" name="nom" value="" />
//    </fieldset>
//  </form>

function gFormWrite (cForm, cChamp, Valeur)
{
	var contactForm = document.forms[cForm];
	contactForm[cChamp].value = Valeur;  
}
// ----------------------------------


// ----------------------------------
// ** function gFormRead (cForm, cChamp) **
// ----------------------------------
// Fonction elementaire de lecture d'un champ de formulaire
// basee sur infos trouvee sur sitepoint.com
// specialement dans le livre "The Javascript Anthology", page 105
// 		cForm : nom du formulaire
// 		cChamp : nom du champ
// Retour : valeur du champ
// Par exemple :
//		var cNom = gFormRead("contactForm", "nom");
//
//	<form id="contactForm" action="">
//    <fieldset>
//      <label for="nom">Nom :</label>
//      <input id="nom" name="nom" value="" />
//    </fieldset>
//  </form>

function gFormRead (cForm, cChamp)
{
	var contactForm = document.forms[cForm];
	return contactForm[cChamp].value
}
// ----------------------------------


// ----------------------------------
// ** function gCookieWrite(cName, cValue, iHours) **
// ----------------------------------
// Fonction elementaire d'ecriture d'un cookie
// basee sur infos trouvee dans Snipet Dreamweaver 8 et sur sitepoint.com
// specialement dans le livre "The Javascript Anthology", page 143
// 		cName : nom du Cookie
// 		cValue : valeur du cookie
//		iHours : nombre d'heure de validité
// Par exemple :
//		gCookieWrite("myName", "myValue", 24);
// 		// Stores the string "myName" of the value "myValue" which expires after 24 hours
function gCookieWrite(cName, cValue, iHours)
{
	// Dire que le cookie est valide sur l'ensemble du site
	// basee sur infos trouvee sur sitepoint.com
	// specialement dans le livre "The Javascript Anthology", page 147
	var cookiePath = ";path=/"; 
  
	var expire = "";
	if(iHours != null)
	{
		expire = new Date((new Date()).getTime() + iHours * 3600000);
		expire = "; expires=" + expire.toGMTString();
	}
	document.cookie = cName + "=" + escape(cValue) + expire + cookiePath;  
}
// ----------------------------------


// ----------------------------------
// ** function gCookieRead(cName) **
// ----------------------------------
// Fonction elementaire de lecture d'un cookie
// basee sur infos trouvee dans Snipet Dreamweaver 8 et sur sitepoint.com
// specialement dans le livre "The Javascript Anthology", page 143
// 		cName : nom du Cookie
// Par exemple :
//		var cookieValue = gCookieRead("myName");
// 		// Retrieve the value of the name "myName" in the cookie
function gCookieRead(name)
{
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0)
  { 
    offset = document.cookie.indexOf(search);
    if (offset != -1)
    { 
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = unescape(document.cookie.substring(offset, end))
    }
  }
  return cookieValue;
}
// ----------------------------------


// ----------------------------------
// ** function gCookieFormWrite(formName) **
// ----------------------------------
// Ecrire toutes les valeurs du formulaire 'formName' dans le cookie
// et les inscrire dans le formulaire SI
// 		Si c'est un input champ de saisie texte - pas les inputs de bouton
// 			ou si c'est un champ de saisie TEXTAREA
// 	ET
//		Si une des classes de l'element est 'ckiRemember', restorer valeur du cookie dans le formulaire
//
// Par exemple :
//		gCookieFormRead(formName);
function gCookieFormWrite(formName)
{
	// Trimmer la saisie et Ecrire un cookie 
	var elements = formName.elements; 			// Recuperer tous les elements du formulaire
  	for (var i = 0; i < elements.length; i++)	// Du premier elements jusqu'au dernier
		{
		// Si c'est un input champ de saisie texte - pas les inputs de bouton
		// ou si c'est un champ de saisie TEXTAREA
		if ((elements[i].nodeName=="INPUT" && elements[i].type=="text")||(elements[i].nodeName=="TEXTAREA"))
	  		{
			// Enlever les espaces avant et apres
			elements[i].value=trim(elements[i].value);
			
			// Si une des classes de l'element est 'ckiRemember', ecrire un cookie
			if (/(^| )ckiRemember( |$)/.test(elements[i].className))
				{
				// Ecrire un cookie "NomFormulaire-NomChamp" avec valeur champ pour validite 100 jours
				gCookieWrite(formName.name+"-"+elements[i].name, elements[i].value, 2400);
				}
			}
		}
}
// ----------------------------------


// ----------------------------------
// ** function gCookieFormRead(formName) **
// ----------------------------------
// Recuperer toutes les valeurs du formulaire 'formName' dans le cookie
// et les inscrire dans le formulaire SI
// 		Si c'est un input champ de saisie texte - pas les inputs de bouton
// 			ou si c'est un champ de saisie TEXTAREA
// 	ET
//		Si une des classes de l'element est 'ckiRemember', restorer valeur du cookie dans le formulaire
//
// Par exemple :
//		gCookieFormRead(formName);
function gCookieFormRead(cForm)
{
	var formName = document.forms[cForm]
	
	var elements = formName.elements; 			// Recuperer tous les elements du formulaire
  	for (var i = 0; i < elements.length; i++)	// Du premier elements jusqu'au dernier
		{
		// Si c'est un input champ de saisie texte - pas les inputs de bouton
		// ou si c'est un champ de saisie TEXTAREA
		if ((elements[i].nodeName=="INPUT" && elements[i].type=="text")||(elements[i].nodeName=="TEXTAREA"))
	  		{	
			// Si une des classes de l'element est 'ckiRemember', restorer valeur du cookie dans le formulaire
			if (/(^| )ckiRemember( |$)/.test(elements[i].className))
				{
				// Lire le cookie "NomFormulaire-NomChamp" et l'affecter au champ formulaire
				gFormWrite (formName.name, elements[i].name, trim(gCookieRead(formName.name+"-"+elements[i].name)));
				}
			}
		}
}
// ----------------------------------
