var Menu = function(opts) {
	
	var _active = true;
	var _elem = $(opts.elem) || null; // #mainNav
	var _lineElement = opts.lineElement || null; //#mainNav ul#secondNav
	var _noMenuElem = opts.noMenuElem || null;
	var _leftValue = []; 
	var _lineVisible = true;
	var _lastElem = null;
	var _currentElem = null;
	var _noMenuElemLeft = null;
	var _mouseIn = false;
	var _lineElementBorderColor = null;	
	var _currentMethod = null;
	var _eventQueue = null;
	var _executing = false;
	
	// Constructor
	(function() {
		$(document).ready(function() {		
			_elem = $(opts.elem);
			_noMenuElemLeft = -$(_elem).width() - 40;		
			_lineElementBorderColor = $("ul li a", _elem).css("color");		
		});
		
		setInterval(function() {
			if(typeof _eventQueue == "function" && !_executing) {				
				_executing = true;				
				_eventQueue();
				_eventQueue = null;
			}
		}, 1000);
	})();
	
	
	
	this.start = function() {
		this.hide();
		
		var noMenuLeft = document.getElementById("mainNav").offsetLeft - 50;
		var noMenuTop = document.getElementById("mainNav").offsetTop - 50;
		var noMenuWidth = parseInt($("#mainNav").css("width"))
				+ parseInt($("#mainNav").css("padding-left")) + 50;
		var noMenuHeight = parseInt($("#mainNav").css("height")) + 50;

		$(document).bind('mousemove', function(e) {
			if (e.pageX >= noMenuLeft
				&& e.pageX <= noMenuLeft + noMenuWidth
				&& e.pageY >= noMenuTop
				&& e.pageY <= noMenuTop + noMenuHeight) {
			} else {
				firstTime = false;
			}
		});

		$("#mainNav").hover(function() {
			if (!firstTime) {
				firstTime = false;
				menu.show();
				mouseIn = true;
				timer = setInterval(function() {
					if (!mouseIn && menu.isActive()) {
						clearInterval(timer);
						menu.hide();
					}
				}, 1000);
				
			}
		}, function() {
			mouseIn = false;
		});
	};
	
	this.show = function() {	
		_eventQueue = function() {
			if(!_active) {			
				_active = true;
				_currentElem = 0;
				
				$(_noMenuElem).clearQueue().animate({left : _noMenuElemLeft + "px"}, 1000);
				
				$("li", _elem).each(function() {
					var elem = this;
					setTimeout(function(){
						if(_active) {
							$(_noMenuElem).css("left", _noMenuElemLeft + "px");
							$(elem).animate({left: 0}, 1500, function() {
								if(!_lineVisible && $(elem).parent().attr("id") == "secondNav") {
									_lineVisible = true;
									$(_lineElement).css("border-top", "1px dotted").css("border-color", _lineElementBorderColor);
								}	
								
								if(_currentElem == $("li", _elem).length) {
									_executing = false;
								}
							});
						}
					}, 100 * _currentElem);
					++_currentElem;
				});		
				
			} else {
				_executing = false;
			}
		};		
	};
	
	this.hide = function() {
		_eventQueue = function() {
			if(_active) {
				_active = false;
				_currentElem = $("li", _elem).length;
							
				$("li", _elem).each(function() {
					if($(this).css("left") != _leftValue[_currentElem]) {
						$(this).css("position", "relative");
						var elem = this;
						setTimeout(function() {						
							if(!_active) {
								if(_lineVisible && $(elem).parent().attr("id") == "firstNav") {
									_lineVisible = false;
									$(_lineElement).css("border", "0");
								}
								
								_leftValue[_currentElem] = -$(_elem).width() - 40 - $(elem).width() - 20*(_currentElem -1 );
								$(elem).clearQueue().animate( {
									left : _leftValue[_currentElem] + "px"
								}, 2000);
								
								setTimeout(function() {
									if (lastElem == elem) {
										$(_noMenuElem).css("left",_noMenuElemLeft + "px").show();
										$(_noMenuElem).animate( {
											left : 0
										}, 1000, function() {											
											_executing = false;
										});								
									}
								}, 2000);
							}
						}, 100 * _currentElem);
						
						--_currentElem;
						
						if(_currentElem == 0) lastElem = this;
					}
				});
			} else {
				_executing = false;
			}
		};		
	}	
	
	this.isActive = function() {
		return _active;
	}
	
};
