var NBrowser = {
	dom: (document.getElementById) ? true : false,
	ie: (/msie/.test(navigator.userAgent.toLowerCase())) ? true : false,
	firefox: (/firefox/.test(navigator.userAgent.toLowerCase())) ? true : false,
	opera: (/opera/.test(navigator.userAgent.toLowerCase())) ? true : false,
	version: navigator.userAgent.toLowerCase().replace(/^.*(msie|firefox|opera)( |\/)([\d+\.]+).*$/, "$3")
};

var NSelector = {
	selectors: null,
	selectorParts: null,
	results: null,
	element: null,
	getElements: function(selector, element)
	{
		this.results = new Array(),
	    this.selectors = selector.split(" ");

	    if (!element)
	        this.element = document;

        for (var i = 0; i < this.selectors.length; i++)
        {
            this.selectorParts = this.selectors[i].split(".");

            if (this.selectorParts.length > 1)
				this.results = this.results.concat(this.getElementsByClass(this.selectorParts[1], this.element));
			else
			    this.results = this.results.concat(this.element.getElementsByTagName(this.selectorParts[1]));
		}

        return this.results;
	},

	getElementsByClass: function(className, element, level)
	{
        var selectedNodes = new Array();
	    var nodes;

	    for (var i = 0; i < element.childNodes.length; i++)
	    {
	        if (element.childNodes[i].className == className)
	            selectedNodes.push(element.childNodes[i]);
	        else if (level !== 0)
	        {
	            nodes = this.getElementsByClass(className, element.childNodes[i], --level);

	            for (var j = 0; j < nodes.length; j++)
	                if (nodes[j].childNodes[0] && nodes[j].childNodes[0].data != "")
	                    selectedNodes.push(nodes[j]);
	        }
	    }

	    return selectedNodes;
	},

	getElementsByName: function(elementName, element, level)
	{
		var selectedNodes = new Array();
	    var nodes;

	    for (var i = 0; i < element.childNodes.length; i++)
	    {
	        if (element.childNodes[i].nodeName.toLowerCase() == elementName.toLowerCase())
	            selectedNodes.push(element.childNodes[i]);
	        else if (level !== 0)
	        {
	            nodes = this.getElementsByName(elementName, element.childNodes[i], --level);

	            for (var j = 0; j < nodes.length; j++)
	                if (nodes[j].childNodes[0] && nodes[j].childNodes[0].data != "")
	                    selectedNodes.push(nodes[j]);
	        }
	    }

	    return selectedNodes;
	}
}

var NEventListener = {
	addEvent: function(element, eventName, functionReference)
	{
		if (element.addEventListener)
		    element.addEventListener(eventName, functionReference, false);
		else
		    element.attachEvent("on" + eventName, functionReference);

		return;
	}
}

/**
 * Menu commutator
 */
NMenu = function(instanceName, id, selectedClass)
{
	this.instanceName = instanceName;
	this.id = id;
	this.selectedClass = selectedClass;
	
	NEventListener.addEvent(window, "load", new Function(this.instanceName + ".register()"));
}

NMenu.prototype.register = function()
{
	var submenu = null;
	var linkEl = null;
    this.element = document.getElementById(this.id);
    this.items = NSelector.getElementsByName("li", this.element, 0);
    
    for (var i = 0; i < this.items.length; i++)
    {
        submenu = this.items[i].getElementsByTagName("ul")[0];
    
        if (submenu && this.items[i].className != "link")
        {
            linkEl = this.items[i].getElementsByTagName("a")[0];
        	NEventListener.addEvent(linkEl, "click", new Function(this.instanceName + ".show(" + i + ")"));

			if (NBrowser.opera)
			    linkEl.onclick = "return false";
			else
			    linkEl.href = "javascript:return false";
		}
	}

	return;
}

NMenu.prototype.show = function(indent)
{
	var submenu = null;

	for (var i = 0; i < this.items.length; i++)
	{
		submenu = this.items[i].getElementsByTagName("ul")[0];
		
		if (submenu)
		{
			if (i == indent)
			{
			    this.items[i].className = this.selectedClass;
			    submenu.style.display = "block";
            }
			else
			{
			    this.items[i].className = "";
			    submenu.style.display = "none";
            }
		}
	}

	return;
}

/**
 * Hover effect for icons
 */
NHover = function(instanceName, id)
{
    this.instanceName = instanceName;
    this.id = id;
    
	NEventListener.addEvent(window, "load", new Function(this.instanceName + ".register()"));
}

NHover.prototype.register = function()
{
    this.linksEl = document.getElementById(this.id);
	this.paragraph = this.linksEl.getElementsByTagName("p")[0];
    this.icons = this.paragraph.getElementsByTagName("img");

	for (var i = 0; i < 5; i++)
	{
	    if (this.icons[i].className != "selected")
	    {
    		NEventListener.addEvent(this.icons[i], "mouseover", new Function(this.instanceName + ".over(" + i + ")"));
    		NEventListener.addEvent(this.icons[i], "mouseout", new Function(this.instanceName + ".out(" + i + ")"));
        }
	}

	return;
}

NHover.prototype.over = function(indent)
{
    this.icons[indent].src = this.icons[indent].src.replace(".png", "-hover.png");
}

NHover.prototype.out = function(indent)
{
    this.icons[indent].src = this.icons[indent].src.replace("-hover", "");
}

/**
 * Element shower
 */
NShower = function(instanceName, linkClass, blockClass)
{
    this.instanceName = instanceName;
    this.linkClass = linkClass;
    this.blockClass = blockClass;

	NEventListener.addEvent(window, "load", new Function(this.instanceName + ".register()"));
}

NShower.prototype.register = function()
{
    this.linkEls = NSelector.getElementsByClass(this.linkClass, document);
	this.blocks = NSelector.getElementsByClass(this.blockClass, document);

	for (var i = 0; i < this.blocks.length; i++)
	{
	    if (this.linkEls.length > i)
	    {
    		NEventListener.addEvent(this.linkEls[i], "click", new Function(this.instanceName + ".click(" + i + ")"));
            this.blocks[i].style.display = "none";
		}
	}
    
	return;
}

NShower.prototype.click = function(indent)
{
	if (this.blocks[indent].style.display == "block")
	    this.blocks[indent].style.display = "none";
	else
	    this.blocks[indent].style.display = "block";
	    
	return;
}

//var menu = new NMenu("menu", "menu", "selected");
var hover = new NHover("hover", "links");
var shower = new NShower("shower", "show-block", "hidden-block");