

(function($) {
    $.fn.lavaLamp = function(o) {
        o = $.extend({ fx: "linear", speed: 500, click: function(){} }, o || {});

        return this.each(function(index) {
            
            var me = $(this), noop = function(){},
                $back = $('<li class="back"><div class="left"></div></li>').appendTo(me),
                $li = $(">li", this), curr = $("li.current", this)[0] || $($li[0]).addClass("current")[0];

            $li.not(".back").hover(function() {
                move(this);
				
            }, noop);

            $(this).hover(noop, function() {
                move(curr);
            });

            $li.click(function(e) {
                setCurr(this);
                return o.click.apply(this, [e, this]);
            });

            setCurr(curr);

            function setCurr(el) {
                $back.css({ "left": el.offsetLeft+"px", "width": el.offsetWidth+"px" });
                curr = el;
            };
            
            function move(el) {
                $back.each(function() {
                    $.dequeue(this, "fx"); }
                ).animate({
                    width: el.offsetWidth,
                    left: el.offsetLeft
                }, o.speed, o.fx);
            };

            if (index == 0){
                $(window).resize(function(){
                    $back.css({
                        width: curr.offsetWidth,
                        left: curr.offsetLeft
                    });
                });
            }
            
        });
    };
})(jQuery);

jQuery.easing={easein:function(x,t,b,c,d){return c*(t/=d)*t+b},easeinout:function(x,t,b,c,d){if(t<d/2)return 2*c*t*t/(d*d)+b;var a=t-d/2;return-2*c*a*a/(d*d)+2*c*a/d+c/2+b},easeout:function(x,t,b,c,d){return-c*t*t/(d*d)+2*c*t/d+b},expoin:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}return a*(Math.exp(Math.log(c)/d*t))+b},expoout:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}return a*(-Math.exp(-Math.log(c)/d*(t-d))+c+1)+b},expoinout:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}if(t<d/2)return a*(Math.exp(Math.log(c/2)/(d/2)*t))+b;return a*(-Math.exp(-2*Math.log(c/2)/d*(t-d))+c+1)+b},bouncein:function(x,t,b,c,d){return c-jQuery.easing['bounceout'](x,d-t,0,c,d)+b},bounceout:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b}},bounceinout:function(x,t,b,c,d){if(t<d/2)return jQuery.easing['bouncein'](x,t*2,0,c,d)*.5+b;return jQuery.easing['bounceout'](x,t*2-d,0,c,d)*.5+c*.5+b},elasin:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b},elasout:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b},elasinout:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b},backin:function(x,t,b,c,d){var s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b},backout:function(x,t,b,c,d){var s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},backinout:function(x,t,b,c,d){var s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b},linear:function(x,t,b,c,d){return c*t/d+b}};


jQuery(function () {
	 var $ = jQuery;
    $.fn.retarder = function(delay, method){

        var node = this;

        if (node.length){

            if (node[0]._timer_) clearTimeout(node[0]._timer_);

            node[0]._timer_ = setTimeout(function(){ method(node); }, delay);

        }

        return this;

    };

    

	$('#menu').addClass('js-active');
	if ($.browser.msie && parseInt($.browser.version) == 7) $('#menu').addClass('ie7');
	$('ul div', '#menu').css('visibility', 'hidden');
	$('.menu>li', '#menu').hover(function () {
		var ul = $('div:first', this);
		if (ul.length) {
			if (!ul[0].hei) ul[0].hei = ul.height();
			ul.css({
				height: 20,
				overflow: 'hidden'
			}).retarder(500, function (i) {
				$('#menu').removeClass('js-active');
				$('a:first', ul[0].parentNode).addClass('over');
				$('#menu>ul>li.back').css('display', 'none');
				i.css('visibility', 'visible').animate({
					height: ul[0].hei
				},
				{
					duration: 500,
					complete: function () {
						ul.css('overflow', 'visible')
					}
				})
			})
		}
	},
	function () {
		var ul = $('div:first', this);
		if (ul.length) {
			var css = {
				visibility: 'hidden',
				height: ul[0].hei
			};
			$('#menu>ul>li.back').css('display', 'block');
			$('#menu').addClass('js-active');
			$('a:first', ul[0].parentNode).removeClass('over');
			ul.stop().retarder(1, function (i) {
				i.css(css)
			})
		}
	});
	$('ul ul li', '#menu').hover(function () {
		var ul = $('div:first', this);
		if (ul.length) {
			if (!ul[0].wid) ul[0].wid = ul.width();
			ul.css({
				width: 0,
				overflow: 'hidden'
			}).retarder(100, function (i) {
				i.css('visibility', 'visible').animate({
					width: ul[0].wid
				},
				{
					duration: 500,
					complete: function () {
						ul.css('overflow', 'visible')
					}
				})
			})
		}
	},
	function () {
		var ul = $('div:first', this);
		if (ul.length) {
			var css = {
				visibility: 'hidden',
				width: ul[0].wid
			};
			ul.stop().retarder(1, function (i) {
				i.css(css)
			})
		}
	});
	$('#menu ul.menu').lavaLamp({
		speed: 400
	});
	if ($.browser.msie && $.browser.version.substr(0, 1) == '6') {
		$('ul ul a span', '#menu').css('color', 'rgb(58,58,58)').hover(function () {
			$(this).css({
				color: 'rgb(233,233,233)'
			})
		},
		function () {
			$(this).css({
				color: 'rgb(58,58,58)'
			})
		})
	} else {
		$('ul ul a span', '#menu').css('color', 'rgb(58,58,58)').hover(function () {
			$(this).animate({
				color: 'rgb(233,233,233)'
			},
			500)
		},
		function () {
			$(this).animate({
				color: 'rgb(58,58,58)'
			},
			200)
		})
	}
});
