//Created by Alexis Correa
//Sr. Web Programmer @ http://www.saheltech.com
//

//=========================================================================================================
var FormValidator={
 frm: null,
  trimchar: function (inputStr, needle){
	  if (needle.length){
	  while(''+inputStr.charAt(0)==needle){inputStr=inputStr.substring(1,inputStr.length);}
	  while(''+inputStr.charAt(inputStr.length-1)==needle){ inputStr=inputStr.substring(0,inputStr.length-1); }
	   }
	  return inputStr;
  },
  
  validEmail: function (fld) {
	 var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	 if(reg.test(fld.value) == false) {
		 alert("Invalid Email Address");
		 return false;
		 }
	 else { return true; }
  },
  
  isEmpty: function (fld){
  fld.value=this.trimchar(fld.value,"\n");
  fld.value=this.trimchar(fld.value," ");
  if(fld.value==''){return true; } 
  else { return false; }  
  },
  
  validNumber: function (fld){
  if(isEmpty(fld, msge)){ return false; }
  else if (isNaN(fld.value)){ 
	  alert("Must be number. No comma please!");  
	  return false; 
  } 
  else{ return true; }
  },
  
  validDate:function (fld){
   var reg=/^\d{4}\-\d{1,2}\-\d{1,2}$/;
  if(this.isEmpty(fld)){return false; }
  else if(!reg.test(fld.value)){
  alert('Invalid date format! (YYYY-mm-dd)');
  return false;
  }
  else { return true; }
  
  },
  
  validURL: function(fld){
	var reg= /^http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}$/;
	if(this.isEmpty(fld)){return false; }  
	else if(!reg.test(fld.value)){
	alert("Invalid Web Address!");	
	return false;
	}
	else{return true; }
	
  },
  
  validPhone: function(fld){
	  
	 return false; 
  },
    
	validZipcode: function(fld){
		
	 return false; 
  },
  
  validRadio: function (fld){
  var onechecked=false;
  if(fld.length>0){
  for(i=0; i<fld.length; i++){
	  if(fld[i].checked && fld[i].value!=''){
			 onechecked=true; break; 
		  }
		}
	  }
  else {
	  if(fld.checked){onechecked=true; } 
	  }
  return onechecked;	
  },
  
  validCheckbox: function (fld){
  var onechecked=false;
  if(fld.length>0){
  for(i=0; i<fld.length; i++){
	  if(fld[i].checked && fld[i].value!=''){
			 onechecked=true; break; 
		  }
		}
	  }
  else {
	  if(fld.checked){onechecked=true; } 
	  }
  return onechecked;	  
	  
  },

  validSelect: function (fld, msge){
  if(this.trimchar(fld[fld.selectedIndex].value,' ')!=''){return true; }
  else {alert(msge); return false; }
  },

 labelText: function (fld){
  var fieldname=this.fieldName(fld);
	if(fieldname!=false){
		if($(this.frm).has("label[for="+fieldname+"]")){
		  return $("label[for="+fieldname+"]").html();
		}
		else {return false; }
	}
	else {
	  return false;	
	}
 },   
 
fieldName: function (fld){
	if(fld!=null && fld!='undefined'){return fld.name; }
    return false;	 
  }, 
  
fieldType:function (fld){
  if(fld!=null && fld!='undefined'){return fld.type; }
  return false;	
  },
  
dataType:function(fld){  
return $(fld).attr("title");
  },
 
validData:function (fld){
  if(this.dataType(fld)=='email' && !this.validEmail(fld)){ return false; }
  else if(this.dataType(fld)=='phone' && !this.validPhone(fld)){ return false; }
  else if(this.dataType(fld)=='number' && !this.validNumber(fld)){ return false; }
  else if(this.dataType(fld)=='url' && !this.validURL(fld)){ return false; }
  else if(this.dataType(fld)=='date' && !this.validDate(fld)){ return false; }
  else if(this.dataType(fld)=='zipcode' && !this.validZipcode(fld)){ return false; }


return true;
 },
 
  validField: function (fld){
  if(fld!=null && fld!='undefined'){
  var fieldtype=this.fieldType(fld);
  var labeltext=this.labelText(fld);
  var Msge=(!labeltext)?'':labeltext;

		if(fieldtype!=false){
			 switch(fieldtype){  
				 case 'text':
				 if(this.isEmpty(fld)){ alert(Msge+' Cannot be left blank'); fld.focus(); return false; }
				 else if(!this.validData(fld)){ fld.focus(); return false; }
				 break;
				 case 'select':
				 if(!this.validSelect(fld)){ alert('Please make a selection'); fld.focus(); return false; }
				 break;
				 case 'hidden':
				 if(this.isEmpty(fld)){ alert("The hidden field "+fld.name+"\n cannot be left blank"); return false; };
				 break;
				 case 'file':
				  if(!this.validSelect(fld, 'Please select the file to upload')){fld.focus(); return false; }
				 break;
				 case 'radio':
				 if(!this.validRadio(fld)){ alert('Please select an option'); fld[0].focus(); return false; }
				 break;
				 case 'checkbox':
				 if(!this.validCheckbox(fld)){ alert('Please select an option'); fld[0].focus(); return false; }
				 break;
				 case 'textarea':
				 if(this.isEmpty(fld)){ alert('Please enter some text'); return false; }
				 break;
				 default:
				 alert('Field type undefined');
				 return false;
			 }//end switch  
			 
		  return true;
		}
		else {
		   alert('Cannot determine the Field Type: '+fld.name);
		   return false;
		}
	}
	else{
	return false;
	}
	  
  },
  
  validForm: function (frm){
  this.frm=frm; 
  var valid=false;
  var curfield;
  if(frm.requiredfields!=null && frm.requiredfields!='undefined'){
	var fields=frm.requiredfields.value.split(',');
	  for(i=0; i<fields.length; i++){
		  fields[i]=this.trimchar(fields[i], ' ');
		  curfield=eval('document.'+frm.name+'.'+fields[i]);
		  if(!this.validField(curfield)){valid=false; break;} 
		  else {valid=true; }
	  }
  }
  else { alert("No required field specified"); }
  
  return valid;	
  }	
	
	
}//end FormValidator


