function addLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}

var XML=new Object();

XML.load = function(url) {
  var xmldoc = XML.newDocument();
  xmldoc.async = false;
  xmldoc.load(url);
  return xmldoc;
};

XML.newDocument = function(rootTagName, namespaceURL) {
    if (!rootTagName) rootTagName = "";
    if (!namespaceURL) namespaceURL = "";

    if (document.implementation && document.implementation.createDocument) {
        // This is the W3C standard way to do it
        return document.implementation.createDocument(namespaceURL,
                       rootTagName, null);
    }
    else { // This is the IE way to do it
        // Create an empty document as an ActiveX object
        // If there is no root element, this is all we have to do
        var doc = new ActiveXObject("MSXML2.DOMDocument");

        // If there is a root tag, initialize the document
        if (rootTagName) {
            // Look for a namespace prefix
            var prefix = "";
            var tagname = rootTagName;
            var p = rootTagName.indexOf(':');
            if (p != -1) {
                prefix = rootTagName.substring(0, p);
                tagname = rootTagName.substring(p+1);
            }

            // If we have a namespace, we must have a namespace prefix
            // If we don't have a namespace, we discard any prefix
            if (namespaceURL) {
                if (!prefix) prefix = "a0"; // What Firefox uses
            }
            else prefix = "";

            // Create the root element (with optional namespace) as a
            // string of text
            var text = "<" + (prefix?(prefix+":"):"") + tagname +
                (namespaceURL
                 ?(" xmlns:" + prefix + '="' + namespaceURL +'"')
                 :"") +
                "/>";
            // And parse that text into the empty document
            doc.loadXML(text);
        }
        return doc;
    }
};

var http_request = false;
var debug = true;
function makeRequest(url, query, action, method)
{
	if(!url) url = document.location.href;

  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
     http_request = new XMLHttpRequest();
     if (http_request.overrideMimeType) {
        http_request.overrideMimeType('text/xml');
     }
  } else if (window.ActiveXObject) { // IE
     try {
        http_request = new ActiveXObject('Msxml2.XMLHTTP');
     } catch (e) {
        try {
           http_request = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e) {}
     }
  }
  if (!http_request) {
     alert('Cannot create XMLHTTP instance');
     return false;
  }
  http_request.onreadystatechange = function ()
  {
	  //if(action.length > 1)alert(action);
		if (http_request.readyState == 4)
		{
		  //set_prop('progress_box','visibility','hidden');
	  	for(var i=0;i<action.length;i++)
	  	{
	  		//alert(action[i]);
	  		eval(action[i])
	  	}
	  }
  }

  if(method=='POST')
  {
  	// POST ----
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	  // FOR TESTING: document.getElementById('debug').innerHTML = url +'?' + query;
	  http_request.send(query);
	  //alert(query);
	}
	else
	{
		// GET -----
	  http_request.open('GET', url + '?' + query, true);
	  http_request.send(null);
	 }
}

function alertContents()
{
  if (http_request.readyState == 4)
  {
     if (http_request.status == 200)
     {
     		var list = new Array();
        var xmldoc = http_request.responseXML;

       /*
        var parser = new DOMParser();
        dom = parser.parseFromString(xmldoc, 'text/xml');
        delete parser;
        */

        //var dom = parse(xmldoc);

	      var menu = xmldoc.getElementsByTagName('menu')[0];
				var text = '';
				if(menu)
				{
					for (var i = 0; i < menu.childNodes.length; i++)
					{
						if(menu.childNodes[i].nodeName=='submenu')
						{
							var arr = [];
							for (var x = 0; x < data.childNodes[i].childNodes.length; x++)
							{
								var tmp = submenu.childNodes[i].childNodes[x];
								if(tmp.nodeType==1) arr[arr.length] = window.ActiveXObject ? tmp.text : tmp.textContent;
							}
							if(arr.length) list[list.length] = arr;
						}
					}
				}

       	list_search_results('debugger', list);
     }
     else
     {
       alert('There was a problem with the request.');
     }
  }
}

function urldecode(str)
{
	if(str) str = str.replace('&amp;','&');
	return str;
}

function traverse(tree,str)
{
	if(tree.ChildNodes.length)
	{
		str +='<ul><li>';
		str +='<b>'+tree.tagName+' : </b>';
		var nodes=tree.childNodes.length;
		for(var i=0; i<tree.childNodes.length; i++)
		        traverse(tree.childNodes(i),str);
		str += '</li></ul>';
	}
	else
		return str;
}

function parse(xml) {
    var dom;
    try
    {
        dom = new ActiveXObject('Microsoft.XMLDOM');
        dom.async = false;
        dom.loadXML(xml);
    }
    catch (error)
    {
        try
        {
            var parser = new DOMParser();
            dom = parser.parseFromString(xml, 'text/xml');
            delete parser;
        } catch (error2)
        {
            if (debug)
                alert('XML parsing is not supported.');
        }
    }
    return dom;
}

function serialize(dom)
{
    var xml = dom.xml;
    if (xml == undefined)
    {
        try
        {
            var serializer = new XMLSerializer();
            xml = serializer.serializeToString(dom);
            delete serializer;
        }
        catch (error)
        {
            if (debug)
                alert('DOM serialization is not supported.');
        }
    }
    return xml;
}

function createDynamicMenus(url)
{
	makeRequest(url, '', ['TopNavXML()','LeftNavXML()'], 'POST');
}
function getQueryVariable(varname, warning) {
  var query = window.location.search.substring(1);
  var ar = query.split('&');
  for (var i=0;i < ar.length;i++) {
    var pair = ar[i].split("=");
    if (pair[0] == varname) {
      return pair[1];
    }
  }
  if(warning) alert('Query Variable ' + varname + ' not found');
}

function LeftNavXML()
{
	// using dynamic drive dropdown menu
  var xmlDoc = http_request.responseXML;
	var menu = xmlDoc.getElementsByTagName("menu")[0];
	var submenus = xmlDoc.getElementsByTagName("submenu");
	var output = [];
	var rootdomain="http://"+window.location.hostname;
	var menu = getQueryVariable("menu");
	for(var i=0; i < submenus.length; i++)
	{
		var submenu = submenus[i];
		var options = submenu.getElementsByTagName("option");
		var title = submenu.getAttribute("title");
		var href = submenu.getAttribute("href");
		var curpath = document.location.href;
		curpath = curpath.replace(document.location.search,'');
		curpath = curpath.replace(document.location.hash,'');
		var menupath = rootdomain+href;
		//alert([unescape(menu),unescape(title)]);
		if(unescape(menu) == unescape(title) && options.length)
		{
			//alert([rootdomain+href,document.location.href]);
			output.push('<div id="block_hub_left">');
			output.push('<div class="block_content_left">');
			output.push('<div id="nav_page_top"></div>');
			output.push('<div id="nav_page">');
			output.push('<div class="title">'+ title + '</div>');

			for(var x=0; x < options.length; x++)
			{
				var option = options[x];
				var title = option.getAttribute("title");
				var href = option.getAttribute("href");
				output.push('<div class="page_button"><a href="'+urldecode(href)+'">'+urldecode(title)+'</a></div>');
			}
			output.push('</div>');
			output.push('<div id="nav_page_bottom" style="margin-bottom: 20px"></div>');
			output.push('<div style="width: 185px"></div>');
			output.push('</div>');
			output.push('</div>');
		}
	}

	var ele = document.getElementById('dynamic_leftnav');
	ele.innerHTML = "";
	//alert(output);

	ele.innerHTML += output.join("\n");
}

function TopNavXML()
{
  var xmlDoc = http_request.responseXML;
  var menu = xmlDoc.getElementsByTagName('menu')[0];
	if(0) // for testing
	{
		var xmlString = (new XMLSerializer()).serializeToString(xmlDoc);
		alert(xmlString.length);
	}
	var submenus = xmlDoc.getElementsByTagName("submenu");
	var output = [];
	var ddmenus = [];
	output.push('<div id="moonmenu" class="halfmoon">');
	var c=1;
	for(var i=0; i < submenus.length; i++)
	{
		var submenu = submenus[i];
		var options = submenu.getElementsByTagName("option");
		var title = submenu.getAttribute("title");
		var href = submenu.getAttribute("href");
		output.push('<li><a href="'+urldecode(href)+'" '+(options.length ? ' rel="dropmenu'+c+'_e" ' : '')+'>'+urldecode(title)+'</a></li>');

		if(options.length)
		{
			ddmenus.push('<div id="dropmenu'+ c +'_e" class="dropmenudiv_e" style="width: auto;">');
			for(var x=0; x < options.length; x++)
			{
				var option = options[x];
				var title = option.getAttribute("title");
				var href = option.getAttribute("href");
				var tgt = option.getAttribute("target");
				var str = '<a style="padding: 2px 4px 2px 4px;" href="'+urldecode(href)+'" ';
				if(tgt) str += 'target="'+tgt+'"';
				str += '><nobr>'+urldecode(title)+'</nobr></a>'
				ddmenus.push(str);
			}
			ddmenus.push('</div>');
			c++;
		}
	}
	output.push("</div>");

	var ele = document.getElementById('dynamic_topnav');
	ele.innerHTML = "";

	ele.innerHTML += output.join("\n");
	//alert(ddmenus.join('\n'));return;
	ele.innerHTML += '<br style="clear: left;" />';
	ele.innerHTML += ddmenus.join("\n");

	//SYNTAX: tabdropdown.init("menu_id", [integer OR "auto"])
	tabdropdown.init("moonmenu", i)
}
