var CategoryManager=new Class({
	initialize: function(menu) {
	this.menuElement=document.getElementById(menu);
	if(this.menuElement)
		{
		$(this.menuElement).getElements('a').each(function (a){
			$(a).set('title','');
			});
		$(this.menuElement).addEvent('mouseout', this.hideHandler.bind(this), false);
		$(this.menuElement).addEvent('blur', this.hideHandler.bind(this), false);
		var menuItems = this.menuElement.getElementsByTagName("li");
		for (var i=0; i<menuItems.length; i++)
			{
			if(menuItems[i].firstChild.nodeName=='A')
				{
				$(menuItems[i].firstChild).addEvent('focus', this.showHandler.bind(this), false);
				}
			$(menuItems[i]).addEvent('mouseover', this.showHandler.bind(this), false);
			}
		this.menuItemContents = this.menuElement.getElementsByTagName('dl');
		this.hide();
		}
	},
	showHandler: function(event) {
	if(event&&event.target)
		{
		var targetedContents=event.target;
		while(targetedContents&&targetedContents.parentNode&&targetedContents.nodeName.toLowerCase()!='li')
			{
			targetedContents=targetedContents.parentNode;
			}
		if(targetedContents.nodeName.toLowerCase()=='li')
			{
			targetedContents=targetedContents.getElementsByTagName('dl')[0];
			if(targetedContents&&this.selectedContents!=targetedContents)
				{
				this.hide();
				this.selectedContents=targetedContents;
				this.show(targetedContents);
				}
			}
		}
	else
		{
		this.hide();
		}
	},
	show: function(element) {
		element.style.display='block';
		var fx=new Fx.Morph($(element),{duration:'long', transition: Fx.Transitions.Sine.easeOut, onComplete:null});
		fx.start({'opacity':[0,1]});
	},
	hideHandler: function(event) {
	var target=event.relatedTarget;
	while(this.selectedContents&&target&&target!=this.selectedContents.parentNode.parentNode&&target.parentNode)
		{
		target=target.parentNode;
		}
	if(this.selectedContents&&target!=this.selectedContents.parentNode.parentNode)
		this.hide();
	},
	hide: function() {
	this.selectedContents=null;
	for (var i = 0; i<this.menuItemContents.length; i++)
		{
		this.menuItemContents[i].style.display='none';
		$(this.menuItemContents[i]).setStyle('opacity',0);
		}
	}
});

window.addEvent('domready', function() {
    new CategoryManager('menu');
});
