	//alert("boo");

	function openWin( windowURL, windowName, windowFeatures ) { 
		return window.open( windowURL, windowName, windowFeatures ) ; 
	}

	function Validator(what){
	    this.formobj=document.forms[what];
		this.formobj.onsubmit=formHandler;
		this.addRule = createRule;
	}

	//array holding validation rule class instances
	var arRules = new Array();
	
	//Validation Rule Class
	function validationRule(el,validationType,errStr){
		this.field = el;
		this.validationType = validationType;
		this.errStr = errStr;
	}

	//function for creating new validation rules
	function createRule(field,validationType,errStr){
	
		el = this.formobj[field];
		
		//check for RADIO and CHECK BOXES (EXCLUDE SELECT BOXES)
		 if(el.length && isNaN(el.selectedIndex) ){
		 	arRules[arRules.length] = new validationRule(el[0],validationType,errStr);
		 }
		 else{
		 	arRules[arRules.length] = new validationRule(el,validationType,errStr);
		 }
	}
	
	//fires when form is submitted.
	//invokes created validation rules
	function formHandler(){
		var bPass = true;
		
		for(x=0; x < arRules.length; x++){
			el = arRules[x].field;
			
			bPass = invokeRule(el,arRules[x].validationType,arRules[x].errStr);

			if(bPass==false){
				el.focus();
				break;
			}
			//alert(arRules[x].field);
		}
		
		return bPass;
	}
	
	
	function TestRequiredInput(field,strError){
		var ret = true;
		
		tmpStr = Trim(field.value);
		//alert(tmpStr.length);
		if(eval(tmpStr.length) == 0){ 
			if(!strError || strError.length ==0){ 
				strError = field.name + " : Required Field"; 
			}
			alert(strError); 
			ret=false; 
		}
		return ret;
	}	
	function TestRadioCheckBox(field,strError){
		var objradio = field.form.elements[field.name];
		var bSelected=false;
		
		for(var r=0;r < objradio.length;r++){
			if(objradio[r].checked == "1"){
				bSelected=true;
				break;
			}
		}
		
		if(bSelected == false){
			if(!strError || strError.length ==0){
				strError = "Please select one option from "+field.name;
			}	
			alert(strError);
		}
		return bSelected;	
	}
	function TestSelectBox(field,strError){
		var objSelectBox = field.form.elements[field.name];
		var bSelected=false;
		if((objSelectBox.selectedIndex == -1)||(objSelectBox[objSelectBox.selectedIndex].value=="")){
			alert(strError);
			bSelected=false;
		}
		else{
			bSelected=true;
		}
		return bSelected;
	}
	function TestEmail(field,strError){
		var ret = true;
		if(field.value.length > 0 && !validateEmail(field.value)) { 
		   if(!strError || strError.length ==0){ 
			  strError = field.name+": Enter a valid Email address "; 
		   }                                              
		   alert(strError); 
		   ret = false; 
		}
		return ret;
	}
	function validateEmail(email){
		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;
	}	

	//invokeRule()
	//invokes validation rule
	function invokeRule(field,validationType,errStr){
		var ret = true;
		
	    switch(validationType){ 
			case "textbox":{ 
			   ret = TestRequiredInput(field,errStr)
	           break;             
			}
	        case "email":{ 
				   ret = TestEmail(field,errStr);
	               break; 
			}
			case "radio":
			case "checkbox":{
				ret = TestRadioCheckBox(field,errStr);
			    break;
			}		 
			case "selectbox":{
				ret = TestSelectBox(field,errStr);
				break;
			}
	    }//switch 
	    return ret; 		
	}

	//Trim(string) : Returns a copy of a string without leading or trailing spaces
	function Trim(str){
	   return RTrim(LTrim(str));
	}	
	
	//LTrim(string) : Returns a copy of a string without leading spaces.
	function LTrim(str){
	   var whitespace = new String(" \t\n\r");
	
	   var s = new String(str);
	
	   if (whitespace.indexOf(s.charAt(0)) != -1) {
		  // We have a string with leading blank(s)...
		  var j=0, i = s.length;
	
		  // Iterate from the far left of string until we
		  // don't have any more whitespace...
		  while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
			 j++;
	
		  // Get the substring from the first non-whitespace
		  // character to the end of the string...
		  s = s.substring(j, i);
	   }
	   return s;
	}
	
	//RTrim(string) : Returns a copy of a string without trailing spaces.
	function RTrim(str){
	   // strips spaces, tabs, line feeds, etc
	   var whitespace = new String(" \t\n\r");
	   var s = new String(str);
	
	   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
		  // We have a string with trailing blank(s)...
		  var i = s.length - 1;       // Get length of string
	
		  // Iterate from the far right of string until we
		  // don't have any more whitespace...
		  while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
			 i--;
	
		  // Get the substring from the front of the string to
		  // where the last non-whitespace character is...
		  s = s.substring(0, i+1);
	   }
	
	   return s;
	}
