
// -------------------------------------------------------------------------------------------
// FORMATAGE ET VERIFICATION DES CHAINES DE CARACTERES
// (NOUVELLES PROPRIETES DE L'OBJET STRING)
// -------------------------------------------------------------------------------------------

function leftTrim(sFind)
{
	var szResult = this.valueOf();
	var szFindLocal = ((leftTrim.arguments.length > 0)?(sFind):(" "));
	var nLen = szFindLocal.length, nIndex;
	while(szResult != "")
	{
		nIndex = szResult.indexOf(szFindLocal);
		if(nIndex == 0)
			szResult = szResult.substring(nLen,(szResult.length));
		else
			break;
	}
	return szResult;
}

function rightTrim(sFind)
{
	var szResult = this.valueOf();
	var szFindLocal = ((rightTrim.arguments.length > 0)?(sFind):(" "));
	var nLen = szFindLocal.length, nIndex;
	while(szResult != "")
	{
		nIndex = szResult.lastIndexOf(szFindLocal);
		if(nIndex == ((szResult.length) - nLen))
			szResult = szResult.substring(0,nIndex);
		else
			break;
	}
	return szResult;
}

function trim(sFind)
{
	var szResult = this.valueOf();
	var szFindLocal = ((trim.arguments.length > 0)?(sFind):(" "));
	szResult = szResult.leftTrim(szFindLocal).rightTrim(szFindLocal);
	return szResult;
}

function replace(sFind,sReplace)
{
	var szResult;
	if(replace.arguments.length > 1)
	{
		szResult = "";
		var sValueTemp = this.valueOf();
		var nLen = sFind.length, nIndex;
		while(sValueTemp != "")
		{
			nIndex = sValueTemp.indexOf(sFind);
			if(nIndex > -1)
			{
				szResult += ((sValueTemp.substring(0,nIndex))+sReplace);
				sValueTemp = sValueTemp.substring((nIndex+nLen),sValueTemp.length);
			}
			else
			{
				szResult += sValueTemp;
				sValueTemp = "";
			}
		}
	}
	else
	{
		szResult = this.valueOf();
	}
	return szResult;
}

function split(sDelimt)
{
	var arrayRes = new Array();
	
	var sValue = this.valueOf();
	var nIndex = sValue.indexOf(sDelimt), nCount = 0;
	while (nIndex > -1)
	{
		arrayRes[nCount++] = sValue.substring(0, nIndex);
		sValue = sValue.substring(nIndex+1, sValue.length);
		nIndex = sValue.indexOf(sDelimt);
	}
	arrayRes[nCount] = sValue;
	
	return arrayRes;
}

function join(sDelimt)
{
	var szResult = "";
	
	var nLen = this.length, i = 0;
	while (i<nLen)
	{
		if (i>0) szResult += sDelimt;
		szResult += this[i++];
	}
	
	return szResult;
}

function joinTab(sDelimtL, sDelimtC)
{
	var szResult = "";
	
	var nLen = this.length, i = 0;
	while (i<nLen)
	{
		if (i>0) szResult += sDelimtL;
		szResult += this[i++].join(sDelimtC);
	}
	
	return szResult;
}

function joinTranspose(sDelimtL, sDelimtC)
{
	var szResult = "";
	
	var nLenL = this.length;
	if (nLenL > 0)
	{
		var arrayT = new Array();
		var i, j;
		for (i=0; i<nLenL; i++)
		{
			for (j=0; j<this[i].length; j++)
			{
				if (i==0) arrayT[j] = "";
				else arrayT[j] += sDelimtL;
				arrayT[j] += this[i][j];
			}
		}
		szResult = arrayT.join(sDelimtC);
	}
	
	return szResult;
}

function singleOcc(sFind)
{
	var szResult = this.valueOf();
	var szFindLocal = ((singleOcc.arguments.length > 0)?(sFind):(" "));
	var szDblFind = (szFindLocal + szFindLocal);
	szResult = szResult.trim(szFindLocal);
	szValueTemp = szResult.replace(szDblFind,szFindLocal);
	while(szResult != szValueTemp)
	{
		szResult = szValueTemp;
		szValueTemp = szResult.replace(szDblFind,szFindLocal);
	}
	return szResult;
}

function countChar(sValid)
{
	var nValid = 0;
	var sValue = this.valueOf();
	var nLength = sValue.length;
	for(var i=0; i<nLength; i++)
		if(sValid.indexOf(sValue.charAt(i)) > -1){nValid++;}
	
	return nValid;
}

function countValidChar(bLarge,bJocker)
{
	var sNotValid = " ";
	var nLength = countValidChar.arguments.length;
	var blnLarge = (nLength>0) ? bLarge : false;
	if(blnLarge) sNotValid += "+-()./";
	var blnJocker = (nLength>1) ? bJocker : false;
	if(blnJocker) sNotValid += "*?";
	
	var nValid = 0;
	var sValue = this.valueOf();
	nLength = sValue.length;
	for(var i=0; i<nLength; i++)
		if(sNotValid.indexOf(sValue.charAt(i)) < 0){nValid++;}
	
	return nValid;
}

function isValidChar(nCount,bLarge,bJocker)
{
	var nLength = isValidChar.arguments.length;
	var iCount = ((nLength>0)?(nCount):(1));
	var blnLarge = ((nLength>1)?(bLarge):(false));
	var blnJocker = ((nLength>2)?(bJocker):(false));
	
	return (this.countValidChar(blnLarge,blnJocker)<iCount)?false:true;
}

function isValidString(sValid)
{
	var bValid = true;
	var sValue = this.valueOf();
	var nLength = sValue.length, i = 0;
	for(; i<nLength; i++)
		if(sValid.indexOf(sValue.charAt(i)) < 0)
		{
			bValid = false;
			break;
		}
	
	return bValid;
}

function isNumeric(bLarge, bJocker, bSpace)
{
	var sValid = "0123456789";
	var nLength = isNumeric.arguments.length;
	var blnLarge = ((nLength > 0)?(bLarge):(true));
	if(blnLarge){sValid += "+-()./"};
	var blnJocker = ((nLength > 1)?(bJocker):(false));
	if(blnJocker){sValid += "*?"};
	var blnSpace = ((nLength > 2)?(bSpace):(true));
	if(blnSpace){sValid += " "};
	var sValue = this.valueOf();
	
	return sValue.isValidString(sValid);
}

function isAlphaNumeric(bLarge, bJocker, bSpace)
{
	var sValid = "0123456789";
	sValid += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	sValid += "abcdefghijklmnopqrstuvwxyz";
	var nLength = isAlphaNumeric.arguments.length;
	var blnLarge = ((nLength > 0)?(bLarge):(true));
	if(blnLarge){sValid += "+-()./"};
	var blnJocker = ((nLength > 1)?(bJocker):(false));
	if(blnJocker){sValid += "*?"};
	var blnSpace = ((nLength > 2)?(bSpace):(true));
	if(blnSpace){sValid += " "};
	var sValue = this.valueOf();
	
	return sValue.isValidString(sValid);
}

function isHexa()
{
	var sValid = "0123456789ABCDEFabcdef";
	var sValue = this.valueOf().replace(" ","");
	
	return sValue.isValidString(sValid);
}

function isFloat()
{
	var sValid = "0123456789+-.,";
	var sValue = this.valueOf().replace(" ","");
	
	var bRet = sValue.isValidString(sValid);
	if (bRet)
	{
		var nLen = sValue.length, szSign = "+-";
		var n1 = sValue.indexOf(","), n2 = sValue.indexOf(".");
		var nL1 = sValue.lastIndexOf(","), nL2 = sValue.lastIndexOf(".");
		
		if (sValue.indexOf("+")>0 || sValue.indexOf("-")>0)
			bRet = false;
		else if (sValue.lastIndexOf("+")>0 || sValue.indexOf("-")>0)
			bRet = false;
		else if (n1==0 || n2==0)
			bRet = false;
		else if (nL1==nLen-1 || nL2==nLen-1)
			bRet = false;
		else if (n1>0 && n2>0)
			bRet = false;
		else if ((n1>0 && nL1>0 && n1!=nL1) || (n2>0 && nL2>0 && n2!=nL2))
			bRet = false;
		else if ((n1>0 && szSign.indexOf(sValue.charAt(n1-1))>-1)||(n2>0 && szSign.indexOf(sValue.charAt(n2-1))>-1))
			bRet = false;
	}
	
	return bRet;
}

function isInt()
{
	var sValue = this.valueOf();
	var bRet = sValue.isFloat();
	if (bRet)
	{
		sValue = sValue.replace(" ","");
		
		var nLen = sValue.length;
		var n1 = sValue.indexOf(","), n2 = sValue.indexOf(".");
		var n3 = (n1>-1)?n1:n2;
		if (n3>-1)
			if (parseInt(sValue.substring(n3+1, nLen)) > 0)
				bRet = false;
	}
	
	return bRet;
}

function formatString(sValid)
{
	var sResult = "";
	var sValue = this.valueOf();
	var nLength = sValue.length, i = 0;
	for(; i<nLength; i++)
	{
		szCh = sValue.charAt(i);
		if(sValid.indexOf(szCh) > -1) sResult += szCh;
	}
	
	return sResult;
}

function formatNumeric(bLarge, bJocker, bSpace)
{
	var sValid = "0123456789";
	var nLength = formatNumeric.arguments.length;
	var blnLarge = ((nLength > 0)?(bLarge):(true));
	if(blnLarge){sValid += "+-()./"};
	var blnJocker = ((nLength > 1)?(bJocker):(false));
	if(blnJocker){sValid += "*?"};
	var blnSpace = ((nLength > 2)?(bSpace):(true));
	if(blnSpace){sValid += " "};
	var sValue = this.valueOf();
	
	return sValue.formatString(sValid);
}

function formatAlphaNumeric(bLarge, bJocker, bSpace)
{
	var sValid = "0123456789";
	sValid += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	sValid += "abcdefghijklmnopqrstuvwxyz";
	var nLength = formatAlphaNumeric.arguments.length;
	var blnLarge = ((nLength > 0)?(bLarge):(true));
	if(blnLarge){sValid += "+-()./"};
	var blnJocker = ((nLength > 1)?(bJocker):(false));
	if(blnJocker){sValid += "*?"};
	var blnSpace = ((nLength > 2)?(bSpace):(true));
	if(blnSpace){sValid += " "};
	var sValue = this.valueOf();
	
	return sValue.formatString(sValid);
}

function formatNumTel()
{
	var szResult = "";
	var szChaine = this.valueOf();
	var nLongueur = szChaine.length;
	
	if((nLongueur == 8)||(nLongueur == 10))
	{
		var nNbCar = 2;
		while(nLongueur > 0)
		{
			if(nLongueur > nNbCar)
			{
				szResult += (szChaine.substring(0,nNbCar) + " ");
				szChaine = szChaine.substring(nNbCar,nLongueur);
				nLongueur = szChaine.length;
			}
			else
			{
				szResult += szChaine;
				nLongueur = 0;
			}
		}
	}
	else
	{
		szResult = szChaine;
	}
	
	return szResult;
}

String.prototype.leftTrim = leftTrim;
String.prototype.rightTrim = rightTrim;
String.prototype.trim = trim;
String.prototype.replace = replace;
String.prototype.split = split;
String.prototype.singleOcc = singleOcc;
String.prototype.countChar = countChar;
String.prototype.countValidChar = countValidChar;
String.prototype.isValidChar = isValidChar;
String.prototype.isValidString = isValidString;
String.prototype.isNumeric = isNumeric;
String.prototype.isAlphaNumeric = isAlphaNumeric;
String.prototype.isHexa = isHexa;
String.prototype.isFloat = isFloat;
String.prototype.isInt = isInt;
String.prototype.formatString = formatString;
String.prototype.formatNumeric = formatNumeric;
String.prototype.formatAlphaNumeric = formatAlphaNumeric;
String.prototype.formatNumTel = formatNumTel;

Array.prototype.join = join;
Array.prototype.joinTab = joinTab;
Array.prototype.joinTranspose = joinTranspose;

// -------------------------------------------------------------------------------------------
// VERIFICATION DES DATES
// -------------------------------------------------------------------------------------------

function getNbDayOfMonth(nYear, nMonth)
{
	return (nMonth==2)?(nYear%4)?28:(nYear%100)?29:(nYear%400)?28:29:(nMonth==4||nMonth==6||nMonth==9||nMonth==11)?30:31;
}

function getLastDayOfMonth(nYear, nMonth, nWeekday)
{
	var nNbDay = getNbDayOfMonth(nYear, nMonth);
	var dDate = new Date(nYear, nMonth, nNbDay);
	return Date.UTC(nYear, nMonth, nNbDay)-((7+dDate.getDay()-nWeekday)%7)*24*3600*1000;
}

function getFirstDayOfMonth(nYear, nMonth, nWeekday)
{
	var dDate = new Date(nYear, nMonth, 1);
	return Date.UTC(nYear, nMonth, 1)+((7-dDate.getDay()+nWeekday)%7)*24*3600*1000;
}

function getSpringWinter(nZone)
{
	// nZone == 0 : pas de changement d'heure été/hiver
	// nZone == 1 : France
	// nZone == 2 : Royaume-Uni
	// nZone == 3 : Etats-Unis
	
	if (nZone==1 || nZone==2 || nZone==3)
	{
		var nDate = Date.parse(this.toString()), nBeg, nEnd;
		if (nZone == 1)
		{
			nBeg = getLastDayOfMonth(this.getUTCFullYear(), 2, 0) + 7200000;
			nEnd = getLastDayOfMonth(this.getUTCFullYear(), 9, 0) + 10800000;
		}
		else if (nZone == 2)
		{
			nBeg = getLastDayOfMonth(this.getUTCFullYear(), 2, 0) + 3600000;
			nEnd = getLastDayOfMonth(this.getUTCFullYear(), 9, 0) + 7200000;
		}
		else
		{
			nBeg = getFirstDayOfMonth(this.getUTCFullYear(), 3, 0) + 7200000;
			nEnd = getLastDayOfMonth(this.getUTCFullYear(), 9, 0) + 7200000;
		}
		return (nDate>=nBeg  && nDate<nEnd)?1:0;
	}
	else
		return 0;
}
Date.prototype.getSpringWinter = getSpringWinter;

function FormField(oItem, sKey, nType)
{
	this.fieldItem = oItem;
	this.fieldKey = sKey;
	this.fieldType = nType;
}

function FormDate(oDayItem, oMonthItem, oYearItem, sKey)
{
	this.dateDay = new FormField(oDayItem, sKey, 0);
	this.dateMonth = new FormField(oMonthItem, sKey, 1);
	this.dateYear = new FormField(oYearItem, sKey, 2);
	this.dateKey = sKey;
}

function NaDPart()
{
	var bReturn = false;
	
	var oField = this.fieldItem;
	var sLibelle = this.fieldKey;
	var nType = this.fieldType;
	
	var sValue = oField.value;
	var nLength = sValue.length;
	
	if((nType == 0)||(nType == 1))
	{
		var sType = ((nType == 0)?("day"):("month"));
		if(nLength < 1)
		{
			alert("Please enter a " + sType + " for the  \"" + sLibelle + "\" field.");
			oField.focus();
			bReturn = true;
		}
		else if(nLength > 2)
		{
			alert("Enter a maximum of two characters to indicate the " + sType + " of the \"" + sLibelle + "\" field.");
			oField.focus();
			bReturn = true;
		}
		else if(!(sValue.isNumeric(false, false, false)))
		{
			alert("The " + sType + " of the \"" + sLibelle + "\" field may only consist of numerical characters.");
			oField.focus();
			bReturn = true;
		}
	}
	else if(nType == 2)
	{
		if(nLength != 4)
		{
			alert("Enter four characters for the year in the \"" + sLibelle + "\" field.");
			oField.focus();
			bReturn = true;
		}
		else if(!(sValue.isNumeric(false, false, false)))
		{
			alert("The year in the \"" + sLibelle + "\" field may only consist of numerical characters.");
			oField.focus();
			bReturn = true;
		}
	}
	else
	{
		bReturn = true;
	}
	
	return bReturn;
}

function NaD()
{
	var oDay = this.dateDay;
	var oMonth = this.dateMonth;
	var oYear = this.dateYear;
	var sLibelle = this.dateKey;
	
	if(oYear.NaDPart()) return true;
	
	var oFieldYear = oYear.fieldItem;
	var sValueYear = oFieldYear.value;
	
	if((sValueYear<1970)||(sValueYear>9999))
	{
		alert("The year in the \"" + sLibelle + "\" field must be a number between 1970 and 9999.");
		oFieldYear.focus();
		return true;
	}
	
	var oFieldMonth = oMonth.fieldItem;
	var sValueMonth = oFieldMonth.value;
	
	if(oMonth.NaDPart()) return true;
	
	if((sValueMonth<1)||(sValueMonth>12))
	{
		alert("The month in the \"" + sLibelle + "\" field must be a number between 1 and 12.");
		oFieldMonth.focus();
		return true;
	}
	
	if(oDay.NaDPart()) return true;
	
	var oFieldDay = oDay.fieldItem;
	var sValueDay = oFieldDay.value;
	
	var nNbDay = getNbDayOfMonth(sValueYear, sValueMonth);
	
	if((sValueDay<1)||(sValueDay>nNbDay))
	{
		alert("The date in the \"" + sLibelle + "\" field must be a number between 1 and "+nNbDay+".");
		oFieldDay.focus();
		return true;
	}
	
	return false;
}

FormField.prototype.NaDPart = NaDPart;
FormDate.prototype.NaD = NaD;

// -------------------------------------------------------------------------------------------
// VERIFICATION DES CHAMPS D'UN FORMULAIRE 1
// -------------------------------------------------------------------------------------------

function validIntField(oInput, nErrBeg, arrErrMsg, nBeg, nEnd)
{
	var nValue = oInput.value;
	var nValueDefault = oInput.defaultValue;
	if (nValue=="")
	{
		alert(arrErrMsg[0]);
		oInput.focus();
		return new Array(nErrBeg, nValue, nValueDefault);
	}
	if (!nValue.isInt())
	{
		alert(arrErrMsg[1]);
		oInput.focus();
		return new Array(nErrBeg+1, nValue, nValueDefault);
	}
	nValue = parseInt(nValue.replace(",", "."));
	if (nBeg != null)
	{
		if (nValue < nBeg)
		{
			alert(arrErrMsg[2]);
			oInput.focus();
			return new Array(nErrBeg+2, nValue, nValueDefault);
		}
	}
	if (nEnd != null)
	{
		if (nValue > nEnd)
		{
			alert(arrErrMsg[3]);
			oInput.focus();
			return new Array(nErrBeg+3, nValue, nValueDefault);
		}
	}
	
	return new Array(0, nValue, parseInt(nValueDefault.replace(",", ".")));
}

function validFloatField(oInput, nErrBeg, arrErrMsg, nBeg, nEnd)
{
	var nValue = oInput.value;
	var nValueDefault = oInput.defaultValue;
	if (nValue=="")
	{
		alert(arrErrMsg[0]);
		oInput.focus();
		return new Array(nErrBeg, nValue, nValueDefault);
	}
	if (!nValue.isFloat())
	{
		alert(arrErrMsg[1]);
		oInput.focus();
		return new Array(nErrBeg+1, nValue, nValueDefault);
	}
	nValue = parseFloat(nValue.replace(",", "."));
	if (nBeg != null)
	{
		if (nValue < nBeg)
		{
			alert(arrErrMsg[2]);
			oInput.focus();
			return new Array(nErrBeg+2, nValue, nValueDefault);
		}
	}
	if (nEnd != null)
	{
		if (nValue > nEnd)
		{
			alert(arrErrMsg[3]);
			oInput.focus();
			return new Array(nErrBeg+3, nValue, nValueDefault);
		}
	}
	
	return new Array(0, nValue, parseFloat(nValueDefault.replace(",", ".")));
}

// -------------------------------------------------------------------------------------------
// VERIFICATION DES CHAMPS D'UN FORMULAIRE 2
// -------------------------------------------------------------------------------------------

function checkName(sNameForm, sNameFieldSocity, sNameFieldCivility, sNameFieldRedondant, sNameFieldFirstN)
{
	var oForm = eval("window.document."+sNameForm);
	var objField = eval("oForm."+sNameFieldSocity);
	var szValue = objField.value;
	var objFieldRedondant = eval("oForm."+sNameFieldRedondant);
	var szValueRedondante = objFieldRedondant.value;
	var objFieldPrenom = eval("oForm."+sNameFieldFirstN);
	var szValuePrenom = objFieldPrenom.value;
	
	if((!(szValue.isValidChar()))&&(!(szValueRedondante.isValidChar())))
	{
		alert("Please complete the \"Company\" field or the \"Name\" field.");
		((szValuePrenom.isValidChar())?(objFieldRedondant.focus()):(objField.focus()));
		return false;
	}
	else
	{
		if((szValuePrenom.isValidChar())&&(!(szValueRedondante.isValidChar())))
		{
			alert("If you complete the \"First name\" field, please complete the \"Second name\" field.");
			objFieldRedondant.focus();
			return false;
		}
		
		if(szValueRedondante.isValidChar())
		{
			var objFieldCiviliteSociete = eval("oForm."+sNameFieldCivility);
			var szValueCiviliteSociete = objFieldCiviliteSociete.options[objFieldCiviliteSociete.selectedIndex].text;
			if(szValueCiviliteSociete == '- ? -')
			{
				alert("You must select a title for this client.");
				objFieldCiviliteSociete.focus();
				return false;
			}
		}
	}
	
	return true;
}

function checkAdress(sNameForm, sNameFieldAdress, sNameFieldCity, sNameFieldZip, sNameFieldCountry, bLarge)
{
	var bReturn = (((checkAdress.arguments.length)==6)?(bLarge):(false));
	var oForm = eval("window.document."+sNameForm);
	var szValue, bCheck;
	
	var objADRESSE_SOCIETE = eval("oForm."+sNameFieldAdress);
	szValue = objADRESSE_SOCIETE.value;	
	bCheck = szValue.isValidChar();
	var objVILLE = eval("oForm."+sNameFieldCity);
	szValue = objVILLE.value;	
	bCheck = ((bCheck)||(szValue.isValidChar()));
	var objCODE_POSTAL = eval("oForm."+sNameFieldZip);
	szValue = objCODE_POSTAL.value;	
	bCheck = ((bCheck)||(szValue.isValidChar()));
	if(bCheck)
	{
		var blnLarge = bReturn;
		
		bReturn = true;
		
		szValue = objADRESSE_SOCIETE.value;
		if(!(blnLarge))
		{
			if(!(szValue.isValidChar()))
			{
				alert("Please complete the \"Address\" field, using at least one character, not including the \"space\" character.");
				objADRESSE_SOCIETE.focus();
				return false;
			}
		}
		
		szValue = objVILLE.value;
		if(!(blnLarge))
		{
			if(!(szValue.isValidChar(3)))
			{
				alert("Please complete the \"City\" field, using at least 3 characters, not including the \"space\" character.");
				objVILLE.focus();
				return false;
			}
		}
		else if(szValue.isValidChar())
		{
			if(!(szValue.isValidChar(3)))
			{
				alert("Please complete the \"City\" field, using at least 3 characters, not including the \"space\" character.");
				objVILLE.focus();
				return false;
			}
		}
		
		var objField = eval("oForm."+sNameFieldCountry);
		if(!(blnLarge))
		{
			szValue = objField.options[objField.selectedIndex].value;
			if(szValue < 1)
			{
				alert("Please complete the \"Country\" field.");
				objField.focus();
				return false;
			}
		}
		
		var nCount = (((objField.options[objField.selectedIndex].text) == "FRANCE")?(5):(4));
		szValue = objCODE_POSTAL.value;
		if(!(blnLarge))
		{
			if(!(szValue.isValidChar(nCount)))
			{
				alert("Please complete the \"Zip code\" field, using at least " + nCount + " characters, not including the \"space\" character.");
				objCODE_POSTAL.focus();
				return false;
			}
			
			if(szValue.isValidChar(11))
			{
				alert("Enter a maximum of 10 characters in the \"Zip code\" field, not including the \"space\" character.");
				objCODE_POSTAL.focus();
				return false;
			}
			
			if(!(szValue.isNumeric(false)))
			{
			    alert("The \"Zip code\" field must contain characters in the range \" 0123456789  \".");
			    objCODE_POSTAL.focus();
				return false;
			}
		}
		else if(szValue.isValidChar())
		{
			if(!(szValue.isValidChar(nCount)))
			{
				alert("Please complete the \"Zip code\" field, using at least " + nCount + " characters, not including the \"space\" character.");
				objCODE_POSTAL.focus();
				return false;
			}
			
			if(szValue.isValidChar(11))
			{
				alert("Enter a maximum of 10 characters in the \"Zip code\" field, not including the \"space\" character.");
				objCODE_POSTAL.focus();
				return false;
			}
			
			if(nCount == 5)
				if(!(szValue.isNumeric(false)))
				{
				    alert("The \"Zip code\" field must contain characters in the range \"0123456789\".");
				    objCODE_POSTAL.focus();
					return false;
				}
			else
				if(!(szValue.isAlphaNumeric(false)))
				{
				    alert("The \"Zip code\" field must contain characters in the range \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".");
				    objCODE_POSTAL.focus();
					return false;
				}
		}
	}
	else if(!(bReturn))
	{
		alert("Please complete the \"Address\" field, using at least 8 characters, not including the \"space\" character.");
		objADRESSE_SOCIETE.focus();
	}
	
	return bReturn;
}

function checkNumero(sNameForm, sNameField, sIntitule, bLarge)
{
	var bReturn = ((checkNumero.arguments.length == 4)?(bLarge):(false));
	var oForm = eval("window.document."+sNameForm);
	
	var objField = eval("oForm."+sNameField);
	var szValue = objField.value;
	if(szValue.isValidChar())
	{
		bReturn = true;
		
		if(!(szValue.isValidChar(8)))
		{
			alert("Please complete the \"" + sIntitule + "\" field, using at least 8 characters, not including the \"space\" character.");
			objField.focus();
			return false;
		}
	
		if(szValue.isValidChar(26))
		{
			alert("Enter a maximum of 25 characters in the \"" + sIntitule + "\" field, not including the \"space\" character.");
			objField.focus();
			return false;
		}
	
		if(!(szValue.isNumeric()))
		{
		    alert("The \"" + sIntitule + "\" field must contain characters in the range \"0123456789 +-()./ \".");
		    objField.focus();
			return false;
		}
	}
	else if(!(bReturn))
	{
		alert("Please complete the \"" + sIntitule + "\" field.");
		objField.focus();
	}
	
	return bReturn;
}

function checkEmail(sNameForm, sNameField, sIntitule, bLarge)
{
	var bReturn = (checkEmail.arguments.length==4)?bLarge:false;
	var oForm = eval("window.document."+sNameForm);
	
	var objField = eval("oForm."+sNameField);
	var szValue = objField.value.trim();
	if(szValue.isValidChar())
	{
		bReturn = false;
		
		var nLen = szValue.length;
		var nArobase = szValue.indexOf("@");
		var nPoint = szValue.lastIndexOf(".");
		
		if (nArobase>0 && nArobase==szValue.lastIndexOf("@") && nPoint>nArobase+1 && nPoint<nLen-2 && 
			szValue.charAt(0)!='.' && szValue.charAt(nArobase-1)!='.' && szValue.charAt(nArobase+1)!='.' && 
			szValue.indexOf("..")<0)
		{
			var szCheckOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-@.";
			for(var i=0;  i<nLen;  i++){if (szCheckOK.indexOf(szValue.charAt(i)) < 0) break;}
			if (i == nLen) bReturn = true;
		}
		
		if (!bReturn)
		{
			alert("Please enter a valid e-mail address.");
			objField.focus();
		}
	}
	else if (!bReturn)
	{
		alert("Please complete the \"" + sIntitule + "\" field.");
		objField.focus();
	}
	
	return bReturn;
}

function checkDate(sNameForm, sNameFieldDay, sNameFieldMonth, sNameFieldYear, sIntitule, bLarge)
{
	var bReturn = ((checkDate.arguments.length == 6)?(bLarge):(false));
	var oForm = eval("window.document."+sNameForm);
	
	var oDay = eval("oForm."+sNameFieldDay);
	var oMonth = eval("oForm."+sNameFieldMonth);
	var oYear = eval("oForm."+sNameFieldYear);
	if((oDay.value.isValidChar())||(oMonth.value.isValidChar())||(oYear.value.isValidChar()))
	{
		dForm = new FormDate(oDay, oMonth, oYear, sIntitule);
		bReturn = !(dForm.NaD());
	}
	else if(!(bReturn))
	{
		alert("Please complete the \"" + sIntitule + "\" field.");
		oDay.focus();
	}
	
	return bReturn;
}

function checkNbPostes(sNameForm, sNameField, sIntitule, bLarge)
{
	var bReturn = (((checkNbPostes.arguments.length) == 4)?(bLarge):(false));
	var oForm = eval("window.document."+sNameForm);
	
	var objField = eval("oForm."+sNameField);
	var szValue = objField.value;
	if(szValue.isValidChar())
	{
		bReturn = true;
		
		if(!(szValue.isNumeric(false)))
		{
			bReturn = false;
			alert("The \"" + sIntitule + "\" field may only contain digits.");
			objField.focus();
		}
	}
	else if(!(bReturn))
	{
		alert("Please complete the \"" + sIntitule + "\" field.");
		objField.focus();
	}
	
	return bReturn;
}

// -------------------------------------------------------------------------------------------
// EVALUATION DES CHANGEMENTS INTERVENUS DANS UN FORMULAIRE
// -------------------------------------------------------------------------------------------

function changeSelect(itemElement)
{
	var bChange = false;
	
	var objOpt = itemElement.options;
	var nLength = objOpt.length;
	for(var i=0; i<nLength; i++)
	{
		var optSelected = objOpt[i].selected;
		var optDefaultSelected = objOpt[i].defaultSelected;
		if(((optSelected)&&(!(optDefaultSelected)))||((optDefaultSelected)&&(!(optSelected))))
		{
			bChange = true;
			break;
		}
	}
	
	return bChange;
}

function changeOption(itemElement)
{
	var bChange = false;
	
	var objOpt = itemElement.options;
	var nLength = objOpt.length, i = 0;
	for(; i<nLength; i++)
	{
		if(objOpt[i].getAttribute("LIST_ID") == 0)
		{
			bChange = true;
			break;
		}
	}
	
	var szFieldName = itemElement.name;
	if((szFieldName != "ARTICLE_SELECTION")&&(!(bChange)))
	{
		var szListAttribute = ((szFieldName == "MODELE_SELECTION")?(szListIdConfigModele):(szListIdConfigOS));
		var blnCouple = ((szFieldName == "MODELE_SELECTION")?true:false);
		var arrayAttribute, szValueTemp, j;
		
		while(szListAttribute != "")
		{
			i = szListAttribute.indexOf("|");
			if(i > -1)
			{
				arrayAttribute = eval("new Array("+szListAttribute.substring(0,i)+")");
				szListAttribute = szListAttribute.substring(i+1,szListAttribute.length);
			}
			else
			{
				arrayAttribute = eval("new Array("+szListAttribute+")");
				szListAttribute = ""
			}
			
			szValueTemp = ((blnCouple)?(arrayAttribute[0]):(arrayAttribute[0].substring(0,arrayAttribute[0].indexOf(";"))));
			
			for(j=0; j<nLength; j++)
				if(objOpt[j].value == szValueTemp) break;
			
			if(j == nLength)
			{
				bChange = true;
				break;
			}
		}
	}
	
	return bChange;
}

function changeForm(arrayOfFields)
{
	var arrayChangeFields = new Array();
	
	if(changeForm.arguments.length > 0)
	{
		var nLength = arrayOfFields.length, i = 0, nCpt = -1;
		var bChange, itemElement, szType, bChecked, bDefaultChecked;
		
		for(; i<nLength; i++)
		{
			bChange = false;
			itemElement = arrayOfFields[i];
			szType = itemElement.type;
			
			if((szType == "hidden")||(szType == "text")||(szType == "textarea"))
				if(itemElement.value.singleOcc() != itemElement.defaultValue.singleOcc())
					bChange = true;
			
			if((szType == "checkbox")||(szType == "radio"))
			{
				bChecked = itemElement.checked;
				bDefaultChecked = itemElement.defaultChecked;
				if((bChecked && !(bDefaultChecked)) || (bDefaultChecked && !(bChecked)))
					bChange = true;
			}
			
			if((szType == "select-one")||(szType == "select-multiple"))
				bChange = ((itemElement.getAttribute("SELECTION") == 1)?(changeOption(itemElement)):(changeSelect(itemElement)));
			
			if(bChange)
			{
				nCpt++;
				arrayChangeFields[nCpt] = itemElement;
			}
		}
	}
	
	return arrayChangeFields;
}

// -------------------------------------------------------------------------------------------
// FONCTION DE TRI D'UN TABLEAU (ORDRE CROISSANT/DECROISSANT SELON PLUSIEURS COLONNES)
// -------------------------------------------------------------------------------------------

function orderArray(nOrder, tabToOrder)
{
	var nLen = tabToOrder.length;
	if(nLen > 1)
	{
		nLen--;
		var bOrder = false;
		var nIndex = nLen, k, i, nTemp;
		
		while((nIndex>0)&&(!bOrder)&&(bOrder=true))
		{
			for(i=0; i<nIndex; i++)
				if(((nOrder == 1)&&(tabToOrder[i + 1]<tabToOrder[i]))||((nOrder == 0)&&(tabToOrder[i + 1]>tabToOrder[i])))
				{
					k = i;
					bOrder = false;
					nTemp = tabToOrder[i];
					tabToOrder[i] = tabToOrder[i + 1];
					tabToOrder[i + 1] = nTemp;
				}
			
			nIndex = k;
		}
	}
}

function orderTab(nOrder, tabToOrder, nCol)
{
	var cArgs = orderTab.arguments;
	var nNbArg = cArgs.length;
	var nLen = tabToOrder.length;
	if((nNbArg > 2)&&(nLen > 1))
	{
		nLen--;
		var bOrder = false;
		var nNbCol = tabToOrder[0].length;
		var i, j, nTemp;
		
		if(nNbArg < 4)
		{
			var nIndex = nLen, k;
			while((nIndex>0)&&(!bOrder)&&(bOrder=true))
			{
				for(i=0; i<nIndex; i++)
					if(((nOrder == 1)&&(tabToOrder[i + 1][nCol]<tabToOrder[i][nCol]))||((nOrder == 0)&&(tabToOrder[i + 1][nCol]>tabToOrder[i][nCol])))
					{
						k = i;
						bOrder = false;
						for(j=0; j<nNbCol; j++)
						{
							nTemp = tabToOrder[i][j];
							tabToOrder[i][j] = tabToOrder[i + 1][j];
							tabToOrder[i + 1][j] = nTemp;
						}
					}
				
				nIndex = k;
			}
		}
		else
		{
			var nNbArg = Math.min(nNbArg, nNbCol+1);
			while((!bOrder)&&(bOrder=true)&&(i = -1))
				while((++i<nLen)&&(j=2))
					if(((nOrder == 1)&&(tabToOrder[i + 1][nCol]<tabToOrder[i][nCol]))||((nOrder == 0)&&(tabToOrder[i + 1][nCol]>tabToOrder[i][nCol])))
					{
						while((++j<nNbArg)&&(tabToOrder[i + 1][cArgs[j]]==tabToOrder[i][cArgs[j]])){}
						if(j == nNbArg)
						{
							bOrder = false;
							for(j=0; j<nNbCol; j++)
							{
								nTemp = tabToOrder[i][j];
								tabToOrder[i][j] = tabToOrder[i + 1][j];
								tabToOrder[i + 1][j] = nTemp;
							}
						}
					}
		}
	}
}

