var miniTab = {

  currentTab:     0,

  activeTab:      0,

  destX:          0,

  destW:          0,

  t:              0,

  b:              0,

  c:              0,

  d:              30,

  animInterval:   null,

  sliderObj:      null,

  aHeight:        0,

  

  init: function() {

    if(!document.getElementById || !document.getElementById("miniflex")) return;

    

    var ul          = document.getElementById("miniflex");

    var liArr       = ul.getElementsByTagName("li");

    var aArr        = ul.getElementsByTagName("a");

    

    for(var i = 0, li; li = liArr[i]; i++) {

      liArr[i].onmouseover = 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++;

        }

        miniTab.initSlide(pos);

      }

    }



    ul.onmouseout = function(e) {

      miniTab.initSlide(miniTab.currentTab);

    };

    

    for(var i = 0; i < aArr.length; i++) {

      if(document.location.href.indexOf(aArr[i].href)>=0) {

        miniTab.activeTab = miniTab.currentTab = i;

      }

      aArr[i].style.borderBottom  = "0px";

      aArr[i].style.paddingBottom = "6px";

    }



    miniTab.slideObj                = ul.parentNode.appendChild(document.createElement("div"));

    miniTab.slideObj.appendChild(document.createTextNode(String.fromCharCode(160)));

    miniTab.slideObj.id             = "animated-tab";

    miniTab.slideObj.style.top      = (ul.offsetTop + liArr[miniTab.activeTab].offsetTop + aArr[miniTab.activeTab].offsetTop) + "px";

    miniTab.slideObj.style.left     = (ul.offsetLeft + + liArr[miniTab.activeTab].offsetLeft + aArr[miniTab.activeTab].offsetLeft) + "px";

    miniTab.slideObj.style.width    = aArr[miniTab.activeTab].offsetWidth + "px";

    miniTab.aHeight                 = ul.offsetTop + liArr[miniTab.activeTab].offsetTop + aArr[miniTab.activeTab].offsetTop;

    

    miniTab.initSlide(miniTab.activeTab, true);

    

    var intervalMethod = function() { miniTab.slideIt(); }

    miniTab.animInterval = setInterval(intervalMethod,10);

  },



  cleanUp: function() {

    clearInterval(miniTab.animInterval);

    miniTab.animInterval = null;

  },

  

  initSlide: function(pos, force) {

    if(!force && pos == miniTab.activeTab) return;

    miniTab.activeTab = pos;

    miniTab.initAnim();

  },

  

  initAnim: function() {

    var ul          = document.getElementById("miniflex");

    var liArr       = ul.getElementsByTagName("li");

    var aArr        = ul.getElementsByTagName("a");

    miniTab.destX = parseInt(liArr[miniTab.activeTab].offsetLeft + liArr[miniTab.activeTab].getElementsByTagName("a")[0].offsetLeft + ul.offsetLeft);

    miniTab.destW = parseInt(liArr[miniTab.activeTab].getElementsByTagName("a")[0].offsetWidth);

    miniTab.t = 0;

    miniTab.b = miniTab.slideObj.offsetLeft;

    miniTab.c = miniTab.destX - miniTab.b;

    miniTab.bW = miniTab.slideObj.offsetWidth;

    miniTab.cW = miniTab.destW - miniTab.bW;

    miniTab.slideObj.style.top = (ul.offsetTop + liArr[miniTab.activeTab].offsetTop + aArr[miniTab.activeTab].offsetTop) + "px";

  },

  

  slideIt:function() {

    var ul          = document.getElementById("miniflex");

    var liArr       = ul.getElementsByTagName("li");

    var aArr        = ul.getElementsByTagName("a");

    

    // Has the browser text size changed?

    if(miniTab.aHeight != ul.offsetTop + liArr[miniTab.activeTab].offsetTop + aArr[miniTab.activeTab].offsetTop) {

      miniTab.initAnim();

      miniTab.aHeight = ul.offsetTop + liArr[miniTab.activeTab].offsetTop + aArr[miniTab.activeTab].offsetTop

    };

    

    if(miniTab.t++ < miniTab.d) {

      var x = miniTab.animate(miniTab.t,miniTab.b,miniTab.c,miniTab.d);

      var w = miniTab.animate(miniTab.t,miniTab.bW,miniTab.cW,miniTab.d);

      miniTab.slideObj.style.left = parseInt(x) + "px";

      miniTab.slideObj.style.width = parseInt(w) + "px";

    } else {

      miniTab.slideObj.style.left = miniTab.destX + "px";

      miniTab.slideObj.style.width = miniTab.destW +"px";

    }

  },



  animate: function(t,b,c,d) {

    if ((t/=d/3) < 1) return c/3*t*t + b;

    return -c/3 * ((--t)*(t-3) - 1) + b;

  }

}



window.onload = miniTab.init;

window.onunload = miniTab.cleanUp;

