    function nodeData(id, path) {
	this.id = id;
	this.path = path;
    }

    function makeRequest(url, node, onCompleteCallback) {
	var nVer = navigator.appVersion;
	var nAgt = navigator.userAgent;
	var browserName  = navigator.appName;
	var fullVersion  = ''+parseFloat(navigator.appVersion); 
	var majorVersion = parseInt(navigator.appVersion,10);
	var nameOffset,verOffset,ix;
	
	// In Opera, the true version is after "Opera" or after "Version"
	if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
	 browserName = "Opera";
	 fullVersion = nAgt.substring(verOffset+6);
	 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
	   fullVersion = nAgt.substring(verOffset+8);
	}
	// In MSIE, the true version is after "MSIE" in userAgent
	else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
	 browserName = "Microsoft Internet Explorer";
	 fullVersion = nAgt.substring(verOffset+5);
	}
	// In Chrome, the true version is after "Chrome" 
	else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
	 browserName = "Chrome";
	 fullVersion = nAgt.substring(verOffset+7);
	}
	// In Safari, the true version is after "Safari" or after "Version" 
	else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
	 browserName = "Safari";
	 fullVersion = nAgt.substring(verOffset+7);
	 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
	   fullVersion = nAgt.substring(verOffset+8);
	}
	// In Firefox, the true version is after "Firefox" 
	else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
	 browserName = "Firefox";
	 fullVersion = nAgt.substring(verOffset+8);
	}
	// In most other browsers, "name/version" is at the end of userAgent 
	else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
	{
	 browserName = nAgt.substring(nameOffset,verOffset);
	 fullVersion = nAgt.substring(verOffset+1);
	 if (browserName.toLowerCase()==browserName.toUpperCase()) {
	  browserName = navigator.appName;
	 }
	}
	// trim the fullVersion string at semicolon/space if present
	if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);
	if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);
	
	majorVersion = parseInt(''+fullVersion,10);
	if (isNaN(majorVersion)) {
	 fullVersion  = ''+parseFloat(navigator.appVersion); 
	 majorVersion = parseInt(navigator.appVersion,10);
	}
	
	var http_request = false;
	
		
	/*if (window.XMLHttpRequest) {*/
		if(browserName!='Microsoft Internet Explorer')
		{
		http_request = new XMLHttpRequest();
	    if (http_request.overrideMimeType) {
		http_request.overrideMimeType('text/xml');
	    }
	    browser = browserName;
	} /*else if (window.ActiveXObject) {*/
		else if(browserName=='Microsoft Internet Explorer')
		{
		browser = browserName;
	    try {
		http_request = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
		try {
		    http_request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {}
	    }
	}	
	
	
	if (!http_request) {
	    alert('Giving up :( Cannot create an XMLHTTP instance');
	}
	http_request.onreadystatechange = function() { alertContents(http_request, node, onCompleteCallback); };
	http_request.open('GET', url, true);
	http_request.send(null);
    }
    
    function alertContents(http_request, node, onCompleteCallback) {
	
	var nVer = navigator.appVersion;
	var nAgt = navigator.userAgent;
	var browserName  = navigator.appName;
	var fullVersion  = ''+parseFloat(navigator.appVersion); 
	var majorVersion = parseInt(navigator.appVersion,10);
	var nameOffset,verOffset,ix;
	
	// In Opera, the true version is after "Opera" or after "Version"
	if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
	 browserName = "Opera";
	 fullVersion = nAgt.substring(verOffset+6);
	 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
	   fullVersion = nAgt.substring(verOffset+8);
	}
	// In MSIE, the true version is after "MSIE" in userAgent
	else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
	 browserName = "Microsoft Internet Explorer";
	 fullVersion = nAgt.substring(verOffset+5);
	}
	// In Chrome, the true version is after "Chrome" 
	else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
	 browserName = "Chrome";
	 fullVersion = nAgt.substring(verOffset+7);
	}
	// In Safari, the true version is after "Safari" or after "Version" 
	else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
	 browserName = "Safari";
	 fullVersion = nAgt.substring(verOffset+7);
	 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
	   fullVersion = nAgt.substring(verOffset+8);
	}
	// In Firefox, the true version is after "Firefox" 
	else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
	 browserName = "Firefox";
	 fullVersion = nAgt.substring(verOffset+8);
	}
	// In most other browsers, "name/version" is at the end of userAgent 
	else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
	{
	 browserName = nAgt.substring(nameOffset,verOffset);
	 fullVersion = nAgt.substring(verOffset+1);
	 if (browserName.toLowerCase()==browserName.toUpperCase()) {
	  browserName = navigator.appName;
	 }
	}
	// trim the fullVersion string at semicolon/space if present
	if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);
	if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);
	
	majorVersion = parseInt(''+fullVersion,10);
	if (isNaN(majorVersion)) {
	 fullVersion  = ''+parseFloat(navigator.appVersion); 
	 majorVersion = parseInt(navigator.appVersion,10);
	}
	var tmpNode;
	browser= browserName;
	
	if (http_request.readyState == 4) {
	    if (http_request.status == 200) {
		if (browser == 'Microsoft Internet Explorer') {
			
		    var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
		    xmldoc.loadXML(http_request.responseText);
		} else {
			
		    var xmldoc = http_request.responseXML;
		}

		var root_node = xmldoc.getElementsByTagName('category');
	
		for (i = 0; i < root_node.length; i++) {
		    var id = root_node.item(i).getElementsByTagName('id').item(0).firstChild.data;
		    var childCount = root_node.item(i).getElementsByTagName('childcount').item(0).firstChild.data;
		    var productsCount = root_node.item(i).getElementsByTagName('productscount').item(0).firstChild.data;
		    var multiExpand = root_node.item(i).getElementsByTagName('multiexpand').item(0).firstChild.data;
		    var path = root_node.item(i).getElementsByTagName('path').item(0).firstChild.data;   
			
		//alert(multiExpand);	       
        /*alert(id);
		alert(childCount);   
		alert(productsCount); 
		alert(multiExpand);
		alert(path);*/
		    if (productsCount > 0 || childCount == 0) {
		        tmpNode = new YAHOO.widget.MenuNode({label: root_node.item(i).getElementsByTagName('name').item(0).firstChild.data, href: path }, node, false);
		    } else {
			tmpNode = new YAHOO.widget.MenuNode({label: root_node.item(i).getElementsByTagName('name').item(0).firstChild.data }, node, false);
		    }
		    
		    if (multiExpand == 1) {
			tmpNode.multiExpand = true;
		    }
		    
		    tmpNode.data = new nodeData(id, path);
		    if (childCount > 0) {
			tmpNode.setDynamicLoad(loadDataForNode);
		    }
		}
		onCompleteCallback();
	    } else {
		alert('There was a problem with the request.');
	    }
	}
    }

