/*
 * @author	Ozan Vural
 * @version	1.0
 * @date	25.07.2007
 * @copyright	Treda Bilisim Teknolojileri A.S
 */
 
if(typeof(Treda) == "undefined") Treda = {}; // if not exists add NameSpace Treda
if(typeof(Treda.Controls) == "undefined") Treda.Controls = {}; // if not exists add NameSpace Treda.Controls
			
Treda.Controls.Menu = function() {
	var elements = new Array();
	var elementIds = new Array();

	return {
		 /*
		  * Public
		  */		
		Entity: function (n, u, c) {
			var name = n;
			var url = u;
			var cssClass = c;
			var entities = new Array();	
			
			this.getName = function() {
				return name;
			}	
			this.getUrl = function() {
				return url;
			}
			this.addSubEntity = function (menu) {							
				entities.push(menu);
			}
			this.getSubEntities = function() { 
				return entities; 
			}
			this.getCssClass = function() {
			   return cssClass;
			}
		},
		Manager: function() {
			this.menus = new Array();
			var elementId;
			var htmlContainer = null;
		
			this.setElementId = function(id) {
				this.elementId = id;
			} 	
			this.addMenu = function(m) {
				this.menus.push(m);
			}
			this.generate = function() {
				this.generateVertical();
			}
			
			this.generateVertical = function () {
				var element = null;
				if (this.elementId == null) {
					alert("Please specify ElementId\nSample Code : object.setElementId(id);");
					return;
				}
				element = document.getElementById(this.elementId);
				if (element == null) {
					alert(this.elementId + " : object not found");
					return;
				}
                this.htmlContainer = new Treda.Text.StringBuilder(""); 
				for (var i = 0; i < this.menus.length; i++) {	                                        
					if (this.menus[i].getSubEntities().length == 0) {
                        this.htmlContainer.append(Treda.String.format("<div class='leftLevel1'><a href='{0}' class='{2}'>{1}</a></div>", this.menus[i].getUrl(), this.menus[i].getName(), this.menus[i].getCssClass()));
					}
					else {
						this.htmlContainer.append("<div class='leftLevel2'>");
                        this.htmlContainer.append(Treda.String.format("<a href=\"javascript:Treda.Controls.Menu.toggle('item_{0}')\"  class='{2}'>{1}</a><br/>", i.toString(), this.menus[i].getName(), this.menus[i].getCssClass()));
						this.createSubMenu( i , this.menus[i].getSubEntities() , "", "&gt;&nbsp;");
						this.htmlContainer.append("</div>");
					}
				}
				element.innerHTML = this.htmlContainer.toString();//;"<textarea>" + this.htmlContainer.toString() + "</textarea>";

				for (var i = 0; i < elementIds.length; i++) {
					elements.push(document.getElementById(elementIds[i]));
				}	
            }
            this.createSubMenu = function (index, subMenus, idSuffix, linkNamePrefix) {
                if (subMenus.length == 0) return;
                elementIds.push(Treda.String.format("item_{0}{1}", idSuffix, index.toString()));
                this.htmlContainer.append(Treda.String.format("<div id='item_{0}{1}' style='display:none'>", idSuffix, index.toString()));
                for (var i = 0; i < subMenus.length ; i++) {
                        if (subMenus[i].getSubEntities().length == 0) {
                            this.htmlContainer.append(Treda.String.format("<a href='{0}' class='{3}'>{1}{2}</a><br />", subMenus[i].getUrl(), linkNamePrefix, subMenus[i].getName(), subMenus[i].getCssClass()));
                        }
                        else {
                            this.htmlContainer.append(Treda.String.format("<a href=\"javascript:Treda.Controls.Menu.toggle('item_{0}_{1}')\"  class='{4}'>{2}{3}</a><br/>", index.toString(), i , linkNamePrefix, subMenus[i].getName(), subMenus[i].getCssClass()));			
                            this.createSubMenu( i , subMenus[i].getSubEntities() , index.toString() + "_" + idSuffix, "-&nbsp;");
                        }
                }
                this.htmlContainer.append("</div>");
            }
		},
		toggle: function(id) {	
			for (var i = 0; i < elements.length; i++) {
				if (elements[i].id == id) {			
					elements[i].style["display"] = elements[i].style["display"] == "" ? "none" : "";
				}
				else if (id.indexOf(elements[i].id) != 0) {
					elements[i].style["display"] = "none";
				}
			}                       
		}
	};
}();