//***********************************************************************
// NECESSITE lib_ieemu.js
//***********************************************************************
/*Libraries de gestion des formulaires.
		Traitement des formats de dates.
		Vérification de la saisie des champs selon qu'ils soient
		requis	et/ou d'une forme bien précise.
		Traitement de l'envoie de certaines donnÃ©es.*/
//***********************************************************************
/*-----------------------------------------------------------------
* Version du 13/02/2004
* ----------------------------------------------------------------
* (c) Open Log, Tous droits reserves
-----------------------------------------------------------------*/
var _LIB_FORMSCRIPTS_JS = 1.0

/******************************************************************/
/*transforme un nombre anum à un chiffre en un nombre à 2 chiffres
	1 devient 01.*/
function formscripts_2digit(aNum)
{
	return (aNum<10) ? ("0" + aNum) : ("" + aNum);
}

/******************************************************************/
/*Enlève tout les caractères d'espacement devant et derrière le string str*/
function formscripts_strTrim(str)
{
  		var r, re;                    
  		re = /^(\s)*(\S*(\s*\S+)*)(\s)*$/g;             
  		r = str.replace(re, "$2");  
		delete re;
  		return r;
}

/******************************************************************/
/*Enlève tout les caractères d'espacement devant et derrière la valeur du champ oField*/
function formscripts_strTrimFormField(oField)
{
	oField.value = formscripts_strTrim(oField.value);
}


/******************************************************************/
/*teste si la chaine est un entier*/
function formscripts_isInteger(strInt)
{
    var re = new RegExp("^\\d+$","i"); // g Ã  voir
    var lvRet = re.test(strInt)
    delete re;
    return lvRet;
}

/******************************************************************/
/*teste si la valeur de la chaîne est un Email de forme correct*/
function formscripts_isEmail(strEmail)
{
    var re = new RegExp("^\\s*(\\w+(-*)\\w+(\\.\\w+(-*)\\w+)*@(\\w+(-*)\\w+\\.)+\\w{2,3})\\s*$","i"); // g Ã  voir
    var lvRet = re.test(strEmail)
    delete re;
    return lvRet;
}

/******************************************************************/
/*Transforme une date Xml en objet date javascript*/
function formscripts_xmlDate2DateObj(str)
{
	var r;             
	if( !MS )
	{
		r = "new Date("
			+ str.substring(0,4) + ","
			+ "(" + str.substring(5,7) + ")-1,"
			+ str.substring(8,10) +  ","
			+ str.substring(11,13) + ","
			+ str.substring(14,16) + ","
			+ str.substring(17,19) + ")";
	}
	else
	{       
		var re;                    
		re = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).*/g;             
		r = str.replace(re, "new Date($1,($2)-1,$3,$4,$5,$6)");  
		delete re;
	}
	return eval(r);
}

/******************************************************************/
/*Transforme un objet date javascript en une date Xml*/
function formscripts_dateObj2xmlDate(oDate)
{
	return "" + oDate.getFullYear()
			+ "-" + formscripts_2digit(oDate.getMonth()+1)
			+ "-" + formscripts_2digit(oDate.getDate())
			+ "T" + formscripts_2digit(oDate.getHours())
			+ ":" + formscripts_2digit(oDate.getMinutes())
			+ ":" + formscripts_2digit(oDate.getSeconds());
 }

/******************************************************************/
/*implémente la fonction ImagePreviewManager à partir d'un champ contenant la src de l'image
appliqué à une image sImgPreviewRef*/
function formscripts_initImgPreviewManager(sFormEltRef, sImgPreviewRef)
{
	if( "undefined" == typeof(clUploadImagePreviewManager) )
	{
		alert("L'utilisation de ImagePreviewManager nÃ©cessite l'inclusion prÃ©alable de la librairie obj_imgpview.js");
	}
	else
	{
		if( "undefined" == typeof(window.imgPreviewManager) )
		{
			// Implement Image Preview Manager
			window.imgPreviewManager = new clUploadImagePreviewManager();
			window.attachEvent("onload", function(){window.imgPreviewManager.onLoad('window.imgPreviewManager')});
		}
		window.imgPreviewManager.mAdd(sFormEltRef, sImgPreviewRef);
	}
}

/******************************************************************/
/*retourne l'index de l'item sélectionné dans un select*/
function formscripts_getFormSelectedIndex(oSelect)
{
	if(!MS)
	{
		for(var i = 0; i < oSelect.options.length; i++)
		{
			if(oSelect.options[i].selected)
			{
				return i;
			}
		}
	}
	else
	{
		return oSelect.selectedIndex;
	}
   return -1;
}
		
/******************************************************************/
/*retourne l'item sélectionné dans un select*/
function formscripts_getFormSelectedOption(oSelect)
{
   var lvI = formscripts_getFormSelectedIndex(oSelect);
	return (-1!=lvI)?oSelect.options[lvI]:null;
}

/*test si l'indice d'un combo obligatoire est diférent de 0*/
function formscripts_basicTestSelectRequired(oSelect){
	var isRequired = oSelect.getAttribute("REQUIRED");
	if( isRequired )
	{
		isRequired = isRequired.toLowerCase();
		if( "false" == isRequired )
		{
			isRequired = null;
		}
	}
	if( isRequired )
	{
		if (formscripts_getFormSelectedIndex(oSelect) == 0){
			formscripts_DynErrMess(oSelect);
			return false;
		}
	}
	return true;
}
		
/******************************************************************/
/*retourne le formulaire dans lequel se trouve oElt*/
function formscripts_getEltForm(oElt)
{
	var aForm = oElt.parentNode;
	while( "FORM" != aForm.tagName  )
	{
	   aForm = aForm.parentNode;
	}
	return aForm;
}
		
/******************************************************************/
/* Retourne l'expression régulière pour tester les attributs regexp et required d'un champ oElt*/
function formscripts_getRegExpFromEltForm(oElt)
{
	var outRegExp = "";
	var inRegExp = oElt.getAttribute("REGEXP");
	var isRequired = oElt.getAttribute("REQUIRED");
	if( isRequired )
	{
		isRequired = isRequired.toLowerCase();
		if( "false" == isRequired )
		{
			isRequired = null;
		}
	}
	if( inRegExp &&  inRegExp.length )
	{
		outRegExp = (isRequired) ? inRegExp : "(^$)|(" + inRegExp + ")";
	}
	else
	{
		outRegExp = (isRequired) ? "^(.|\\s)+$" : "^(.|\\s)*$";
	}
	return outRegExp;
}

/******************************************************************/
/* Teste et alerte sur un champ oElt*/
function formscripts_basicTestEltForm(oElt)
{
	var oEltstyle  = ("undefined" != typeof(oElt.style)) ? oElt.style : oElt;
	if(oEltstyle.display!="none")
	{
		var sRegExp = formscripts_getRegExpFromEltForm(oElt);
		var re = new RegExp(sRegExp, "g");
		var lvRet = re.test(oElt.value);
		delete re;
		if( !lvRet )
		{
			formscripts_DynErrMess(oElt);
			return false;
		}
	}
	return true;
}

/******************************************************************/
/* teste et alerte Ã  partir d'un atribut numérique  d'un element si iVal est inférieur*/
function formscripts_maxTestEltForm(oElt, sAttrb, iVal)
{
	var iMax = parseInt(oElt.getAttribute(sAttrb));
	if( !isNaN(iMax) )
	{
		if(iVal > iMax )
		{
			formscripts_DynErrMess(oElt);
			return false;
		}
	}
	return true;
}

/******************************************************************/
/* Lance le teste complet d'un formulaire oForm en appelant les fonctions précédantes*/
function formscripts_isValidForm(oForm)
{
	var cFormsElts = oForm.elements;
	
	for( var i = 0; i < cFormsElts.length; i++ )
	{
		var oElt = cFormsElts[i];
		
		// ------------------------------------------------------
		// Cas d'un INPUT de type TEXT ou HIDDEN
		if( "text" == oElt.type  || "hidden" == oElt.type ||  "password" == oElt.type )
		{
			oElt.value = formscripts_strTrim(oElt.value);
			if( !formscripts_basicTestEltForm(oElt) )
			{
				return false;
			}
		}
		
		// ------------------------------------------------------
		// Cas d'un INPUT de type CHECKBOX ou RADIO
		else if( "checkbox" == oElt.type  || "radio" == oElt.type )
		{
		}
		
		// ------------------------------------------------------
		// Cas d'un INPUT de type FILE
		else if( "file" == oElt.type)
		{
			if( !formscripts_basicTestEltForm(oElt) )
			{
				return false;
			}
			var sImgPreview = oElt.getAttribute("imgpreview");
		
			if( sImgPreview && oElt.value )
			{
				// Input type file pour image avec preview pour test
				var oImg = document.getElementById(sImgPreview);

				if(oImg)
				{
					if( -1 == oImg.fileSize )
					{
						// Ce n'est pas une image
						formscripts_DynErrMess(oElt);
						return false;
					}
					
					var re = new RegExp("(file protocole?)|(protocole? file)", "gi");
					var lvRet = re.test(oImg.protocol);
					delete re;
					if( !lvRet  )
					{
						alert("Ce type de localisation de fichier n'est pas conforme :\n\n\t" + oImg.protocol);
						return false;
					}
					
					if( !formscripts_maxTestEltForm(oElt, "MAXLENGTH", oImg.fileSize) )
					{
						return false;
					}
					if( !formscripts_maxTestEltForm(oElt, "MAXHEIGHT", oImg.height) )
					{
						return false;
					}
					if( !formscripts_maxTestEltForm(oElt, "MAXWIDTH", oImg.width) )
					{
						return false;
					}
				}
			}
		}

		// ------------------------------------------------------
		// Cas d'un SELECT mono
		else if( "select-one" == oElt.type)
		{
			if( !formscripts_basicTestSelectRequired(oElt) )
			{
				return false;
			}
		}

		// ------------------------------------------------------
		// Cas d'un SELECT multiple
		else if( "select-multiple" == oElt.type)
		{
		}

		// ------------------------------------------------------
		// Cas d'un TEXTAREA
		else if( "textarea" == oElt.type)
		{
			oElt.value = formscripts_strTrim(oElt.value);
			if( !formscripts_basicTestEltForm(oElt) )
			{
				return false;
			}
			else if( !formscripts_maxTestEltForm(oElt, "MAXLENGTH", oElt.value.length) )
			{
				return false;
			}
		}
		
		else
		{
			//alert(oElt.type);
		}
	}
	return true;
}

/******************************************************************/
/*Fixe le dernier jour du mois en fonction du champ eltName 
auquel formscripts_FormDate3SelectsDisplay aura été préalablement appliqué*/
function formscripts_FormDate3SelectsSetLastMonthDay(eltName) 
{
	var objFormYear = document.getElementById(eltName + "_Y");
	var objFormMonth = document.getElementById(eltName + "_M");
	var objFormDay = document.getElementById(eltName + "_D");
	
	// Build first of next month
	timeA = new Date(	objFormYear.options[objFormYear.selectedIndex].text,
						objFormMonth.options[objFormMonth.selectedIndex].value,
						1);
	
	// Get previous day
	timeDifference = timeA - 86400000; // (24h)
	timeB = new Date(timeDifference);
	
	// Get Day num
	var daysInMonth = timeB.getDate();
	
	//mÃ©morisation du jour avant mise Ã  jour de la liste
	var index_previous_day = objFormDay.selectedIndex; 
	var i = 0;
	for (i = 0; i < objFormDay.length; i++) 
	{
		objFormDay.options[i] = null;
	}
	
	for (i = 0; i < daysInMonth; i++) 
	{
		objFormDay.options[i] = new Option(i+1);
		objFormDay.options[i].value = (i+1);
	}
	
	if(index_previous_day > (daysInMonth-1))
		objFormDay.options[daysInMonth-1].selected = true; 
		// remise au dernier jour du mois quand ont Ã©tÃ© le 31 et si l'on est passÃ© Ã  un mois de 30 jours (ou cas de fÃ©vrier)
	else
		objFormDay.options[index_previous_day].selected = true; 
		//restitution si pas de depassement
}
/******************************************************************/
/* Transforme une date XML d'un champ eltName en  3 selects jours / mois /années 
en saisie ou en lecture*/
function formscripts_FormDate3SelectsDisplay(eltName, bDisabled)
{
	var oElt = document.getElementById(eltName);
	if(oElt)
	{
	    var strD = formscripts_strTrim(oElt.value);
	    var d = null;
	    if( "" == strD )
	    {
		    d = new Date();
	    }
	    else
	    {
		    d = formscripts_xmlDate2DateObj(strD);
	    }

	    document.write('<select name="' + eltName + '_D" id="' + eltName + '_D" class="date"');
	    if( bDisabled ) document.write(' disabled="true"');
	    document.write('>');
	    for(var i = 1; i <= 31; i++)
	    {
		    document.write('<option value="' + i + '"' + ( (d.getDate() == i) ? " SELECTED" : "") + '>' + i + '</option>');
	    }
	    document.write('</select>');
    	
	    document.write('<select name="' + eltName + '_M" id="' + eltName + '_M" class="date" onchange="formscripts_FormDate3SelectsSetLastMonthDay(\'' + eltName + '\')"');
	    if( bDisabled ) document.write(' disabled="true"');
	    document.write('>');
	    for(var i = 1; i <= 12; i++)
	    {
		    document.write('<option value="' + i + '"' + ( ((d.getMonth()+1) == i) ? " SELECTED" : "") + '>' + i + '</option>');
	    }
	    document.write('</select>');

	    var dNow = new Date();
	    document.write('<select name="' + eltName + '_Y" id="' + eltName + '_Y" class="date" onchange="formscripts_FormDate3SelectsSetLastMonthDay(\'' + eltName + '\')"');
	    if( bDisabled ) document.write(' disabled="true"');
	    document.write('>');
	    for(var i = 1970; i <= (dNow.getFullYear()+10); i++)
	    {
		    document.write('<option value="' + i + '"' + ( (d.getFullYear() == i) ? " SELECTED" : "") + '>' + i + '</option>');
	    }
	    document.write('</select>');
	    formscripts_FormDate3SelectsSetLastMonthDay(eltName);
	}
}

// ===========================================================================================
/*Retourne une date js à partir de 3 select*/
function formscripts_FormDate3Selects2Object(eltName, endsdate)
{
	var objFormYear = document.getElementById(eltName + "_Y");
	var objFormMonth = document.getElementById(eltName + "_M");
	var objFormDay = document.getElementById(eltName + "_D");
	return (endsdate) ? new Date(objFormYear.value, objFormMonth.value-1, objFormDay.value, 23, 59, 59, 999) 
	                  : new Date(objFormYear.value, objFormMonth.value-1, objFormDay.value, 0, 0, 0, 0);
}


/******************************************************************/
/* Gestion des messages d'alerte */
function formscripts_DynErrMess(oElt)
{
	var lvMsg = ("" != oElt.title) 
				? oElt.title 
				:  ("Le champ \"" + ((oElt.getAttribute("lib"))?oElt.getAttribute("lib"):oElt.name) + "\" n'est pas bien rempli.");
	alert( lvMsg );
	if( "hidden" != oElt.type )
	{
	   //if("number" == typeof(_OBJ_FORM_INTERFACE_JS)) 
	   if(window.onglets && typeof window.onglets.showdiv != "undefined")
		{
			window.onglets.showdiv(oElt);
			window.oElt = oElt;
			setTimeout("window.oElt.focus()", 100);
		}
		else
		{
			oElt.focus();
		}
	}
	else if( oElt.getAttribute("focus") )
	{
        document.getElementById(oElt.getAttribute("focus")).focus();
	}
}

/******************************************************************/
/* Teste si le formulaire a été modifié pour prévenir 
l'utilisateur quittant la page qu'il n'a pas envoyé le formulaire */
function formscripts_clCheckForm(oFormName)
{
	eval("window.check"+oFormName+"=this;");
	
	this.oForm=document.forms[oFormName];
	for (var i=0; i<this.oForm.length; i++)
	{
		this.oForm.elements[i].initValue=this.oForm.elements[i].value
	}
	
	this.check =
		function formscripts_clCheckForm_fnCheck()
		{
			eval("var lvForm=window.check"+oFormName+".oForm;");
			//alert(lvForm.elements[i]);
			var lvStop = 0;
			
			for(var i=0; i<lvForm.length; i++)
			{
			 	if ( lvForm.elements[i].initValue != lvForm.elements[i].value )
				{
				   lvStop = 1; 	
				}
			}
			if (	lvStop == 1
					&& lvForm.submitencours != true
					)
			{
				window.event.returnValue= "VOUS N'AVEZ PAS ENREGISTRE VOS MODIFICATIONS.\n\nSI VOUS QUITTEZ CETTE PAGE MAINTENANT,\nVOUS PERDREZ LES MODIFICATIONS QUE VOUS VENEZ DE FAIRE.";
			}
		}
	
	window.attachEvent ('onbeforeunload',this.check);
}

/******************************************************************/
// Implémentation de :   Ctrl + s : call savefunction
// et masque les objets ayant pour id "page-actions" et "toolbar" 
// pendant le lancement de savefunction
function formscripts_ImplCtrlSave(saveFunction)
{			  
    window.specificSaveFunction = saveFunction;   

    window.saveFunction = function ()
    {
        var ob = null;
        
        ob = document.getElementById("page-actions");
        if(ob)ob.style.display = "none";
        
        ob = document.getElementById("toolbar");
        if(ob)ob.style.display = "none";
        
        window.setTimeout(function()
                            {
                                var urlUpdateObj = document.getElementById("URL_UPDATE");
                                if(window.specificSaveFunction() && urlUpdateObj)
                                {
                                    //window.location.replace(urlUpdateObj.value);
                                }
                                var ob = null;
        
                                ob = document.getElementById("page-actions");
                                if(ob)ob.style.display = "";
                                
                                ob = document.getElementById("toolbar");
                                if(ob)ob.style.display = "";
                                
                            }, 100);
    }
    
	document.attachEvent("onkeydown",function () 
										{
											if(		window.event 
												&&	window.event.ctrlKey 
												&&	window.event.keyCode == 83 )
											{
											    window.status = "saving...";
												window.saveFunction();
												window.event.returnValue = false;
											}
										} );
}
function starforlabel()
{
	/*********************
	 * ajout des etoiles *	
	 *********************/
    var lCol = document.getElementsByTagName("LABEL");
    for(var i = 0 ; i < lCol.length ; i++){
	    //alert(i + " = " + lCol[i].getAttribute("for"));
		var oInput = document.getElementById(lCol[i].getAttribute("htmlFor"));
		if (MOZ) {
			oInput = document.getElementById(lCol[i].getAttribute("for"));
		}
		if(oInput && oInput.getAttribute("required")=="true")
		{
			lCol[i].appendChild(document.createTextNode(" *"));
		}
	}
    
	/*************************************************************
	 * ajout du libelle champ obligatoire dans le premier onglet *	
	 *************************************************************/
	/*onglets = getNodesByType(	1, 
							function(e)
							{
								return ("FIELDSET" == e.tagName  || (e.tagName == "DIV" && isClassName(e, "field")));
							},
							document.forms[0]);
	if(onglets[0]){
		premDiv = getNodesByType(	1, function(e){return ("DIV" == e.tagName);}, onglets[0]);
		var etoile = document.createElement("p");
		etoile.id="etoile";
		etoile.appendChild(document.createTextNode("(*) champ obligatoire"));
		if(premDiv[0]){				
			premDiv[0].appendChild(etoile);
		}
	}*/
}


//retire les doubles blancs
function retireDoubleBlanc(oElt){
	var chaine = oElt.value;
	var pattern = /\  /gi;
	while(chaine.indexOf("  ") != -1){
		chaine = chaine.replace(pattern," ");	
	}
	oElt.value=chaine;
}

//remplace les caracteres interdits par des blancs
// mis en commentaire pour BAPSI evolution 1189
// caracteres autorises : [0,9] [a,z] [A,Z] + tous autres
// pour conclure, tous les caracteres sont autorises
function retireCaratereInterdits(oElt){
	/*var chaine = oElt.value;
	var pattern = /\W/gi;
	chaine = chaine.replace(pattern," ");	
	oElt.value=chaine;*/
}

//retire les accents
function remplaceAccents(oElt){
	var chaine = oElt.value;
	chaine = chaine.replace(/[éèêë]/g,"e");
	chaine = chaine.replace(/[àâä]/g,"a");
	chaine = chaine.replace(/[ìîï]/g,"i");
	chaine = chaine.replace(/[òôö]/g,"o");
	chaine = chaine.replace(/[ùûüµ]/g,"u");
	chaine = chaine.replace(/[ÉÈÊË]/g,"E");
	chaine = chaine.replace(/[ÀÄÂ]/g,"A");
	chaine = chaine.replace(/[ÌÎÏ]/g,"I");
	chaine = chaine.replace(/[ÒÖÔ]/g,"O");
	chaine = chaine.replace(/[ÙÛÜ]/g,"U");
	chaine = chaine.replace(/[ç]/g,"c");
	oElt.value=chaine;
}

//mise en majuscule
function majuscule(oElt){
	var chaine = oElt.value;
	chaine = chaine.toUpperCase();	
	oElt.value=chaine;
}
//misepremiere lettre  en majuscule
function majusculePremiereLettre(oElt){
	var chaine = oElt.value;
	chaine = chaine.substring(0,1).toUpperCase() + chaine.substring(1);
	oElt.value=chaine;
}
