(function($){
	var undefined;
	
	$.DropDown = function(params){
		
		this.defaults = {
			containerSelector : null,
			mainSelector : null,
			subSelector : null,
			showTimeout : 100,
			hideTimeout : 100
		}
		
		//Vars
		var self = this,
			settings = $.extend({},this.defaults,params),
			_contTimeout,
			_mainTimeout,
			_subTimeout,
			_activeClass = 'active',
			_disabledClass = 'disabled',
			_mains = (settings.mainSelector != null) ? $(settings.containerSelector + ' ' + settings.mainSelector) : 0,
			_subs = (settings.subSelector != null) ? $(settings.containerSelector + ' ' + settings.subSelector) : 0,
			$activeItem = $('#mastheadNav li.on');
		
		//start:Events
		$(settings.containerSelector).hover(function(){
			clearTimeout(_contTimeout);
		},function(){
			_contTimeout = setTimeout(function(){
				self.hideAll();
			},settings.hideTimeout);
		});
		
		var pointerTimer = null;
		if (_mains){
			_mains.each(function(){
				var $this = $(this);
				$this.hover(function(){
					if (pointerTimer != null) clearTimeout(pointerTimer);
					$('#mastheadNav li.on').removeClass('on');
					_showMain($this);
				},function(){
					pointerTimer = setTimeout(function(){
						$activeItem.addClass('on');
					}, 100);
					_hideMain($this);
				});
			});
		}
		
		if (_subs){
			_subs.each(function(){
				var $this = $(this);
				$this.hover(function(){
					_showSub($this);
				},function(){
					_hideSub($this);
				});
			});
		}
		//end:Events
		
		//start:Public
		this.hideAll = function(){
			_mains.each(function(){
				$(this).removeClass(_activeClass);
			});
		}
		//end:Public
		
		//start:Private
		function _showMain(item){
			clearTimeout(_mainTimeout);
			_mainTimeout = setTimeout(function(){
				self.hideAll();
				if (!item.hasClass(_disabledClass)){
					
					item.addClass(_activeClass);
				}
			},settings.showTimeout);
		}
		
		function _hideMain(item){
			clearTimeout(_mainTimeout);
			_mainTimeout = setTimeout(function(){
				item.removeClass(_activeClass);
			},settings.hideTimeout);
		}
		
		function _showSub(item){
			clearTimeout(_mainTimeout);
			clearTimeout(_subTimeout);
			_subTimeout = setTimeout(function(){
				_hideAllSubs();
				item.addClass(_activeClass);
			},settings.showTimeout);
		}
		
		function _hideSub(item){
			clearTimeout(_subTimeout);
			_subTimeout = setTimeout(function(){
				item.removeClass(_activeClass);
			},settings.hideTimeout);
		}
		
		function _hideAllSubs(){
			_subs.each(function(){
				$(this).removeClass(_activeClass);
			});
		}
		//end:Private
	}
})(jQuery);


