// validates that the field value string has one or more characters in it
function isNotEmpty(elem) {
    var str = elem.value;
    var re = /.+/;
    if(!str.match(re)) {
        alert("Please fill in the required field.");
        return false;
    } else {
        return true;
    }
}
   
//validates that the entry is a positive or negative number
function isNumber(elem) {
    var str = elem.value;
    var re = /^\d*\.?\d*$/;
    str = str.toString( );
    if (!str.match(re)) {
        alert("Enter only numbers into the field.");
        return false;
    }
    return true;
}

function isInteger(elem) {
    var str = elem.value;
    var re = /^\d*$/;
    str = str.toString( );
    if (!str.match(re)) {
        alert("Enter only integer numbers into the field.");
        return false;
    }
    return true;
}
   
// validates that the entry is 16 characters long when
// input field's maxlength attribute is set to 16
function isLen16(elem) {
    var str = elem.value;
    var re = /\b.{16}\b/;
    if (!str.match(re)) {
        alert("Entry does not contain the required 16 characters.");
        return false;
    } else {
        return true;
    }
}
   
// validates that the entry is formatted as an email address
function isEMailAddr(elem) {
    var str = elem.value;
    var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (!str.match(re)) {
        alert("Verify the email address format.");
        return false;
    } else {
        return true;
    }
}

function validateElem(elem) {
  elem = $(elem);
  var typ = elem.getAttribute('datatype');
  if (!$defined(typ)) {
    var bres = true;
    
    if (bres && elem.hasClass('number'))
      bres = bres && isNotEmpty(elem) && isNumber(elem);
      
    if (bres && elem.hasClass('integer'))
      bres = bres && isNotEmpty(elem) && isInteger(elem);
      
    if (bres && elem.hasClass('email'))
      bres = bres && isEMailAddr(elem);
    
    if (bres && elem.hasClass('notempty'))
      bres = bres && isNotEmpty(elem);
      
    return bres;
  } 
    
  typ = typ.toLowerCase()
  
  if (typ=="number")
    return isNotEmpty(elem) && isNumber(elem);
  else if (typ=="integer")
    return isNotEmpty(elem) && isInteger(elem);
  else if (typ=="email")
    return isEMailAddr(elem);
  else if (typ=="notempty")
    return isNotEmpty(elem);
  else 
    return true;   
}

function validateForm(form) {
  var objForm = $(form);
  var formElements = $$(objForm.elements);
  var result = true;
  
  var i = 0;
  while ( result && (i < formElements.length) )
  {
  	if (formElements[i].disabled && formElements[i].disabled == true)
  		continue;
  		
  	result = result && validateElem(formElements[i]);
  	if (!result) {
  	  formElements[i].focus();
  	  formElements[i].select();
  	}
  	
    i++;	 
  }        
  
  return result;
}
