/*

   Animated mTabs by frequency decoder (http://www.frequency-decoder.com/)

   Based on an idea by Rob L Glazebrook (http://www.rootarcana.com/test/smartmini/) itself
   derived from the original idea of Stephen Clark (http://www.sgclark.com/sandbox/minislide/)

*/

var mTab = {
        currentTab:     1,
        activeTab:      1,
        destX:          0,
        destW:          0,
        t:              0,
        b:              0,
        c:              0,
        d:              20,
        animInterval:   null,
        sliderObj:      null,
        aHeight:        0,
        ul:             [],
        liArr:          [],
        aArr:           [],
        
        init: function() {
				if(!document.getElementById || !$("miniflex")) return;

				new Insertion.After('logo', '<li style="margin-right:0px !important"><a href="/"></a></li>');
              
                mTab.ul = $("miniflex");
                mTab.liArr = $$("#miniflex li");
                mTab.aArr = $$("#miniflex a");
				
				Element.cleanWhitespace(mTab.ul) 
				
                for(var i = 0, li; li = mTab.liArr[i]; i++) {
                        
                        if(li.id!="logo")
                        {
							li.observe('mouseover',  mTab.findpos);
							li.observe('focus',  mTab.findpos);
						}
				 }

                mTab.ul.observe('mouseout', function(){mTab.initSlide(mTab.currentTab);});

                for(var i = 0, a; a = mTab.aArr[i]; i++) {
                        if( a.hasClassName('active') ) {
                                mTab.activeTab = mTab.currentTab = i;
                        }
                        a.setStyle({'border-bottom': '0','padding-bottom': '2px'});
                }

                mTab.slideObj                = mTab.ul.parentNode.appendChild(document.createElement("div"));
                mTab.slideObj.id             = "animated-tab";
                 
                mTab.slideObj.style.top      = (mTab.ul.offsetTop + mTab.liArr[mTab.activeTab].offsetTop + mTab.aArr[mTab.activeTab].offsetTop) + "px";
                mTab.slideObj.style.left     = (mTab.ul.offsetLeft + mTab.liArr[mTab.activeTab].offsetLeft + mTab.aArr[mTab.activeTab].offsetLeft) + "px";
                mTab.slideObj.style.width    = mTab.aArr[mTab.activeTab].offsetWidth + "px";
                mTab.aHeight                 = mTab.ul.offsetTop + mTab.liArr[mTab.activeTab].offsetTop + mTab.aArr[mTab.activeTab].offsetTop;

                mTab.initSlide(mTab.activeTab, true);

                var intervalMethod = function() { mTab.slideIt(); }
                mTab.animInterval = setInterval(intervalMethod,10);
        },
        
        findpos: function(e) {
				var pos = 0;
				var elem = $(Event.findElement(e, "li"));
				while(elem.previous("li")) {
						elem = $(elem.previous("li"));
						pos++;
				}
				mTab.initSlide(pos);
		},

        cleanUp: function() {
                clearInterval(mTab.animInterval);
                mTab.animInterval = null;
        },

        initSlide: function(pos, force) {
				if(!force && pos == mTab.activeTab) return;
                mTab.activeTab = pos;
                mTab.initAnim();
        },

        initAnim: function() {

                mTab.destX = parseInt(mTab.liArr[mTab.activeTab].offsetLeft + mTab.liArr[mTab.activeTab].down("a").offsetLeft + mTab.ul.offsetLeft);
                mTab.destW = parseInt(mTab.liArr[mTab.activeTab].down("a").offsetWidth);
                mTab.t = 0;
                mTab.b = mTab.slideObj.offsetLeft;
                mTab.c = mTab.destX - mTab.b;

                mTab.bW = mTab.slideObj.offsetWidth;
                mTab.cW = mTab.destW - mTab.bW;

                mTab.slideObj.style.top = (mTab.ul.offsetTop + mTab.liArr[mTab.activeTab].offsetTop + mTab.aArr[mTab.activeTab].offsetTop) + "px";
        },

        slideIt:function() {

                // Has the browser text size changed?
                if(mTab.aHeight != mTab.ul.offsetTop + mTab.liArr[mTab.activeTab].offsetTop + mTab.aArr[mTab.activeTab].offsetTop) {
                        mTab.initAnim();
                        mTab.aHeight = mTab.ul.offsetTop + mTab.liArr[mTab.activeTab].offsetTop + mTab.aArr[mTab.activeTab].offsetTop
                };

                if(mTab.t++ < mTab.d) {
                        var x = mTab.animate(mTab.t,mTab.b,mTab.c,mTab.d);
                        var w = mTab.animate(mTab.t,mTab.bW,mTab.cW,mTab.d);

                        mTab.slideObj.style.left = parseInt(x) + "px";
                        mTab.slideObj.style.width = parseInt(w) + "px";
                } else {
                        mTab.slideObj.style.left = mTab.destX + "px";
                        mTab.slideObj.style.width = mTab.destW +"px";
                }
        },

        animate: function(t,b,c,d) {
                if ((t/=d/2) < 1) return c/2*t*t + b;
                return -c/2 * ((--t)*(t-2) - 1) + b;
        }
}

Event.observe(window, 'load', mTab.init);
Event.observe(window,'unload', mTab.cleanUp);


