/**
* treatXmlResponse
* traite de facon constante une rÃ©ponse XML
*/
function treatXmlResponse(xml)
{	
	var sourceNode = xml.getElementsByTagName('xmlresponse');
	sourceNode = sourceNode[0];
	
	jQuery.each(sourceNode.childNodes, function()
	{
		node = this;
		switch(node.nodeName)
		{
			case 'form' : 			treatXmlResponseForm(node); break;
			case 'showdiv' : 		treatXmlResponseShowDiv(node); break;
			case 'hidediv' : 		treatXmlResponseHideDiv(node); break;
			case 'replacehtml' : 	treatXmlResponseReplaceHtml(node); break;
			case 'renderview' : 	treatXmlResponseReplaceHtml(node); break;
			case 'javascript' : 	treatXmlResponseJavascript(node); break;
			case 'redirect' : 		treatXmlResponseRedirect(node); break;
		}
	});
}

function getHtmlFromRenderView(xml)
{
	var sourceNode = xml.getElementsByTagName('xmlresponse');
	sourceNode = sourceNode[0];
	
	var html = '';

	jQuery.each(sourceNode.childNodes, function()
	{
		node = this;
		if(node.nodeName == 'renderview')
		{
			html = node.firstChild.data;
		}
	});
	
	return html;
}

//execute du javascript
function treatXmlResponseJavascript(javascriptNode)
{
	eval(javascriptNode.getAttribute('value'));
}

//execute une redirection
function treatXmlResponseRedirect(redirectNode)
{
	location.href = redirectNode.getAttribute('value');
}

/**
* treatXmlResponseShowDiv
* montre une div
*/
function treatXmlResponseShowDiv(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;
		}
	}

	//sinon on la rÃ©cupÃ¨re
	else
	{
		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();
}

/**
* treatXmlResponseHideDiv
* cache une div
*/
function treatXmlResponseHideDiv(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();
	}
}

/**
* treatXmlResponseReplaceHtml
* remplace le contenu d'une div par du html
*/
function treatXmlResponseReplaceHtml(replaceDivNode)
{
	var divId = '#'+replaceDivNode.getAttribute('divId');
	if($(divId))
	{
		$(divId).html(replaceDivNode.firstChild.data);	
	}
}

/**
* fait une requete ajax au module/action en parametres
* avec une chaine de parametres
* et est traité par treatXmlResponse
*/
function doRequestAndXmlResponse(module, action, parameters)
{
	var url;
	
	if(parameters != '')
	{
		url = urlSite + '/' + module + '/' + action + '?isXmlResponse=true&' + parameters;
	}
	else
	{
		url = urlSite + '/' + module + '/' + action + '?isXmlResponse=true';
	}
	Ext.Ajax.request({
	   url: url,
	   success: function(r, options)
	   {
	   		treatXmlResponse(r.responseXML);
	   }
	});
}

/**
* fait une requete ajax au module/action en parametres
* avec l'id du form qu'on doit sÃ©rialisÃ©
* et est traité par treatXmlResponse
*/
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)
			{
				treatXmlResponse(request.responseXML);
			}, 
			parameters:param
		}
	);
}

/**
* treatXmlResponseForm
* traite un form (ajoute / supprime les champs erreur)
*/
function treatXmlResponseForm(formNode)
{
	clearFormErrors(formNode);

	var isError = false;
	jQuery.each(formNode.childNodes, function()
	{
		isError = true;
		var field = this;
		var fieldId = field.getAttribute('id');
		var errorMessage = field.getAttribute('errorMessage');
		if($('#'+fieldId+'_tbl').hasClass('mceLayout'))
		{
			$('#'+fieldId+'_ifr').contents().find('body').addClass('x-form-invalid');
			fieldId = fieldId+'_parent';
		}
		else
			$('#'+fieldId).addClass('x-form-invalid');
		$('#'+fieldId).before('<a name="error" class="errors"></a>');	
		$('#'+fieldId).after('<span class="errors"><img id="img_error_'+fieldId+'" src="/images/icons/error.png" /></span>');	
		new Ext.ToolTip({
	        target: 'img_error_'+fieldId,
	        html: errorMessage,
	        dismissDelay : 0
	    });
		
	});
	
	//window.location.hash = "error";
	if(isError)
		showModalError('There are some errors in the form.')
}

/**
* clearFormErrors
* cache toutes les erreurs d'un form
*/
function clearFormErrors(formNode)
{
	var formId = formNode.getAttribute('id');
	$('#'+formId+' .errors').remove();	
	$('#'+formId+' iframe').contents().find('body').removeClass('x-form-invalid');
	$('#'+formId+' .x-form-invalid').removeClass('x-form-invalid');	
}
    
    
function clearFormErrorsId(formId)
{
	$('#'+formId+' .errors').remove();	
	$('#'+formId+' iframe').contents().find('body').removeClass('x-form-invalid');
	$('#'+formId+' .x-form-invalid').removeClass('x-form-invalid');	
}
    
function cleanErrorOnglets()
{	
	$('.badgeError').hide();
}    

function setErrorOnglet(culture)
{
	$('#flag_onglet_'+culture+' .badgeError').show();
}


