



var dm = {

	$head: null,
	options: {timeout:500,speed:300,timer:0,curItem:0,changeType:'fade'},

	create: function(selector) {
	
		dm.$head = $(selector);
		dm.setListeners();
	
	},
	
	setListeners: function() {
	
		dm.$head.children('li').bind('mouseover',dm.subMenu).bind('mouseout',dm.startTimer);
	
	},
	
	startTimer: function() {
	
		dm.options.timer = window.setTimeout(dm.hideSubMenu, dm.options.timeout);
	
	},
	
	cancelTimer: function() {
	
		if(dm.options.timer) {
			window.clearTimeout(dm.options.timer);
			dm.options.timer = null;
		}
	
	},
	
	subMenu: function() {
				
		if(dm.options.curItem) {
			if($(this).children('ul:first')[0]==dm.options.curItem[0]) {
				dm.continueSubMenu();
			}else {
				dm.changeSubMenu(this);
			}
		}else {
			dm.changeSubMenu(this);
		}
	
	},
	
	continueSubMenu: function() {
		dm.cancelTimer();
	},
	
	changeSubMenu: function(el) {
		dm.cancelTimer();
		dm.hideSubMenu();
		if(dm.options.changeType=='fade') {
			dm.options.curItem = $(el).children('ul:first').fadeIn(dm.options.speed);
		}else { // default to slide
			dm.options.curItem = $(el).children('ul:first').slideDown(dm.options.speed);
		}
	},
	
	hideSubMenu: function() {

		if(dm.options.curItem) {
			if(dm.options.changeType=='fade') {
				dm.options.curItem.fadeOut(dm.options.speed);
			}else { // default to slide
				dm.options.curItem.slideUp(dm.options.speed);
			}
			
			dm.options.curItem = null;
		}
	
	}


};
