

// create object
function formValidator()
{
	// set up array to hold error messages
	//debugger;
	this.errorList = new Array;
	// set up object methods
	this.isEmpty = isEmpty;
	this.isNumber = isNumber;
	this.isAlphabetic = isAlphabetic;
	this.isAlphaNumeric = isAlphaNumeric;
	this.isWithinRange = isWithinRange;
	this.isEmailAddress = isEmailAddress;
	this.isChecked = isChecked;
	this.raiseError = raiseError;
	this.numErrors = numErrors;
	this.displayErrors = displayErrors;
	this.isFixedLength = isFixedLength;
	this.isValidData = isValidData;
}

// check to see if input is whitespace only or empty
function isEmpty(val)
{
	if (val.match(/^\s+$/) || val == "")
	{
		return true;
	}
	else
	{
		return false;
	}
}

// check to see if input is number
// 2005 04 11: modificato il controllo in modo da accettare solo numeri e virgole;
//             isNaN non distingue tra "." e ",";
//             per me un formato valido e' xxx,yy (virgola come separatore)
function isNumber(sText)
{
	//if (isNaN(val))
	//{
	//	return false;
	//}
	//else
	//{
	//	return true;
	//}
	var ValidChars = "0123456789,";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;

}

// check to see if input is alphabetic
function isAlphabetic(val)
{
	if (val.match(/^[a-zA-Z]+$/))
	{
		return true;
	}
	else
	{
		return false;
	}
}


// check to see if input is alphanumeric
function isAlphaNumeric(val)
{
if (val.match(/^[a-zA-Z0-9]+$/))
{
return true;
}
else
{
return false;
}
}
// check to see if value is within range
function isWithinRange(val, min, max)
{
	if (val >= min &val <= max)
	{
		return true;
	}
	else
	{
		return false;
	}
}

// check to see if input is a valid email address
function isEmailAddress(val)
{
	//if (val.match(/^([a-zA-Z0-9]) + ([.a-zA-Z0-9_-])*@ ([a-zA-Z0-9_-])+ (.[a-zA-Z0-9_-]+)+/))
	if (val.match(/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/))
	{
		return true;
	}
	else
	{
		return false;
	}
}
// check to see if form value is checked
function isChecked(obj)
{
	if (obj.checked)
	{
		return true;
	}
	else
	{
		return false;
	}
}

// check fixed length
function isFixedLength (val, fixedLength)
{
	if (val.length == fixedLength)
	{	
		return true;
	}
	else
	{
		return false;	
	}
}


// Inizio Controllo formato data
function isValidData(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;

   err = 0;
   DateValue = DateField.value;
   /* Delete all chars except 0..9 */
   
   if ( isNumber(DateValue.substr(0,1))==false )
   //if (checkstr.indexOf(DateValue.substr(0,1)) < 0)
   {
	   err = 99; // primo carattere non numerico // Test non indispensabile
   }

   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
	  
	 day =1;
     err = 22;
   }

   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }

   // DEBUG !!
	//   alert(err);

   /* if 00 ist entered, no error, deleting the entry */
   if ( (day == 0) && (month == 0) && (year == 00)  )
   {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }

   //  ATTENZIONE  DA TOGLIERE !!!
   //err =99;


   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {
      DateField.value = day + seperator + month + seperator + year;
      return true;
   }
   /* Error-message if err != 0 */
   else {
      return false;
   }
}

// Fine Controllo formato data 
// display all errors
// iterate through error array and print each item
function displayErrors()
{
   errorLog = "";
	for (x=0; x<this.errorList.length; x++)
	{
		errorLog += "Error: " + this.errorList[x] + "\n";
	}
		alert(errorLog);
	
	}
	
// add an error to error list
function raiseError(msg)
	{
	this.errorList[this.errorList.length] = msg;
}

// return number of errors in error array
function numErrors()
{
	return this.errorList.length;
}
// end object
