function buildMenu()
{
	var oMenuPlaceHolder = document.getElementById( "menuPlaceHolder" );
	var str = buildMenuFromArray( g_arFolders, -1, true, "root" );
	oMenuPlaceHolder.innerHTML = str;

	var arrPlaces = getPlaces();

	for ( var i = 0; i < arrPlaces.length; i++ )
	{
		var oCurrentFolder = document.getElementById( "img_" + normalize( arrPlaces[i] ) );

		if ( oCurrentFolder != null )
		{
			var oCur = oCurrentFolder;
			while ( oCur && oCur.id && oCur.id != "menuPlaceHolder" )
			{
				var n = oCur.id.indexOf( "_" );
				if ( n != -1 )
				{
					var strId = oCur.id.substr( n + 1 );
					var oCurrentTable = document.getElementById( "table_" + strId );
					
					if ( oCurrentTable && oCurrentTable.style && oCurrentTable.style.display &&
						 oCurrentTable.style.display.toLowerCase() == "none" )
					{
						onTreeClick( strId, true );
					}
				}				

				oCur = oCur.parentNode;
			}
		}
	}

	if ( g_TreeItems_ID != "" )
		onTreeClick( g_TreeItems_ID, false );
}

function openOpened()
{
	var arrPlaces = getPlaces();

	for ( var i = 0; i < arrPlaces.length; i++ )
	{
		var oCurrentFolder = document.getElementById( "img_" + normalize( arrPlaces[i] ) );

		if ( oCurrentFolder != null )
		{
			var oCur = oCurrentFolder;
			while ( oCur && oCur.id && oCur.id != "menuPlaceHolder" )
			{
				var n = oCur.id.indexOf( "_" );
				if ( n != -1 )
				{
					var strId = oCur.id.substr( n + 1 );
					var oCurrentTable = document.getElementById( "table_" + strId );
					
					if ( oCurrentTable && oCurrentTable.style && oCurrentTable.style.display &&
						 oCurrentTable.style.display.toLowerCase() == "none" )
					{
						onTreeClick( strId, true );
					}
				}				

				oCur = oCur.parentNode;
			}
		}
	}

	if ( g_TreeItems_ID != "" )
		onTreeClick( g_TreeItems_ID, false );
}

function buildMenuFromArray( arrFolders, nNestLev, fIsVisible, parentId )
{
	var strRes = "";

	if ( arrFolders.length > 0 )
	{
		strRes = "<table id=\"" + ( "table_" + parentId ) +
	   		"\" class=\"LeftMenu\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"display: " +
			( fIsVisible ? "" : "none" ) + ";\">";

		for ( var i = 0; i < arrFolders.length; i++ )
		{
			strRes += buildFolder( 
					arrFolders, 
					nNestLev + 1, 
					i, 
					i + 1 == arrFolders.length );
		}

		strRes += "</table>";
	}

	return strRes;
}

function buildFolder( arrFolders, nNestLev, nPos, fIsLast )
{
	var strRes = "<tr>";

	for ( var i = 0; i < nNestLev; i++ )
	{
		strRes += "<td align=\"center\"><img src=\"img/line.gif\" border=\"0\"/></td>";
	}

	var arrFold = arrFolders[nPos];

	var strId = normalize( arrFold[3] );

	var strSymbol = "join.gif";
	if ( arrFold[2].length > 0 )
	{
		strSymbol = ( fIsLast ? "plusbottom.gif" : "plus.gif" );
	}
	else
	{
		strSymbol = ( fIsLast ? "joinbottom.gif" : "join.gif" );
	}

	strRes += "<td align=\"center\" border=\"0\"><img " + 
		" id=\"img_" + strId + "\" " +
		( arrFold[2].length > 0 ? "onclick=\"javascript: onTreeClick( '" + strId + "', false );\"" : "" ) +
		" src=\"img/" + strSymbol + "\"/></td>";
		
	strRes += "<td align=\"left\" width=\"100%\">";

	var strClass = g_TreeItems_ID == strId ? "LeftMenuActive" : "LeftMenu";

	strRes += "<a class=\"" + strClass + "\" href=\"" + arrFold[1] + "\">" + arrFold[0] + "</a></td>";

	strRes += "</tr>";

	if ( arrFold[2].length > 0 )
	{
		strRes += "<tr><td colspan=\"" + ( nNestLev + 3 ) + "\">" + buildMenuFromArray( arrFold[2], nNestLev, false, strId ) + "</td></tr>";
	}

	return strRes;
}

function onTreeClick( strFolder, fSuppressCookies )
{
	var oTable = document.getElementById( "table_" + strFolder );

	if ( !oTable || !oTable.style )
		return;

	var oImg = document.getElementById( "img_" + strFolder );
	if ( !oTable.style.display || oTable.style.display != "none" )
	{
		oTable.style.display = "none";
		if ( oImg.src.indexOf( "minusbottom.gif" ) != -1 )
			oImg.src = "img/plusbottom.gif";
		else if ( oImg.src.indexOf( "img/minus.gif" ) != -1 )
			oImg.src = "img/plus.gif";

		if ( !fSuppressCookies )
			removePlace( strFolder );
	}
	else
	{
		oTable.style.display = "";
		if ( oImg.src.indexOf( "img/plusbottom.gif" ) != -1 )
			oImg.src = "img/minusbottom.gif";
		else if ( oImg.src.indexOf( "img/plus.gif" ) != -1 )
			oImg.src = "img/minus.gif";

		if ( !fSuppressCookies )
			addPlace( strFolder );
	}
}

function normalize( strToNorm )
{
	var str = strToNorm.toLowerCase();
	var i = 0;
	for ( i = 0; i < str.length; i++ )
	{
		switch ( str.charAt( i ) )
		{
		case ' ':
			str = getReplaced( str, i, '-' );
			break;
		case '\t':
			str = getReplaced( str, i, '-' );
			break;
		case 'a':
			str = getReplaced( str, i, 'a' );
			break;
		case 'á':
			str = getReplaced( str, i, 'b' );
			break;
		case 'â':
			str = getReplaced( str, i, 'v' );
			break;
		case 'ã':
			str = getReplaced( str, i, 'g' );
			break;
		case 'ä':
			str = getReplaced( str, i, 'd' );
			break;
		case 'å':
			str = getReplaced( str, i, 'e' );
			break;
		case '¸':
			str = getReplaced( str, i++, 'jo' );
			break;
		case 'æ':			
			str = getReplaced( str, i++, 'zh' );
			break;
		case 'ç':
			str = getReplaced( str, i, 'z' );
			break;
		case 'è':
			str = getReplaced( str, i, 'i' );
			break;
		case 'é':
			str = getReplaced( str, i, 'j' );
			break;
		case 'ê':
			str = getReplaced( str, i, 'k' );
			break;
		case 'ë':
			str = getReplaced( str, i, 'l' );
			break;
		case 'ì':
			str = getReplaced( str, i, 'm' );
			break;
		case 'í':
			str = getReplaced( str, i, 'n' );
			break;
		case 'î':
			str = getReplaced( str, i, 'o' );
			break;
		case 'ï':
			str = getReplaced( str, i, 'p' );
			break;
		case 'ð':
			str = getReplaced( str, i, 'r' );
			break;
		case 'ñ':
			str = getReplaced( str, i, 's' );
			break;
		case 'ò':
			str = getReplaced( str, i, 't' );
			break;
		case 'ó':
			str = getReplaced( str, i, 'u' );
			break;
		case 'ô':
			str = getReplaced( str, i, 'f' );
			break;
		case 'õ':
			str = getReplaced( str, i, 'h' );
			break;
		case 'ö':
			str = getReplaced( str, i++, 'ts' );
			break;
		case '÷':
			str = getReplaced( str, i++, 'ch' );
			break;
		case 'ø':
			str = getReplaced( str, i++, 'sh' );
			break;
		case 'ù':
			str = getReplaced( str, i++, 'sh' );
			break;
		case 'ú':
			str = getReplaced( str, i, '_' );
			break;
		case 'û':
			str = getReplaced( str, i, 'y' );
			break;
		case 'ü':
			str = getReplaced( str, i, '_' );
			break;
		case 'ý':
			str = getReplaced( str, i, 'e' );
			break;
		case 'þ':
			str = getReplaced( str, i++, 'ju' );
			break;
		case 'ÿ':
			str = getReplaced( str, i++, 'ja' );
			break;
		default:
			break;
		}
	}

	return str;
}

function getReplaced( str, n, ch )
{
	return str.substr( 0, n ) + ch + str.substr( n + 1 );
}

function addPlace( strPlace )
{
	var str = getCookie( "places" );
	var arrPlaces = str.split( "\t" );

	var i;
	for ( i = 0; i < arrPlaces.length; i++ )
		if ( arrPlaces[i] == strPlace )
			break;

	if ( i >= arrPlaces.length )
	{
		str += "\t" + strPlace;
		setCookie( "places", str );
	}
}

function removePlace( strPlace )
{
	var str = getCookie( "places" );

	var x = "\t";
	if ( str.indexOf( "\t" ) == -1 )
		x = "_";

	var arrPlaces = str.split( x );

	var strRes = "";
	for ( i = 0; i < arrPlaces.length; i++ )
	{
		if ( arrPlaces[i] != strPlace )
		{
			if ( strRes != "" )
				strRes += "\t";

			strRes += arrPlaces[i];
		}
	}

	setCookie( "places", strRes );
}

function getPlaces()
{
	var str = getCookie( "places" );
	if ( str.indexOf( "\t" ) != -1 )
		return str.split( "\t" );
	
	return str.split( "_" );
}

function setCookie( strName, strValue )
{
	var strFull = strName + "=" + strValue + ";" +
		"expires=" + ( "01 Jan 2100" ) + ";Path=/";
	document.cookie = strFull;
}

function getCookie( strName )
{
	var strVal = "";

	if ( document.cookie.length > 0 )
	{
		var nStart = document.cookie.indexOf( strName + "=" );
		if ( nStart != -1 )
		{
			nStart += (strName + "=").length;
			var nEnd = document.cookie.indexOf( ";", nStart );
			if ( nEnd == -1 )
				nEnd = document.cookie.length;
			strVal = unescape( document.cookie.substr( nStart, nEnd - nStart ) );
		}
	}

	return strVal;
}
