var expandMenuController = {
	
	menus: [],
	
	getMenu: function(objOrId){

		if (objOrId){

			var obj = null;
			var id = null;	  			

			if (typeof(objOrId) == 'string') {

			 	id = objOrId;		

			} else {

				obj = objOrId;
				id = obj.id;
				
			}	
					
			for (var i=0; i < this.menus.length; i++) {

				if (obj&&this.menus[i].obj==obj||id&&this.menus[i].id==id){
			        
					if (obj) this.menus[i].obj = obj;
					if (id) this.menus[i].id = id;
					return this.menus[i];

				}

			}

			var a = {};
										
			a.obj = obj;
			a.id = id;
			
			a.menuElementTagName = "TD";
			a.menuWrapperTagName = "DIV";						
			a.submenuContainerTagName = "UL";
			a.submenuElementTagName = "LI";
			a.submenuWrapperTagName = "DIV";
									
			a.menuElementExpanded = "menuElementExpanded";
			a.menuElementCollapsed = "menuElementCollapsed";
			a.menuElementNoSubElements = "menuElementNoSubElements";
			
			a.submenuElementExpanded = "submenuElementExpanded";
			a.submenuElementCollapsed = "submenuElementCollapsed";
			a.submenuElementNoSubElements = "submenuElementNoSubElements";												
																
			this.menus.push(a);
			return a;	
			
	  	}

		return null;

	},
	
	mouseClickEvent: function(obj,e){
		
		var menu = this.getMenu(obj);
				
		if (menu) {
		
			var obj = this.getEventTarget(e);				
				
			if (obj.nodeName != "A") {
												
				var par = this.getElement(obj,menu.submenuElementTagName); 					
				
				if (par){
										
					var submenuContainer = this.getFirstChild(par,menu.submenuContainerTagName);														
					var submenuLinkWrapper = this.getFirstChild(par,menu.submenuWrapperTagName);
					
					if (submenuLinkWrapper.className == menu.submenuElementCollapsed){
												
						submenuLinkWrapper.className = menu.submenuElementExpanded;
						this.showObject(submenuContainer);						
						
					} else if (submenuLinkWrapper.className == menu.submenuElementExpanded){
						
						submenuLinkWrapper.className = menu.submenuElementCollapsed;
						this.hideObject(submenuContainer);						
					} 
																																																																											
				} else {
								
					if (!par) par = this.getElement(obj,menu.menuElementTagName,null); 				
					
					var submenuContainer = this.getFirstChild(par,menu.submenuContainerTagName);														
					var menuLinkWrapper = this.getFirstChild(par,menu.menuWrapperTagName);
					
					if (menuLinkWrapper) {
						if (menuLinkWrapper.className == menu.menuElementCollapsed){
												
							menuLinkWrapper.className = menu.menuElementExpanded;
							this.showObject(submenuContainer);												
						
						} else if (menuLinkWrapper.className == menu.menuElementExpanded){
						
							menuLinkWrapper.className = menu.menuElementCollapsed;
							this.hideObject(submenuContainer);						
						
						}
					}	
										
				}
							
			}		
																					
		}

		return true;					
		
	},
	
	showObject: function(obj){		
		if (obj) obj.style.display = 'block';		
	},
	
	hideObject: function(obj){
		if (obj) obj.style.display = 'none';				
	},

	getEventTarget: function(e){

		if (!e) e = window.event;
		
       		if (e.target) {

			if (e.target.nodeType == 3) e.target = e.target.parentNode;
        	 	return e.target;
        	 
      		} else if (e.srcElement)

        	return e.srcElement;

	},
		
	getFirstChild : function(obj,tagname){

		if (obj) obj = obj.firstChild;		
					
		if (obj&&obj.nodeName==tagname) return obj;					
														
		return this.getNextSibling(obj,tagname);

	},

	getNextSibling : function(obj,tagname){
										
		if (obj) obj = obj.nextSibling;

		while (obj&&obj.nodeName!=tagname) obj = obj.nextSibling;
		
		return obj;		
						
	},
	
	getElement : function(obj,tagname){										
																
		while (obj&&obj.nodeName!=tagname) obj = obj.parentNode;														
																					
		return obj;	
		
	}
				
};	