/************************************************************************************************************
(C) www.dhtmlgoodies.com, February 2006

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/	
	
//var isIE= (navigator.userAgent.indexOf("MSIE") != -1? true : false);
	
// Patterns
var formValidationMasks = new Array();
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;	// Email
formValidationMasks['numeric'] = /^[0-9]+$/gi;	// Numeric
formValidationMasks['real'] = /^[0-9\.\,]+$/gi;	// real
formValidationMasks['codepost'] = /^[0-9]{5}$/gi;	// Numeric France
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi;	// Numeric USA   éèêàâîïùûçôö
formValidationMasks['alpha'] = /^[a-zA-Z]+$/gi; // Alpha ==> RK  \w\x80-\xFF
formValidationMasks['nomprenom'] = /^[a-zA-Z '\-\w\x80-\xFF]+$/gi; // nomprenom ==> RK
formValidationMasks['adresse'] = /^[0-9a-zA-Z '\,\-\.\°\/\w\x80-\xFF]+$/gi; // adresse ==> RK
formValidationMasks['date'] = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/gi; // date ==> RK
formValidationMasks['phone'] = /^[0-9 \-\.\+\(\)]+$/gi; // phone ==> RK
formValidationMasks['alphanumeric'] = /^[0-9a-zA-Z]+$/gi; // AlphaNumeric ==> RK
formValidationMasks['domain'] =  /\b[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi; // domain ==> RK

var formElementArray = new Array();

/* These two event functions are from http://ejohn.org/apps/jselect/event.html */

function addEvent( obj, type, fn ) { 
  if ( obj.attachEvent ) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
    obj.attachEvent( 'on'+type, obj[type+fn] ); 
  } else 
    obj.addEventListener( type, fn, false ); 
} 
function removeEvent( obj, type, fn ) { 
  if ( obj.detachEvent ) { 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  } else 
    obj.removeEventListener( type, fn, false ); 
} 


function validateInput(e,inputObj)
{
	if(!inputObj)inputObj = this;		
	var inputValidates = true;
	
	if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='INPUT' && inputObj.value.length==0)inputValidates = false;
	if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='SELECT' && inputObj.selectedIndex==0){
		inputValidates = false;
	}
	if(formElementArray[inputObj.name]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']]))inputValidates = false;

	if(formElementArray[inputObj.name]['freemask']){
		var tmpMask = formElementArray[inputObj.name]['freemask'];
		tmpMask = tmpMask.replace(/-/g,'\\-');
		tmpMask = tmpMask.replace(/S/g,'[A-Z]');
		tmpMask = tmpMask.replace(/N/g,'[0-9]');
		tmpMask = eval("/^" + tmpMask + "$/gi");
		if(!inputObj.value.match(tmpMask))inputValidates = false
	}	
	
	if(formElementArray[inputObj.name]['regexpPattern']){
		var tmpMask = eval(formElementArray[inputObj.name]['regexpPattern']);
		if(!inputObj.value.match(tmpMask))inputValidates = false
	}
	if(!formElementArray[inputObj.name]['required'] && inputObj.value.length==0 && inputObj.tagName=='INPUT')inputValidates = true;
	
	
	if(inputValidates){
		inputObj.parentNode.className='validInput';
		return true; //RK
	}else{
		inputObj.parentNode.className='invalidInput'
		return false; //RK
	}
}

function isFormValid()
{
	var divs = document.getElementsByTagName('DIV');
	for(var no=0; no < divs.length; no++){
		if(divs[no].className=='invalidInput') return false;
	}
	return true;	
}

// RK ******* RK ********** RK ************* RK
function isElemValid(elem,msg,e) {//RK
  var evt = (window.event?window.event:e);
  if (!validateInput(evt,elem)) 
      alert(msg);
}


function isElemMinLenValid(elem,minlen,msg,e) {//RK

  if (elem.value.length < minlen) {
    document.getElementById(elem.id).parentNode.className = 'invalidInput';
    mymsg = "La taille du champ << " + elem.name + " >> est au minimum : " + minlen + " caracteres/chiffres!";    
    alert(mymsg);    
    
    var required = elem.getAttribute('required');//
		if(!required)required = elem.required;//				
		if (required) {    	
      document.getElementById(elem.id).focus();		  
		  document.getElementById(elem.id).parentNode.className = 'invalidInput';      
		}
    return;
  }
   var evt = (window.event?window.event:e);
   if (elem)
      if (!validateInput(evt,elem)) {alert(msg); return ; }
}

function isElemMumLimitsValid(elem,lim_min,lim_max,msg,e) {//RK

  if ( (parseInt(elem.value) < lim_min) || (parseInt(elem.value) > lim_max) ) {
   document.getElementById(elem.id).parentNode.className = 'invalidInput';
   mymsg = unescape("La valeur du champ << " + elem.name + " >> est hors limites : " + lim_min + " - " + lim_max + "!");    
   alert(mymsg);
    
    var required = elem.getAttribute('required');//
		if(!required)required = elem.required;//				
		if (required) {    	
      document.getElementById(elem.id).focus();		  
		  document.getElementById(elem.id).parentNode.className = 'invalidInput';
		}
		return;
  }
   var evt = (window.event?window.event:e);
   if (!validateInput(evt,elem)) {alert(msg); return  }
};



function isSelectionValid(elem,badindexs,msg,e) {//RK

  var badelems = badindexs.split("|");
  var idx = elem.selectedIndex;
  var valideidx = true;
  for (i=0;i< badelems.length;i++) {
    if (idx == parseInt(badelems[i]) ) {
      valideidx = false;
      break;
    }
  }
  if ( ! valideidx ) {
    document.getElementById(elem.id).parentNode.className = 'invalidInput';
    mymsg = unescape("La selection dans le champ << " + elem.name + " >> est invalide, recommencez svp!");    
    alert(mymsg);
    
    var required = elem.getAttribute('required');//
		if(!required)required = elem.required;//				
		if (required) {    	
      document.getElementById(elem.id).focus();		  
		  document.getElementById(elem.id).parentNode.className = 'invalidInput';
		}
		return;
  }

   var evt = (window.event?window.event:e);
   if (!validateInput(evt,elem)) { alert(msg); return;  }  
};
// RK ******* RK ********** RK ************* RK


function initFormValidation()
{
  //alert('in func initFormValidation()');
	var inputFields = document.getElementsByTagName('INPUT');
	var selectBoxes = document.getElementsByTagName('SELECT');
	
	var inputs = new Array();
	
	
	for(var no=0;no<inputFields.length;no++){
	
	 if (inputFields[no].getAttribute('required') != null )
		  inputs[inputs.length] = inputFields[no];
		
	}	
	for(var no=0;no<selectBoxes.length;no++){
		inputs[inputs.length] = selectBoxes[no];
		
	}
	
	for(var no=0;no<inputs.length;no++){
		var className = inputs[no].parentNode.className;
		if(className && className.indexOf('validInput')>=0)continue;			
		var required = inputs[no].getAttribute('required');
		if(!required)required = inputs[no].required;		
		
		var mask = inputs[no].getAttribute('mask');
		if(!mask)mask = inputs[no].mask;
		
		var freemask = inputs[no].getAttribute('freemask');
		if(!freemask)freemask = inputs[no].freemask;
		
		var regexpPattern = inputs[no].getAttribute('regexpPattern');
		if(!regexpPattern)regexpPattern = inputs[no].regexpPattern;
		
		var div = document.createElement('DIV');
		div.className = 'invalidInput';
		inputs[no].parentNode.insertBefore(div,inputs[no]);
		div.appendChild(inputs[no]);
		div.style.width = inputs[no].offsetWidth + 'px';
		
		addEvent(inputs[no],'blur',validateInput);
		addEvent(inputs[no],'change',validateInput);
		addEvent(inputs[no],'paste',validateInput);
		addEvent(inputs[no],'keyup',validateInput);
		
	
		formElementArray[inputs[no].name] = new Array();
		formElementArray[inputs[no].name]['mask'] = mask;
		formElementArray[inputs[no].name]['freemask'] = freemask;
		formElementArray[inputs[no].name]['required'] = required;
		formElementArray[inputs[no].name]['regexpPattern'] = regexpPattern;

		validateInput(false,inputs[no]);
			
	}	
}
