/*utf-8.test.??*/
var _LIB_FORMSCRIPTS_JS = 1.0

/******************************************************************/
function formscripts_2digit(aNum)
{
	return (aNum<10) ? ("0" + aNum) : ("" + aNum);
}

/******************************************************************/
function formscripts_strTrim(str)
{
  		var r, re;                    
  		re = /^(\s)*(\S*(\s*\S+)*)(\s)*$/g;             
  		r = str.replace(re, "$2");  
	delete re;
  		return r;
}

/******************************************************************/
function formscripts_strTrimFormField(oField)
{
	oField.value = formscripts_strTrim(oField.value);
}


/******************************************************************/
function formscripts_isInteger(strInt)
{
    var re = new RegExp("^\\d+$","i"); // g à voir
    var lvRet = re.test(strInt)
    delete re;
    return lvRet;
}

/******************************************************************/
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;
}

/******************************************************************/
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);
}

/******************************************************************/
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());
 }

/******************************************************************/
function formscripts_initImgPreviewManager(sFormEltRef, sImgPreviewRef)
{
	if( "undefined" == typeof(clUploadImagePreviewManager) )
	{
		alert("L'utilisation du template \"maj-e-forms:element-image\" (/maj-e/xsl/wfax-forms.xsl) nécessite l'inclusion préalable de la librairie /maj-e/js/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);
	}
}

/******************************************************************/
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;
}
		
/******************************************************************/
function formscripts_getFormSelectedOption(oSelect)
{
   var lvI = formscripts_getFormSelectedIndex(oSelect);
	return (-1!=lvI)?oSelect.options[lvI]:null;
}
		
/******************************************************************/
function formscripts_getEltForm(oElt)
{
	var aForm = oElt.parentNode;
	while( "FORM" != aForm.tagName  )
	{
	   aForm = aForm.parentNode;
	}
	return aForm;
}
		
/******************************************************************/
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;
}

/******************************************************************/
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;
}

/******************************************************************/
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;
}

/******************************************************************/
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 )
		{
			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;
					}
					
					
					
					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)
		{
		}

		// ------------------------------------------------------
		// 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;
}

/******************************************************************/
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
}
/******************************************************************/
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);
	}
}

// ===========================================================================================
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);
}


/******************************************************************/
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)) 
		{
			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();
	}
}

function formscripts_sendXml(app_key, oXml, action, target)
{
		var oNewForm = document.createElement("FORM");
		oNewForm.style.visibility = "hidden";
		if(target == undefined)
		{ oNewForm.action = "/admin/default.asp"; }
		else
		{ oNewForm.action = target; }
		
		oNewForm.method = "post";
		oNewForm.encoding = "multipart/form-data"; // old compatibility
		oNewForm.enctype = "multipart/form-data"; // new compatibility

		oNewForm.appendChild(document.createElement('<INPUT TYPE="HIDDEN" NAME="APP_KEY" VALUE="'+app_key+'">'));
		oNewForm.appendChild(document.createElement('<INPUT TYPE="HIDDEN" NAME="UPDATE" VALUE="TRUE">'));
		if(action)
		{
   		oNewForm.appendChild(document.createElement('<INPUT TYPE="HIDDEN" NAME="WFACTION" VALUE="'+action+'">'));
		}
		var oElt = document.createElement('TEXTAREA');
		oElt.name="XML";
		oElt.value=oXml.xml;
		oNewForm.appendChild(oElt);
		
		document.body.appendChild(oNewForm);
		oNewForm.submit();
}

/******************************************************************/
function formscripts_popupImg(src)
{
   var i = document.createElement("img");
   i.onload=function(){
      window.open(this.src, '',
                  "menubars=no, scroll=no, width="+(this.width + 20)+", height="+(this.height + 20));
   };
   i.src = src;
}

/******************************************************************/
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
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;
											}
										} );
}