var ajaxify_edit_links;
var initToggleBlock,toggleBlock, toggleBlockEvent;
var onloadCalls = Array();
var formSave, eventAjaxFormSubmit,updateAjaxForms;
updateAjaxForms = function(){};
ajaxify_edit_linksold = function(container,append,callback){
	$((container ? container + " " :"") + ".fn-ajax-edit-link").unbind("click");
	$((container ? container + " " :"") + ".fn-ajax-edit-link").click(function(e){
		e.preventDefault();
		target = this.href.replace(/.*#/,"#");
		link = this;
		$.getJSON(this.href,{},
			function(data){
				alert("OOO" );
				if (!append){
					$(target).html(data.__html);
				}
				else{
					$(target).append(data.__html);
				}
				if (callback){
					callback(data,link,data.__target);
				}
				ajaxify_edit_links(data.__target, data.__append, callback);
			});
	});
};

ajaxify_edit_links = function(container,append,callback){
	$((container ? container + " " :"") + ".fn-ajax-edit-link").unbind("click");
	$((container ? container + " " :"") + ".fn-ajax-edit-link").click(function(e){
		e.preventDefault();
		target = this.href.replace(/.*#/,"#");
		link = this;
		$.getJSON(this.href,{},
			function(data){
				if (!data.__append){
					$(data.__target).html(data.__html);
				}
				else{
					$(data.__target).append(data.__html);
				}
				
				if (callback){
					if( callback instanceof Array){
						for(var i in callback){
							callback[i](data,link,data.__target);
						}
					}
					else{
						callback(data,link,data.__target);
						//ajaxify_edit_links(data.__target, data.__append, callback);
					}
				}
				if(data.__callback){
					ajaxify_edit_links(data.__target, data.__append, eval('('+data.__callback+')'));
				}
				else{
					ajaxify_edit_links(data.__target, data.__append,null);
				}
				
			});
	});
};



YUI({}).use('node',"io-form",'selector-css3', function(Y3) {
	
	Y3.on("domready",function(){
		
		formSave = function (id, o, args) {
			var data = eval('(' + o.responseText + ')');// Response data.
			var formId = args[0]; // 'ipsum'
			var statusbox = Y3.get("#" + formId + " .status");
			
			if (statusbox == null){
				Y3.detach("io:complete",formSave,"#" + formId );
				return false;
			}
			Y3.all("#" + formId + " input," + "#" + formId + " select," + "#" + formId + " textarea").removeClass("error-required").removeClass("error-validity");
			statusbox.set("innerHTML", "");

			statusbox.append("<div>" + data.message + "</div>");
			if(!data.ok){
				statusbox.addClass("status-error");
				for (var err in data) {
					if (!isNaN(err)){
						if(data[err].Required){
							err =  data[err].Required;
							errorClass = "error-required";
						}else{
							err =  data[err].Validity;
							errorClass = "error-validity";
						}
						field = Y3.get("#" + err.field);
						
						field.addClass(errorClass);
						statusbox.append("<div class='" + errorClass + "-msg'>" + err.msg + "</div>");
					}
				}
			}
			else{
				statusbox.addClass("status-ok");
			}
			if (data.removeForm){
				//si on doit enlever le formulaire, on conserve la node de status
				form = Y3.get("#" + formId);
				form.get("parentNode").appendChild(statusbox.remove());
				form.set("innerHTML","");
			}
		};
		eventAjaxFormSubmit = function(e){
			e.preventDefault();	
			node = Y3.get("#" + e.currentTarget.get("id") + " .status");
			//node.set("innerHTML","Saving...");
			var cfg = { 
					method: 'POST',
					form: { 
						id: e.currentTarget.get("id"), 
						useDisabled: false} 
			};
			Y3.detach('io:complete',formSave,[e.currentTarget.get("id")]);
			Y3.on('io:complete', formSave, this,[e.currentTarget.get("id")]);
			Y3.io(e.currentTarget.getAttribute("action"),cfg);
		};
		
		toggleBlockEvent = function (e){
			e.preventDefault();
			toggleBlock(e.currentTarget);
		};
		toggleBlock = function(el,forceClose){
			if (el.hasClass("fn-toggle-next-opened") || forceClose){
				el.next().setStyle("display","none");
				el.removeClass("fn-toggle-next-opened");
				el.addClass("fn-toggle-next-closed");
			}
			else{
				el.next().setStyle("display","block");
				el.removeClass("fn-toggle-next-closed");
				el.addClass("fn-toggle-next-opened");
			}
		};
		initToggleBlock = function(){
			Y3.all(".fn-toggle-next").each(function(node,index,nodeList){
				if(node.hasClass("fn-toggle-next-closed")){
					toggleBlock(node,true);
				}else{
					toggleBlock(node,false);		
				}
				node.detach("click",toggleBlockEvent);
				node.on("click",toggleBlockEvent);
				node.setStyle("cursor","pointer");
			});
			
		};
		initToggleBlock();
		
		updateAjaxForms = function(){
			Y3.detach("submit", eventAjaxFormSubmit);
			Y3.all("form.fn-ajax").on("submit", eventAjaxFormSubmit);
		};
		updateAjaxForms();
		for (var func in onloadCalls){
			onloadCalls[func](Y3);
		}
	});
});
