/*
  -------------------------------------------------------------------------
	                    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/
    -------------------------------------------------------------------------  
*/
function Validator(frmname, frmlang) {
  this.formobj = document.forms[frmname];
  if(!this.formobj)	{
	alert("BUG: couldnot get Form object "+frmname);
	return;
  }
  this.formlang = frmlang;
  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, this.formlang);
  }
  itemobj.validationset.add(descriptor,errstr);
}

function ValidationDesc(inputitem, desc, error, lang) {
  this.desc = desc;
  this.error = error;
  this.itemobj = inputitem;
  this.validate = vdesc_validate;
  this.formlang = lang
}

function vdesc_validate() {
  if(!V2validateData(this.desc, this.itemobj, this.error, this.formlang)) {
    this.itemobj.focus();
	return false;
  }
  return true;
}

function ValidationSet(inputitem, lang) {
  this.vSet = new Array();
  this.add = add_validationdesc;
  this.validate = vset_validate;
  this.itemobj = inputitem;
  this.formlang = lang;
}

function add_validationdesc(desc, error) {
  this.vSet[this.vSet.length] = new ValidationDesc(this.itemobj, desc, error, this.formlang);
}

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, strLang) { 
  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 + " : " + langAlert("req", strLang); 
             } //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 + langAlert("maxchars", strLang); 
             } //if 
             alert(strError/* + "\n[" + langAlert("curlength", strLang) + " = " + 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 + langAlert("minchars", strLang); 
             } //if               
             alert(strError/* + "\n[" + langAlert("curlength", strLang) + " = " + 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 + " : " + langAlert("alnumonly", strLang); 
             } //if 
             alert(strError/* + "\n[" + langAlert("charpos", strLang) + " " + 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 + " : " + langAlert("numonly", strLang); 
             } //if               
             alert(strError/* + "\n[" + langAlert("charpos", strLang) + " " + 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 + " : " + langAlert("alphaonly", strLang); 
             } //if                             
             alert(strError/* + "\n[" + langAlert("charpos", strLang) + " " + 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 + " : " + langAlert("alnumhyp", strLang); 
             } //if                             
             alert(strError/* + "\n[" + langAlert("charpos", strLang) + " " + eval(charpos+1)+"]"*/);  
             return false; 
           } //if 			
		   break;
		 }
    case "email": 
         { 
           if(!validateEmailv2(objValue.value)) { 
             if(!strError || strError.length == 0) { 
               strError = objValue.name + " : " + langAlert("email", strLang); 
             } //if                                               
             alert(strError); 
             return false; 
           } //if 
           break; 
         } //case email 
    case "lt": 
    case "lessthan": 
         { 
           if(isNaN(objValue.value)) { 
             alert(objValue.name + " : " +  langAlert("shouldbenum", strLang)); 
             return false; 
           } //if 
           if(eval(objValue.value) >=  eval(cmdvalue)) { 
             if(!strError || strError.length == 0) { 
               strError = objValue.name + " : " + langAlert("less", strLang) + " " + cmdvalue; 
             } //if               
             alert(strError); 
             return false;                 
           } //if             
           break; 
         } //case lessthan 
    case "gt": 
    case "greaterthan": 
         { 
           if(isNaN(objValue.value)) { 
             alert(objValue.name + " : " +  langAlert("shouldbenum", strLang)); 
             return false; 
           } //if 
           if(eval(objValue.value) <=  eval(cmdvalue)) { 
             if(!strError || strError.length == 0) { 
               strError = objValue.name + " : " + langAlert("greater", strLang) + " " + 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 + " : " + langAlert("invchars", strLang); 
	           } //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 + " : " + langAlert("select", strLang); 
              } //if                                                               
              alert(strError); 
              return false;                                   
            } 
            break; 
         } //case dontselect 
    } //switch 
    return true; 
}

function langAlert(strAbb, strLang) {
  switch(strLang) {
	case "en":
		{
			switch(strAbb) {
			  case "req": 
			    return "Required Field";
				break;
			  case "maxchars":
			    return " characters maximum";
				break;
			  case "minchars":
			    return " characters minimum";
				break;
			  case "curlength":
			    return "Current length";
				break;
			  case "alnumonly":
			    return "Only alpha-numeric characters allowed";
				break;
			  case "numonly":
			    return "Only digits allowed";
				break;
			  case "alphaonly":
			    return "Only alphabetic characters allowed";
				break;
			  case "charpos":
			    return "Error character position";
				break;
			  case "alnumhyp":
			    return "characters allowed are A-Z, a-z, 0-9, - and _";
				break;
			  case "email":
			    return "Enter a valid Email address";
				break;
			  case "shouldbenum":
			    return "Should be a number";
				break;
			  case "less":
			    return "value should be less than";
				break;
			  case "greater":
			    return "value should be greater than";
				break;
			  case "invchars":
			    return "Invalid characters found";
				break;
			  case "select":
			    return "Please select one option";
				break
			} //switch
		} //case en
		case "sk":
		{
			switch(strAbb) {
			  case "req": 
			    return "pole musí byť vyplnené";
				break;
			  case "maxchars":
			    return " znakov maximálne";
				break;
			  case "minchars":
			    return " znakov minimálne";
				break;
			  case "curlength":
			    return "Aktuálny počet znakov";
				break;
			  case "alnumonly":
			    return "povolené iba alfanumerické znaky";
				break;
			  case "numonly":
			    return "povolené iba čísla";
				break;
			  case "alphaonly":
			    return "povolené iba abecedné znaky";
				break;
			  case "charpos":
			    return "Chyba na pozícii";
				break;
			  case "alnumhyp":
			    return "povolené znaky sú A-Z, a-z, 0-9, - a _";
				break;
			  case "email":
			    return "zadajte platnú e-mailovú adresu";
				break;
			  case "shouldbenum":
			    return "musí byť číslo";
				break;
			  case "less":
			    return "hodnota musí byť menšia ako";
				break;
			  case "greater":
			    return "hodnota musí byť väčšia ako";
				break;
			  case "invchars":
			    return "nájdené neplatné znaky";
				break;
			  case "select":
			    return "vyberte prosím jednu možnosť";
				break
			} //switch
		} //case sk
  } //switch
}
/*
	Copyright 2003 JavaScript-coder.com. All rights reserved.
*/
