


// Copyright (c) NimbleCat, 2008

/*
* this object implements a menu
* 
* */
// make sure that the required includes are there
 if (typeof NC == 'undefined') {
       alert("menu.js requires the NC JavaScript framework");
 }
 
 if (typeof NC.widget.Panel == 'undefined') {
       alert("menu.js requires the NC JavaScript framework");
 }
 
 /*
  * constructor
  */
  
  NC.widget.Menu = function( id) {
		var fnSuperClass = NC.widget.Menu.superclass.constructor;
		fnSuperClass.call( this, id);
  }
  
    NC.widget.Menu.setMenuOwner = function( id) {
		var el = document.getElementById( id);
		var li = el.getElementsByTagName( "li");
		for ( var i = 0; i < li.length; i++) {
			
		}
	}
  
  NC.widget.Menu.documentMouseUp = function( event) {
			var target  = NC.core.Event.getEventTarget(event);
			NC.widget.Element.removeDocumentDomEvent(NC.core.EventType.Mouseup, NC.widget.Menu.documentMouseUp, false);
			NC.widget.MenuManager.hideAllMenus( target.id);
	}
  
  NC.widget.Menu.menuElementMouseOver = function( event) {
			var target  = NC.core.Event.getEventTarget(event);
			NC.util.Dom.addClass( target, 'ncmenuitem-highlight');
	}
  
  NC.widget.Menu.menuElementMouseOut = function( event) {
			var target  = NC.core.Event.getEventTarget(event);
			NC.util.Dom.removeClass( target, 'ncmenuitem-highlight');
	}
  
  NC.widget.Menu.menuElementMouseUp = function( event) {
			var target  = NC.core.Event.getEventTarget(event);
			var owner = NC.widget.Attribute.get( target, NC.widget.Attribute.OwnerId);
			if (owner != null) {
				var oOwner = NC.widget.ElementManager.lookup( owner);
				/*
				for (var key in target) {    
						alert(key + "=" + target[key]);
				}
				* */
				oOwner.onMenuItemSelected( event, target, target.innerHTML, target.id);
			}
	}
  
  NC.lang.extend(NC.widget.Menu, NC.widget.Panel, 
  	{

	  	init: function() {
            NC.widget.Menu.superclass.init.call(this);
	  		return "init menu function";
	  	},
	  	
  		addMenuEvents: function( id) {
			var el = document.getElementById( id);
			var li = el.getElementsByTagName( "li");
			for ( var i = 0; i < li.length; i++) {
				NC.widget.Element.addElementDomEvent( li[i], NC.core.EventType.Mouseover, NC.widget.Menu.menuElementMouseOver, false);
				NC.widget.Element.addElementDomEvent( li[i], NC.core.EventType.Mouseout, NC.widget.Menu.menuElementMouseOut, false);
				NC.widget.Element.addElementDomEvent( li[i], NC.core.EventType.Mouseup, NC.widget.Menu.menuElementMouseUp, false);
			}
			NC.widget.Element.addDocumentDomEvent(NC.core.EventType.Mouseup, NC.widget.Menu.documentMouseUp, false);
  		},

  		removeMenuEvents: function( id) {
			var el = document.getElementById( id);
			var li = el.getElementsByTagName( "li");
			for ( var i = 0; i < li.length; i++) {
				NC.widget.Element.removeElementDomEvent( li[i], NC.core.EventType.Mouseover, NC.widget.Menu.menuElementMouseOver, false);
				NC.widget.Element.removeElementDomEvent( li[i], NC.core.EventType.Mouseout, NC.widget.Menu.menuElementMouseOut, false);
				NC.widget.Element.removeElementDomEvent( li[i], NC.core.EventType.Mouseup, NC.widget.Menu.menuElementMouseUp, false);
			}
  		},
  		
  		removeMenuHighLight: function( id) {
			var el = document.getElementById( id);
			var li = el.getElementsByTagName( "li");
			for ( var i = 0; i < li.length; i++) {
				NC.util.Dom.removeClass( li[i], 'ncmenuitem-highlight'); // remove highlights
			}
  		},
  		
	  	setOwner: function( owner) {
	  		var element = document.getElementById(this.getId());
	  		element.setAttribute(NC.widget.Attribute.OwnerId, owner);
			var li = element.getElementsByTagName( "li");
			for ( var i = 0; i < li.length; i++) {
				li[i].setAttribute(NC.widget.Attribute.OwnerId, owner);
			}
	  	},
	  	
	  	getOwner: function( ) {
	  		var element = document.getElementById(this.getId());
	  		return element.getAttribute(NC.widget.Attribute.OwnerId);
	  	},
	  	

 		render:function() {
 			return "render";
 		}
	  	
  	});
