/*
 * tabLinks.js
 *
 * Copyright (c) 2007 by Zelestra, ZELESTRA.COM. All Rights Reserved.
 *
 * @author David C. Tessman
 * @version 1.1 2007-03-28
 */

var TabLinks = {

	left:0,
	visibleWidth:0,
	actualWidth:0,
	mouseIsDown:false,
	mouseMoved:false,
	mouseOriginX:0,
	leftArrowDown: false,
	rightArrowDown: false,
	intervalId: 0,
	init:function() {
		linkMap = new Object();
		TabLinks.visibleWidth = $("tabLinks").getWidth();
		var elem = $("tabLinks2");
		var tabElem = elem.down();
		var smallTabCount = 0;
		var tabCount = 0;
		do {
			var link = tabElem.href;
			tabElem.removeAttribute('href');
			tabElem.onselectstart = function() {return false;};
			tabElem.onmousedown = function() {return false;};
			tabElem.onclick = TabLinks.mouseLink.bind(tabElem,link);
			var tabWidth = tabElem.getWidth();
			if (tabWidth < 100)
				++smallTabCount;
			++tabCount;
			TabLinks.actualWidth += tabWidth;
			tabElem = tabElem.next();
		} while(tabElem);
		var negWidth = TabLinks.visibleWidth - TabLinks.actualWidth;
		if ((negWidth >= 0) && (smallTabCount > 0) && (tabCount < 5)) {
			var offset = Math.floor(18 + ((negWidth / smallTabCount) / 5));
			if (offset > 38)
				offset = 38;
			var tabElem = elem.down();
			do {
				var tabWidth = tabElem.getWidth();
				if (tabWidth < 100)
					tabElem.down().down().down().style.padding = "0px " + offset + "px 0px " + offset + "px";
				tabElem = tabElem.next();
			} while(tabElem);
		}
		Event.observe(elem,"mousedown", TabLinks.mouseDown.bindAsEventListener(TabLinks));
		Event.observe(elem,"mousemove", TabLinks.mouseMove.bindAsEventListener(TabLinks));
		Event.observe(elem,"mouseup", TabLinks.mouseUp.bindAsEventListener(TabLinks));
		document.observe("mouseup", TabLinks.mouseUp.bindAsEventListener(TabLinks));
		elem = $("tabLinksScrollControls");
		elem.onselectstart = function() {return false;};
		elem.onmousedown = function() {return false;};
		Event.observe($("tabLinksScrollLeft"),"mousedown", TabLinks.leftArrowDown.bindAsEventListener(TabLinks));
		Event.observe($("tabLinksScrollLeft"),"mouseup", TabLinks.leftArrowUp.bindAsEventListener(TabLinks));
		Event.observe($("tabLinksScrollRight"),"mousedown", TabLinks.rightArrowDown.bindAsEventListener(TabLinks));
		Event.observe($("tabLinksScrollRight"),"mouseup", TabLinks.rightArrowUp.bindAsEventListener(TabLinks));
		TabLinks.loadTabPos();
		Event.observe(window,"unload",TabLinks.saveTabPos);
		TabLinks.adjustArrows();
 	},
 	mouseDown:function(event) {
		if (TabLinks.intervalId != null) {
			window.clearInterval(TabLinks.intervalId);
			TabLinks.intervalId = null;
		}
		TabLinks.mouseMoved = false;
		TabLinks.mouseIsDown = true;
		TabLinks.mouseOriginX = Event.pointerX(event);
		var elem = $("tabLinks2");
		TabLinks.left = parseInt(elem.getStyle('left').replace(/px/g,""));
		Event.stop(event);
	},
 	mouseUp:function(event) {
		if (TabLinks.intervalId != null) {
			window.clearInterval(TabLinks.intervalId);
			TabLinks.intervalId = null;
		}
		TabLinks.mouseIsDown = false;
		TabLinks.leftArrowDown = false;
		TabLinks.rightArrowDown = false;
		TabLinks.adjustArrows();
	},
 	mouseMove:function(event) {
		if (!TabLinks.mouseIsDown)
			return;
		var negWidth = TabLinks.visibleWidth - TabLinks.actualWidth;
		if (negWidth >= 0)
			return;
		var dist = Event.pointerX(event) - TabLinks.mouseOriginX;
		if (Math.abs(dist) < 4)
			return;
		TabLinks.mouseMoved = true;
		var elem = $("tabLinks");
		var elem2 = $("tabLinks2");
		var left = TabLinks.left + dist;
		if (left > 0)
			left = 0;
		if (left < negWidth)
			left = negWidth;
		elem2.style.left = left + "px";
	},
	mouseLink:function(link) {
		if (TabLinks.mouseMoved)
			return false;
		if (this.hasClassName("disabled"))
			return false;
		window.location.href = link;
		return false;
	},
	adjustArrows:function() {
		var elem = $("tabLinks2");
		var left = parseInt(elem.getStyle('left').replace(/px/g,""));
		var showLeft = ((left + 1) < 0);
		var showRight = ((left - 1)  > (TabLinks.visibleWidth - TabLinks.actualWidth));
		if (showLeft || showRight)
			$("tabLinksScrollControls").style.display = "block";
		else
			$("tabLinksScrollControls").style.display = "none";
		if (showLeft)
			$("tabLinksScrollLeft").removeClassName('disabled');
		else
			$("tabLinksScrollLeft").addClassName('disabled');
		if (showRight)
			$("tabLinksScrollRight").removeClassName('disabled');
		else
			$("tabLinksScrollRight").addClassName('disabled');
	},
	leftArrowDown:function() {
		if (TabLinks.intervalId != null) {
			window.clearInterval(TabLinks.intervalId);
			TabLinks.intervalId = null;
		}
		TabLinks.mouseIsDown = false;
		TabLinks.leftArrowDown = true;
		TabLinks.rightArrowDown = false;
		TabLinks.intervalId = window.setInterval(TabLinks.leftArrow,10);
	},
	leftArrowUp:function() {
		if (TabLinks.intervalId != null) {
			window.clearInterval(TabLinks.intervalId);
			TabLinks.intervalId = null;
		}
		TabLinks.mouseIsDown = false;
		TabLinks.leftArrowDown = false;
		TabLinks.rightArrowDown = false;
	},
	leftArrow:function() {
		if (!TabLinks.leftArrow)
			return;
		var elem = $("tabLinks2");
		var left = parseInt(elem.getStyle('left').replace(/px/g,""));
		left += 10;
		if (left > 0)
			left = 0;
		elem.style.left = left + "px";
	},
	rightArrowDown:function() {
		if (TabLinks.intervalId != null) {
			window.clearInterval(TabLinks.intervalId);
			TabLinks.intervalId = null;
		}
		TabLinks.mouseIsDown = false;
		TabLinks.leftArrowDown = false;
		TabLinks.rightArrowDown = true;
		TabLinks.intervalId = window.setInterval(TabLinks.rightArrow,10);
	},
	rightArrowUp:function() {
		if (TabLinks.intervalId != null) {
			window.clearInterval(TabLinks.intervalId);
			TabLinks.intervalId = null;
		}
		TabLinks.mouseIsDown = false;
		TabLinks.leftArrowDown = false;
		TabLinks.rightArrowDown = false;
	},
	rightArrow:function() {
		if (!TabLinks.rightArrow)
			return;
		var elem = $("tabLinks2");
		var left = parseInt(elem.getStyle('left').replace(/px/g,""));
		var negWidth = TabLinks.visibleWidth - TabLinks.actualWidth;
		left -= 10;
		if (left < negWidth)
			left = negWidth;
		elem.style.left = left + "px";
	},
	loadTabPos: function() {
		var left = getCookie("tabLeft");
		if (left) {
			var elem = $("tabLinks2");
			elem.style.left = left;
		}
	},
	saveTabPos: function() {
		var elem = $("tabLinks2");
		var left = elem.style.left;
		setCookie("tabLeft",left);
	}
}

document.observe("dom:loaded", function() {
	TabLinks.init();
});