/**
* treatAjaxResponse
* traite de facon constante une r�ponse XML
*/
function treatAjaxResponse(responseXml)
{
	var xml = responseXml.documentElement;
	var nodeNumber = 0;
	$A(xml.childNodes).each(function(node)
	{
	//alert(node.nodeName);
	nodeNumber++;
	try {
		switch(node.nodeName)
		{
			case 'form' : 			treatAjaxResponseForm(node); break;
			case 'showdiv' : 		treatAjaxResponseShowDiv(node); break;
			case 'hidediv' : 		treatAjaxResponseHideDiv(node); break;
			case 'replacehtml' : 	treatAjaxResponseReplaceHtml(node); break;
			case 'renderview' : 	treatAjaxResponseReplaceHtml(node); break;
			case 'javascript' : 	treatAjaxResponseJavascript(node); break;
			case 'redirect' : 		treatAjaxResponseRedirect(node); break;
			case 'useralert' :		treatAjaxResponseUserAlert(node); break;
			case 'reload' :			treatAjaxResponseReload(node); break;
		}
	} catch (e) {
		//alert('nodeNumber : '+nodeNumber + '\nName : ' + node.nodeName + '\n' + e);
	}
	});
}

function treatAjaxResponseJavascript(javascriptNode)
{
	eval(javascriptNode.getAttribute('value'));
}


function treatAjaxResponseReload() {
	window.location.reload();
}

function treatAjaxResponseUserAlert(UserAlertNode)
{
	window.setTimeout('display_divmsg("success","'+UserAlertNode.getAttribute('value')+'");', 500);
	
}

function treatAjaxResponseRedirect(redirectNode)
{
	location.href = url_site + fc_name + '/' + redirectNode.getAttribute('value');
}

/**
* treatAjaxResponseForm
* traite un form (ajoute / supprime les champs erreur)
*/
function treatAjaxResponseForm(formNode)
{
	var fieldId;
	var errorMessage;

	var Fields = Array();
	var Messages = Array();
	var i = 0;
	//pour chaque champ d'erreur
	$A(formNode.childNodes).each(function(field)
	{

		hasErrors = true;
		fieldId = field.getAttribute('id');
		if($(fieldId) && $(fieldId).type != 'radio')
		{
			Fields[i] = fieldId;
			Messages[i] = field.getAttribute('errorMessage');
//			errorMessage = field.getAttribute('errorMessage');
//			$(fieldId).addClassName('erreur');
			
			//addInfoBulle(fieldId, '<b>Attention !</b><br />' + errorMessage);
			
		}
		else
		{
			//cas des boutons radios, on cherche si un bouton a cet "id" en name
			$$('input[name="'+fieldId+'"]').each(function(radioButton)
			{
			Fields[i] = fieldId;
			Messages[i] = field.getAttribute('errorMessage');
			//	errorMessage = field.getAttribute('errorMessage');
			//	radioButton.addClassName('erreur');

			//	addInfoBulle(radioButton.id, '<b>Attention !</b><br />' + errorMessage);
			});
		}
		i++;
	});
	if (i != 0) {
		colorise(Fields, Messages);
	}
}

/**
* clearFormErrors
* cache toutes les erreurs d'un form
*/
function clearFormErrors(formId)
{

//	var formId = formNode.getAttribute('id');
	
	//pour chaque champ
	$A($(formId).getElements()).each(function(field)
	{
		if(field.hasClassName('erreur'))
		{
			unColorise(field);
		}
	}); 
	
	arrayErrors = new Array();
}

/**
* treatAjaxResponseShowDiv
* montre une div
*/
function treatAjaxResponseShowDiv(showDivNode)
{	
	
	var divId = 			showDivNode.getAttribute('divId');
	var positionId = 		showDivNode.getAttribute('positionId');
	var positionBehaviour = showDivNode.getAttribute('positionBehaviour');
	var classe = 			showDivNode.getAttribute('class');			
	var contentId = 		showDivNode.getAttribute('contentId');
	var message = 			showDivNode.getAttribute('message');
	
	showDivComplex(divId, positionId, positionBehaviour, classe, contentId, message);
	
}

/**
* showDiv
* montre une div
*/
function showDivComplex(divId, positionId, positionBehaviour, classe, contentId, message)
{	
	var divNode;
	
	//si la div n'est pas présente dans la page, 
	//on la cré et on la ratache au body
	if(!$(divId)) {
		divNode = document.createElement('div');
		divNode.id = divId;
		divNode.style.display = 'none';
		
		switch(positionBehaviour) {
			case "append" :
				appendChild(divNode, $(positionId));
				break;
			case "appendfirst" :
				appendChildFirst(divNode, $(positionId));
				break;
			case "before" : 
				insertBefore(divNode, $(positionId));
				break;
			case "after" : 
				insertAfter(divNode, $(positionId));
				break;
		}
	} else	{
		//sinon on la récupère
		divNode = $(divId);
	}
	
	//attribut classe	
	if(classe != '')
	{
		divNode.className = classe;
	}
	
	//attribut message	
	if(message != '')
	{
		//dans une div sp�ciale?
		if($(contentId))
		{
			$(contentId).innerHTML =  message;
		}
		//dans la div
		else
		{
			divNode.innerHTML = message;		
		}
	}
	//affichage
	$(divId).show();
}
/**
* showDiv error
* montre une div d'erreur avec bouton pour fermer l'erreur en option
*/
function showDivError(positionId, positionBehaviour, message, delay)
{	
	showDivComplex("DivError", positionId, positionBehaviour, "DivError", "DivError", message)
	if (delay!='0')
	{
		setTimeout("new Effect.Fade('DivError')",delay);
	}
}

/**
* treatAjaxResponseHideDiv
* cache une div
*/
function treatAjaxResponseHideDiv(hideDivNode)
{	
	var divId = hideDivNode.getAttribute('divId');
	
	//si la div n'est pas pr�sente dans la page, 
	//on la cr� et on la ratache au body
	if($(divId))
	{
		$(divId).hide();
	}
}

/**
* treatAjaxResponseReplaceHtml
* remplace le contenu d'une div par du html
*/
function treatAjaxResponseReplaceHtml(replaceDivNode)
{
	var divId = replaceDivNode.getAttribute('divId');
	if($(divId))
	{
		$(divId).innerHTML = replaceDivNode.firstChild.data;	
	}
}

/**
* fait une requete ajax au module/action en parametres
* avec une chaine de parametres
* et est traité par treatAjaxResponse
*/
function doRequestAndXmlResponse(module, action, parametres, jsSuccess, jsCreate, jsFailure, jsComplete)
{
	//definition de l'url
	var url = url_site + fc_name + '/' + module + '/' + action;
	
	//parametres
	if(parametres) {
		if(parametres.indexOf('is_xml_response') == 0) {
			parametres += 'is_xml_response=true&';
		}
	}

	new Ajax.Request(
		url, {
			encoding:'UTF-8',
			asynchronous:false, 
			evalScripts:true, 
			method:'post',
			postBody:parametres,
			//se declenche a la creation de la requete
			onCreate:function() {
				if(jsCreate) { eval(jsCreate); }
			},
			//se declenche si le code retour est 2xx
			onSuccess:function(request, json) {
				if(request.responseXML) { treatAjaxResponse(request.responseXML); }
				if(jsSuccess) { eval(jsSuccess); }
			},
			//se declenche si le code retour est 404 ou 403
			onFailure:function(request, json) {
				if(jsFailure) { eval(jsFailure); }
				display_divmsg('error',request.responseText);
			},
			//se declenche quelque soit le code de retour (404 ou 200)
			onComplete:function() {
				if(jsComplete) { eval(jsComplete); }
			},
			//pour un debug plus efficace
			onException:function(request, e) {
				alert('Problème rencontré : '+e.message+'.');
			}
		}
	);
}

/**
* fait une requete ajax au module/action en parametres
* avec l'id du form qu'on doit sérialisé
* et est traité par treatAjaxResponse
*/
function doRequestAndXmlResponseFormSerialize(module, action, formId)
{
	var param = Form.serialize($(formId));
	param += '&is_xml_response=true';
	
	var url = url_site + fc_name + '/' + module + '/' + action;
	new Ajax.Request(
		url, 
		{
			asynchronous:false, 
			evalScripts:true, 
			onSuccess:function(request, json)
			{
				treatAjaxResponse(request.responseXML);
			}, 
			parameters:param
		}
	);
}

/**
* fait une requete ajax au module/action en parametres et update un div
* avec une chaine de parametres
* mettre chargement a true afin d'afficher le div de chargement
*/



function doUpdater(module, action, div, parameters, chargement, insertion)
{
	
	if(parameters) {
		if(parameters.indexOf('=') > 0) {
			var url = url_site + fc_name + '/' + module + '/' + action + '?' + parameters;
		} else {
			var url = url_site + fc_name + '/' + module + '/' + action + '/' + parameters;
		}
	} else {
		var url = url_site + fc_name + '/' + module + '/' + action
	}
	
	if(!insertion) {
		insertion = '';
	}

	if (chargement==false)
	{
		new Ajax.Updater(div,
			url, 
			{
				asynchronous:false, 
				evalScripts:true			
			}
		);
	}
	else
	{
		display_divmsg('loading','Traitement en cours...');
		new Ajax.Updater(div,
				url, 
				{
					asynchronous:true, 
					evalScripts:true,
					onException:function(e,d) {
						alert('Erreur : '+d.message);
					},
					onSuccess:function(request, json)
					{
					alert('ok !');
						$('divMsg').hide();
					},
					insertion: insertion
				}
			);
	}
}

