var _xsl=new Object();
var _xml=new Object();
function transformXML(xsl,xml,obj,append){
	if (window.XSLTProcessor) {
		var proc = new XSLTProcessor();	
		proc.importStylesheet(xsl);
		var testDoc = proc.transformToFragment(xml, document);
		if(!append) for(var i=obj.childNodes.length-1;i>=0;--i) obj.removeChild(obj.childNodes[i]);
		obj.appendChild(testDoc);
	} else {
		try{
			if(!append) obj.innerHTML = xml.transformNode(xsl);
			else obj.innerHTML += xml.transformNode(xsl);
		}catch(e){
			obj.appendChild(xml);
			alert("ERREUR AJOUT CONTENU : "+e.name+' '+e.message);
		}
	}
}
function loadXML(xml, xsl, destination, param, append, oncomplete){
	if(!append){
		execCallback(destination, '_ondestroy');
		destination.innerHTML='<center><img src="layout/waiting.gif" width="50" height="50" /></center>';
	}
	if(_xsl[xsl]==null){
		var myAjax = new Ajax.Request(xsl, {method: 'get', onComplete: function(request){
			_xsl[xsl] = request.responseXML;
			loadXML(xml, xsl, destination, param, append, oncomplete);
		}, onFailure: function(request){
			alert("ERREUR LOADING XSL :  "+xsl+" "+request.status);
		}});
	} else {
		if(typeof xml == 'string'){
			//alert("PARAMS : " +param);
			var myAjax = new Ajax.Request(xml, {parameters: param, method: 'post', onComplete: function(request){
				//alert(request.responseText);
				_xml[xml]=request.responseXML;
				loadXML(request.responseXML, xsl, destination, param, append, oncomplete);
			}, onFailure: function(request){
				alert("ERREUR LOADING XML :  "+xml+" "+/*param+*/" "+request.status);
			}});
		} else {
			if(append)
				for(var i=destination.childNodes.length-1;i>=0;--i)
					if(destination.childNodes[i].tagName && destination.childNodes[i].tagName.toLowerCase()=="input" && destination.childNodes[i].type=="hidden" && destination.childNodes[i].name=="_onload")
						destination.removeChild(destination.childNodes[i]);

			transformXML(_xsl[xsl], xml,destination,append);
			//alert(destination.innerHTML);
			if(typeof oncomplete == 'function')
				oncomplete(xml);
			setTimeout(function(){execCallback(destination, '_onload');},500);
			
		}
	}
}
function execCallback(parent, name){
	if(parent && parent.childNodes)
		$A(parent.childNodes).each(function(child,i){
			if(child.tagName && child.tagName.toLowerCase()=='input' && child.type && child.type.toLowerCase()=='hidden' && child.name && child.name==name){
				eval(child.value);
			}
			else{
				execCallback(child, name);
			}
		});
}
function str2url(str){
	return str.replace(/#/g,"%23").replace(/&/g,"%26").replace(/=/g,"%3d").replace(/\n/g," ").replace(/à/g,"%e0").replace(/â/g,"%e2").replace(/ç/g,"%e7").replace(/è/g,"%e8").replace(/é/g,"%e9").replace(/ê/g,"%ea").replace(/î/g,"%ee").replace(/ô/g,"%f4").replace(/ù/g,"%f9").replace(/û/g,"%fb").replace(/;/g,"%3b").replace(/\//g,"%2f").replace(/\?/g,"%3f").replace(/:/g,"%3a").replace(/\+/g,"%3d").replace(/</g,"%3c").replace(/>/g,"%3e").replace(/ä/g,"%E4").replace(/ë/g,"%EB").replace(/ï/g,"%EF").replace(/ö/g,"%F6").replace(/ü/g,"%FC").replace(/«/g,"\"").replace(/»/g,"\"").replace(/’/g,"'").replace(/‘/g,"'").replace(/…/g,"...").replace(/œ/g,"oe");
}
function getActionFromForm(formNode){
	var action = "";
	for(var i=0;i<formNode.elements.length;++i){
		var el = formNode.elements[i];
		if(el.tagName.toLowerCase()=="input" && el.type=="submit") continue;
		if(el.tagName.toLowerCase()=="input" && (el.type=="checkbox" || el.type=="radio") && !el.checked) continue;
		if(el.tagName.toLowerCase()=='input' && el.type=='hidden' && (el.name=='_onload' || el.name=='_ondestroy')) continue;
		if(action!="") action+="&";
		
		var value=null;
		if(el.tagName.toLowerCase()=="select"){
			if(el.type=='select-multiple'){
				for(var j=0;j<el.options.length;++j)
					if(el.options[j].selected) action += el.name+"[]="+str2url(el.options[j].value)+"&";
				continue;
			} else	value = el.options[el.selectedIndex].value;
		}
		else if(el.tagName.toLowerCase()=="textarea" && el.id && el.id.substring(0,17)=='_wysiwyg_content_'){
			WysIWyg.all[el.id.substring(17)].transfer();
			value = el.value;
		}
		else value = el.value;
		
		action += el.name+"="+str2url(value);
	}
	return action;
}
