var xmlDoc;
var htmlStr;

window.onload = Init;

function Init()
{
	LoadXml();
	/* Called to attach the hover psuedo class to all elements in IE */
	if(navigator.appName == "Microsoft Internet Explorer")
	{
		parseStylesheets();
	}
}
function LoadXml()
{
	try
	{
		if (window.ActiveXObject)
		{
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async = false;
			xmlDoc.load("http://media.corporate-ir.net/media_files/irol/96/96360/MCD_Menu.xml");
			LoadMenuItems();
		}
		// code for Mozilla, Firefox, Opera, etc.
		else if (document.implementation && document.implementation.createDocument)
		{
			xmlDoc = document.implementation.createDocument("","",null);
			xmlDoc.load("http://media.corporate-ir.net/media_files/irol/96/96360/MCD_Menu.xml");
			xmlDoc.onload = LoadMenuItems;
		}
		else
		{
			alert("Your browser cannot handle this script");
		}
	}
	catch(e)
	{
	//	alert('Failed to load');
	}
}
function LoadMenuItems()
{
	var i = 0;
	
	/* add the containing div element */
	htmlStr = "";
	htmlStr += "<div id=\"mii_horizontal_menu_container\">";
	
	var rootElement = xmlDoc.documentElement;
	if(rootElement == null)
	{
		rootElement = xmlDoc.getElementsByTagName('Menu');
	}
	ProcessRootNode(rootElement, true);
	
	/* close the containing div element */
	htmlStr += "</div>";
	
	document.getElementById("horizontalNav").innerHTML = htmlStr;
	/* Clean up objects */
	if(xmlDoc != null)
	{
		xmlDoc = null;
	}
	return 1;
}
function IsLive(expiryDate, startDate)
{
	/* split the dates */
	expiryElements = expiryDate.split('/');
	startElements = startDate.split('/');
	
	/* Dates are in the format M/D/Y */
	/* Java script is zero based for the month */
	expiryDateObj = new Date();
	expiryDateObj.setFullYear(parseInt(expiryElements[2]), parseInt(expiryElements[0]) - 1, parseInt(expiryElements[1]));  
	startDateObj = new Date();
	startDateObj.setFullYear(parseInt(startElements[2]), parseInt(startElements[0]) - 1, parseInt(startElements[1]));
	
	todaysDate = new Date();
	
	/* Has the item expired? */
	if(todaysDate > expiryDateObj)
	{
		return false;
	}
	/* Has the item started */
	if(todaysDate < startDateObj)
	{
		return false;
	}
	return true;
	
}
function ProcessRootNode(nodeItem)
{
	try
	{
		var j = 0;
		
		/* Check if we have any channels */
		if(nodeItem.childNodes.length == 0)
			return;
		
		/* Loop through root nodes */
		for(j = 0; j < nodeItem.childNodes.length; j++)
		{
			/* Check if nodeType is element */
			if(nodeItem.childNodes[j].nodeType == 1)
			{
				/* Get attribute values */
				var name = nodeItem.childNodes[j].getAttribute("Name");
				var style = nodeItem.childNodes[j].getAttribute("CssClass");
				var expiryDate = nodeItem.childNodes[j].getAttribute("ExpiryDate");
				var startDate = nodeItem.childNodes[j].getAttribute("StartDate");
				
				/* check if the posting has not expired and has started */
				if(IsLive(expiryDate, startDate))
				{
					htmlStr += "<ul>";
					htmlStr += "<li>";
					htmlStr += "<span ";
					htmlStr += "class=\"" + style + "\">";
					htmlStr += name;
					htmlStr += "</span>";
					
					/* Channel */
					if(nodeItem.childNodes[j].tagName == "Channel")
					{
						htmlStr += "<ul>";
						ProcessNode(nodeItem.childNodes[j]);
						htmlStr += "</ul>";
					}
					htmlStr += "</li>";
					htmlStr += "</ul>";
				}
			}
		}
	}
	catch(e)
	{
		alert(e.message);
	}

}
function ProcessNode(nodeItem)
{
	var j = 0;
	
	/* Check if channel is empty */
	if(nodeItem.childNodes == null)
		return;
	
	for(j = 0; j < nodeItem.childNodes.length; j++)
	{
		/* Check if nodeType is element */
		if(nodeItem.childNodes[j].nodeType == 1)
		{
			/* Get attribute values */
			var name = nodeItem.childNodes[j].getAttribute("Name");
			var url = nodeItem.childNodes[j].getAttribute("Url");
			var style = nodeItem.childNodes[j].getAttribute("CssClass");
			
			htmlStr += "<li>";
			htmlStr += "<a ";
			htmlStr += "href=\"" + url + "\" ";
			htmlStr += "class=\"" + style + "\">";	
			htmlStr += name;
			htmlStr += "</a>";
	
			/* Channel */
			if(nodeItem.childNodes[j].tagName == "Channel" && 
				nodeItem.childNodes[j].length != null &&
				nodeItem.childNodes[j].length > 0)
			{
				htmlStr += "<ul>";
				ProcessNode(nodeItem.childNodes[j]);
				htmlStr += "</ul>";
			}
			
			htmlStr += "</li>";
		}
	}
}
/**
*	Whatever:hover - V2.02.060206 - hover, active & focus
*	------------------------------------------------------------
*	(c) 2005 - Peter Nederlof
*	Peterned - http://www.xs4all.nl/~peterned/
*	License  - http://creativecommons.org/licenses/LGPL/2.1/
*
*	Whatever:hover is free software; you can redistribute it and/or
*	modify it under the terms of the GNU Lesser General Public
*	License as published by the Free Software Foundation; either
*	version 2.1 of the License, or (at your option) any later version.
*
*	Whatever:hover is distributed in the hope that it will be useful,
*	but WITHOUT ANY WARRANTY; without even the implied warranty of
*	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*	Lesser General Public License for more details.
*
*	Credits and thanks to:
*	Arnoud Berendsen, Martin Reurings, Robert Hanson
*
*	howto: body { behavior:url("csshover.htc"); }
*	------------------------------------------------------------
*/

var csshoverReg = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active))|((a|input|textarea)([#.][^ ]+)?:unknown)/i,
currentSheet, doc = window.document, hoverEvents = [], activators = {
	onhover:{on:'onmouseover', off:'onmouseout'},
	onactive:{on:'onmousedown', off:'onmouseup'},
	onunknown:{on:'onfocus', off:'onblur'}
}

function parseStylesheets() {
	if(!/MSIE (5|6)/.test(navigator.userAgent)) return;
	window.attachEvent('onunload', unhookHoverEvents);
	var sheets = doc.styleSheets, l = sheets.length;
	for(var i=0; i<l; i++) 
		parseStylesheet(sheets[i]);
}
function parseStylesheet(sheet) {
	if(sheet.imports) {
		try {
			var imports = sheet.imports, l = imports.length;
			for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);
		} catch(securityException){}
	}

	try {
		var rules = (currentSheet = sheet).rules, l = rules.length;
		for(var j=0; j<l; j++) parseCSSRule(rules[j]);
	} catch(securityException){}
}
function parseCSSRule(rule) {
	var select = rule.selectorText, style = rule.style.cssText;
	if(!csshoverReg.test(select) || !style) return;
	
	var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');
	var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);
	var className = (/\.([a-z0-9_-]*on(hover|active|unknown))/i).exec(newSelect)[1];
	var affected = select.replace(/:(hover|active|unknown).*$/, '');
	var elements = getElementsBySelect(affected);
	if(elements.length == 0) return;

	currentSheet.addRule(newSelect, style);
	for(var i=0; i<elements.length; i++)
		new HoverElement(elements[i], className, activators[pseudo]);
}

function HoverElement(node, className, events) {
	if(!node.hovers) node.hovers = {};
	if(node.hovers[className]) return;
	node.hovers[className] = true;
	hookHoverEvent(node, events.on, function() { node.className += ' ' + className; });
	hookHoverEvent(node, events.off, function() { node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),''); });
}
function hookHoverEvent(node, type, handler) {
	node.attachEvent(type, handler);
	hoverEvents[hoverEvents.length] = { 
		node:node, type:type, handler:handler 
	};
}
function unhookHoverEvents() {
	for(var e,i=0; i<hoverEvents.length; i++) {
		e = hoverEvents[i]; 
		e.node.detachEvent(e.type, e.handler);
	}
}

function getElementsBySelect(rule) {
	var parts, nodes = [doc];
	parts = rule.split(' ');
	for(var i=0; i<parts.length; i++) {
		nodes = getSelectedNodes(parts[i], nodes);
	}	return nodes;
}
function getSelectedNodes(select, elements) {
	var result, node, nodes = [];
	var identify = (/\#([a-z0-9_-]+)/i).exec(select);
	if(identify) {
		var element = doc.getElementById(identify[1]);
		return element? [element]:nodes;
	}
	
	var classname = (/\.([a-z0-9_-]+)/i).exec(select);
	var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');
	var classReg = classname? new RegExp('\\b' + classname[1] + '\\b'):false;
	for(var i=0; i<elements.length; i++) {
		result = tagName? elements[i].all.tags(tagName):elements[i].all; 
		for(var j=0; j<result.length; j++) {
			node = result[j];
			if(classReg && !classReg.test(node.className)) continue;
			nodes[nodes.length] = node;
		}
	}	
	
	return nodes;
}