var test = null;

function FormChecker () {}

FormChecker.launch = function(formObject, checkedItem) {

	try {
		var i, j, k, l;
	
		var formType = formObject.id;
		var formChildren = formObject.getElementsByTagName('div');
		var bool = true;
		var bool2 = false;
		if(checkedItem == 'all')
			bool2 = true;
		
		var formHandler = FormChecker.forms[formType];
		
		var formChildrenClassNames;
		var formChildMinLength;
		var formChildMaxLength;
		var formChildRegex;
		var formSecondDiv;
		var formField;
		var formFieldNew;
		var formFieldNormal;
		var formFieldValid;
		var formFieldInvalid;
		
		var fieldValue;
		
		// parcours des éléments HTML contenus dans le formulaire
		for(i=0; i<formChildren.length; i++) {
			if(formChildren[i].className != null) {
				formChildClassList = formChildren[i].className.split(' ');
				// parcours des classes HTML de l'élément du formulaire
				formChildClassList.each( function(item) {
					// recherche d'une correspondance dans le fichier de configuration 
					if(((formHandlerElement = formHandler[item.split('_')[1]]) != undefined) && (bool2 || item.split('_')[1] == checkedItem)) {
						// si une correspondance est trouvée; récupération des valeurs de vérification
						formChildMinLength = formHandlerElement['min-length'];
						formChildMaxLength = formHandlerElement['max-length'];
						formChildRegex = new RegExp(formHandlerElement['regex'], "g");
						// parcours des éléments html contenus dans l'élément trouvé
						for(k=0; k<formChildren[i].children.length; k++) {
							formSecondDiv = formChildren[i].children[k];
							// vérification du fait qu'il sagisse bien d'un élément visible
							if(!arrayContains(formSecondDiv.className.split(' '), 'hidden')) {
								// parcours des éléments contenus à la recherche du champ de formulaire à analyser
								for(l=0; l<formSecondDiv.children.length; l++) {
									if(formSecondDiv.children[l].nodeName == 'INPUT') {
										if((formField = formSecondDiv.children[l]).name.split('_')[1] == item.split('_')[1]) {
											// 
											if((formFieldNormal = formObject[item+"_normal"]) == null)
												throw('Champ "normal" introuvable');
											if((formFieldValid = formObject[item+"_valid"]) == null)
												throw('Champ "valid" introuvable');
											if((formFieldTooShort = formObject[item+"_tooshort"]) == null)
												throw('Champ "tooshort" introuvable');
											if((formFieldTooLong = formObject[item+"_toolong"]) == null)
												throw('Champ "toolong" introuvable');
											if((formFieldBadRegex = formObject[item+"_badregex"]) == null)
												throw('Champ "badregex" introuvable');
											if((formFieldInvalid = formObject[item+"_invalid"]) == null)
												throw('Champ "invalid" introuvable');
											
											// vérification de la validité
											if(formField.value.length < formChildMinLength) {
												formFieldNew = formFieldTooShort;
												bool = false;
											}
											else if(formField.value.length > formChildMaxLength) {
												formFieldNew = formFieldTooLong;
												bool = false;
											}
											else if(!formChildRegex.test(formField.value)) {
												formFieldNew = formFieldBadRegex;
												bool = false;
											}
											else
												formFieldNew = formFieldValid;
											if(formField != formFieldNew) {
												formField.parentNode.className+=' hidden';
												formFieldNew.parentNode.className = formFieldNew.parentNode.className.replace(new RegExp("( )?hidden", "g"), "");
												fieldValue = formField.value;
												formFieldNormal.value = fieldValue;
												formFieldValid.value = fieldValue;
												formFieldTooShort.value = fieldValue;
												formFieldTooLong.value = fieldValue;
												formFieldBadRegex.value = fieldValue;
												formFieldInvalid.value = fieldValue;
											}
										}
									}
								}
							}
						}
					}
				});
			}
		}
	}
	catch(error) {
		alert(error);
		var bool = false; 
	}
	
	return bool;
};

FormChecker.forms = new Object();

var arrayContains = function(array, str) {
	var i;
	var bool = false;
	for(i in array) {
		bool = (bool || (array[i] == str)) 
	}
	return bool;
};
