var current_el = null;
var loading;
var began = false;
var xsltloaded = false;

// global request and XML document objects
var req;
var menuXsl;

// Load the XSLT for menus once
menuXsl = loadXSLTDoc("menu-library.xsl");

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadXMLDoc(url) {	
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        //isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function loadXSLTDoc(url)
{
    var xsldoc;
    
    if (window.XSLTProcessor)
    {
        // support Mozilla/Gecko based browsers
        xsldoc = document.implementation.createDocument("", "", null);
        xsldoc.addEventListener("load", onXslLoad, false);
        xsldoc.load(url);
    }
    else if(window.ActiveXObject)
    {
        // support Windows / ActiveX
        xsldoc = new ActiveXObject("Microsoft.XMLDOM");
        xsldoc.ondataavailable = onXslLoad;
        xsldoc.load(url);
    }
    
    return xsldoc;
}

function onXslLoad()
{
    xsltloaded = true;
}

// handle onreadystatechange event of req object
function processReqChange(){
	// only if req shows "complete"
	if (req.readyState == 4) {
		// only if "OK"
		//alert(req.status)		
		if (req.status == 200) {		
			//alert(req.responseText.substring(req.responseText.indexOf('<div>')))			
			// ...processing statements go here...
			
			
			response  = req.responseXML;
			
			transformXml(response, menuXsl, current_el);
        
            loading.style.display = 'none';
			
			//alert(response);

			//method = req.responseXML.getElementsByTagName('method')[0].firstChild.data;
			//result = response.getElementsByTagName('result')[0].firstChild.data;
			//var start = req.responseText.indexOf('<result>') + 8
			//var stop = req.responseText.indexOf('</result>')
			//result = req.responseText.substring(start,stop);
			
			//result = req.responseXML;

			//eval(method + '(\'\', result)');
		} else {
			alert("There was a problem retrieving the XML data:\n" + req.statusText);
		}
	}
}
      
function getItems(input, response){	
    
    //alert(response);

	if (response != ''){ 		
	    // Response mode	
	    //alert(response)
	    
        //current_el.innerHTML = response;
        
        //transformXml(response, menuXsl, current_el);
        
        loading.style.display = 'none';
	}else{
		// Input mode
	    var url = "MenuCallbackLibrary.aspx?menuid=" + input + "&hash=" + Math.random();
		//var url  = "process_request.asp?menuid=" + input + "&hash=" + Math.random();
		//alert(url)
		loadXMLDoc(url);		
	}
}

function transformXml(xml, xsl, theDiv)
{
    if (window.ActiveXObject)
    {
        ex=xml.transformNode(xsl);
        theDiv.innerHTML=ex;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (window.XSLTProcessor)
    {
        xsltProcessor=new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);
        ex = xsltProcessor.transformToFragment(xml,document);
        
        //alert(ex);
        theDiv.innerHTML = "";
        theDiv.appendChild(ex);
        
        //alert(theDiv.innerHTML);
    }
}

function loadItems(id,c){ 
	var img = null;
	if(arguments.length<2){
		c = "C" + id;
		img = document.getElementById("I"+id);
	}
	//alert(c)
	current_el = document.getElementById(c);
	if(current_el.style.display == 'none'){
	    current_el.style.display = ''
	    if (img) {
	        img.src = "/images/minus.gif";
	    }
	}else{
		current_el.style.display = 'none'
		if(img){
		    img.src = "/images/plus.gif";
		}
	}
	if(current_el.innerHTML == ''){
		loading.style.display = ''
		getItems(id,'');		
	}
}

function buildTree(id){
	if (!began){
		loading = document.getElementById("Loading")
		document.getElementById(id).style.display = 'none';
		began = true;
	}
	loadItems(0,id)
}


