// Patterns
var formValidationMasks = new Array();
								        
formValidationMasks['email'] = /^[_a-zA-Z0-9.\-]*@[a-zA-Z0-9]([_a-zA-Z0-9\-]+\.)+([a-zA-Z]{2,10})$/;	// Email
formValidationMasks['telephone'] = /^[\(\)0-9\- ]+$/;	// Telephone
formValidationMasks['numeric'] = /^[0-9]*$/;	// Numeric
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi;	// Numeric

var inputClassName = "";
var str = "";

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]['required'] && inputObj.tagName=='TEXTAREA' && inputObj.value.length==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;
	
	
	str = inputObj.className;
	
	if(inputValidates) {
		str = str.replace(/champInvalide/,"champValide");
	}else{
		str = str.replace(/champValide/,"champInvalide");
	}
	inputObj.setAttribute((document.all ? "className" : "class"), str);
	
}


function initFormValidation()
{

	var inputFields = document.getElementsByTagName('INPUT');
	var selectBoxes = document.getElementsByTagName('SELECT');
	var textareaBoxes = document.getElementsByTagName('TEXTAREA');

	var inputs = new Array();


	for(var no=0;no<inputFields.length;no++){
		inputs[inputs.length] = inputFields[no];
	}
	for(var no=0;no<selectBoxes.length;no++){
		inputs[inputs.length] = selectBoxes[no];
	}	
	for(var no=0;no<textareaBoxes.length;no++){
		inputs[inputs.length] = textareaBoxes[no];
	}

	for(var no=0;no<inputs.length;no++){

		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;

		if(required) {
			inputClassName = inputs[no].className;
			inputClassName += " champInvalide";
			inputs[no].setAttribute((document.all ? "className" : "class"), inputClassName);
		}

		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]);

	}
}

window.onload = initFormValidation;