/*
  -------------------------------------------------------------------------
	                    JavaScript Form Validator 
                                Version 2.0.2
	Copyright 2003 JavaScript-coder.com. All rights reserved.
	You use this script in your Web pages, provided these opening credit
    lines are kept intact.
	The Form validation script is distributed free from JavaScript-Coder.com

	You may please add a link to JavaScript-Coder.com, 
	making it easy for others to find this script.
	Checkout the Give a link and Get a link page:
	http://www.javascript-coder.com/links/how-to-link.php

    You may not reprint or redistribute this code without permission from 
    JavaScript-Coder.com.
	
	JavaScript Coder
	It precisely codes what you imagine!
	Grab your copy here:
		http://www.javascript-coder.com/
    -------------------------------------------------------------------------  
    
    Original Code by Javascript-Coder.com.
    
    Modified / Cleaned / and Extended by STECHUSA.com.
    
*/

function Validator(frmname) {
	this.formobj = document.forms[frmname];
	
	if (!this.formobj) {
		alert("BUG: couldnot get Form object " + frmname);
		return;
	}
	
	if (this.formobj.onsubmit) {
		this.formobj.old_onsubmit = this.formobj.onsubmit;
		this.formobj.onsubmit = null;
	} else {
		this.formobj.old_onsubmit = null;
	}
	
	this.formobj.onsubmit = form_submit_handler;
	this.addValidation = add_validation;
	this.setAddnlValidationFunction = set_addnl_vfunction;
	this.clearAllValidations = clear_all_validations;
}

function set_addnl_vfunction(functionname) {
	this.formobj.addnlvalidation = functionname;
}

function clear_all_validations() {
	for (var itr = 0; itr < this.formobj.elements.length; itr++) {
		this.formobj.elements[itr].validationset = null;
	}
}

function form_submit_handler() {
	for (var itr = 0; itr < this.elements.length; itr++) {
		if (this.elements[itr].validationset && !this.elements[itr].validationset.validate()) {
			return false;
		}
	}
	
	if (this.addnlvalidation) {
		str =" var ret = " + this.addnlvalidation + "()";
		eval(str);
		
		if (!ret) return ret;
	}
	
	return true;
}

function add_validation(itemname, descriptor, errstr) {
	if (!this.formobj) {
		alert("BUG: the form object is not set properly");
		return;
	}//if
	
	var itemobj = this.formobj[itemname];
	
	if (!itemobj) {
		alert("BUG: Couldnot get the input object named: " + itemname);
		return;
	}
	
	if (!itemobj.validationset) {
		itemobj.validationset = new ValidationSet(itemobj);
	}
	
	itemobj.validationset.add(descriptor, errstr);
}

function ValidationDesc(inputitem, desc, error) {
	this.desc = desc;
	this.error = error;
	this.itemobj = inputitem;
	this.validate = vdesc_validate;
}

function vdesc_validate() {
	if (!V2validateData(this.desc, this.itemobj, this.error)) {
		this.itemobj.focus();
		
		return false;
	}
	
	return true;
}

function ValidationSet(inputitem) {
	this.vSet = new Array();
	this.add = add_validationdesc;
	this.validate = vset_validate;
	this.itemobj = inputitem;
}

function add_validationdesc(desc, error) {
	this.vSet[this.vSet.length] = new ValidationDesc(this.itemobj, desc, error);
}

function vset_validate() {
	for (var itr = 0; itr < this.vSet.length; itr++) {
	   if (!this.vSet[itr].validate()) {
			return false;
		}
	}
	
	return true;
}

function validateEmailv2(email) {
	// a very simple email validation checking. 
	// you can add more complex email checking if it helps 
	if (email.length <= 0) {
		return true;
	}
	
	var splitted = email.match("^(.+)@(.+)$");
	
	if (splitted == null) {
		return false;
	}
	
	if (splitted[1] != null) {
		var regexp_user = /^\"?[\w-_\.]*\"?$/;
		
		if (splitted[1].match(regexp_user) == null) {
			return false;
		}
	}
	
	if (splitted[2] != null) {
		var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
		
		if (splitted[2].match(regexp_domain) == null) {
			var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			
			if (splitted[2].match(regexp_ip) == null) {
				return false;
			}
		}// if
		
		return true;
	}
	
	return false;
}

function V2validateData(strValidateStr, objValue, strError) {
	var epos = strValidateStr.search("=");
	var command  = "";
	var cmdvalue = "";
	
	if (epos >= 0) {
		command  = strValidateStr.substring(0, epos);
		cmdvalue = strValidateStr.substr(epos + 1);
	} else {
		command = strValidateStr;
	}
	
	switch(command) {
		case "req":
		case "required": {
			if (eval(objValue.value.length) == 0) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + " : Required Field";
				}//if
				
				alert(strError);
				
				return false;
			}//if
			
			break;
		}//case required
	     
		case "maxlength":
		case "maxlen": {
			if (eval(objValue.value.length) > eval(cmdvalue)) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + " : "+cmdvalue+" characters maximum ";
				}//if
				
				alert(strError + "\n[Current length = " + objValue.value.length + " ]");
				
				return false;
			}//if
			
			break;
		}//case maxlen
	      
	    case "minlength":
	    case "minlen": {
			if (eval(objValue.value.length) < eval(cmdvalue)) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + " : " + cmdvalue + " characters minimum  ";
				}//if
				
				alert(strError + "\n[Current length = " + objValue.value.length + " ]");
				
				return false;
			}//if
			
			break;
		}//case minlen
		
	    case "alnum":
	    case "alphanumeric": {
			var charpos = objValue.value.search("[^A-Za-z0-9]");
			
			if (objValue.value.length > 0 && charpos >= 0) {
				if (!strError || strError.length == 0) {
					strError = objValue.name+": Only alpha-numeric characters allowed ";
				}//if
			
				alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
				
				return false;
			}//if
			
			break;
		}//case alphanumeric
	       
	    case "num":
	    case "numeric": {
			var charpos = objValue.value.search("[^0-9]");
			
			if (objValue.value.length > 0 && charpos >= 0) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + ": Only digits allowed ";
				}//if
			
				alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
				
				return false;
			}//if
			
			break;
		}//numeric
	       
	    case "alphabetic":
	    case "alpha": {
			var charpos = objValue.value.search("[^A-Za-z]");
			
			if (objValue.value.length > 0 && charpos >= 0) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + ": Only alphabetic characters allowed ";
				}//if
			
				alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
				
				return false;
			}//if
			
			break;
		}//alpha
	       
		case "alnumhyphen": {
			var charpos = objValue.value.search("[^A-Za-z0-9\-_]");
			
			if (objValue.value.length > 0 && charpos >= 0) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + ": characters allowed are A-Z,a-z,0-9,- and _";
				}//if                             
				
				alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
				
				return false;
			}//if
					
			break;
		} //case alnumhyphen
			
	    case "email": {
			if (!validateEmailv2(objValue.value)) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + ": Enter a valid Email address ";
				}//if                                               
				
				alert(strError);
				
				return false;
			}//if 
			
			break;
		}//case email 
	      
	    case "lt":
	    case "lessthan": {
			if (isNaN(objValue.value)) {
				alert(objValue.name + ": Should be a number ");
				
				return false;
			}//if
			
			if (eval(objValue.value) >= eval(cmdvalue)) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + " : value should be less than "+ cmdvalue;
				}//if
				
				alert(strError);
				
				return false;
			}//if
	         
			break;
	     }//case lessthan 
	     
	    case "gt": 
	    case "greaterthan": {
	        if (isNaN(objValue.value)) {
				alert(objValue.name + ": Should be a number ");
				
				return false;
	        }//if 
	        
			if (eval(objValue.value) <=  eval(cmdvalue)) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + " : value should be greater than "+ cmdvalue;
				}//if
				
				alert(strError);
				
				return false;
			}//if
			
			break;
	     }//case greaterthan 
	     
		case "regexp": {
			if (objValue.value.length > 0) {
				if (!objValue.value.match(cmdvalue)) {
					if (!strError || strError.length == 0) {
						strError = objValue.name + ": Invalid characters found ";
					}//if
					
					alert(strError);
					
					return false;
				}//if 
			}
			
			break;
		}//case regexp 
	     
	    case "dontselect": {
			if (objValue.selectedIndex == null) {
				alert("BUG: dontselect command for non-select Item");
				
				return false;
			}
			
			if (objValue.selectedIndex == eval(cmdvalue)) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + ": Please Select one option ";
				}//if
				
				alert(strError);
				
				return false;
			}
			
			break;
	     }//case dontselect
	     
		/**
		  * Custom Modifications
		**/
	     case "req-checkbox":
	     case "required-checkbox": {
	     	if (!objValue.checked) {
				if (!strError || strError.length == 0) {
					strError = objValue.name + ": Required checkbox not checked. ";
				}//if
				
				alert(strError);
				
				return false;
	     	}
	     	
	     	break;
	     }//case req-checkbox
	     
	     case "req-radio":
	     case "required-radio": {
	     	if (!cmdvalue == '') {
		     	radio_ids = cmdvalue.split('|');
		     	
				if (radio_ids == null) {
					return false;
				}
		     	
		     	var selected_i = 0;
		     	
		     	for (var tmp_i = 0; tmp_i < radio_ids.length; tmp_i++) {
		     		if (objValue.form.elements[radio_ids[tmp_i]].checked) {
		     			selected_i++;
		     		}
		     	}
		     	
		     	if (selected_i == 0) {
					if (!strError || strError.length == 0) {
						strError = objValue.name + ": Required radio button not checked. ";
					}//if
					
					alert(strError);
					
					return false;
		     	}
	     	} else {
	     		alert("BUG: req-radio specified but no radio button ids.");
	     		
	     		return false;
	     	}
	     	
	     	break;
	     }//case req-radio
	     
	}//switch
	
	return true;
}
/*
	Copyright 2003 JavaScript-coder.com. All rights reserved.
*/