<!--  Functions and variables for generic testing of forms -->
var IS_NUMERIC 		= 1;
var IS_POSITIVE		= 2;
var IS_STRICT_POSITIVE 	= 3;
var IS_NEGATIVE		= 4;
var IS_STRICT_NEGATIVE	= 5;
var IS_PERCENTAGE	= 6;
var IS_FILLED		= 7;
var IS_EMAIL		= 8;
var IS_CHECKED		= 9;
var IS_INTEGER		= 10;
var IS_NUM_DAY		= 11;
var IS_NUM_MONTH	= 12;
var IS_NUM_HOUR24	= 13;
var IS_NUM_YEAR		= 14;
var IS_RB_CHECKED	= 15;
var IS_ZIP_CODE         = 16;
var IS_NUM_MINUTE       = 17;
var HAS_TWO_DECIMALS    = 18;
var IS_AREA_1000	= 19;
var IS_AREA_500		= 20;
var IS_AREA_4000	= 21;
var IS_AREA_100		= 22;
var IS_NUMERIC_COMMA_TOLERANT =23;
var HAS_FOUR_DECIMALS   = 24;

<!-- Generic function that tests the validity of given fields -->
<!-- in comparison to the tests put in the array created in the prepareTestArray function () -->
function isFormValid(alertMessage)
{
   return isFormValidForTestArray(prepareTestArray(alertMessage));
}
<!-- Generic function that tests the validity of given fields -->
<!-- in comparison to the tests of the array passed as a parameter -->
function isFormValidForTestArray(globalTestArray)
{
   if (globalTestArray.length==0)
   {
   	 return true;
   }
   var isValid = true;
   var iCount=0;
   do
   {
   	var widget = globalTestArray[iCount][0];
   	var field;
   	if( widget.type=='select-one')
   	{
   		field = widget.options[widget.options.selectedIndex];
   	}
   	else
   	{
		field=widget;
   	}
   	
   	if( !passTest(field,globalTestArray[iCount][1]) )
   	{
 	  	alert(globalTestArray[iCount][2]);
 	  	isValid = false;
   	  	if (globalTestArray[iCount][1] != IS_RB_CHECKED)
 	  	{
 	  		widget.focus();
 	  	}
 	/*
 	  	else
 	  	{
	 	  	if (globalTestArray[iCount][3]!=null)
	 	  	{
	 	  	   window.location=globalTestArray[iCount][3];
	 	  	}
 	  	}
 	*/
 	}
   	iCount++;
   }
   while( isValid==true && iCount<globalTestArray.length)
   
   return isValid;
}
<!-- Tests whether a field is numeric -->
function isNumeric(field)
{
   return (field.value==null || !isNaN(field.value))
}
<!-- Tests whether a field is numeric but accept a comma as decimal separator-->
function isNumericCommaTolerant(field)
{
	field.value=field.value.replace(',','.');
	return(isNumeric(field));	
}
<!-- Tests whether a field is positive (WARNING: its numericity must be tested separately) -->
function isPositive(field)
{
   return (field.value==null || field.value=="" || (field.value>=0))
}
<!-- Tests whether a field is strictly positive (WARNING: its numericity must be tested separately) -->
function isStrictPositive(field)
{
   return (field.value==null || field.value=="" || (field.value>0))
}
<!-- Tests whether a field is negative (WARNING: its numericity must be tested separately) -->
function isNegative(field)
{
   return (field.value==null || field.value=="" || (field.value<=0))
}
<!-- Tests whether a field is strictly negative (WARNING: its numericity must be tested separately) -->
function isStrictNegative(field)
{
   return (field.value==null || field.value=="" || (field.value<0))
}
<!-- Tests whether a field has two or less decimals (WARNING: its numericity must be tested separately) -->
function hasTwoDecimals(field)
{
   field.value=field.value.replace(',','.');
   if ((field.value.indexOf('.')+1)<=0) {
         field.value=field.value+'.';
   }
   return (field.value==null || field.value=="" || !((field.value.substring(fieldValue.indexOf('.')+1, field.value.length).length)>2));
}
<!-- Tests whether a field has four or less decimals (WARNING: its numericity must be tested separately) -->
function hasFourDecimals(field)
{
   field.value=field.value.replace(',','.');
   if ((field.value.indexOf('.')+1)<=0) {
         field.value=field.value+'.';
   }
   return (field.value==null || field.value=="" || !((field.value.substring(field.value.indexOf('.')+1, field.value.length).length)>4));
}
<!-- Tests whether a field is a percentage (WARNING: its numericity must be tested separately) -->
function isPercentage(field)
{
   var v = field.value;
   if(v==null || v=="")
   {
     return true;
   }
   var f = parseFloat(v);
   return (f>=0 && f<=100);
}
<!-- Tests whether a field is a percentage (WARNING: its numericity must be tested separately) -->
function isPercentageNotRestricted(field)
{
   var v = field.value;
   if(v==null || v=="")
   {
     return true;
   }
   var f = parseFloat(v);
   return (f>=0);
}
<!-- Tests whether a field is filled -->
function isFilled(field)
{
   return (field.value!=null && field.value!="")
}

<!-- Tests whether a filled is a zip code -->
function isZipCode(field)
{
   return (field.value.length>=2)
}

function isEmail(field)
{
   if(!isFilled(field))
   {
     return true;
   }
   
   
   var emailad=field.value;
   var exclude=/[^@\-\.\w_]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
   //var check=/@[\w\-]+\./;
   //var checkend=/\.[a-zA-Z]{2,3}$/;

   var check=/@[\w\-]+/;

   //if(((emailad.search(exclude) != -1)||(emailad.search(check)) == -1)||(emailad.search(checkend) == -1))
   if(((emailad.search(exclude) != -1)||(emailad.search(check)) == -1))
   {
	return false;
   }
   else
   {
	return true;
   }
}

function isEmailPerso(field)
{
   var emailad=field.value;
   var exclude=/[^@\-\.\w_]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
   var check=/@[\w\-]+\./;
   var checkend=/\.[a-zA-Z]{2,3}$/;

   if(((emailad.search(exclude) != -1)||(emailad.search(check)) == -1)||(emailad.search(checkend) == -1))
   {
	return false;
   }
   else
   {
	return true;
   }
}

function isChecked(field)
{
  return (field.checked)  
}
function isInteger(field)
{
  v=field.value;
  return isNumeric(field)&&(parseInt(v,10)==parseFloat(v));
}
function isNumDay(field)
{
   if(!isInteger(field))
   {
   	return false;
   }
   var v = parseInt(field.value,10);
   return ((v>0) && (v<32));
}

function isNumMonth(field)
{
   if(!isInteger(field))
   {
   	return false;
   }
   var v = parseInt(field.value,10);
   return ((v>0) && (v<13));
}
function isNumHour24(field)
{
  if(!isInteger(field))
  {
  	return false;
  }
  var v = parseInt(field.value,10);
  return ((v>=0) && (v<25));
}
function isNumYear(field)
{
  if(!isInteger(field))
  {
  	return false;
  }
  var v = parseInt(field.value,10);
  return (v>0);
}
function isNumMinute(field)
{
  if(!isInteger(field))
  {
  	return false;
  }
  var v = parseInt(field.value,10);
  return ((v>=0) && (v<60));
}

function isRbChecked(field)
{
  var expr = 'field[0].checked';
  
  for (i=1;i<field.length;i++) {
  	expr+= ' || field[' + i + '].checked';
  }; 
  return (eval(expr));
}

<!-- Function to test whether the size of a textarea is not too long -->
function isSizeValid(field,iSize,errorMsg)
{
	if(field.value.length>iSize)
	{
		if(errorMsg!=null)
		{
			alert(errorMsg);
		}
		return false;
	}
	else
	{
		return true;
	}
}

function isSizeAreaValid(field, iSize) {
	return (field.value.length<=iSize);
}


<!-- Function that actually calls the test functions -->
function passTest(field, iTestType)
{
   if(iTestType==IS_NUMERIC)
   {
   	return isNumeric(field);
   }
   if(iTestType==IS_POSITIVE)
   {
   	return isPositive(field);
   }
   if(iTestType==IS_STRICT_POSITIVE)
   {
   	return isStrictPositive(field);
   }
   if(iTestType==IS_NEGATIVE)
   {
   	return isNegative(field);
   }
   if(iTestType==IS_STRICT_NEGATIVE)
   {
   	return isStrictNegative(field);
   }
   if(iTestType==IS_PERCENTAGE)
   {
   	return isPercentage(field);
   }
   if(iTestType==IS_FILLED)
   {
   	return isFilled(field);
   }
   if(iTestType==IS_EMAIL)
   {
   	return isEmail(field);
   }
   if(iTestType==IS_CHECKED)
   {
   	return isChecked(field);
   }
   if(iTestType==IS_INTEGER)
   {
   	return isInteger(field);
   }
   if(iTestType==IS_NUM_DAY)
   {
   	return isNumDay(field);
   }
   if(iTestType==IS_NUM_MONTH)
   {
   	return isNumMonth(field);
   }
   if(iTestType==IS_NUM_HOUR24)
   {
   	return isNumHour24(field);
   }
   if(iTestType==IS_NUM_YEAR)
   {
   	return isNumYear(field);
   }
   if(iTestType==IS_RB_CHECKED)
   {
   	return isRbChecked(field);
   }
   if(iTestType==IS_ZIP_CODE)
   {
   	return isZipCode(field);
   }
   if(iTestType==IS_NUM_MINUTE)
   {
   	return isNumMinute(field);
   }
   if(iTestType==HAS_TWO_DECIMALS)
   {
   	return hasTwoDecimals(field);
   }
   if(iTestType==HAS_FOUR_DECIMALS)
   {
   	return hasFourDecimals(field);
   }
   if(iTestType==IS_AREA_1000)
   {
   	return isSizeAreaValid(field,1000);
   }
   if(iTestType==IS_AREA_500)
   {
   	return isSizeAreaValid(field,500);
   }
   if(iTestType==IS_AREA_4000)
   {
   	return isSizeAreaValid(field,4000);
   }
   if(iTestType==IS_AREA_100)
   {
   	return isSizeAreaValid(field,100);
   }
   if(iTestType==IS_NUMERIC_COMMA_TOLERANT)
   {
   	return isNumericCommaTolerant(field);
   }
   alert("Test type " + iTestType +" not handled!");
   return false;
}

<!-- Functions for building the test array -->

<!-- Adds an element at the end of an array -->
function add2(theArray, newElement)
{
   theArray[theArray.length] = newElement;   
   return theArray;
}
<!-- Add a test to the test array : the test array must be passed as the first argument -->
<!-- Must be used for radiobuttons and checkboxes -->
<!-- The anchor is not used for all widgets -->
function addTest(arr,name,test_const,msg,anchor)
{
   // For debugging, uncomment the following lines
   /*
   var toto = eval(name);
   if( toto==null)
   {
	alert('Error on widget name :' + name);
   }
   */
   return add2(arr, new Array(eval(name),test_const,msg,anchor));
}
function addTests()
{
   var arr = arguments[0];
   var n = arguments[1];
   var iCount;
   var hasAnchor=false;
   if(arguments.length%2!=0)
   {
   	hasAnchor=true;
   }
   for(iCount=0;iCount<((arguments.length)-2)/2;iCount++)
   {
   	if(hasAnchor==true)
   	{
   		arr = addTest(arr,n,arguments[2*iCount+2],arguments[2*iCount+3],arguments[arguments.length-1]);
   	}
   	else
   	{
   		arr = addTest(arr,n,arguments[2*iCount+2],arguments[2*iCount+3]);
   	}
   }
   return arr;
}
function addTestForMultipleFields()
{
   var arr = arguments[0];
   var n = arguments[1];
   var msg = arguments[2];
   var iCount;
   for(iCount=0;iCount<((arguments.length)-3);iCount++)
   {
   	arr = addTest(arr,arguments[3+iCount],n,msg);
   }
   return arr;
}

<!-- Generic functions -->

function notEmpty(myValue, message)
{
	if ((myValue == null) || (myValue == ""))
	{
		alert(message);
		return false;
	}
	else
		return true;
}

function notEmptyFocus(myTxtField, message)
{
	if ((myTxtField.value == null) || (myTxtField.value == ""))
	{
		alert(message);
		myTxtField.focus();
		return false;
	}
	else
		return true;
}

function isChecked(myCheckBox, message)
{
	if (!myCheckBox.checked)
	{
		alert(message);
		return false;
	}
	else
		return true;
}

function isChecked(myCheckBox)
{
	if (!myCheckBox.checked)
		return false;
	else
		return true;
}

function isNotChecked(myCheckBox, message)
{
	if (myCheckBox.checked)
	{
		alert(message);
		return false;
	}
	else
		return true;
}

// Fonction qui vérifie qu'un caractère est numérique
function isNumber(digit)
{
	return (digit >="0" && digit <="9")
}


// Fonction qui vérifie qu'une chaine est numérique
function isStringDigit(myTxtField, message)
{
	for (i=0; i<myTxtField.value.length; ++i)
	{
		// récupère chacun des caractères
		var carac = myTxtField.value.charAt(i);
		if (!isNumber(carac))
		{
			alert(message);
			myTxtField.focus();
			return false;
		}
	}
	return true;
}

//function which rounds up numbner to specified number of digit
function bestRound(num,nbdigit) {
	rounder = Math.pow(10,nbdigit);
	return (Math.round(num*rounder))/rounder;
}

function checkTRANSlogin(myForm, message, m2)
{
	v1 = myForm.txtUserIdent.value;
	
	
	v2 = myForm.txtPassword.value;
	//m2 = 'Veuillez entrez votre mot de passe';
	
	if (notEmpty(v1, message) && notEmpty(v2,m2))
		return true;
	else 
		return false;	
}



