function createFlexitForms(selecteur) {
	flexitForms = selecteur;
	for(i = 0; i < flexitForms.length; i++) {
		
		// Vérification d'un formulaire déjà traité,
		// on break tout si c'est le cas.
		if(flexitForms[i].getElements('.ffFieldParent').length > 0) {
			//break; // joe
		}

		// Sinon je continue
		var classForm = flexitForms[i].get('class');
		var regClassesForm = new RegExp("[ ]+", "g");
		var allClassesForm = classForm.split(regClassesForm);
		
		for(h = 0; h < allClassesForm.length; h++) {
			if(allClassesForm[h].contains('ffSkin_')) {
				var idSkin = allClassesForm[h].substr(7, allClassesForm[h].length);
			}
		}

		// Vérification que le formulaire possède bien une skin,
		// on break si il y en a pas.
		if(!idSkin) {
			break;
		}

		// Puis je traite tous les champs récupérés
		flexitFormFields = flexitForms[i].getElements('input, textarea, select');

		for(j = 0; j < flexitFormFields.length; j++) {
			if(flexitFormFields[j].hasClass("flexitFormsOk"))continue;
			
			flexitFormFields[j].addClass("flexitFormsOk");
			
			var classElement = flexitFormFields[j].get('class');
			var regClasses = new RegExp("[ ]+", "g");
			var allClasses = classElement.split(regClasses);
			for(u = 0; u < allClasses.length; u++) {
				if(allClasses[u].contains('ffError')) {
					var isError = true;
				} else {
					var isError = false;
				}
				
				if(flexitFormFields[j].hasClass('ffRequired')) {
					var isRequired = true;
				} else {
					var isRequired = false;
				}
			}
			
			// Récupération des paramètres du champs
			var tagElement = flexitFormFields[j].get('tag');
			var typeElement = flexitFormFields[j].get('type');
			var valueElement = flexitFormFields[j].get('value');
			var nameElement = flexitFormFields[j].get('name');
			var idElement = flexitFormFields[j].get('id');
			var classElement = flexitFormFields[j].get("style");
			var widthElement = "";

			//if(classElement && classElement.contains("width")) {
			if(Browser.Engine.trident && flexitFormFields[j].get('style')){
				if(ereg("WIDTH",flexitFormFields[j].get('style')))var widthElement = flexitFormFields[j].getStyle('width');
			} else if(classElement && classElement.contains("width")) {
				var widthElement = flexitFormFields[j].getStyle('width');
			}

			if(typeElement != "checkbox" && typeElement != "radio" && typeElement != "image" && typeElement != "hidden") {
				// Coins ou pas
				var cornerCheck = new Fx.CSS().search('.ffSkin_'+idSkin+' .hasCorners');
					
				// Création de la structure du code
				var fieldParent = new Element("span", { "class": "ffFieldParent" });
				var fieldContent = new Element("span", { "class": "ffContent" }); 
				
				if(cornerCheck.width) {
					var fieldTop = new Element("span", { "class": "ffHeader", "html": "<span>&#160;</span>" });
					var fieldBottom = new Element("span", { "class": "ffFooter", "html": "<span>&#160;</span>" });
					var fieldContentWrapper = new Element("span");
				}

				// Le champs est en erreur de saisie
				if(isError) {
					fieldParent.addClass("flexitFormError");
				}
				
				// Le champs est requis
				if(isRequired) {
					fieldParent.addClass("flexitFormRequired");
				}
				
				// Events, tous sauf IE, sinon problèmes sur les focus.
				if(!Browser.Engine.trident) {
					flexitFormFields[j].set({"events": {"focus": function(){ $(this).getParent("span.ffFieldParent").addClass('flexitFormFocus'); }, "blur": function(){ $(this).getParent("span.ffFieldParent").removeClass('flexitFormFocus'); } }});
				}
				
				// Injection enfants => parents
				if(cornerCheck.width) {

					fieldContentWrapper.wraps(flexitFormFields[j]);
					fieldContent.wraps(fieldContentWrapper);
					fieldParent.wraps(fieldContent);
					fieldTop.inject(fieldContent,"before");
					fieldBottom.inject(fieldContent,"after");
			
				} else {

					fieldContent.wraps(flexitFormFields[j]);
					fieldParent.wraps(fieldContent);

				}
				
				// Je fixe les tailles  ( pour IE, compatibilité quand tu nous tiens ).
				if(widthElement && typeElement != "submit") {
					if(fieldParent.getSize().x > widthElement.toInt()) {
						
						if(cornerCheck.width) {
							paddingleftCW = fieldContentWrapper.getStyle("padding-left").toInt();
							paddingrightCW = fieldContentWrapper.getStyle("padding-right").toInt();
							
							difSizeParent = fieldParent.getSize().x - ( fieldContentWrapper.getSize().x - (paddingleftCW + paddingrightCW));
							finalSizeElement = widthElement.toInt() + difSizeParent;
							fieldParent.setStyle("width",finalSizeElement+"px");
						} else {
							paddingleftCW = fieldContent.getStyle("padding-left").toInt();
							paddingrightCW = fieldContent.getStyle("padding-right").toInt();
							
							difSizeParent = fieldParent.getSize().x - ( fieldContent.getSize().x - (paddingleftCW + paddingrightCW));
							finalSizeElement = widthElement.toInt() + difSizeParent;
							fieldParent.setStyle("width",finalSizeElement+"px");
						}
						
					}
					
				} else if(typeElement != "submit") {
					fieldParent.setStyle("width","100%");
				} else if(typeElement == "submit") {
					flexitFormFields[j].setStyle("width","auto");
					if(cornerCheck.width) {
						paddingleftCW = fieldContentWrapper.getStyle("padding-left").toInt();
						paddingrightCW = fieldContentWrapper.getStyle("padding-right").toInt();
						
						difSizeParent = fieldParent.getSize().x - ( fieldContentWrapper.getSize().x - (paddingleftCW + paddingrightCW));
						finalSizeElement = flexitFormFields[j].getSize().x + difSizeParent;

						if(flexitFormFields[j].getSize().x>0)fieldParent.setStyle("width",finalSizeElement+"px");
					} else {
						paddingleftCW = fieldContent.getStyle("padding-left").toInt();
						paddingrightCW = fieldContent.getStyle("padding-right").toInt();
						
						difSizeParent = fieldParent.getSize().x - ( fieldContent.getSize().x - (paddingleftCW + paddingrightCW));
						finalSizeElement = flexitFormFields[j].getSize().x + difSizeParent;
						fieldParent.setStyle("width",finalSizeElement+"px");
					}
					
				}
									
			} else if(typeElement == "checkbox") {
				var fieldParent = new Element("span", { "class": "ffFieldParent ffFieldTypeCheckbox" });
				var fieldMask = new Element("div", { "class": "ffCheckBox" });

				// Le champs est-il déjà coché ?
				if(flexitFormFields[j].getProperty("checked")) {
					fieldMask.addClass("ffItemChecked");
				}

				// On cache le champ original et on dégage bordure et fond du parent
				flexitFormFields[j].setStyles({"width": "auto", "position":"absolute", "left":"0", "top":"2px", "opacity": 0.01, "z-index": 10, "cursor": "pointer"});
				if(Browser.Engine.trident) {
					flexitFormFields[j].setStyle("filter","alpha(opacity=1)");
				}
				fieldParent.setStyles({"background": "none", "border": "none" });
				
				// Le champs est en erreur de saisie
				if(isError) {
					fieldParent.addClass("flexitFormError");
				}
				
				flexitFormFields[j].addEvent('click', function() {
					if($(this).getProperty("checked")) {
						$(this).getNext("div.ffCheckBox").addClass("ffItemChecked");
					} else {
						$(this).getNext("div.ffCheckBox").removeClass("ffItemChecked");
					}
				});

				fieldParent.wraps(flexitFormFields[j]);
				fieldMask.inject(flexitFormFields[j], "after");
				
			} else if(typeElement == "radio") {
				var fieldParent = new Element("span", { "class": "ffFieldParent" });
				var fieldMask = new Element("div", { "class": "ffRadio" });

				// Le champs est-il déjà coché ?
				if(flexitFormFields[j].getProperty("checked")) {
					fieldMask.addClass("ffItemChecked");
				}

				// On cache le champ original et on dégage bordure et fond du parent
				flexitFormFields[j].setStyles({"width": "auto", "position":"absolute", "left":"0", "top":"2px", "opacity": 0.1, "z-index": 10, "cursor": "pointer"});
				if(Browser.Engine.trident) {
					flexitFormFields[j].setStyle("filter","alpha(opacity=1)");
				}
				fieldParent.setStyles({"background": "none", "border": "none" });

				// Le champs est en erreur de saisie
				if(isError) {
					fieldParent.addClass("flexitFormError");
				}

				flexitFormFields[j].addEvent('click', function() {
					//$(this).getParent("form.flexitform").getElements("input[rel="+relElement+"]");
					allRadioGroup = $(this).getParent("form.flexitform").getElements("input[rel="+$(this).getProperty("rel")+"]").getNext('div.ffRadio').removeClass("ffItemChecked");
					if($(this).getProperty("checked")) {
						$(this).getNext("div.ffRadio").addClass("ffItemChecked");
					}
				});

				fieldParent.wraps(flexitFormFields[j]);
				fieldMask.inject(flexitFormFields[j], "after");
				
			}
			
			flexitFormFields[j].removeClass("ffSkin_"+idSkin);
		}
		
		// gestion des étoile (notations)
		flexitFormFields = flexitForms[i].getElements('span.ffFieldetoile');
		for(j = 0; j < flexitFormFields.length; j++) {		
			flexitFormFields[j].getElements('a').addEvent('click', function() {
				this.getParent('span.ffFieldetoile').getElement('input').set('value',this.get('rel'));
			}),
			flexitFormFields[j].getElements('a').addEvent('mouseover', function(elem) {
				flexitform_roll_item(this,'span.ffFieldetoile','on');
			}),
			flexitFormFields[j].getElements('a').addEvent('mouseout', function() {
				flexitform_roll_item(this,'span.ffFieldetoile','out');								   
			})				
		}
	}
}

window.addEvent('domready', function() {
	createFlexitForms($$('.flexitform'));
});
