

/*
Ext.ux.abz.MenubarBuilder
***************************************************************************************************/

Ext.namespace("Ext.ux", "Ext.ux.abz");



Ext.ux.abz.MenubarBuilder = function(config) {
	
	// Set defaults
	Ext.apply(this, {
			url: "menu.html",
			temp: "menu-content-container",
			separator: false,		// Separators between the menu buttons?
			splitButtons: false,	// Use splitbuttons instead of normal toolbar buttons
			barConfigs: [],			// Add extra configuration options to specific menus
			minSubmenuWidth: 255,	// Minimal width of submenus
			proxyUrl: "/menu.php",
			useProxy: false
		});
	
	Ext.apply(this, config);

	Ext.ux.abz.MenubarBuilder.superclass.constructor.call(this, config);
};


Ext.extend(Ext.ux.abz.MenubarBuilder, Ext.util.Observable, {
		
		menubars: [],
		
		// Load the menu content
		loadContent: function(url) {
				
				url = (url) ? url : this.url;
				url = (this.useProxy) ? this.proxyUrl + "?url=" + url : url;
				
				var transactionId = Ext.Ajax.request({
						method: "GET",							 
						url: url, 
						success: this.contentLoaded,
						failure: function() {
							alert("Fout bij het ophalen van de menu's");
						},
						scope: this,
						disableCaching: false
					});
			},
		
		// Process the menu content
		contentLoaded: function(response) {
			
			Ext.get(this.temp).update(response.responseText);
			
			if (Ext.isIE6) {
				// alert("Menu's ontvangen: " + response.responseText);
			}

			var menus = Ext.query(".menu-content");
			for (var i = 0; i < menus.length; i++) {
				var menu = menus[i];
				var menuId = menu.id.split("-content")[0];
				if (Ext.get(menuId)) {
					this.menubars[menuId] = this.buildFromSource(menuId, menu);
				} else {
				}
			}
			},
			
			
		buildFromSource: function(id, content) {

			var menubar = new Ext.ux.abz.Menubar({container: id});
			menubar.init();
			var clickHandler = menubar.showUrl;
			
			if (content) {
				
				content = Ext.get(content);
				
				if (this.separators) {
					menubar.addSeparator();
				}
				content.select(">li").each( function(item, index, allItems) {
					// Set current item properties
					var link = item.child("a:first", true);
					var buttonProperties = {
					  text: link.innerHTML,
					  id: link.id,
					  href: link.href,
					  cls: link.className
					};
					
					if (link.target) {
						buttonProperties.hrefTarget = link.target;
					}
					if (this.barConfigs[id]) {													
						Ext.apply(buttonProperties, this.barConfigs[id]);
					}

					// Check for submenu
					var s = item.select(">ul");
					if (s.elements.length) {
						buttonProperties.menu = {
							minWidth: this.minSubmenuWidth, 
							items: this.buildSubmenu(item.select(">ul").first(), clickHandler)
						};
						if (this.splitButtons) {
							buttonProperties = new Ext.Toolbar.MenuButton(buttonProperties);
						}
					} else {
						buttonProperties.handler = clickHandler;
					}
					menubar.add(buttonProperties);
					if (this.separators) {
						menubar.addSeparator();
					}
					
				}, this);
			
				content.remove();
			}

			return menubar;
		},
	
		buildSubmenu: function (e, clickHandler) {

			var items = [ ];
			Ext.get(e).select(">li").each( function(item, index, allItems) {
					var link = item.child("a:first", true);
					var currentItem = null;
		
					if (!link) {
						currentItem = {
								text: item.innerHTML,
								canActivate: false,
								cls: "menu-separator"
							};
						items.push(currentItem);	
					} else {
						currentItem = {
								text: link.innerHTML,
								id: link.id,
								href: link.href,
								handler: clickHandler,
								cls: link.className
							};
						
						if (link.target) {
							currentItem.hrefTarget = link.target;
						}
						
						// Check for sub menu.
						var s = item.select(">ul");
						if (s.elements.length) {
							currentItem.menu = { 
								minWidth: this.minSubmenuWidth, 
								items: this.buildSubmenu(s.item(0), clickHandler)
							};
						}
						
						// Add the item to the list, if it is not yet there (check for Safari)
						if (!link.inMenu) {
							items.push(currentItem);
							link.inMenu = true;
						}
					}
				}, this);

				return items;
		}
		   
	});



/*
Ext.ux.abz.Menubar
***************************************************************************************************/

Ext.ux.abz.Menubar = function(config) {
		Ext.apply(this, config);
		this.activeButton = null;
		Ext.ux.abz.Menubar.superclass.constructor.call(this, config);
	};


Ext.extend(Ext.ux.abz.Menubar, Ext.Toolbar, {
		init: function() {
			this.render(this.container);
			},
		showUrl: function() {
			if (this.getXType() == "tbbutton") {
				location.href = this.href;
			}
			return true;
		}
	});

/**************************************************************************************************/
