//------------------------------------------------------
var MinScreenHeight = 768;
var MinFlashMoviewHeight = 729;
var ScreenWidth = 1018;

var FirstLevelArr = [];
var MenuItemWidth = 170;
var FirstMenuItemObj = null; // The actual JSON object that the first node is home

var ProjectsArr = [];
var FeaturedArr = [];
var ClientsArr = [];

var FirstLevelNuetral = null;
var NuetralMenuItemCallback = null;

var DirectionPosition = "right";
var DirectionToolbarSub = 0;

/*
var FirstLevelClients = null;
var ClientsMenuItemCallback = null;
*/
//------------------------------------------------------

//------------------------------------------------------
function AddMenuItem(itemObj)
{
	var res = "";
	var r = itemObj;
	var theIndex = FirstLevelArr.length;

	FirstLevelArr.push(r);
	
	res += "<div id='FirstLevel" + theIndex + "' class='FirstLevel' style='" + DirectionPosition + ":" + (theIndex * MenuItemWidth) + "px'>" +
				"<a id='MenuItem_" + r.ID + "_" + theIndex + "' class='MenuItem FirstLevelMenuItem' href='javascript:ActivateFirstLevelMenuItem(\"show\", " + theIndex + ");'>" + 
					"<span>" + r.Title + "</span>" +
				"</a>" +
			"<div class='SubItemsWrapper'>" +
				"<div class='SubItems'>";
	
	// Positioning Nuetral & Flash toolbar
	switch(r.CssClasses)
	{
		case "home": case "regular": case "client": case "featured": 
			CallAS3( "toolbar_right=" + Math.abs(DirectionToolbarSub - ((theIndex + 1) * MenuItemWidth)) );
			break;
		case "project": case "info":
			$(FirstLevelNuetral).css(DirectionPosition, (theIndex + 1) * MenuItemWidth);
			CallAS3( "toolbar_right=" + Math.abs(DirectionToolbarSub - ((theIndex + 2) * MenuItemWidth) ) );
			$("#MenuItemNuetral", FirstLevelNuetral).attr("href", "javascript:ActivateNuetralMenuItem();");
			$("span", FirstLevelNuetral).html(CloseBtnText);
			$(".SubItems", FirstLevelNuetral).html("<div class='TextTitle' style='color:#" + r.TitleColor + "'>" + r.TextTitle + "</div>" + 
												   "<div class='TextBody'>" + Encoder.htmlDecode(r.Body) + "</div>");
												   
			// Minimizing all first level and change their click
			ToggleSubItems("hide", 0, theIndex); // theIndex == FirstLevelArr.length -1
			for(var i=0; i < FirstLevelArr.length; i++)	
				$("#MenuItem_" + FirstLevelArr[i].ID + "_" + i).attr("href", "javascript:ActivateFirstLevelMenuItem(\"" + "show" + "\", " + i + ");");

			ToggleSubItems("show", "Nuetral");
			break;
	}
	
	// Adding sons
	switch(r.CssClasses)
	{
		case "featured":
			r.Sons = FeaturedArr;
			$.each(FeaturedArr, function(index, obj) {
				res += "<a id='MenuItem_" + obj.ID + "_f' class='MenuItem' href='javascript:ActivateSubMenuItem(" + theIndex + ", " + index + ", \"featured\");'>" +
							"<span>" + obj.Title + "</span>" + 
						"</a>";
			});			
			break;
		
		case "client":
			r.Sons = ClientsArr[r.ID];
			$.each(ClientsArr[r.ID], function(index, obj) {
				res += "<a id='MenuItem_" + obj.ID + "_c' class='MenuItem' href='javascript:ActivateSubMenuItem(" + theIndex + ", " + index + ", \"client\");'>" +
							"<span>" + obj.Title + "</span>" + 
						"</a>";
			});
			break;
		
		default: 
			$.each(r.Sons, function(index, obj) {
				res += "<a id='MenuItem" + obj.ID + "' class='MenuItem' href='javascript:ActivateSubMenuItem(" + theIndex + ", " + index + ");'>" +
							"<span>" + obj.Title + "</span>" + 
						"</a>";
			});
		break;
	}
	
	res += "</div></div></div>";
	$(".MenuBar").append(res);
	
	$(".FirstLevelMenuItem.Selected").removeClass("Selected");
	$("#MenuItem_" + r.ID + "_" + theIndex).addClass("Selected");
	
	// Final action for each class
	switch(r.CssClasses)
	{
		case "home":
			ShowMedia(r);
			ToggleSubItems("show", theIndex); 
			break;
		case "regular": case "featured": case "client":
			ToggleSubItems("show", theIndex); 
			break;
	}
}
//------------------------------------------------------

//------------------------------------------------------
function ActivateNuetralMenuItem()
{
	if(NuetralMenuItemCallback.IsActivated == true)
		return;
		
	NuetralMenuItemCallback.IsActivated = true;
	if( $("span", FirstLevelNuetral).html() == CloseBtnText )
		ToggleSubItems('hide', 'Nuetral', 'Nuetral', NuetralMenuItemCallback);
	else
		ToggleSubItems('show', 'Nuetral', 'Nuetral', NuetralMenuItemCallback);
}
//------------------------------------------------------

//------------------------------------------------------
function ActivateFirstLevelMenuItem(action, indexFirstLevel)
{
	for(var i=0; i < FirstLevelArr.length; i++)
		$("#MenuItem_" + FirstLevelArr[i].ID + "_" + i).attr("href", "javascript:ActivateFirstLevelMenuItem(\"" + (action == "hide" ? "show" : "hide") + "\", " + i + ");");
	
	//if(hideNuetral == true)
		//ToggleSubItems(action, "Nuetral");
	ToggleSubItems(action, 0, FirstLevelArr.length - 1);
}
//------------------------------------------------------

//------------------------------------------------------
function ActivateSubMenuItem(indexFirstLevel, indexSon, cssClass)
{
	// Cehking if menu item already in the menu
	var r = FirstLevelArr[indexFirstLevel].Sons[indexSon];
	for(var i= 0; i < FirstLevelArr.length; i++)
	{
		if(FirstLevelArr[i].ID == r.ID)
			return;
	}
	
	// Hiding all first level menus that are after the path than the current menu clicked
	// (including the nuetral menu item)
	if(indexFirstLevel < FirstLevelArr.length -1)
	{
		var callback = new CallbackObj();
		callback.TmpIndexFirstLevel = indexFirstLevel;
		callback.TmpIndexSon = indexSon;
		callback.TmpCount = FirstLevelArr.length - (indexFirstLevel + 1);
		callback.Action = "remove";
		callback.FromIndex = indexFirstLevel + 1;
		callback.ToIndex = FirstLevelArr.length - 1;
		callback.CssClass = cssClass;
		ToggleSubItems("hide", "Nuetral");
		ToggleSubItems("hide", callback.FromIndex, callback.ToIndex, callback);
		return;
	}
	
	$("#FirstLevel" + indexFirstLevel + " .SubItemsWrapper .SubItems .MenuItem").removeClass("Selected");
	
	switch(cssClass)
	{
		case "featured": $("#MenuItem_" + r.ID + "_f").addClass("Selected"); break;
		case "client": $("#MenuItem_" + r.ID + "_c").addClass("Selected"); break;
		default: $("#MenuItem" + r.ID).addClass("Selected"); break;
	}
		
	ShowMedia(r);
	AddMenuItem(r);
}
//------------------------------------------------------

//------------------------------------------------------
function ShowMedia(obj)
{
	var r = obj;

	switch(r.CssClasses)
	{
		case "home": case "project": case "info":
			if(r.VideoUri != "")
				CallAS3("video=" + r.VideoUri);
			else if(r.StackImages != "")
			{
				var images = r.StackImages.replace(/\*{2,}/g, "*");
				if(images.length > 1 && images.charAt(0) == "*")
					images = images.substring(1);
				if(images.length > 1 && images.charAt(images.length - 1) == "*")
					images = images.substring(0, images.length - 1);
				CallAS3("images=" + images);
			}
			break;	
	}	
}
//------------------------------------------------------

//------------------------------------------------------
function CallbackObj()
{
	this.TmpIndexFirstLevel = -1;
	this.TmpIndexSon = -1;
	this.TmpCount = 0;
	this.Action = "";
	this.FromIndex = -1;
	this.ToIndex = -1;
	this.MoreInfo = "";
	this.IsActivated = false;
	this.CssClass = "";
	this.OnHideFinishFunc = function(firstLevelIndex) {
		switch(this.Action)
		{
			case "remove":
				$("#FirstLevel" + firstLevelIndex).remove();
				this.TmpCount--;
				if(this.TmpCount == 0)
				{
					FirstLevelArr.splice( this.FromIndex, this.ToIndex );
					$(FirstLevelNuetral).css(DirectionPosition, 0);
					ActivateSubMenuItem(this.TmpIndexFirstLevel, this.TmpIndexSon, this.CssClass);
				}
				break;
			case "NuetralMenuItemFinishedClick":
				this.IsActivated = false;
				if($("span", FirstLevelNuetral).html() == CloseBtnText)
					$("span", FirstLevelNuetral).html(DetailsBtnText);
				else
					$("span", FirstLevelNuetral).html(CloseBtnText);
				break;
		}
	}
}
//------------------------------------------------------

//------------------------------------------------------
function ToggleSubItems(action, fromFirstLevelIndex, toFirstLevelIndex, callback)
{
	if(toFirstLevelIndex != null && toFirstLevelIndex != "" && fromFirstLevelIndex != toFirstLevelIndex)
	{
		for(var i = fromFirstLevelIndex; i <= toFirstLevelIndex; i++)
			ToggleSubItems(action, i, i, callback);
		return;
	}
	
	var container = $("#FirstLevel" + fromFirstLevelIndex);
	var subItemsWrapper = $(".SubItemsWrapper", container);
	var subItems = $(".SubItems", subItemsWrapper);
	
	switch(action)
	{
		case "show":
			//easeOutElastic
			var actualHeight = $(subItems).outerHeight(true);
			$(subItemsWrapper).stop().animate({height:actualHeight}, 200, 'jswing', function() {
				if(callback != null)
					callback.OnHideFinishFunc(fromFirstLevelIndex);
			});
			break;
		case "hide":
			$(subItemsWrapper).stop().animate({height:0}, 200, 'jswing', function() {
				if(callback != null)
					callback.OnHideFinishFunc(fromFirstLevelIndex);
			});
			break;
	}
}
//------------------------------------------------------

//------------------------------------------------------
$(document).ready(function() {

    if (LanguageDirection == "ltr") {
        DirectionPosition = "left";
        //DirectionToolbarSub = (MenuItemWidth * (Math.ceil(ScreenWidth / MenuItemWidth)) - MenuItemWidth);
        DirectionToolbarSub = MenuItemWidth * 5;
    }

    //var height = $(window).height() < MinFlashMoviewHeight ? $(window).height() : MinFlashMoviewHeight;
    var height = 572;
    swfobject.embedSWF("/swf/player.swf", "flashMovie", ScreenWidth, height, "9.0.260", "/swf/expressInstall.swf", flashvars, params, attributes);
    setTimeout(function() {
        CallAS3("screen_height=" + height);
        CallAS3("toolbar_right=" + (DirectionToolbarSub > 0 ? (MenuItemWidth * 4) : 0));
    }, 1000);

    FirstLevelNuetral = $("#FirstLevelNuetral");
    NuetralMenuItemCallback = new CallbackObj();
    NuetralMenuItemCallback.Action = "NuetralMenuItemFinishedClick";

    /*
    $(ClientsHolderSelector).append($("#FirstLevelClients"));
    FirstLevelClients = $("#FirstLevelClients");
    ClientsMenuItemCallback = new CallbackObj();
    ClientsMenuItemCallback.Action = "ClientsMenuItemFinishedClick";
    */

    $.getJSON("/HookGenerateMenu.ashx?lang=" + LanguageRequested, function(data, textStatus) {
        FirstMenuItemObj = data;
        AddMenuItem(FirstMenuItemObj[0]);
        InitArrays();
    });

    // Setting the the height of the centered div (=TableInner) to be the height of the
    // wrapper so that the menu will still appear at the bottom (Reminder: the menu is position at: bottom:0).
    /*var pageHeight = $("#Wrapper").height();
    if (pageHeight < MinScreenHeight)
        $("#TableInner").height(pageHeight);*/
    $("#TableInner").height(height);    
});
//------------------------------------------------------

//------------------------------------------------------
function InitArrays()
{
	InitArraysRecursive(FirstMenuItemObj[0]);
	
	var ClientsArrTmp = ClientsArr;
	ClientsArr = new Object();
	
	for(var i=0; i < ClientsArrTmp.length; i++)
		ClientsArr[ClientsArrTmp[i].ID] = [];
	
	for(var i=0; i < ProjectsArr.length; i++)
		try { ClientsArr[ProjectsArr[i].ClientId].push(ProjectsArr[i]); } catch(err) {}			
}
//------------------------------------------------------

//------------------------------------------------------
function InitArraysRecursive(jsonNode)
{
	$.each(jsonNode.Sons, function(index, obj) {
		switch(obj.CssClasses)
		{
			case "project": 
				ProjectsArr.push(obj); 
				if(obj.IsFeatured == "True")
					FeaturedArr.push(obj);
				break;
			case "client":
				ClientsArr.push(obj);
				break;
		}
		InitArraysRecursive(obj);
	});
}
//------------------------------------------------------

//------------------------------------------------------
function CallAS3(var2pass)
{
	try {
	if(navigator.appName.indexOf("Microsoft") != -1)
		flashMovie.calledFromJs(var2pass);
	else
		window.document.flashMovie.calledFromJs(var2pass);
	}
	catch(err) {}
}
//------------------------------------------------------

//------------------------------------------------------
// Swf background params
var flashvars = {};
var params = {
	play: 'true',
	loop: 'true',
	align: 'middle',
	scale: 'showall',
	devicefont: 'false',
	id: 'player',
	bgcolor: '#2a2a2c',
	name: 'player',
	wmode: 'transparent',
	menu: 'true',
	allowFullScreen: 'true',
	allowScriptAccess:'always',
	movie: 'player',
	salign: 'br'
};
var attributes = {};
//------------------------------------------------------

