jQuery(document).ready(function(){
	initNav({
		menuId: "main-nav",
		dropExistenceClass: "has-drop-down",
		sideClasses: true,
		cleverMode: true,
		flexibility: true,
		menuPaddings: 0,
		minWidth: 50
	});
	initAutoScalingNav({
		menuId: "main-nav",
		liHovering: true,
		tag: "a"
	});
	
	$('ul#main-nav').animationNav();
	initSlideNav();
});
jQuery.fn.animationNav = function(_options){
    // defaults options	
    var _options = jQuery.extend({
	    duration:250,
	    addBG:'<li class="bg"><a href="#">&nbsp;</a></li>',
	    bgClass :'bg',
		animEffect: 'linear'
    },_options);

    return this.each(function(){
	    var _obg = jQuery(this);
	    var _liWidth = [];
	    var _aWidth = [];
	    var _lis = jQuery(_obg).find('>li');
	    var _links = jQuery(_obg).find('>li>a');
	    var _linkIndex = _links.index(_links.filter('.active'));
	    var _timer = false;
	    var _pLeft = parseInt(jQuery(_obg).css('paddingLeft'));
	    var _visible = false;
	    
	    _lis.each(function(i, el){
			_liWidth[i] = jQuery(el).outerWidth(true);
			_aWidth[i] = jQuery(el).width();
	    });
	    if (jQuery.browser.msie) jQuery(_options.addBG).insertBefore(jQuery(_obg).find('li:first-child'));
	    else jQuery(_obg).append(_options.addBG);
	    		
	    jQuery.fn.animationNav.animateThis = function(_activeIndex, _obg){
			var _activeLiWidth = _liWidth[_activeIndex];
			var _activeAWidth = _aWidth[_activeIndex];
			var _left = _pLeft;
			for (var j = _activeIndex-1; j >= 0; j--) {
				_left += _liWidth[j];
			}
			$('li.bg', _obg)
				.stop()
				.animate({width:_activeAWidth +'px'},{queue:false,duration:150, easing:'linear'})
				.animate({
					left:_left+'px'
				},{queue:false,duration:_options.duration, easing:_options.animEffect});
			_left = _pLeft;
	    }
	    jQuery.fn.animationNav.showThis = function(_activeIndex, _obg){
			var _activeLiWidth = _liWidth[_activeIndex];
			var _activeAWidth = _aWidth[_activeIndex];
			var _left = _pLeft;
			for (var j = _activeIndex-1; j >= 0; j--) {
				_left += _liWidth[j];
			}
			$('li.bg', _obg)
				.css({
					left:(_left+(_activeAWidth/2))+'px',
					width:0,
					opacity:0,
					display: 'block'
				})
				.animate({
					width:_activeAWidth +'px',
					opacity:1,
					left:_left+'px'
				},{queue:false,duration:_options.duration, easing:_options.animEffect});
			_left = _pLeft;
	    }
	    jQuery.fn.animationNav.hideThis = function(_activeIndex, _obg){
			var _activeAWidth = _aWidth[_activeIndex];
			var _left = parseInt($('li.bg', _obg).css('left'));
			$('li.bg', _obg).fadeOut(200);
	    }
	    
	    if (_lis.filter('.active').length) {
	    	var _lisIndex = _lis.index(_lis.filter('.active'));
			jQuery.fn.animationNav.animateThis(_lisIndex, _obg);
	    } else {
			jQuery(_obg).children('.'+_options.bgClass).css('display','none');
	    }
    
	    _links.hover(function(){
			_linkIndex = _links.index(jQuery(this));
			if (_timer) clearTimeout(_timer);
			if (_lis.filter('.active').length || _visible) {
				jQuery.fn.animationNav.animateThis(_linkIndex, _obg);
			} else {
				jQuery.fn.animationNav.showThis(_linkIndex, _obg);
				_visible = true;
			}
	    }, function() {
			var _this = this;
			_timer = setInterval(function() {
				if (_lis.filter('.hover').length) {
					var _lisIndex = _lis.index(_lis.filter('.hover'));
					jQuery.fn.animationNav.animateThis(_lisIndex, _obg);
				} else {
					var _linksIndex = 0;
					_linkIndex = _lis.index(_lis.filter('.active'));
					var _activeLiWidth = _liWidth[_linkIndex];
					var _activeAWidth = _aWidth[_linkIndex];
					var _left = _pLeft;
					$('li.bg', _obg)
						.animate({
							width:_activeLiWidth +'px',
							left:_left+'px'
						},{queue:false,duration:_options.duration, easing:_options.animEffect});
					_visible = false;
				}
			}, 800);
	    });
	    
    });
}

function initSlideNav(){
	var _speed = 700;
	$('ul#main-nav li').each(function(){
		$(this).mouseenter(function(){
			$(this).addClass('hover');
		}).mouseleave(function(){
			$(this).removeClass('hover');
		});
	});
	$('ul#main-nav ul li:has(".drop")').each(function(){
		var this_li = $(this);
		var this_drop = this_li.find('>.drop');
		var this_drop_w = this_drop.width();
		this_drop.find('>.drop-inner').css('width', this_drop_w);
		this_drop.css({width:0, visibility:'hidden'});
		this_li.mouseenter(function(){
			setTimeout(function(){
				this_drop.css({width:0, visibility: 'visible'});
				this_drop.stop().animate({
					width:this_drop_w
				},{queue:false,duration:_speed});
			}, 10);
		}).mouseleave(function(){
			setTimeout(function(){
				this_drop.css({visibility: 'hidden'});
				this_drop.css('width',0);
			}, 10);
		});
	});
	$('ul#main-nav>li:has(".drop")').each(function(){
		var this_first_li = $(this);
		var this_first_drop = this_first_li.find('>.drop');
		var this_first_drop_h = this_first_drop.height();
		this_first_drop.find('>.drop-inner').css('height', this_first_drop_h);
		this_first_drop.css({height:0, visibility: 'hidden'});
		this_first_li.mouseenter(function(){
			setTimeout(function(){
				if($.browser.msie && $.browser.version==6){
					if (!this_first_li.find('.columns').length) {
						this_first_li.find('.content:eq(0)').css('height', this_first_drop_h - 24);
					}
				}
				if($.browser.msie && $.browser.version==7){
						this_first_li.find('.content:eq(0)').css('height', this_first_drop_h - 24);
				}
				this_first_drop.css('height',0);
				this_first_drop.css({height:0, visibility: 'visible'});
				this_first_drop.stop().animate({
					height:this_first_drop_h
				},{queue:false,duration:_speed,complete:function(){
					this_first_drop.css('overflow','visible');
				}});
			}, 10);
		}).mouseleave(function(){
			setTimeout(function(){
				this_first_drop.css({height:0, visibility: 'hidden'});
				this_first_drop.css('height',0);
			}, 10);
		});
	});
}
function initNav(o){
	if (!o.menuId) o.menuId = "main-nav";
	if (!o.cleverMode) o.cleverMode = false;
	if (!o.flexibility) o.flexibility = false;
	if (!o.dropExistenceClass) o.dropExistenceClass = false;
	if (!o.menuHardCodeClass) o.menuHardCodeClass = "menu-hard-code";
	if (!o.sideClasses) o.sideClasses = false;
	if (!o.menuPaddings) o.menuPaddings = 0;
	if (!o.minWidth) o.minWidth = 0;
	if (!o.coeff) o.coeff = 1.7;
	var n = document.getElementById(o.menuId);
	if(n){
		n.className = n.className.replace(o.menuHardCodeClass, "");
		var lfl = [];
		var li = n.getElementsByTagName("li");
		for (var i=0; i<li.length; i++){
			var d = li[i].getElementsByTagName("div").item(0);
			if(d){
				if(o.flexibility){
					var a = d.getElementsByTagName("a");
					for (var j=0; j<a.length; j++){
						var w = a[j].parentNode.parentNode.offsetWidth;
						if(w > 0){
							if(typeof(o.minWidth) == "number" && w < o.minWidth)
								w = o.minWidth;
							else if(typeof(o.minWidth) == "string" && li[i].parentNode == n && w < li[i].offsetWidth)
								w = li[i].offsetWidth - 5;
							a[j].style.width = w - o.menuPaddings + "px";
						}
					}
					d.style.width = li[i].getElementsByTagName("div").item(1).clientWidth + "px";
				}
				var t = document.documentElement.clientWidth/o.coeff;
				if(li[i].parentNode != n && (!o.cleverMode || fPX(li[i]) < t)){
					d.style.right = "auto";
					d.style.left = li[i].parentNode.offsetWidth + "px";
					d.parentNode.className += " left-side";
				}	
				else if(li[i].parentNode != n && (o.cleverMode || fPX(li[i]) >= t)){
					d.style.left = "auto";
					d.style.right = li[i].parentNode.offsetWidth + "px";
					d.parentNode.className += " right-side";
				}
				else if(li[i].parentNode == n && o.cleverMode && fPX(li[i]) >= t){
					li[i].className += " right-side";
				}
			}
			if(o.dropExistenceClass && li[i].getElementsByTagName("ul").length > 0){
				li[i].className += (" " + o.dropExistenceClass);
				li[i].getElementsByTagName("a").item(0).className += (" " + o.dropExistenceClass + "-link");
				li[i].innerHTML += "<em class='pointer'></em>";
			}
			if(li[i].parentNode == n) lfl.push(li[i]);
		}
		if(o.sideClasses){
			lfl[0].className += " first-child";
			lfl[0].getElementsByTagName("a").item(0).className += " first-child-link";
			lfl[lfl.length-1].className += " last-child";
			lfl[lfl.length-1].getElementsByTagName("a").item(0).className += " last-child-link";
		}
	}
	function fPX(a){
		var b = 0;
		while (a.offsetParent) {b += a.offsetLeft; a = a.offsetParent;}
		return b;
	}
}
function initAutoScalingNav(o){
	if (!o.menuId) o.menuId = "main-nav";
	if (!o.tag) o.tag = "a";
	if (!o.spacing) o.spacing = 0;
	if (!o.constant) o.constant = 0;
	if (!o.minPaddings) o.minPaddings = 0;
	if (!o.liHovering) o.liHovering = false;
	if (!o.sideClasses) o.sideClasses = false;
	var nav = document.getElementById(o.menuId);
	if(nav){
		var lis = nav.getElementsByTagName("li");
		var asFl = [];
		var lisFl = [];
		for(var i=0, j=0; i<lis.length; i++){
			if(lis[i].parentNode == nav){
				var t = lis[i].getElementsByTagName(o.tag).item(0);
				asFl.push(t);
				asFl[j++].width = t.offsetWidth;
				lisFl.push(lis[i]);
			}
		}
		var menuWidth = nav.clientWidth - asFl.length*o.spacing - o.constant;
		if(getItemsWidth(asFl) < menuWidth){
			for (var i=0; getItemsWidth(asFl) < menuWidth; i++){
				asFl[i].width++;
				if(i >= asFl.length-1) i=-1;
			}
			for (var i=0; i<asFl.length; i++){
				asFl[i].style.width = asFl[i].width + "px";
			}
		}
		else if(o.minPaddings > 0){
			for (var i=0; i<asFl.length; i++){
				asFl[i].style.width = asFl[i].width + o.minPaddings*2 + "px";
			}
		}
	}
	function getItemsWidth(a){
		var w = 0;
		for(var q=0; q<a.length; q++){
			w += a[q].width;
		}
		return w;
	}
	if(o.sideClasses){
		lisFl[0].className += " first-child";
		lisFl[lisFl.length-1].className += " last-child";
	}
}
