/*

   Minislide
   Code derived from the original idea by Stephen Clark (http://www.sgclark.com/sandbox/minislide/)
   Updated JS to enable active link indicator to "snap back' derived from Rob L Glazebrook (http://www.rootarcana.com/test/smartmini/)

*/

var minislide = {
        currentTab:     0,
        activeTab:      0,
        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 || !document.getElementById("minislide")) return;

                minislide.ul          = document.getElementById("minislide");
                minislide.liArr       = minislide.ul.getElementsByTagName("li");
                minislide.aArr        = minislide.ul.getElementsByTagName("a");

                for(var i = 0, li; li = minislide.liArr[i]; i++) {
                        li.onmouseover = minislide.aArr[i].onfocus = function(e) {
                                var pos = 0;
                                var elem = this.nodeName == "LI" ? this : this.parentNode;
                                while(elem.previousSibling) {
                                        elem = elem.previousSibling;
                                        if(elem.tagName && elem.tagName == "LI") pos++;

                                }
                                minislide.initSlide(pos);
                        }
                }

                minislide.ul.onmouseout = function(e) {
                        minislide.initSlide(minislide.currentTab);
                };

                for(var i = 0, a; a = minislide.aArr[i]; i++) {
                        if(a.className.search("active") != -1) {
                                minislide.activeTab = minislide.currentTab = i;
                        }
                        a.style.borderBottom  = "0px";
                        a.style.paddingBottom = "6px";
                }

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

                minislide.initSlide(minislide.activeTab, true);

                var intervalMethod = function() { minislide.slideIt(); }
                minislide.animInterval = setInterval(intervalMethod,10);
        },

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

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

        initAnim: function() {

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

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

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

        slideIt:function() {

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

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

                        minislide.slideObj.style.left = parseInt(x) + "px";
                        minislide.slideObj.style.width = parseInt(w) + "px";
                } else {
                        minislide.slideObj.style.left = minislide.destX + "px";
                        minislide.slideObj.style.width = minislide.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;
        }
}

window.onload = minislide.init;
window.onunload = minislide.cleanUp;

