function CreateArray()
{
    var a = new Array();
    if( typeof( a.push ) == 'undefined' )
        a.push = ArrayPush;
    return a;
}

function ArrayPush( Value )
{
        this[this.length] = Value;
}

function GetNumber( str )
{
	var RetValue = null;
	var Numbers = "0123456789";
	var iDotCount = 0;
	var strBuffer = "";
	var WhiteSpaces = new String(" \t");
	var bStartedNumber = false;
	
	for( var i = 0; i < str.length; i++ )
	{
		var aChar = str.charAt( i );
		if( !bStartedNumber && WhiteSpaces.indexOf( aChar ) != -1 )
			continue;
		bStartedNumber = true;
		if( Numbers.indexOf( aChar ) != -1 || ( aChar == '.' && iDotCount == 0 ) )
		{
			strBuffer += aChar;
			if( aChar == '.' )
				iDotCount++;
		}
		else
		{
			break;
		}
	}
	return new Number( strBuffer );
}

function GetWord( str, RetObj )
{
	var Separators = new String(" \t\n");
	var strBuffer = "";
	var aChar = 0;
	var bHaveLegalChar = false;
	var NewString = null;

	for( var i = 0; i < str.length; i++ )
	{
		aChar = str.charAt( i );
		if( strBuffer.length > 0 )
		{
			if( Separators.indexOf( aChar ) != -1 )
			{
				NewString = str.substring( i );
				break;
			}
			else
				strBuffer += aChar;
		}
		else
		{
			if( Separators.indexOf( aChar ) == -1 )
				strBuffer += aChar;
		}
	}
	if( strBuffer.length == 0 )
		RetObj.sValue = null;
	else
		RetObj.sValue = strBuffer;
	return NewString;
}

function BrowserType()
{
	var RetValue = new Object();
	var ua = window.navigator.userAgent;

	if( ua.indexOf( "Opera" ) != -1 )
	{
		var a = ua.substring( ua.indexOf( "Opera" ) + 6 );
		RetValue.Type    = "Opera";
		RetValue.Version = GetNumber( a );
		RetValue.HaveDocAll =	true;
	}
	else if( window.navigator.appName == "Microsoft Internet Explorer" )
	{
		var a = ua.substring( ua.indexOf( "MSIE " ) + 4 );
		RetValue.Type    = "MSIE";
		RetValue.Version = GetNumber( a );
		RetValue.HaveDocAll = true;
	}
	else if( window.navigator.vendor == "Netscape" || window.navigator.vendor == "Netscape6" )
	{
		RetValue.Type       = "Netscape";
		RetValue.Version    = GetNumber( ua.substring( ua.indexOf( window.navigator.vendor ) + window.navigator.vendor.length + 1 ) );
		RetValue.HaveDocAll = false;
	}
	else if( ua.indexOf( "Mozilla" ) != -1 )
	{
		var a = ua.substring( ua.indexOf( "rv:" ) + 3 );
		RetValue.Type    = "Mozilla";
		RetValue.Version = GetNumber( a );
		RetValue.HaveDocAll = false;
	}
	else
	{
		RetValue.Type       = "Unknown";
		RetValue.Version    = null;
		RetValue.HaveDocAll = false;
	}

	if( window.navigator.appVersion.indexOf( "Windows" ) != -1 )
		RetValue.Platform = "Windows";
	else if( window.navigator.appVersion.indexOf( "Linux" ) != -1 )
		RetValue.Platform = "Linux";
	else
		RetValue.Platform = "unknown";

	return RetValue;
}
var BT = BrowserType();

var MenuContainer = CreateArray();

function Font( Size, Family, Weight, Style, Color, InvertColor, BackgroundColor, InvertBGColor )
{
	this.Size            = Size;
	this.Family          = Family;
	this.Weight          = Weight;
	this.Style           = Style;
	this.Color           = Color;
	this.InvertColor     = InvertColor;
	this.BackgroundColor = BackgroundColor;
	this.InvertBGColor   = InvertBGColor;
}

var MenuFonts = CreateArray();                      

MenuFonts.push( new Font( "12pt", "SansSerif", "bold", "normal", "black", "white", "white", "#000000" ));
//MenuFonts.push( new Font( "12pt", "SansSerif", "bold", "normal", "red", "green", "green", "red" ));

var MenuIDCounter = 0;
//var Icon = new Image();
//Icon.src = "/img/arrow.gif";

function SakkMenu( Id, Label, Link )
{
    this.Id = Id;
    this.Children = CreateArray();
    this.Label    = Label;
    this.Link     = Link;
    this.Draw     = SakkMenuDraw;
    this.Level    = 0;
    this.iFont    = 0;
    this.ItemsTop = CreateArray();
    this.bInitialized = false;
    this.bOpened      = false;
    MenuContainer.push( this );
}

function SakkMenuAdd( Item, Level )
{
    var ActMenu = RootMenu;
    while( ActMenu.Level != Level - 1 )
    {
        if( ActMenu.Children.length == 0 )
            throw "Hibás szintmegadás a(z) " + Item.Label + " elemnél";
        else
            ActMenu = ActMenu.Children[ ActMenu.Children.length -1 ];
    }
    ActMenu.Children.push( Item );
    Item.Level = Level;
}

function ChildrenString( Item )
{
    var strCursor;

    if( BT.Type == "MSIE" )
        strCursor     = "hand";
    else
        strCursor     = "pointer";
    var str = "";
	for( var i = 0; i < Item.Children.length; i++ )
	{
		var iIndex = Item.Children[i].iFont;

        str += "<tr ";
		str += " onclick=\"ChangeOpenedState( '" + Item.Children[i].Id + "' )\">";
        str += "<td nowrap>";
		
        str += "<table cellspacing=0 cellpadding=0 border=0 style='width:100%'>";
		str += "<tr  style=\"background-color:" + MenuFonts[iIndex].BackgroundColor + ";"
        str += "font-size:" + MenuFonts[iIndex].Size + ";font-family:" + MenuFonts[iIndex].Family + ";font-weight:";
		str += MenuFonts[iIndex].Weight + ";font-style:" + MenuFonts[iIndex].Style + ";color:" + MenuFonts[iIndex].Color + ";\"";
		str += " onmouseover=\"javascript:ChangeBGColor( '" + Item.Id + "' ,this, true, " + i + " );\"";
		str += " onmouseout=\"javascript:ChangeBGColor( '" + Item.Id + "' ,this, false,  " + i + ");\">";
        str += "<td nowrap>";
        for( var j = 0; j < Item.Level; j++ ) str += "&nbsp;&nbsp;";

        //if( Item.Children[i].Children.length )
			str += "<img src=\"pictures/menu1.gif\">";
		//else
          //  str += "<img src=\"pictures/menu1.gif\" style=\"visibility:hidden;\">";
        
        str += "</td><td nowrap style='height:20px;text-align:left;vertical-align:middle;width:100%'>";

		str += "<label style=\"cursor:" + strCursor + "\">" + Item.Children[i].Label + "</label>&nbsp;&nbsp;";
		

        str += "</td></tr></table>";
        str += "</td></tr>";
        if( Item.Children[i].bOpened && Item.Children[i].Children.length )
            str += ChildrenString( Item.Children[i] );

	}

    return str;
}

function SakkMenuDraw()
{
	if( this.Children.length == 0 ) return;
	
    if( !this.bInitialized )
    {
        var strCursor;

        if( BT.Type == "MSIE" )
            strCursor     = "hand";
        else
            strCursor     = "pointer";

        this.MenuElement = document.createElement( "DIV" );
        with( this.MenuElement.style )
        {
            visibility = "visible";
            cursor     = strCursor;
            zIndex     = "51";
            border     = "solid 0px #0000cc";
            position   = "absolute";
            left       = "20px";
            top        = "220px";
        }

        this.MenuElement.id = this.Id;
        this.MenuElement.MenuOb = this;
        this.MenuElement.style.backgroundColor = MenuFonts[ this.Children[0].iFont ].InvertBGColor;
		document.mainform.appendChild( this.MenuElement );
        this.bInitialized = true;
    }

	var str = "<table border=0 cellspacing=0 cellpadding=0>";
    
    str += ChildrenString( this );
	str += "</table>";

	this.MenuElement.innerHTML = str;

	delete str;
	
	
	var t = this.MenuElement.getElementsByTagName( "TABLE" );
	this.MenuElement.style.width = t[0].rows[0].offsetWidth + "px";
	var height = 0;
	for( var i = 0; i < t[0].rows.length; i++ )
	{
		this.ItemsTop.push( height );
		height += t[0].rows[i].offsetHeight;
	}
	delete t;
	this.MenuElement.style.height = height + "px";
	
}

function ChangeBGColor( Id, Ob, bOver, iChildrenIndex )
{
	var t = null;
    for( var i = 0; i < MenuContainer.length; i++ )
    {
        if( MenuContainer[i].Id == Id )
        {
            t = MenuContainer[i];
            break;
        }
            
    }
	
    if( bOver )
	{
		for( var i = 0; i < t.Children.length; i++ )
		{
			if( i == iChildrenIndex )
			{
				var iIndex               = t.Children[iChildrenIndex].iFont;

				Ob.style.backgroundColor = ( MenuFonts[iIndex].InvertBGColor );
				Ob.style.color           = MenuFonts[iIndex].InvertColor;
			}
		}
	}
	else
	{
		var iIndex               = t.Children[iChildrenIndex].iFont;
		Ob.style.backgroundColor = MenuFonts[iIndex].BackgroundColor;
		Ob.style.color           = MenuFonts[iIndex].Color;
	}
	delete t;
}

function ChangeOpenedState( Id )
{
    for( var i = 0; i < MenuContainer.length; i++ )
    {
        if( MenuContainer[i].Id == Id )
        {
            MenuContainer[i].bOpened = !MenuContainer[i].bOpened;
            if( MenuContainer[i].Link.length )
                parent.rightframe.document.location = "../" + MenuContainer[i].Link;
            RootMenu.Draw();
            return;
        }
            
    }
}

RootMenu = new SakkMenu( "RootMenu", null, null );
RootMenu.bOpened = true;
