function myGetHTTPObject(p_tab, p_id, p_url, p_loading, p_typeResponse) {
	var v_xmlhttp = false;
	/* Compilation conditionnelle d'IE */
		/*@cc_on
	@if (@_jscript_version >= 5)
	try {
		v_xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e) {
		try {
			v_xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (E) {
			v_xmlhttp = false;
		}
	}
	@else
	v_xmlhttp = false;
	@end @*/
	/* on essaie de creer l'objet si ce n'est pas deja  fait */
	if (!v_xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			v_xmlhttp = new XMLHttpRequest();
		}
		catch (e) {
			v_xmlhttp = false;
		}
	}
	if (v_xmlhttp) {
		/* on definit ce qui doit se passer quand la page repondra */
		v_xmlhttp.open("GET",p_url,true);
		v_xmlhttp.onreadystatechange=function() {
			if (v_xmlhttp.readyState == 4) {
				if (v_xmlhttp.status == 200 || v_xmlhttp.status == 304 ) {
					var vXMLDoc;
					if (window.ActiveXObject){
						vXMLDoc = new ActiveXObject("Microsoft.XMLDOM");
						vXMLDoc.async = false;
						vXMLDoc.loadXML(v_xmlhttp.responseText);
					} else {
					    var vParser = new DOMParser();
						vXMLDoc = vParser.parseFromString(v_xmlhttp.responseText, "text/xml");
					}
					tabXML[p_url] = vXMLDoc;
					updatePageList(p_tab, p_id, p_url, p_loading, vXMLDoc);
				}
			}
		}
		v_xmlhttp.send( null );
	}
	return v_xmlhttp;
}

var tabXML = new Array();
var tabChild = new Array();
var tabNumTR = new Array();

function loadDetailXML (p_tab, p_elt, p_url, e) {

	var v_doc = p_elt.ownerDocument;
	var v_table =p_elt.parentNode;
	var v_trNext = p_elt.nextSibling;
	
	// Verify if event is for me (firefox)
	if (typeof (e) != "undefined") {
		if (e.target.nodeName == "SPAN") {
			return;
		}
	}
	// Verify if event is for me (IE)
	if (typeof (event) != "undefined") {
		if (event.srcElement.nodeName == "SPAN") {
			return;
		}
	}
	
	// Change function for close
	p_elt.onclick = function (e) {closeDetail (p_tab, this, p_url, e); }
	
	// Change expand / collapse image
	changeExpandCollapseImage(p_elt);
	
	//Create loading
	var loadingRow = v_doc.createElement('tr');
	var loadingCell = v_doc.createElement('td');
	mySetAttribute(loadingCell,'colspan', p_elt.getElementsByTagName("td").length);
	var txtNode = v_doc.createTextNode('Loading...');
	loadingCell.appendChild (txtNode);
	loadingRow.appendChild (loadingCell);
	var v_loading = v_table.insertBefore(loadingRow, v_trNext);

	if (tabXML[p_url]) {
		// Already loaded
		updatePageList(p_tab, p_elt.id, p_url, v_loading, tabXML[p_url]);
	}
	else {
		// Not loaded
		if (typeof(tabChild[p_tab]) == "undefined") {
			tabChild[p_tab] = new Array();
			tabNumTR[p_tab] = 0;
		}
		if (p_elt.id) {
			v_id = p_elt.id;
		}
		else {
			v_id = p_tab+"."+tabNumTR[p_tab];
			p_elt.id = v_id;
			tabNumTR[p_tab] ++;
		}

		myGetHTTPObject(p_tab, v_id, p_url, v_loading, "rien");
	}
}

function changeExpandCollapseImage(p_elt) {
	// Change expand / collapse image
	var myImgExpandCollapse = p_elt.getElementsByTagName("td")[0].getElementsByTagName("img");
	if (myImgExpandCollapse.length > 0) {
		var exp = new RegExp(/(.*)(switch[a-b])(\..*)/);
		var tabElt = exp.exec(myImgExpandCollapse[0].getAttribute('src'));
		if (tabElt != null) {
			var switchStr = (tabElt[2]=='switcha') ? 'switchb':'switcha';
			setAttributeDom(myImgExpandCollapse[0],'src',tabElt[1]+switchStr+tabElt[3]);
		}
	}
}

function closeDetail (p_tab, p_elt, p_url, e) {
	var i;
	var v_child;
	var v_parent = p_elt.parentNode;
	var v_id = p_elt.id;

	// Verify if event is for me (firefox)
	if (typeof (e) != "undefined") {
		if (e.target.nodeName == "SPAN") {
			return;
		}
	}
	// Verify if event is for me (IE)
	if (typeof (event) != "undefined") {
		if (event.srcElement.nodeName == "SPAN") {
			return;
		}
	}
	
	if (p_url) {
		p_elt.onclick = function (e) {loadDetailXML (p_tab, this, p_url, e);}
		// Change expand / collapse image
		changeExpandCollapseImage(p_elt);
	}
	
	// Verify if there is child
	if (tabChild[p_tab][v_id]) {
		for (var i=0; i < tabChild[p_tab][v_id].length; i++) {
			v_child = document.getElementById(tabChild[p_tab][v_id][i]);
			if (v_child) {
				if (v_child.id) {
					closeDetail (p_tab, v_child);
				}
				v_parent = v_child.parentNode;
				if (v_child) {
					v_parent.removeChild(v_child);
				}
			}
		}
	}
}

function updatePageList(p_tab, p_id, p_url, p_loading, p_xml) {
	var i;
	var v_child;
	var v_doc = p_loading.ownerDocument;
	var v_table = p_loading.parentNode;
	
	// Save xml in cache
	tabChild[p_tab][p_id] = new Array();
	var nbTr = 0;
	for (i=0; i < p_xml.firstChild.childNodes.length; i++) {
		v_child = p_xml.firstChild.childNodes[i];
		if (v_child.nodeName == "tr") {
			//alert(p_id+"."+nbTr);
			tabChild[p_tab][p_id][nbTr] = p_id+"."+nbTr;
			traiteHTML (v_doc, v_table, v_child, true, p_loading, p_id+"."+nbTr);
			nbTr ++;
		}
	}
	v_table.removeChild(p_loading);
}


function mySetAttribute (p_elt, p_name, p_value) {
	var v_name = p_name.toLowerCase();
	if  (v_name=='class') {
		p_elt.className = p_value;
	}
	else if  (v_name=='colspan') {
		p_elt.colSpan = p_value;
	}
	else if (v_name=='onclick') {
		p_elt.onclick = function() { eval(p_value) }
	}
	else if (v_name=='onmouseover') {
		p_elt.onmouseover = function() { eval(p_value) }
	}
	else if (v_name=='style') {
		p_elt.style.cssText = p_value;
	}
	else {
		p_elt.setAttribute(p_name,p_value);
	}
}

function replaceAllSpace (p_str) {
	var v_ch = p_str.replace(/ /g,'');
	v_ch = v_ch.replace(/\t/g,'');
	v_ch = v_ch.replace(/\n/g,'');
	return v_ch;
}

function myTrim (p_str) {
	var v_ch = p_str.replace(/\n/g,' ');
	v_ch = v_ch.replace(/\t/g,' ');
	v_ch = v_ch.replace(/  /g,' ');
	return v_ch;
}

function getIndent (p_nb) {
	var i;
	var ch ="";
	for (i=0; i < p_nb-2; i++) {
		ch = ch + '&nbsp;&nbsp;&nbsp;&nbsp;';
	}
	return ch;
}

function traiteHTML (p_doc, p_parent, p_node, p_first, p_trNext, p_id) {
	var i;
	var ch = "";
	var v_cur;
	if (p_node.nodeType != 3) {
		// Create node
		v_cur = p_doc.createElement (p_node.nodeName);
		if (p_first) {
			v_cur.id = p_id;
		}
		// Attribut of node
		var v_attr;
		if (p_node.attributes) {
			for (i=0; i < p_node.attributes.length; i++) {
				v_attr = p_node.attributes[i];
				mySetAttribute(v_cur, v_attr.name, v_attr.value);
			}
		}
		if ((p_node.nodeName == "td") && (! p_first) && (p_trNext > 0)) {
			mySetAttribute(v_cur, "style", "padding-left:"+((p_trNext-1)*15)+"px;");
		}
		
		var v_curForChild = v_cur;
		if (p_node.nodeName == 'table') { // For IE create tbody
			v_curForChild = p_doc.createElement ("tbody");
			v_cur.appendChild(v_curForChild);
		}

		// Process childs
		var v_child;
		var v_firstTD = true;
		var v_firstText = true;
		if (p_node.childNodes) {
			for (i=0; i < p_node.childNodes.length; i++) {
				v_child = p_node.childNodes[i];
				if (((v_child.nodeType == 3) || (v_child.nodeName == 'img')) && (p_node.nodeName == "td") && (v_firstText)) {
					v_firstText = false;
					ch += traiteHTML (p_doc, v_curForChild, v_child, false, p_trNext, p_id);
				}
				else if ((p_first) && (v_firstTD) && (v_child.nodeName == 'td')) {
					v_firstTD = false;
					ch += traiteHTML (p_doc, v_curForChild, v_child, false, p_id.split(".").length, p_id);
				}
				else {
					ch += traiteHTML (p_doc, v_curForChild, v_child, false, 0, p_id);
				}
			}
		}
	}
	else {
		if (replaceAllSpace (p_node.nodeValue) != "") {
			v_cur = p_doc.createTextNode (myTrim(p_node.nodeValue));
		}
		else {
			v_cur = p_doc.createTextNode (" ");
		}
	}
	if (p_first) {
		p_parent.insertBefore(v_cur, p_trNext);
	}
	else  {
		p_parent.appendChild(v_cur);
	}
}


