// fields currently validated :
//
// Date Field . prefix "xdat" , format: "DD-MMM-YYYY"
// Integer Field . prefix "xint" , format "9 ... 999"
// Monetary Field . prefix "xmon" , format "9 ... 9.99"
// Email Address Field . prefix "xema" , format [email address]
// Required Field . prefix "xreq" .
// Anti spam check. "http" references rejected . prefix "xsp1" .
//
// multiple validation prefixes can be placed at the *beginning* of a field name.
// e.g. "xreqxdatWhatever" implies a required date field. 



var arrGrpProp = new Array();
var errorStatus=false;
var errorMsg="";

function SubmitPage(f)
{

var i=0;

inputArray = createArrayElements(f)

for (i=0;i<inputArray.length;i++)
{
	validateField(inputArray[i])
	if (errorStatus==true)
	{
			i=inputArray.length
	}
}
if (errorStatus == true)
{
	alert(errorMsg);
	errorStatus=false;
	return false;
	}
else
{
	return true;
}
}

function createArrayElements(f)
  {
   var arrEl = new Array();
   var i = 0;
   var j = 0;
   var LastName = "at beginning of form";

   for (i=0;i<f.length;i++)
   {
   	if (!f[i].name)
	{
		alert("name attribute missing "+LastName)
	}
	else
	{
		LastName = "after "+f[i].name
	}
		 	
     if (f[f[i].name].length)
     {
       if (!f[f[i].name].options)
        {
         arrGrpProp[f[i].name] = new Array("name","type");
         arrGrpProp[f[i].name]['name'] = f[i].name
         arrGrpProp[f[i].name]['type'] = f[i].type
         arrEl[arrEl.length] = f[f[i].name]
         i+=f[f[i].name].length-1
        }
       else
         arrEl[arrEl.length] = f[i]
     }
     else
      arrEl[arrEl.length]=f[i]
   }
   return arrEl
  }  
  
function validateField(field)
{
var fieldValue
var fieldType

if (!field.name && field.length)
{
  fieldName = arrGrpProp[field[0].name]['name']
  fieldType = arrGrpProp[field[0].name]['type']
}
else
{
  fieldName = field.name
  fieldType = field.type
}

if (fieldType.toLowerCase()=="select-one" || fieldType.toLowerCase()=="select-multiple")
  {
   fieldValue = getSelected(field)
  }
else if (fieldType.toLowerCase()=="radio" || fieldType.toLowerCase()=="checkbox")
  {

   fieldValue = getChecked(field)
  }
else
  {
   fieldValue = field.value
  }
  

outerloop:
for (i=0;i<fieldName.length-3;i+=4)
{
fieldPrefix = fieldName.slice(i,i+4)
switch(fieldPrefix.toLowerCase())
{
	case "xdat" :
		if (fieldValue.length>0) validateDAT(fieldValue)
		break;

	case "xint" :
		if (fieldValue.length>0) validateINT(fieldValue)
		break;

	case "xmon" :
		if (fieldValue.length>0) validateMON(fieldValue)
		break;

	case "xema" :
		if (fieldValue.length>0) validateEMA(fieldValue)
		break;

	case "xreq" :
		validateREQ(fieldValue)
		break;

	case "xsp1" :
		validateXSP1(fieldValue)
		break;

	default:
		break outerloop;
}
}


if (errorStatus==true)
{
	if (field[0])
	{
		field[0].focus()
	}
	else
	{
		field.focus()
	}
}
	
}  

function getSelected(item) //input = Select
{
 var i=0
 var tmpSelected = ""
 for (i=0; i<item.options.length; i++)
  if (item.options[i].selected)
  {
    tmpSelected += item.options[i].value
  }
 return tmpSelected
}

function getChecked(item)// input = Radio or checkbox
{
 var i=0
 var tmpChecked = ""
 var fieldName = ""
 
 if (!item[0])
 {
//   fieldName = item.name
   if (item.checked)  
     tmpChecked = item.value
   else 
     tmpChecked=""
 }
 else
 {
//   fieldName = item[0].name
   for (i=0; i<item.length; i++)
   {
     if (item[i].checked==true)
       tmpChecked+=item[i].value + ", "
   }
  tmpChecked = tmpChecked.slice(0,tmpChecked.length-2) // remove last "," and space
 }
 return tmpChecked
}

function validateDAT(fieldValue)
{
var regexppat = /^((31(?!-(FEB|APR|JUN|SEP|NOV)))|((30|29)(?!-FEB))|(29(?=-FEB-(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\d|2[0-8])-(JAN|FEB|MAR|MAY|APR|JUL|JUN|AUG|OCT|SEP|NOV|DEC)-((1[6-9]|[2-9]\d)\d{2})$/i;
var matchArray = fieldValue.match(regexppat);
if (matchArray==null)
{
errorMsg ="Invalid date and/or format.\nCorrect format = DD-MMM-YYYY"
errorStatus=true;
}
}

function validateINT(fieldValue)
{
var regexppat = /^\d*$/
var matchArray = fieldValue.match(regexppat);
if (matchArray==null)
{
errorMsg ="Invalid integer field. Correct format = 9 ... 999"
errorStatus=true;
}
}

function validateMON(fieldValue)
{
var regexppat = /^(\d*)(\.\d{2})$/
var matchArray = fieldValue.match(regexppat);
if (matchArray==null)
{
errorMsg ="Invalid monetary field. Correct format = 9 ... 9.99"
errorStatus=true;
}
}

function validateEMA(fieldValue)
{
var regexppat = /^(\w|[-])+(\.(\w|[-])+)*@((\[([0-1]?\d?\d|2[0-4]\d|25[0-5])\.([0-1]?\d?\d|2[0-4]\d|25[0-5])\.([0-1]?\d?\d|2[0-4]\d|25[0-5])\.([0-1]?\d?\d|2[0-4]\d|25[0-5])\])|((([a-zA-Z0-9])+(([-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([-])+([a-zA-Z0-9])+)*))$/
var matchArray = fieldValue.match(regexppat);
if (matchArray==null)
{
errorMsg ="Invalid email address."
errorStatus=true;
}
}

function validateREQ(fieldvalue)
{
if (fieldvalue.length==0)
{
errorMsg ="A required field has not been filled in."
errorStatus=true;
}
}

function validateXSP1(fieldValue)
{
var regexppat = /http:/i;
var matchArray = fieldValue.match(regexppat);
if (matchArray!=null)
{
errorMsg ="http references not allowed in this field"
errorStatus=true;
}
}

