﻿var blnOk=true;
var menuCount;
var delay = 500;
var menuPrefix;
var ssmenuPrefix;
var timeOut;

var browser = new BrowserInfo();

function BrowserInfo()
{
	var ua = navigator.userAgent.toLowerCase();
	// browser name
	this.isGecko     = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
	this.isMozilla   = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
	this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
	this.isIE        = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 
	this.isSafari    = (ua.indexOf('safari') != - 1);
	this.isOpera     = (ua.indexOf('opera') != -1); 
	this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari); 
	this.isIcab      = (ua.indexOf('icab') != -1); 
	this.isAol       = (ua.indexOf('aol') != -1); 
   
	// spoofing and compatible browsers
	this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
	this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);

	// browser version
	this.versionMinor = parseFloat(navigator.appVersion); 
   
	// correct version number
	if (this.isNS && this.isGecko)
		this.versionMinor = parseFloat(ua.substring(ua.lastIndexOf('/') + 1));
	else if (this.isIE && this.versionMinor >= 4)
		this.versionMinor = parseFloat(ua.substring(ua.indexOf('msie ') + 5));
	else if (this.isMozilla)
		this.versionMinor = parseFloat(ua.substring(ua.indexOf('rv:') + 3));
	else if (this.isSafari)
		this.versionMinor = parseFloat(ua.substring(ua.lastIndexOf('/') + 1));
	else if (this.isOpera)
	{
		if (ua.indexOf('opera/') != -1)
			this.versionMinor = parseFloat(ua.substring(ua.indexOf('opera/') + 6));
		else
			this.versionMinor = parseFloat(ua.substring(ua.indexOf('opera ') + 6));
	}
	else if (this.isKonqueror)
		this.versionMinor = parseFloat(ua.substring(ua.indexOf('konqueror/') + 10));
	else if (this.isIcab)
	{
		if (ua.indexOf('icab/') != -1)
			this.versionMinor = parseFloat(ua.substring(ua.indexOf('icab/') + 6));
		else
			this.versionMinor = parseFloat(ua.substring(ua.indexOf('icab ') + 6));
	}
   
	this.versionMajor = parseInt(this.versionMinor); 
	this.geckoVersion = ((this.isGecko) ? ua.substring((ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14)) : -1 );
   
	// dom support
	this.isDOM1 = (document.getElementById);
	this.isDOM2Event = (document.addEventListener && document.removeEventListener);
   
	// css compatibility mode
	this.mode = document.compatMode ? document.compatMode : 'BackCompat';

	// platform
	this.isWin   = (ua.indexOf('win') != -1);
	this.isWin32 = (this.isWin && (ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1));
	this.isMac   = (ua.indexOf('mac') != -1);
	this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
	this.isLinux = (ua.indexOf('linux') != -1);
}

function InitMenu(mnuCount, mnuprefix, ssmnuprefix, mnuDelai)
{
	menuCount = mnuCount;
	if (mnuDelai > 0)
		delay = mnuDelai;
	menuPrefix = (mnuprefix) ? mnuprefix : "menu";
	ssmenuPrefix = (ssmnuprefix) ? ssmnuprefix : "ssmenu";
	
	blnOk = browser.isDOM1;
	if (!blnOk)
		return;

    if (browser.isDOM1 && !(browser.isMac && browser.isIE) && !(browser.isOpera && browser.versionMajor < 7) && !(browser.isIE && browser.versionMajor < 5))
    {
        // get some element
        var menu = document.getElementById(menuPrefix); // the root element
        var lis = menu.getElementsByTagName('li'); // all the li
        
        // change the class name of the menu, 
        // it's usefull for compatibility with old browser
        menu.className = 'menu';
        
        // i am searching for ul element in li element
        for (var i = 0; i < lis.length; i++)
        {
            // is there a ul element ?
            var ul = lis.item(i).getElementsByTagName('ul')[0];
//            if (lis.item(i).getElementsByTagName('ul').length > 0)
			if (ul)
            {
				ul.style.visibility = 'hidden';
                // improve IE key navigation
                if (browser.isIE)
                    AddEvent(lis.item(i), 'keyup', ShowMenu);
                // link events to list item
                AddEvent(lis.item(i), 'mouseover', ShowMenu);
                AddEvent(lis.item(i), 'mouseout', HideLater);
                AddEvent(lis.item(i), 'blur', HideLater);
                AddEvent(lis.item(i), 'focus', ShowMenu);
                
                // add an id to list item
                lis.item(i).setAttribute('id', "li" + i);
            }
        }
    }
	
//    HideMenus();
}

function AddEvent(target, eventName, functionName)
{
	if (browser.isIE)
		eval('target.on' + eventName + '=functionName');
	else
		target.addEventListener(eventName, functionName, true);
}

function HideMenu(id)
{
	var ul = document.getElementById(id).getElementsByTagName('ul')[0];
	if (ul)
	{
		ul.style['visibility'] = 'hidden';
		var as = ul.getElementsByTagName('a');
		for (var i = 0; i < as.length; i++)
			as.item(i).className="";
	}
}
function ShowMenu()
{
	var ul = this.getElementsByTagName('ul')[0];
	if (ul)
		ul.style['visibility'] = 'visible';
	var curNode = this;
	while(curNode)
	{
		if (curNode.nodeName == 'LI')
			curNode.getElementsByTagName('a')[0].className = 'linkOver';
		curNode = curNode.parentNode;
	}
	CancelHideLater();
	HideAllOtherMenus(this);
}
function HideAllOtherMenus(li)
{
	var lis = li.parentNode;
	for (var i = 0; i < lis.childNodes.length; i++)
		if (lis.childNodes[i].nodeName == 'LI' && lis.childNodes[i].id != li.id)
			HideSubMenu(lis.childNodes[i]);
}
function HideSubMenu(li)
{
	var as = li.getElementsByTagName('a');
	for (var i = 0; i < as.length; i++)
		as.item(i).className="";
	var uls = li.getElementsByTagName('ul');
	for (var i = 0; i < uls.length; i++)
		uls.item(i).style['visibility'] = 'hidden';
}

function CancelHideLater()
{
	if (blnOk && timeOut)
		clearTimeout(timeOut);
}

function HideLater()
{
	if (blnOk)
		eval("timeOut = setTimeout('HideMenu(\"" + this.id + "\")', " + delay + ");");
}
