function submenu() {
	var instance = this;
	
	var corFundoInativo;
	var corFundoAtivo;
	var corTextoAtivo;
	var corTextoInativo;
	var larguraImagem;
	var raioBorda;

	var numMenus;
	var menuWidth;

	var level;

	this.inicializar = function (menuContainer, _corFundoAtivo, _corTextoAtivo, _corFundoInativo, _corTextoInativo, _corIcone, _raioBorda) {
		var $menuContainer = $(menuContainer);
		var $menu = $('.menu', $menuContainer);
		var $subMenus = $('ul', $menu);
		var $menusLvl1 = $('> li', $menu);
		var $menuFilho = $(' > ul', $menusLvl1);

		corFundoAtivo = _corFundoAtivo;
		corTextoAtivo = _corTextoAtivo;
		corFundoInativo = _corFundoInativo;
		corTextoInativo = _corTextoInativo;
		corIcone = _corIcone;
		raioBorda = _raioBorda;
		//console.log(corFundoAtivo);
		 //$('a img', $menusLvl1).width();

        $('a', $menu).css('color', corTextoInativo);
        //$('li', $subMenus).css('outlineColor', corIcone);
        $('li', $subMenus).css('backgroundColor', corFundoInativo);
		
		/*$menu.css('top', $menuContainer.height() + 'px');
		$('li', $menuFilho).css('backgroundColor', corFundoInativo);
		$('li a span', $menu).css('color', corTextoInativo);
		$subMenus.css('visibility', 'hidden');*/
		
		var containerWidth;
		containerWidth = $menuContainer.width();
		
		numMenus = $menusLvl1.length;
		menuWidth = (containerWidth - 1) / numMenus;
		$menusLvl1.width(menuWidth);
		level = 0;
		menuWidth = 0;
		
		instance.ajustaPrimeiros($menusLvl1);
		
		widthSum = (menuWidth / (numMenus - 1)) / 2;
		
		$($menusLvl1).not(':first').css('marginLeft', widthSum + 'px')
		$($menusLvl1).not(':last').css('marginRight', widthSum + 'px');
		
		//$menu.css('marginLeft', (widthSum / numMenus) + 'px'); //WTF???
		
		instance.ajustaFilhos($menuFilho);
		instance.eventos($menu);
		//instance.eventos($menu);
		$subMenus.hide();
		$menuContainer.css('visibility', 'visible');
	};
	this.ajustaFilhos = function ($menu) {
		level++;
		$menu.each(

		function (index, element) {
			var $element = $(element);
			var $menuFilho = $('> li > ul', $element);
			var $primeiroFilho = $('> li:first', $element);
			var $ultimoFilho = $('> li:last', $element);
			var $filhos = $('> li', $element);
			var $menuPai;
			var greaterWidth = 0;

			$menuPai = $element.parent();
			$menuPai.addClass('expandivel');

			if (level > 1) {
				$menuPai = $menuPai.parent();
				$element.css('left', $menuPai.outerWidth() + 'px');
			} else {
				$element.css('minWidth', ($menuPai.outerWidth()) + 'px');
			}


			$filhos.each(

			function (index, element) {
				var $this = $(element);
				var width = $('> a', $this).outerWidth(true);

				if (width > greaterWidth) greaterWidth = width;
			});

			$element.css('width', greaterWidth + 'px');

			$element.data('largura', $element.width());
			$element.data('x', $element.offset().left);

			if ($menuFilho.length) instance.ajustaFilhos($menuFilho);
		});
		level--;
	};

	this.ajustaPrimeiros = function ($menu) {
		$menu.each(function (index, element) {
			var $element = $(element);
			var $menuImage = $('a img', $element);
			var $menuLabel = $('a span', $element);
			var marginLeft = $menuImage.css("marginLeft");
			var larguraImagem = $menuImage.width();
			marginLeft = (marginLeft.substring(0, marginLeft.length - 2)) * 2;

			menuWidth += $element.width() - (marginLeft + larguraImagem + $menuLabel.outerWidth(true));

			$element.width((marginLeft + larguraImagem + $menuLabel.outerWidth(true)));
			if ($element.has('ul').length) {
                $element.css({
                    '-webkit-border-top-right-radius': raioBorda,
                    '-moz-border-radius-topleft': raioBorda,
                    '-moz-border-radius-topright': raioBorda,
                    'border-top-left-radius': raioBorda,
                    'border-top-right-radius': raioBorda
                });
            } else {
                $element.css({
                    '-webkit-border-radius': raioBorda,
                    '-moz-border-radius': raioBorda,
                    'border-radius': raioBorda
                });
            }
		});
	};

	this.eventos = function ($menu) {
		$("li", $menu).hover(function () {
			var $this = $(this);
			$this.addClass('hover');
			$this.css('backgroundColor', corFundoAtivo);
			$('>a', $this).css('color', corTextoAtivo);
			if (!$this.parent().hasClass('principal')) {
				var $child = $('> ul', $this);
				if ($child.length) {
					var distancia = instance.checaLargura($child);
					if (distancia < 0) {
						var larguraPai = $this.parent('ul').data('largura');
						var diferenca = larguraPai - $child.data('largura');
						$child.css('left', (-(larguraPai - diferenca)) + 'px');
					}
				}
			}
		}, function () {
			var $this = $(this);
			$this.removeClass('hover');
			$('>a', $this).css('color', corTextoInativo);
			if ($this.hasClass('principal')) {
				$this.css('backgroundColor', '');
			} else {
				$this.css('left', '');
				$this.css('backgroundColor', corFundoInativo);
			}
		});

		$("li", $menu).hoverIntent({
			over: function () {
				var $this = $(this);
				//$this.animate({'backgroundColor': corFundoAtivo}, 250);
				$('ul:first', $this).css({
					visibility: "visible",
					display: "none"
				}).show(250);
			},
			out: function () {
				var $this = $(this);
				//$this.animate({'backgroundColor': corFundoInativo}, 250);
				$('ul:first', $this).css({
					visibility: "hidden"
				}).hide();
			},
			timeout: 100
		});

	};

	this.checaLargura = function ($menu) {
		var vscroll = $(document).scrollLeft();
		var vdocument = (typeof window.innerWidth != 'undefined' ? window.innerWidth : document.documentElement.clientWidth) - 16;
		var heightdiv = $menu.data('largura'); //$menu.outerWidth(true);
		var leftdiv = $menu.data('x'); //$menu.offset().left;
		var distance = vdocument - (leftdiv - vscroll) - heightdiv;

		return distance;
	};
}

