/**
 * A php oldali MenuGroup es MenuItem osztályok Javascript oldali megfelelöje.
 * A fenti osztályok getJavascriptRepresentation() metódusai segitségével könnyedén
 * kirakhatod js oldalra a neked szükséges menüket, igy advanced js technikák implementálhatók
 * 
 */

var tMenuItem = Class.create();
tMenuItem.prototype = {

	initialize: function(pId) {
	
		this.id = pId;
		this.children = new Array();
		this.childrenIds = new Array();
		this.parent = null;
		this.level = 1;
	},
	
	addChild: function(menuItem) {
		
		this.childrenIds.push(menuItem.id);
		this.children[menuItem.id] = menuItem;
		menuItem.parent = this;
		menuItem._setLevel(this.level + 1);
	},
	
	hasChildren: function() {
		return (this.childrenIds.length > 0);
	},
	
	getChild: function(id) {
		
		if(typeof this.children[id] == "undefined")
			return null;
		
		return this.children[id];
	},
	
	findMenu: function(menuId) {
		
		if(menuId == this.id)
			return this;
		
		for(var i=0; i<this.childrenIds.length; i++)
		{
			var id = this.childrenIds[i];
			var foundMenu = this.children[id].findMenu(menuId);
			if(foundMenu != null)
				return foundMenu;
		}
		
		return null;
	},
	
	_setLevel: function(level) {
		this.level = level;
		for(var i=0; i<this.childrenIds.length; i++)
		{
			var id = this.childrenIds[i];
			this.children[id]._setLevel(level+1);
		}
	},
	
	toString: function() {
		
		return "menuItem (id="+this.id+", children=[" + this.childrenIds.toString() + "])";
	}
	
}

var tMenuGroup = Class.create();
tMenuGroup.prototype = {
	
	initialize: function(pName) {
	
		this.name = pName;
		this.menuItemIds = new Array();
		this.menuItems = new Array();
	},
	
	addMenuItem: function(menuItem) {
		
		this.menuItemIds.push(menuItem.id);
		this.menuItems[menuItem.id] = menuItem;
	},
	
	findMenu: function(menuId) {
		
		for(var i=0; i<this.menuItemIds.length; i++)
		{
			var id = this.menuItemIds[i];

			var foundMenu = this.menuItems[id].findMenu(menuId);
			if(foundMenu != null)
				return foundMenu;
		}
		
		return null;
	},
	
	toString: function() {
		var str = "menuGroup\n  - name='"+this.name+"'\n  - menuItems = {";
		for(var i=0; i<this.menuItemIds.length; i++)
		{
			var id = this.menuItemIds[i];
			str += "\n      " + this.menuItems[id].toString();
		}
		str += " }";
		return str;
	}
	
}
