function getFirstParentTag(element,tagName){
	element=element.parentNode
	while(element){
		if(element.tagName==tagName){
			return(element);
		}
		element=element.parentNode;
	}
	return(false);
}



var JForm={

	JFormId: null,
	JFormNode: null,
	focusFieldset: null,
	validation:null,

	init: function(JFormId){

		//On commence par ajouter une confirmation sur le bouton delete
		var btnDelete=$('btnDelete_' + JFormId);
		if(btnDelete){
			btnDelete.href="javascript:if(confirm('"+ JTranslation.confirmDelete +"')){document.location.href='"+ btnDelete.href + "'}";
		}


		//on remplace les boutons submit par un bouton dans la toolbar pour que ce soit plus beau :)
		var btnDelete=$('btnDelete_' + JFormId);

		var submit=$("JFSubmit_" + JFormId + "_top");

		var btn=Builder.node('li',[
			Builder.node('a',{className:'JToolBarButton JB_save'},JTranslation.submit)
		]);

		var btn2=Builder.node('li',[
			Builder.node('a',{className:'JToolBarButton JB_save'},JTranslation.submit)
		]);


		btn.title=JTranslation.submit;
		btn2.title=JTranslation.submit;

		btn.onclick=function(e){
			$("form_"+JFormId).submit();
		}
		btn2.onclick=btn.onclick;

		if(btnDelete){
			btnDelete.parentNode.insertBefore(btn, btnDelete);
		}else{
			$('JToolBarTop').appendChild(btn);
		}

			$('JToolBarBottom').appendChild(btn2);

		Element.hide($("JFSubmit_" + JFormId + "_top"));
		Element.hide($("JFSubmit_" + JFormId + "_bottom"));

		this.JFormNode=$('JFormId');
		if(this.validation==null){
			this.validation=[];
		}
		this.validation[JFormId]=new Array();
		var elements=document.getElementsByClassName("JFormElement",this.JFormNode);
		var e0=elements[0];
		elements.each(function(element){
			var oldOnFocus=element.onfocus;
			element.onfocus=function(e){
				if(oldOnFocus){
					oldOnFocus(e);
				}
				var fs=getFirstParentTag(element,"FIELDSET");
				if(!fs){
					console.warn("Error > pas trouvé de fieldset");
					return(false);
				}

				Element.addClassName(fs,"JFormFieldSetActive");

				if(this.focusFieldset && this.focusFieldset!=fs){
					Element.removeClassName(this.focusFieldset,"JFormFieldSetActive");
				}

				this.focusFieldset=fs;

			}.bind(this);
		}.bind(this));
		e0.focus();
	},


	clearAllUlErrorContainer: function(){
		$$('ul.fieldSetError').each(function(o){
			o.parentNode.removeChild(o);
		});
	},


	addErrorInfo: function(fieldsetNumber,label,txt,elementId){
		var txt=" "+txt;
		//on regarde si il y a deja un container UL pour ce fieldset
		var fs=$$("fieldset.JFormFieldSet")[fieldsetNumber];
		var ul=fs.getElementsBySelector("ul.fieldSetError")[0];
		if(typeof(ul)=="undefined"){
			var ul=Builder.node("ul",{className:'fieldSetError'});
			fs.firstChild.parentNode.insertBefore(ul,fs.firstChild);
		}
		var li=Builder.node("li",[
			Builder.node("label",label),txt
		]);
		ul.appendChild(li);
		$(elementId).addClassName("JFElementError");
	},


	validate: function(){
		error=false;
		this.clearAllUlErrorContainer();
		JForm.validation.each(function(a,fieldsetNumber){
			$H(a).each(function(obj){
				var id=obj[0];
				var properties=obj[1];
				var required=properties.required;
				var constraint=properties.constraint;

				var value=$F(id);

				if(value=="" && required){
					JForm.addErrorInfo(fieldsetNumber,properties.label,JTranslation.isEmpty,id);
					error=true;
				}else if(value!=""){


					if(constraint=="email"){
						var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,6})+$/;
						if (!filter.test($F(id))){
							JForm.addErrorInfo(fieldsetNumber,properties.label,JTranslation.isNotValid,id);
							error=true;
						}
					}

				}
			});
		});

		if(error){
			var ulError=$$('ul.fieldSetError')[0];
			ulError.parentNode.scrollTo();
			new Effect.Highlight(ulError);
			return(false);
		}

		return(true);
	}




}