//---
function formValidator(){
  this.fmObj = false;
  this.tags = false;
  this.menu = false;
  this.area = false;
  this.selectThis = false;
  this.message = Array();
// Start by Collecting the Input object Reference
  this.start = function(fmID){
	var name = false, forms = false;
    for(i=0; i < document.forms.length; i++){
	  name = (document.forms[i].id)?document.forms[i].id:document.forms[i].name;
	  if(name == fmID){
		this.fmObj = document.forms[i];
		break;
	  }
	}
	//---
	if(this.fmObj){
	 this.tags = this.fmObj.getElementsByTagName('input');
	 this.menu = this.fmObj.getElementsByTagName('select');
	 this.area = this.fmObj.getElementsByTagName('textarea');
	 return true;
	}
	return false;
  };
// Get Arguments
  this.getArg = function(obj, argName){
    var val = false;
    eval('val=obj.'+argName+';');
    if(val !== false && val != 'undefined' && val != null){ return val;}
    return false;
  };
// Locate a specified Input Object
  this.getObj = function(objName){
	var name = false;
    for(i=0; i < this.tags.length; i++){
	  name = (this.tags[i].id)?this.tags[i].id:this.tags[i].name;
	  if(name == objName){ return this.tags[i];}
	}
	for(i=0; i < this.menu.length; i++){
	  name = (this.menu[i].id)?this.menu[i].id:this.menu[i].name;
	  if(name == objName){ return this.menu[i];}
	}
    for(i=0; i < this.area.length; i++){
	  name = (this.area[i].id)?this.area[i].id:this.area[i].name;
	  if(name == objName){ return this.area[i];}
	}
	return false;
  };
// Check if the Input is enterd ?
  this.isValid = function(obj){
	var name = this.getArg(obj, 'name');
	var minL = this.getArg(obj, 'minimumLength');
	var maxL = this.getArg(obj, 'maximumLength');
	var objID = this.getArg(obj, 'id');
	obj = this.getObj(objID);
	if(obj.value == '' || obj.value == null || obj.value == 'undefined'){
	  this.setMessage(objID, name + ' is Required!');
	  return false;
	}
	if(minL && obj.value.length < minL){
	  this.setMessage(objID, name + ' must contain atleast '+minL+' charactors!');
	  return false;
	}
	if(maxL && obj.value.length > maxL){
	  this.setMessage(objID, name + ' must not contain more than '+maxL+' charactors!');
	  return false;
	}
	return true;
  };
// Check if is Email Address
  this.isEmail = function(obj){
	var name = this.getArg(obj, 'name');
	var required = this.getArg(obj, 'required');
	var objID = this.getArg(obj, 'id');
	obj = this.getObj(objID);
    if(required && this.isValid({id:objID, name:name})){
	  if(obj.value == '' || obj.value == null || obj.value == 'undefined'){
	    this.setMessage(objID, name + ' is not a valid Email Address!');
	    return false;
	  }
	  var rExp = new RegExp(/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/);
	  if(!rExp.exec(obj.value)){
	    this.setMessage(objID, name + ' is not a valid Email Address!');
	    return false;
	  }
	}
	return true;
  };

// Check if is a Number
  this.isNumber = function(obj){
	var name = this.getArg(obj, 'name');
	var required = this.getArg(obj, 'required');
	var minValue = this.getArg(obj, 'minimumValue');
	var maxValue = this.getArg(obj, 'maximumValue');
	var objID = this.getArg(obj, 'id');
	obj = this.getObj(objID);
	if(required){
	  var x = this.isValid({id:objID, name:name});
	}else{
	  x = true;
	}
    if(!x){ return false;}
	if(obj.value == '' || obj.value == null || obj.value == 'undefined'){
	  this.setMessage(objID, name + ' is not a valid Number!');
	  return false;
	}
	if(isNaN(obj.value)){
	  this.setMessage(objID, name + ' is not a valid Number!');
	  return false;
	}
	if(minValue !== false && !isNaN(minValue) && obj.value < minValue){
	  this.setMessage(objID, name + ' must be a Number greater than or equal to '+minValue+'!');
	  return false;
	}
	if(maxValue !== false && !isNaN(maxValue) && obj.value > maxValue){
	  this.setMessage(objID, name + ' must be a Number less than or equal to '+maxValue+'!');
	  return false;
	}
	return true;
  };
// Check if the any Option other than the Default one is Selected
  this.isSelected = function(obj){
	var name = this.getArg(obj, 'name');
	var defaultIndex = this.getArg(obj, 'defaultIndex');
	var defaultText = this.getArg(obj, 'defaultText');
	var objID = this.getArg(obj, 'id');
	obj = this.getObj(objID);
	if(obj.selectedIndex < 0){
	  this.setMessage(objID, name + ' is not selected!');
	  return false;
	}
	if(defaultIndex === obj.selectedIndex){
	  this.setMessage(objID, name + ' is not selected!');
	  return false;
	}
	var text = obj.options[obj.selectedIndex].text.toLowerCase();
	if(defaultText && text == defaultText.toLowerCase()){
	  this.setMessage(objID, name + ' is not selected!');
	  return false;
	}
	return true;
  };
//---
  this.setMessage = function(id, message){
	if(!this.selectThis){ this.selectThis = id;}
	this.message.push(message);
	return true;
  };
// Check if is Okay and Set the Message if told
  this.isOkay = function(obj){
	if(this.message.length <= 0){ return true;}
	var errorHolder = false;
	if(this.selectThis){ try{this.getObj(this.selectThis).focus();}catch(e){}}
	if(obj){ eval("errorHolder = " + "document.getElementById('" + this.getArg(obj, 'showIn') + "');");}
	if(errorHolder){
	  errorHolder.innerHTML = "-&gt;&nbsp;&nbsp;" + this.message.join("<br />-&gt;&nbsp;&nbsp;");
	  return false;
	}else{
	  alert("+ "+this.message.join("\n+ "));
	  return false;
	}
	return true;
  };
};
//---

