var bloc_msg = "msg_display";
var bloc_msg_content = "msg_content";
var bloc_btn_confirm = "btn_confirm";
var duree_msg = 5;
var t;
// *******************************************
// MESSAGE UTILISATEUR
// *******************************************
function PHX_error_handler(err,param)
{
	//Recherche d'erreur fatal on l'affiche
	for(var i=0; i<err.length; i++)
	{
		if(err[i].level=='fatal')
		{
			alert("Erreur fatal : " + err.msg);
			return false;
		}
	}

	//Cas des multi erreur on affiche la première
	if(err.length>0)
	{
		alert("Erreur " + err[0].level + " : " + err.msg);
		return false;
	}
	return true;
}

function PHX_userconfirm(msg, id, action)
{
	if($(bloc_msg) && $(bloc_msg_content))
	{
		new Effect.Fade(bloc_btn_confirm, {afterFinish: function()
		{
			$(bloc_msg_content).update(msg);
			$('action').value = action;
			$('action_id').value = id;
			new Effect.Appear(bloc_msg, {afterFinish: function()
			{
				new Effect.Appear(bloc_btn_confirm, {afterFinish: function(){
					PHX_reloadRules();
				}});
			}});
		}});
	}
}
function PHX_actionusrok()
{
	if($(bloc_msg) && $(bloc_msg_content))
	{
		new Effect.Morph(bloc_msg, {
			style: 'background-color:#00FF00;',
			duration: 0.2,
			afterFinish: function()
			{
				$(bloc_msg).style.backgroundColor = '';
				PHX_wait(duree_msg,"PHX_clearusrmsg");
			}
			});
	}
}
function PHX_actionusrproblem(msg)
{
	if($(bloc_msg) && $(bloc_msg_content))
	{
		$(bloc_msg_content).update(msg);
		$('usr_cancel').style.display = 'none';
		$('action').value = 'confirm_msg';
		new Effect.Morph($(bloc_msg), {
			style: 'background:#FF0000;',
			duration: 0.2
			});
	}
}
function PHX_dispusrmsg(msg, class_blocmsg, no_duree)
{
	var class_blocmsg = class_blocmsg || "";
	var no_duree = no_duree || false;
	$('btn_confirm').style.display = 'none';
	
	if($(bloc_msg) && $(bloc_msg_content))
	{
		if(class_blocmsg != "")
		{
			$(bloc_msg).className = class_blocmsg;
		}
		$(bloc_msg_content).update(msg);
		if(no_duree == true)
		{
			new Effect.Appear($(bloc_msg));			
		}else{
			new Effect.Appear($(bloc_msg), {afterFinish: function(){PHX_wait(duree_msg,"PHX_clearusrmsg");}});			
		}
	}
}

function PHX_clearusrmsg()
{
	if($(bloc_msg))
	{
		new Effect.Fade($(bloc_msg), {afterFinish: function(){PHX_stopwait();}});
	}
}
function PHX_wait(duree, fct)
{
	var fct = fct || "PHX_void";
	t = setTimeout(fct+"()",duree);
}
function PHX_stopwait()
{
	clearTimeout(t);
}
function PHX_void()
{
	//nothing to do
	PHX_stopwait();
}

function PHX_reloadRules()
{
	Behaviour.apply();
}

function PHX_getidFromResponse(response)
{
	// La forme de la reponse est 
	// message_reussite_ou_echec|message|id
	var response = response || "";
	var tabresp = response.split("|");
	if(tabresp.length>=3)
		return tabresp[2];
	return "";
}
// *******************************************
// PHX ACTIONS
// *******************************************

function PHX_Fpdf(btn, type, blocdestination, callbackfct,dossier)
{
	// pdf
	var post_supp = PHX_getadditionnalparams(btn); //Recuperation de l'id du site
	new Ajax.Request(urltask, {
	asynchronous: 'true',
	postBody: 'tache='+dossier+'/'+type+'/'+type+'_pdf'+post_supp,
	onSuccess: function (ahr)
	{
		PHX_doCallBack(callbackfct, 'pdf');
	}
	});
}

function PHX_Fdisappear(btn, type, blocdestination, callbackfct)
{
	//
	// Mise en display none de la cible
	//
	var cible = btn.replace('disappear_','');
	if($(cible))
	{
		$(cible).style.display = 'none';
	}
}

function PHX_Fdisp(btn, type, blocdestination, callbackfct)
{
	//
	// Affichage d'un element cache
	//
	var tab = $$('.'+btn)
	if(tab.length > 0)
	{
		tab.each( function(a) {
			new Effect.Appear(a, {afterFinish: function(){		
				PHX_doCallBack(callbackfct, 'disp');
				PHX_reloadRules();
			}});
		})
	}	
}

function PHX_Fedit(btn, type, blocdestination, callbackfct,dossier)
{
	//
	// Edition de l'element selectionne
	//
	var tabcallback = callbackfct.split("_");
	if(tabcallback.length > 4)
		var callbackfct = tabcallback[0]+"_"+tabcallback[1]+"_"+tabcallback[2]+"_"+tabcallback[4];
	var post_supp = '&idelem='+PHX_getidelem(btn); //Recuperation de l'id
	post_supp += PHX_getadditionnalparams(btn); //Recuperation de l'id du site
	phxAjaxCall(true,urlaff,'tpl='+dossier+'/form/'+type+post_supp,PHX_Fedit_callback,PHX_error_handler,{btn:btn,callbackfct:callbackfct,blocdestination:blocdestination});
}

function PHX_Fedit_callback(response,param)
{
	if($(PHX_getdiv(param.btn))){
		blocdestination=PHX_getdiv(param.btn);
		$(blocdestination).style.display = "";
	}
	RICHTEXT_unload("wysiwyg", "form_"+param.type);
	$(param.blocdestination).update(response);
	RICHTEXT_load("wysiwyg",false, param.blocdestination);
	PHX_doCallBack(param.callbackfct, 'edit');
	datePickerController.create();
	PHX_reloadRules();	
}
function PHX_Fadd(btn, type, blocdestination, callbackfct,dossier)
{
	//
	// Appel du formulaire sans ID
	//
	var post_supp = PHX_getadditionnalparams(btn);
	phxAjaxCall(true,urlaff,'tpl='+dossier+'/form/'+type+post_supp,PHX_Fadd_callback,PHX_error_handler,{btn:btn,callbackfct:callbackfct,blocdestination:blocdestination});
}
function PHX_Fadd_callback(response,param)
{
	RICHTEXT_unload("wysiwyg", "form_"+param.type);
	$(param.blocdestination).update(response);
	RICHTEXT_load("wysiwyg",false, param.blocdestination);
	PHX_doCallBack(param.callbackfct, 'add');
	PHX_reloadRules();
}
function PHX_Fdel(btn, type, blocdestination, callbackfct,dossier)
{
	//
	// Suppression réel de l'element selectionne
	// 
	var eleme = PHX_getidelem(btn, true);
	if(eleme!=0)
	{
		var tabelem = eleme.split('|');
		var posts = '&idelem='+tabelem[0]; //Recuperation de l'id
	}
	posts += PHX_getadditionnalparams(btn); //Recuperation de l'id du site
	var result = false;
	phxAjaxCall(true,urltask,'tache='+dossier+'/'+type+'/'+type+'_supprime'+posts,PHX_Fdel_callback,PHX_error_handler,{callbackfct:callbackfct});
}

function PHX_Fdel_callback(response,param)
{
	//alert('sans msg de confirmation (a rajouter)');
	result = treatTaskMsg(response);
	if(result == true)
	{
		var tabcallback = param.callbackfct.split("_");
		if(tabcallback.length > 4)
			var callbackfct = PHX_getCallbackName(tabcallback[0]+"_"+tabcallback[1]+"_"+tabcallback[2]);
		else
			var callbackfct = param.callbackfct;
		var result_request = response.replace("{EXE_SUCCESS}","");
		PHX_doCallBack(callbackfct, 'del',result_request);
	}else{
		PHX_actionusrproblem("Echec de la suppression");
	}
	PHX_reloadRules();
}

function PHX_Frecord(btn, type, blocdestination, callbackfct,dossier)
{
	//
	// Enregistrement du formulaire
	//
	var tabcallback = callbackfct.split("_");
	if(tabcallback.length > 4)
		var callbackfct = tabcallback[0]+"_"+tabcallback[1]+"_"+tabcallback[2]+"_"+tabcallback[4];
	var posts = FORM_buildpoststring("form_"+type,"record");
	posts += PHX_getadditionnalparams(btn);
	phxAjaxCall(true,urltask,'tache='+dossier+'/'+type+'/'+type+'_enregistre'+posts,PHX_Frecord_callback,PHX_error_handler,{btn:btn,callbackfct:callbackfct});
}

function PHX_Frecord_callback(response,param)
{
	var result = treatTaskMsg(response);
	if(result === true)
	{
		var result_request = response.replace("{EXE_SUCCESS}","");
		//PHX_dispusrmsg("L'enregistrement a été effectué","msg_ok");
		PHX_doCallBack(param.callbackfct, 'record',result_request);
		//
		// On met a jour le champ d'id
		//
		if($(param.btn+'_'+'idelem'))
		{
			$(param.btn+'_'+'idelem').value = PHX_getidFromResponse(response);
		}else{
			//alert("No champ ID : '"+btn+'_'+'idelem'+"'");
		}
	}else if(result === false){
		var failexec = (response).split(":");
		if(failexec[0] == "{EXE_FAIL}" || !result)
		{
			var result_request = response.replace("{EXE_FAIL}","");
			PHX_doCallBackerreur(param.callbackfct, 'erreur',result_request);
			//PHX_dispusrmsg("L'enregistrement a échoué","msg_ko");
		}
	}
	PHX_reloadRules();
}

function PHX_doCallBackerreur(callbackfct, action, res)
{
	if(action == "erreur")
	{
		if(window[callbackfct+"erreur"])
		{
			window[callbackfct+"erreur"](res);
		}
	}
}
function PHX_doCallBack(callbackfct, action, res)
{
	if(callbackfct != "" && callbackfct != "undefined" && action != "upload")
	{
		if(window[callbackfct])
		{
			window[callbackfct](res);
		}
	}
}

function PHX_Fdefinefct(btn, action, blocdestination)
{
	var fct = new Array();
	//
	// Definition des callbacks
	//
	if(action != "upload")
	{
		fct[0] = PHX_getCallstartName(btn);
		fct[1] = PHX_getCallbackName(btn);
	}
	
	return fct;
}
function PHX_getCallstartName(id_btn)
{
	// Recherche de la fonction de "callstart"
	// le nom de la fonction doit etre celui du bouton + _ + 'Callstart'
	// elle doit etre chargee au moment de l'appel au code
	return id_btn+"_CallStart";
}
function PHX_getCallbackName(id_btn)
{
	// Recherche de la fonction de "callback"
	// le nom de la fonction doit etre celui du bouton + _ + 'Callback'
	// elle doit etre chargee au moment de l'appel au code
	return id_btn+"_CallBack";
}
// *******************************************
// PHX ACTIONS : EXECUTION
// *******************************************

function PHX_executeFct(action, btn, type, blocdestination,dossier)
{
	//alert("EXECUTE FONCTION : "+action+", btn="+btn+", type="+type+", blocdestination="+blocdestination+",dossier="+dossier);
	var functions = PHX_Fdefinefct(btn, action);
	var callstartfct = functions[0]; 
	var callbackfct = functions[1];

	PHX_doCallStart(callstartfct, action);

	window['PHX_F'+action](btn, type, blocdestination, callbackfct,dossier);
}
function PHX_doCallStart(callstartfct, action)
{
	//Note : les fonctions executes avant et apres l'upload sont geres par AIM
	//On les indique directement dans le onSubmit du formulaire
	if(callstartfct != "" && callstartfct != "undefined" && action != "upload")
	{
		//alert("callstartfct = "+callstartfct);
		if(window[callstartfct])
		{
			//alert("callstartfct = FOUND");
			window[callstartfct]();								
		}
	}
}
// *******************************************
// PHX COMPORTEMENT ET PARAMETRAGE
// *******************************************
function PHX_getresultupload(file)
{
	var res = file.split("{EXE_FAIL}");
	if(res.length > 1)
	{
		PHX_dispusrmsg(res[1].replace(/\{EXE_SUCCESS\}/g,''), "msg_ko");
		return "";
	}else{
		file = file.replace(/\{EXE_SUCCESS\}/g,'');
		return file;
	}
}
function PHX_getadditionnalparams(id_btn)
{
	//Recherche d'un input hidden qui porte comme nom de class l'id du bouton appellant, 
	//l'id de ce champ est composé de l'id du bouton appellant + _ + le nom du parametre
	//sa valeur est celle du paramete
	//alert('PHX_getadditionnalparams : '+id_btn);
	var inputsh = $$("."+id_btn);
	var params = "";
	if(inputsh.length > 0)
	{
		for(i = 0; i < inputsh.length; i++)
		{
			params += "&" + inputsh[i].id.replace(id_btn+"_","")+"="+inputsh[i].value;
		}
	}
	return params;
}
function PHX_getidelem(id_btn, with_lib)
{
	//Recherche d'un input hidden qui va donner le nom du champ qui permet le choix d'un element
	//Sa class est l'id du bouton appellant, son id est celui du bouton + _ + id
	//Sa valeur indique l'id du champ de selection
	var val_id = 0;
	var with_lib = with_lib || false;
	if($(id_btn+'_'+'id'))
	{
		if($(id_btn+'_'+'id').value)
		{
			val_id = $(id_btn+'_'+'id').value;
		}
	}
	return val_id;
}


function PHX_getdiv(id_btn, with_lib)
{
	//edit
	//Recherche d'un input hidden qui va donner le nom du champ qui permet le choix d'une div
	//Sa class est l'id du bouton appellant, son id est celui du bouton + _ + id
	//Sa valeur indique la div de retour
	
	var val_div = 0;
	var with_lib = with_lib || false;
	if($(id_btn+'_'+'div'))
	{
		if($(id_btn+'_'+'div').value)
			val_div = $(id_btn+'_'+'div').value;
	}
	return val_div;
}

// ********************************************
// MYRULES
// *******************************************
var myrules = {
	'.adm_btn': function(btn) {
		btn.onclick = function(){
			var tabelems = btn.id.split('_');
			var action = tabelems[0];
			var type = tabelems[1];
			var dossier = "";
			var dossier = tabelems[2];
			var blocdestination = '';
			blocdestination = 'form_'+type;
			//Dans le cas des disp ou des uploads, le type du formulaire principal est sans importance
			if(($(blocdestination) && (action != "disp" && action != "upload")) || (action == "editid") || (action == "disp") || (action == "upload") || (action == "disappear") || (action == "cancel"))
			{
				if(type != null && type != 'undefined' && type != '')
				{
					if(window['PHX_F'+action])
					{
						//alert("PHX_executeFct : action="+action+", btn="+btn.id+", type="+type+", blocdestination="+blocdestination);
						PHX_executeFct(action, btn.id, type, blocdestination,dossier);
					}else{
						alert("No action for '"+action+"'");
					}
				}else{
					alert("No type");
				}
			}else{
				alert("No dest");
			}
		}
	}
};

// Enregistrement des regles definies ci dessus dans Behaviour
Behaviour.register(myrules);
