var tree = null;
var sb = null;
var p = {};
var DOM = null;
var isIE = false;
var req;
function loadSideBar()
{
	if(navigator.userAgent.indexOf("Safari")!=-1){
		
		p.ie = false;
		loadXMLDoc("categories.xml");
		sb = new sideBar(tree);
		sb.div = sbcont;
		buildTopicList();
				
	}
	else{
		DOM = new SoftXMLLib();
		if ( document.all ) p.ie = true;
		else p.ie = false;
		var sbcont = document.getElementById("sideBarContainer");
		if ( typeof sbcont != "undefined")
		{
			DOM.load("categories.xml");
			sb = new sideBar(tree);
			sb.div = sbcont;
			sb.draw();
		}
	}
}

function sw(tx){
if (document.images)
  {
   swin=window.open(tx,"an","toolbar=no,member=no,location=no,directories=no,scrollbars=yes,status=no,copyhistory=no,resizable=yes,height=620,width=1000");
   swin.focus();
  }
}

function sideBar(tree)
{
	this.tree = tree;
	this.numOfCats = 0;
	this.div = null;
	this.catNumber = (typeof catNumber != "undefined")?catNumber:0;
	this.subcatNumber = (typeof subcatNumber != "undefined")?subcatNumber:-1;
	this.selcat = this.catNumber;
}
sideBar.prototype.toggleSubs = toggleSubs;
function toggleSubs(no)
{
	if ( p.ie ) 
	{
		var subs = this.tree.documentElement.selectNodes("cat")[no].selectNodes("subs");
		if (!subs.length)return;
	}
	var subs = document.getElementById("subs_"+no);
	var catimg = document.getElementById("catimg_"+no);
	var lnk = document.getElementById("lnk_"+no);
	var tbl = document.getElementById("catTable_"+no);
	
	var prevSubs = null ;
	try 
	{ 
		
		if (no != this.selcat)
		{
			//prevSubs = document.getElementById("subs_"+this.selcat);//eval("subs_"+this.selcat);
			prevSubs = document.getElementById("ani_div_"+this.selcat);//eval("subs_"+this.selcat); 
		}
	}
	catch(e) {  }
	var previmg = document.getElementById("catimg_"+this.selcat);
	var prevlnk = document.getElementById("lnk_"+this.selcat);
	var prevTbl = document.getElementById("catTable_"+this.selcat);
	
	var anidiv = document.getElementById("ani_div_"+no);
	//var ss = subs.style;
	var ss = anidiv.style;
	
	if (ss.display == "block" ) 
	{
		catimg.src = catimg.src.replace("green_arrow_down","green_arrow");
		lnk.className = "sb_label";
		tbl.bgColor = "";
		ss.display = "none";
	}
	else 
	{	
		prevTbl.bgColor = "";
		prevlnk.className = "sb_label";
		previmg.src = previmg.src.replace("green_arrow_down","green_arrow");
		
		catimg.src = catimg.src.replace("green_arrow","green_arrow_down");
		lnk.className = "sb_label_sel";
		
		this.selcat = no;
		tbl.bgColor = "white";
		if ( p.ie ) 
		{
			anidiv.filters.item(0).enabled = true;
			anidiv.filters.item(0).apply();
			anidiv.filters.item(0).play(duration=1);
		}
		ss.display = "block";
	}
	
	if ( prevSubs ) prevSubs.style.display = "none";
}
sideBar.prototype.draw = draw;
function draw()
{
	if (typeof this.tree != "object" ) return;
	var cats = DOM.selectNodes("//cat",this.tree.documentElement);
	var cat = null;
	this.numOfCats = cats.length;
	with([])
	{
		for (i=0; i<cats.length;i++ )
		{
			var cat = cats[i].Nodes;
			var selTblBG = "";
			var selRowImg = "green_arrow";
			var selLinkClass = "sb_td";
			var display = "none";
			var url = cat.url;
			var onclick = '';
			if ( url == '' )
			{
				url = 'javascript:void(0)';
				onclick = 'onclick=sb.toggleSubs('+i+')';
			}
			if ( this.catNumber == i )
			{
				selTblBG = "white";
				selRowImg = "green_arrow_down";
				selLinkClass = "sb_label_sel";
				display = "block";
			}
			push('<table width="100%" height="10" class="sb_table" bgcolor="'+selTblBG+'" id="catTable_'+i+'" border="0" cellpadding="0" cellspacing="0">');
				push('<tr>');
					push('<td class="sb_td" valign="top" ID="CatTD_'+i+'">');
						push('<table width="100%" border="0" cellpadding="0" cellspacing="0" ID="CatInnerTable_'+i+'">');
							push('<tr>');			

push('<td width="15"><img id="catimg_'+i+'" src="IMG/'+selRowImg+'.gif"></td>');
								
push('<td class="sb_label" '+onclick+'><a id="lnk_'+i+'" class="'+selLinkClass+'" href="'+url+'">'+cat.name+'</a></td>');
							push('</tr>');
						push('</table>');
					push('</td>');
				push('</tr>');

			var subs = DOM.selectNodes("subs/sub",cats[i].self);//var subs = cat.selectNodes("subs/sub");
			var sub = null;
			if (subs.length)
			{	
				
		push('<tr id="subs_'+i+'" style="">');
					push('<td width="100%" id="subsTD_'+i+'">');
						push('<div id="ani_div_'+i+'" class="sub_div" style="display:'+display+';">');
							push('<table width="100%" cellpadding="0" cellspacing="0" ID="SubTable_'+i+'" >');
							for ( j=0; j<subs.length ; j++ )
							{
								sub = subs[j].Nodes; 
								var selSubLinkClass = "sb_sub_label";
								if ( this.catNumber == i && this.subcatNumber == j )
								{
									selSubLinkClass = "sb_sub_label_sel";
								}
								var url = sub.url;
								var onclick = '';
								if ( url == '' )
								{
									url = 'javascript:void(0)';
									onclick = 'onclick=sb.toggleSubs('+i+')';
								}
								
push('<tr align="right" valign="top" >');
push('<td width="15"><img src="IMG/bulllet_dark.gif">');
									push('<td class="sb_sub_label"><a class="'+selSubLinkClass+'" href="'+sub.url+'">'+sub.name+'</a></td>');
								push('</tr>');
							}
							push('</table>');
						push('</div>');
					push('</td>');
				push('</tr>');
				
			}
				push('<tr height="1">');
					push('<td><img src="IMG/nav_dots.gif"></td>');
				push('</tr>');
			push('</table>');
		}
		
		this.div.innerHTML =  join('');
	}
}
function SoftXMLLib()
{
	this.loadXMLError = 0;
	this.loadError = 0;
	this.load = load;
	this.selectNodes = selectNodes;
	this.self = null;
}
var doc;
function load(xmlfile) 
{
	if (document.implementation && document.implementation.createDocument) 
	{
		tree = document.implementation.createDocument("", "", null);
		tree.async=false;
	} 
	else if (window.ActiveXObject) 
	{
		tree = new ActiveXObject("MSXML2.DOMDocument");
		tree.async=false;
	} 
	else 
	{
		alert('Your browser can\'t handle this script');
		return;
	}
	l=tree.load(xmlfile);
	if(!l) 
	{
		this.loadError = 1;
	} 
	else 
	{
		SoftXMLLib.prototype.documentElement = tree.documentElement;
	}
}
function selectNodes(xpath,node)
{
	var selectedNodes = new Array();
	doc = node;
	if(doc==null)
	{
		alert("Error loading tree!");
		return;
	}
	if(document.all)
	{
		var cxpath = new String(xpath).toLowerCase();
		f = doc.selectNodes(xpath);
		for(var i=0;i<f.length;i++) 
		{
			var elemattr="";
			var curAttributes = f[i].attributes;
			if(curAttributes.length>0) 
			{
				for(y=0;y<curAttributes.length;y++) 
				{
					if(y<curAttributes.length-1) 
					{
						var dt=",";
					} 
					else 
					{
						var dt="";
					}
					elemattr+=curAttributes[y].nodeName + ":\"" + curAttributes[y].nodeValue + "\"" + dt;
				}
			}
			var t = eval("[{" + elemattr + "}]");
			if(f[i].parentNode.nodeName == this.documentElement.nodeName)
			{
				this.self = f[i];
			} 
			else 
			{
				this.self = f[i].parentNode;
			}
			var c = f[i].childNodes;
			var o = {}
			for(var t=0;t<c.length;t++)
			{	
				o[c[t].nodeName]=c[t].text;
			};
			selectedNodes[selectedNodes.length] = {Nodes:o,attributes:t,self:this.self};
		}
		return selectedNodes;
	} 
	else 
	{
		if(navigator.userAgent.indexOf("Firefox")!=-1)
		{
			var versionindex=navigator.userAgent.indexOf("Firefox")+8
			if (parseInt(navigator.userAgent.charAt(versionindex))>=1)
			var xpe = new XPathEvaluator();
			var nsResolver = xpe.createNSResolver(doc.ownerDocument.documentElement);
			var headings = xpe.evaluate(xpath, doc, nsResolver, 0, null);
		} 
		else 
		{
			var headings = document.evaluate(xpath, doc, null, XPathResult.ANY_TYPE,null);
		}
		var thisHeading = headings.iterateNext();
		while (thisHeading) 
		{
			var elemattr="";
			var curAttributes = thisHeading.attributes;
			if ( curAttributes.length > 0 ) 
			{
				for (var i=0 ; i < curAttributes.length;i++ ) 
				{
					if ( i < curAttributes.length-1 ) 
					{
						var dt=",";
					} 
					else 
					{
						var dt="";
					}
					elemattr+=thisHeading.attributes[i].nodeName + ":\"" + thisHeading.attributes[i].nodeValue + "\"" + dt;
				}
			}	
			var t = eval("[{" + elemattr + "}]");
			if(thisHeading.parentNode.nodeName == this.documentElement.nodeName) 
			{
				this.self = thisHeading;
			} 
			else 
			{
				this.self = thisHeading.parentNode;
			}
			var c = thisHeading.childNodes;
			var o = {}
			for(var t=0;t<c.length;t++)
			{
				if ( c[t].nodeName == '#text' ) continue;
				o[c[t].nodeName]=c[t].textContent;
			};
			selectedNodes[selectedNodes.length] = {Nodes:o,attributes:t,self:this.self};
			thisHeading = headings.iterateNext();
		}
		return selectedNodes;
	};
}

//---------------------------------------------------------------------------------------------------
//functions for safari to load the menu

//loads the xml 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();
        }
    }
}

//rebuilds menu if necessary
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            //clearTopicList();
            buildTopicList();
         } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
         }
    }
}
//gets a string from xml tags
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        
        result = parentElem.getElementsByTagName(local)[index];
        
        if (result == null){
			return("");
		 } 
        
    }
    
    
    if (result && result.hasChildNodes()) {
		
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else if (result.firstChild.nodeValue != null){
			
            return result.firstChild.nodeValue;    		
        }
        else{
			return "";
		}
    } else {
        return "";
    }
}
//builds menu
function buildTopicList() {
    
    var items = req.responseXML.getElementsByTagName("cat"); //gets all categories
    var menu1 = ''; //string to hold the menu for display
    // loop through <cats> elements, and add each nested
    // <cat> element to menu1
    for (var i = 0; i < items.length; i++) {
		
		var cat = getElementTextNS("", "name", items[i], 0);
		
		var selTblBG = "";
		var selRowImg = "green_arrow";
		var selLinkClass = "sb_td";
		var display = "none";
		var url = getElementTextNS("", "url", items[i], 0);
		var onclick = '';
		
		if ( url == '' )
		{
			url = 'javascript:void(0)';
			onclick = 'onclick=sb.toggleSubs('+i+')';
		}
		if ( this.catNumber == i )
		{
			selTblBG = "white";
			selRowImg = "green_arrow_down";
			selLinkClass = "sb_label_sel";
			display = "block";
		}
		
		//appendToSelect(select, i,document.createTextNode(cat));
		menu1 += '<table width="100%" height="10" class="sb_table" bgcolor="'+selTblBG+'" id="catTable_'+i+'" border="0" cellpadding="0" cellspacing="0">'+
				 '<tr>'+'<td class="sb_td" valign="top" ID="CatTD_'+i+'">'+'<table width="100%" border="0" cellpadding="0" cellspacing="0" ID="CatInnerTable_'+i+'">'+
				 '<tr>'+'<td width="15"><img id="catimg_'+i+'" src="IMG/'+selRowImg+'.gif"></td>'+
				 '<td class="sb_label" '+onclick+'><a id="lnk_'+i+'" class="'+selLinkClass+'" href="'+url+'">'+cat+'</a></td>'+
				 '</tr>'+'</table>'+'</td>'+'</tr>';
							
			
		s = getElementTextNS("sub", "name", items[i], 1);
		if (s != ""){
			menu1 += '<tr id="subs_'+i+'" style="">'+'<td width="100%" id="subsTD_'+i+'">'+
				         '<div id="ani_div_'+i+'" class="sub_div" style="display:'+display+';">'+
						 '<table width="100%" cellpadding="0" cellspacing="0" ID="SubTable_'+i+'" >';
			for (var j = 2 ; s != "" ; j++){
				
						 
				var selSubLinkClass = "sb_sub_label";
				if ( this.catNumber == i && this.subcatNumber == j )
				{
					selSubLinkClass = "sb_sub_label_sel";
				}
			    //var urls = 'l'; 	
				var urls = getElementTextNS("", "url", items[i], j-1);
				var onclick = '';
				if ( urls == '' )
				{
					urls = 'javascript:void(0)';
					onclick = 'onclick=sb.toggleSubs('+i+')';
				}
								
				menu1 += '<tr align="right" valign="top" >'+'<td width="15"><img src="IMG/bulllet_dark.gif">'+
						'<td class="sb_sub_label"><a class="'+selSubLinkClass+'" href="'+urls+'">'+s+'</a></td>'+
						'</tr>';
				s = getElementTextNS("sub", "name", items[i], j);
			}
			menu1 += '</table>'+'</div>'+'</td>'+'</tr>';
				
		}
		menu1 += '<tr height="1">'+'<td><img src="IMG/nav_dots.gif"></td>'+'</tr>'+'</table>';
				
				 
	}
			
	document.getElementById("sideBarContainer").innerHTML = menu1;
     
}
