/**
* Javascript for the forms
*
* @author  Sebastian Beyer
* @version $Id: gen_validatorv2.js 525 2010-06-18 15:21:16Z sb $
* @package hpm_formcreator
*/
/*
  -------------------------------------------------------------------------
	                    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/
    -------------------------------------------------------------------------  
*/
var terms_de = new Array();
terms_de['req_field'] = 'Pflicht Feld';
terms_de['alnum_field_1'] = 'Nur Zahlen und Buchstaben erlaubt ';
terms_de['alnum_field_2'] = 'Fehler bei Zeichen Nummer ';
terms_de['num_field_1'] = 'Nur Zahlen erlaubt ';
terms_de['alpha_field_1'] = 'Nur Buchsaben erlaubt ';
terms_de['alnumhyph_field_1'] = 'Buchstaben die erlaubt sind: A-Z,a-z,0-9,- und _';
terms_de['email_field'] = 'Bitte eine gültige E-Mail Adresse eintragen ';
terms_de['bug_form'] = 'Fehler: Form Objekt nicht gefunden ';
terms_de['bug_formset'] = 'Fehler: Form Objekt nicht richtig gesetzt ';
terms_de['bug_formfield'] = 'Fehler: Folgendes Form Element nicht gefunden: ';
terms_de['maxlen_field_1'] = ' Zeichen maximal ';
terms_de['maxlen_field_2'] = ' Derzeitige Länge ';
terms_de['min_field_1'] = ' Zeichen minimal ';
terms_de['lt_field_1'] = 'Sollte eine Zahl sein ';
terms_de['lt_field_2'] = 'Wert sollte niedriger sein als: ';
terms_de['gt_field_2'] = 'Wert sollte größer sein als: ';
terms_de['regexp_field'] = 'Ungültiges Zeichen gefunden ';
terms_de['dontselect_field_1'] = 'Fehler: Kommando nur für Select Felder gültig';
terms_de['dontselect_field_2'] = 'Bitte eine Option auswählen ';

var terms_en = new Array();
terms_en['req_field'] = 'Mandatory field';
terms_en['alnum_field_1'] = 'Only numbers and characters allowed ';
terms_en['alnum_field_2'] = 'Error at character number  ';
terms_en['num_field_1'] = 'Only numbers allowed ';
terms_en['alpha_field_1'] = 'Only characters allowed ';
terms_en['alnumhyph_field_1'] = 'The characters allowed are: A-Z,a-z,0-9,- and _';
terms_en['email_field'] = 'Please enter a valid email address ';
terms_en['bug_form'] = 'Error: Form object not found ';
terms_en['bug_formset'] = 'Error: Form object not set correctly ';
terms_en['bug_formfield'] = 'Error: The following form element was not found: ';
terms_en['maxlen_field_1'] = ' characters maximum ';
terms_en['maxlen_field_2'] = ' length right now ';
terms_en['min_field_1'] = ' characters minimal ';
terms_en['lt_field_1'] = 'Should be a number ';
terms_en['lt_field_2'] = 'Value should be lower than: ';
terms_en['gt_field_2'] = 'Value should be higher than: ';
terms_en['regexp_field'] = 'Wrong character found ';
terms_en['dontselect_field_1'] = 'Error: Command only allowed for select fields';
terms_en['dontselect_field_2'] = 'Please select an option ';

var terms_fr = new Array();
terms_fr['req_field'] = 'Champs obligatoires';
terms_fr['alnum_field_1'] = 'Seules les chiffres et les lettres sont autorisés ';
terms_fr['alnum_field_2'] = 'Erreur de signe pour le numéro ';
terms_fr['num_field_1'] = 'Seuls les chiffres sont autorisés ';
terms_fr['alpha_field_1'] = 'Seules les lettres sont autorisées ';
terms_fr['alnumhyph_field_1'] = 'Les signes autorisés sont : A - Z, a - z, 0 - 9, et _';
terms_fr['email_field'] = "Veuillez s'il vous plaît inscrire une adresse e-mail valable";
terms_fr['bug_form'] = 'Erreur : objet Form non trouvé ';
terms_fr['bug_formset'] = 'Erreur : objet Form mal placé ';
terms_fr['bug_formfield'] = 'Erreur : l’élément Form suivant n’a pas été trouvé :';
terms_fr['maxlen_field_1'] = ' Signes maximum ';
terms_fr['maxlen_field_2'] = ' Longueur actuelle ';
terms_fr['min_field_1'] = ' Signes minimum ';
terms_fr['lt_field_1'] = 'Devrait être un nombre ';
terms_fr['lt_field_2'] = 'La valeur doit être inférieure à ';
terms_fr['gt_field_2'] = 'La valeur doit être supérieure à ';
terms_fr['regexp_field'] = 'Signe non valable trouvé ';
terms_fr['dontselect_field_1'] = 'Erreur : Commande seulement valable pour champs Select ';
terms_fr['dontselect_field_2'] = 'Veuillez choisir une option ';

var languageterms = '';

function Validator(frmname, lang)
{
  languageterms = eval('terms_'+lang);
  this.formobj=document.forms[frmname];
	if(!this.formobj)
	{
	  alert(languageterms['bug_form']+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(form)
{
	var checkedvalidations = new Array();

	if(!form) {
		for(var itr=0;itr < this.elements.length;itr++)
		{
			// if we have a select the options need to be checked instead
			if(this.elements[itr].options){
				var selectOptions = this.elements[itr].options;
				
				for(var i=0;i < selectOptions.length;i++){
					if(selectOptions[i].validationset && !selectOptions[i].validationset.validate()){
						return false;
					}
				}
				
			}
			// check other elements
			else 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;
	}
	else {
	
		for(var itr=0;itr < form.elements.length;itr++)
		{
			if(form.elements[itr].validationset && !form.elements[itr].validationset.validate())
			{
			  return false;
			}
		}
		if(this.addnlvalidation)
		{
		  str =" var ret = "+form.addnlvalidation+"()";
		  eval(str);
	    if(!ret) return ret;
		}
		return true;
	}

}
function add_validation(itemname,descriptor,errstr)
{
    if(!this.formobj)
	{
	  	alert(languageterms['bug_formset']);
		return;
	}//if
	var itemobj = this.formobj[itemname];
  	if(!itemobj)
	{
	  	alert(languageterms['bug_formfield']+itemname);
		return;
	}
	// if there's more than one element with the same name we need to add validation for all of them
	if(itemobj.length > 1) {
		for(var i=0; i < itemobj.length; i++){ 
			var tempitemobj = itemobj[i];
			
			if(!tempitemobj.validationset)
			{
			  tempitemobj.validationset = new ValidationSet(tempitemobj);
			}
		    
		    tempitemobj.validationset.add(descriptor,errstr);
		}
	}
	else {
		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 = "";
    var nameParts = (objValue.parentNode.name ? objValue.parentNode.name.split('_') : '');
    // get the real name of the element, need to switch for select elements
    if(objValue.nodeName.toLowerCase() != 'option') {
	    var foundname = (document.getElementById(objValue.name+'_realname') && document.getElementById(objValue.name+'_realname').firstChild ? document.getElementById(objValue.name+'_realname').firstChild.nodeValue : '');
    }
    else if(nameParts[2]) {
    	var foundname = (document.getElementById(nameParts[0]+'_'+nameParts[1]+'_realname') && document.getElementById(nameParts[0]+'_'+nameParts[1]+'_realname').firstChild ? document.getElementById(nameParts[0]+'_'+nameParts[1]+'_realname').firstChild.nodeValue : '');
    }
    else {
    	var foundname = (document.getElementById(objValue.parentNode.name+'_realname') && document.getElementById(objValue.parentNode.name+'_realname').firstChild ? document.getElementById(objValue.parentNode.name+'_realname').firstChild.nodeValue : '');
    }
    if(epos >= 0)
    {
     command  = strValidateStr.substring(0,epos);
     cmdvalue = strValidateStr.substr(epos+1);
    }
    else
    {
     command = strValidateStr;
    }
    switch(command)
    {
        case "req":
        case "required":
         {
			// switch for select elements
			if(objValue.nodeName.toLowerCase() == 'option') {
				var alloptions = objValue.parentNode.options;
   
				// split id so we get the "form_ID" part
				// we don't know if ID is 1, 2 or even more digits so use split
				var filteredId = objValue.parentNode.parentNode.id.split('_');
				if("" == filteredId) {
					filteredId = objValue.parentNode.id.split('_');
				}
				var elementReference = filteredId[0] + "_" + filteredId[1];  
   
				// get the related table row that hides the field 	   
				if(!document.getElementById(elementReference+'_related_tr')) {
					alert("Error: Related Table Row not found");			
				}//if
				// check if element is visible, if not, don't do a check
				if(document.getElementById(elementReference+'_related_tr').style.display  != 'none') {
					var foundselected = false;
					
					for(var i = 0; i < alloptions.length;i++){
						if(alloptions[i].selected && alloptions[i].value != '' && alloptions[i].value != 'Tag' && alloptions[i].value != 'Monat' && alloptions[i].value != 'Jahr' && alloptions[i].value != 'Jour' && alloptions[i].value != 'Mois' && alloptions[i].value != 'An' && alloptions[i].value != 'Day' && alloptions[i].value != 'Month' && alloptions[i].value != 'Year' && alloptions[i].value.toLowerCase().substr(0,6) != "bitte " && alloptions[i].value.toLowerCase().match(/Choisir svp/) === null) {
							
								foundselected = true;

						} //if             
					}//for

					if(!foundselected) {
						if(!strError || strError.length ==0) {
							strError = foundname + " : " + languageterms['req_field'];
						}//if
						alert(strError);
						return false;
					}
				}//if
		   }//if	
           // switch between checkbox, radio and other types of fields
           // checkboxes and radios can be empty because only one needs to be checked
           else if(objValue.type.toLowerCase() == 'checkbox' || objValue.type.toLowerCase() == 'radio') {
               var allboxes = document.getElementsByName(objValue.name);
 			   
 			   // split id so we get the "form_ID" part
           	   // we don't know if ID is 1, 2 or even more digits so use split
			   var filteredId = allboxes[0].parentNode.id.split('_');
			   var elementReference = filteredId[0] + "_" + filteredId[1];  
			   	
			   // get the related table row that hides the field 	   
           	   if(!document.getElementById(elementReference+'_related_tr')) {
           	   		alert("Error: Related Table Row not found");			
           	   } 
			   // check if element is visible, if not, don't do a check
			   if(document.getElementById(elementReference+'_related_tr').style.display  != 'none') {
	 			   var foundchecked = false;             
	              
	               for(var i = 0; i < allboxes.length;i++){
				       if(allboxes[i].checked) {
		               	  foundchecked = true;
		               }               
	               }               
			       
			       if(!foundchecked) {
	               	  if(!strError || strError.length ==0)
		              {
		                strError = foundname + " : " + languageterms['req_field'];
		              }//if
		              alert(strError);
		              return false;
	               }
               }
           }
           else {
           	   // split id so we get the "form_ID" part
           	   // we don't know if ID is 1, 2 or even more digits so use split
			   var filteredId = objValue.id.split('_');
			   var elementReference = filteredId[0] + "_" + filteredId[1];  
			   	
			   // get the related table row that hides the field	   
           	   if(!document.getElementById(elementReference+'_related_tr')) {
           	   		alert("Error: Related Table Row not found");			
           	   } 
			   // check if element is visible, if not, don't do a check
			   if(document.getElementById(elementReference+'_related_tr').style.display  != 'none') {
           	
		           if(eval(objValue.value.length) == 0)
		           {
		              if(!strError || strError.length ==0)
		              {
		              	strError = foundname + " : " + languageterms['req_field'];
		              }//if
		              alert(strError);
		              return false;
		           }//if
           	   }//if
           }//else
           break;
         }//case required
        case "maxlength":
        case "maxlen":
          {
             if(eval(objValue.value.length) >  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = foundname + " : "+cmdvalue+languageterms['maxlen_field_1'];
               }//if
               alert(strError + "\n["+languageterms['maxlen_field_2']+" = " + 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 = foundname + " : " + cmdvalue + languageterms['min_field_1'];
               }//if
               alert(strError + "\n["+languageterms['maxlen_field_2']+" = " + 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 = foundname+": "+languageterms['alnum_field_1'];
                }//if
                alert(strError + "\n ["+languageterms['alnum_field_2'] + 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 = foundname+": "+languageterms['num_field_1'];
                }//if
                alert(strError + "\n ["+languageterms['alnum_field_2'] + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//numeric
        case "phn":
        case "phone":
           {
              var charpos = objValue.value.search("[^0-9\/ \-]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                if(!strError || strError.length ==0)
                {
                  strError = foundname+": "+languageterms['num_field_1'];
                }//if
                alert(strError + "\n ["+languageterms['alnum_field_2'] + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//phone
        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 = foundname+": "+languageterms['alpha_field_1'];
                }//if
                alert(strError + "\n ["+languageterms['alnum_field_2'] + 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 = foundname+": "+languageterms['alnumhyph_field_1'];
                }//if
                alert(strError + "\n ["+languageterms['alnum_field_2'] + eval(charpos+1)+"]");
                return false;
              }//if
			break;
			}
        case "email":
          {
               if(!validateEmailv2(objValue.value))
               {
                 if(!strError || strError.length ==0)
                 {
                    strError = foundname+": "+languageterms['email_field'];
                 }//if
                 alert(strError);
                 return false;
               }//if
           break;
          }//case email
        case "lt":
        case "lessthan":
         {
            if(isNaN(objValue.value))
            {
              alert(foundname+": "+languageterms['lt_field_1']);
              return false;
            }//if
            if(eval(objValue.value) >=  eval(cmdvalue))
            {
              if(!strError || strError.length ==0)
              {
                strError = foundname + " : "+languageterms['lt_field_2']+ cmdvalue;
              }//if
              alert(strError);
              return false;
             }//if
            break;
         }//case lessthan
        case "gt":
        case "greaterthan":
         {
            if(isNaN(objValue.value))
            {
              alert(foundname+": "+languageterms['lt_field_1']);
              return false;
            }//if
             if(eval(objValue.value) <=  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = foundname + " : "+languageterms['gt_field_2']+ 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 = foundname+": "+languageterms['regexp_field'];
	              }//if
	              alert(strError);
	              return false;
	            }//if
			}
           break;
         }//case regexp
        case "dontselect":
         {
            if(objValue.selectedIndex == null)
            {
              alert(languageterms['dontselect_field_1']);
              return false;
            }
            if(objValue.selectedIndex == eval(cmdvalue))
            {
             if(!strError || strError.length ==0)
              {
              strError = foundname+": "+languageterms['dontselect_field_2'];
              }//if
              alert(strError);
              return false;
             }
             break;
         }//case dontselect
    }//switch
    return true;
}
/*
	Copyright 2003 JavaScript-coder.com. All rights reserved.
*/