var scrollTabs, lScrollElem, rScrollElem

function initTabScroller() {
    var iHidden, numTabs = 5;
    lScrollElem     = document.getElementById('tabScrollLeft');

    // check if we need a scroller
    if (! lScrollElem) { return; }

    rScrollElem     = document.getElementById('tabScrollRight');
    scrollTabs      = getAllTabs();

    pDomApi.addEvent(lScrollElem, 'click', function (e) { tabScroll(e, 'left'); });
    pDomApi.addEvent(rScrollElem, 'click', function (e) { tabScroll(e, 'right'); });

    if ((iHidden = lScrollElem.getElementsByTagName('input')).length > 0) {
        numTabs = parseInt(iHidden[0].value);
    }

    var elemCount   = scrollTabs.length;
    var handledTabs = 0;

    for(i = 0; i < elemCount; i++) {
        var curElem = scrollTabs[i];
        if(handledTabs >= numTabs ) {
            curElem.style.display = 'none';
        }
        else {
            curElem.style.display = 'block';
        }
        if(curElem.className.indexOf('tabCenter') == 0) {
            handledTabs++;
        }
    }

    //More tabs handled then shown, so we need to set scrollbars
    if(handledTabs > numTabs) {
        handleScrollers();
    }

    var aTab = getActiveTab();

    //Check if the list needs to be scrolled
    if (aTab) {
        while (tabListGetDisplayProp(aTab) == 'none') {
            tabScroll(null, 'right');
        }
    }
}

function handleScrollers() {
    var firstTabElem    = lScrollElem.nextSibling.nextSibling;
    var lastTabElem	    = rScrollElem.previousSibling.previousSibling;

    var firstVisible = tabListGetVisible('left');
    var firstVisibleClass = firstVisible.className.replace("tabCenter_", "");

    var lastVisible = tabListGetVisible('right');
    var lastVisibleClass = lastVisible.className.replace("tabCenter_", "");

    var leftScrollerClass = firstTabElem.style.display == 'none' ? 'on' : 'off';
    var rightScrollerClass = lastTabElem.style.display == 'none' ? 'on' : 'off';

    lScrollElem.previousSibling.className = 'tabScrollStart_' + leftScrollerClass;
    lScrollElem.className = 'tabScroll_' + leftScrollerClass;
    lScrollElem.nextSibling.className = 'tabSep_' + leftScrollerClass + '_' + firstVisibleClass;

    rScrollElem.nextSibling.className = 'tabEnd_' + rightScrollerClass;
    rScrollElem.className = 'tabScroll_' + rightScrollerClass;
    rScrollElem.previousSibling.className = 'tabSep_' + lastVisibleClass + '_' + rightScrollerClass;
}

function tabScroll(e, direction) {
    var lScrollElem = document.getElementById('tabScrollLeft');
    var rScrollElem = document.getElementById('tabScrollRight');
    var lastVisible = tabListGetVisible('right');
    var firstVisible = tabListGetVisible('left');
    var index = 0;

    if (direction == 'right') {
        index = scrollTabs.length-1;
    }

    if (tabListGetDisplayProp(scrollTabs[index]) == 'none') {

        if (direction == 'right') {
            //Go from lastVisible to next tab and make visible
            lastVisible.nextSibling.style.display =
                lastVisible.nextSibling.nextSibling.style.display = 'block';

            //Hide first visible tab
            firstVisible.style.display =
                firstVisible.nextSibling.style.display = 'none';

        } else {
            //Go from firstVisible to previous tab and make visible
            firstVisible.previousSibling.previousSibling.style.display =
                firstVisible.previousSibling.style.display = 'block';

            //Hide last visible tab
            lastVisible.style.display =
                lastVisible.previousSibling.style.display = 'none';
        }
        //Update scrollers
        handleScrollers();
    }

}


function getActiveTab() {
    for(var i = 0; i < scrollTabs.length; i++) {
        if( scrollTabs[i].className == 'tabCenter_active') {
            return scrollTabs[i];
        }
    }
    return false;
}

function getAllTabs() {
    var tabElems = new Array();
    var scrollLeft = document.getElementById('tabScrollLeft');
    var scrollRight = document.getElementById('tabScrollRight');

    var curElem = scrollLeft.nextSibling.nextSibling;
    var count = 0;
    while(curElem != scrollRight && curElem.nextSibling) {
        tabElems[count] = curElem;
        curElem = curElem.nextSibling;
        count++;
    }
    tabElems.pop();
    return tabElems;
}

function tabListGetVisible(direction) {
    var elemCount = scrollTabs.length;

    var i = direction == 'left' ? 0 : elemCount-1;
    while (i >=0 && i < elemCount) {
        curElem  = scrollTabs[i];
        displ        = tabListGetDisplayProp(curElem);
        tabCenter    = curElem.className.indexOf('tabCenter');

        if(displ != 'none' && tabCenter == 0) { return curElem; }
        i = direction == 'left'? i+1 : i-1;
    }
    return false;
}

function tabListGetDisplayProp(elem) {
    if (elem.currentStyle) {
        displ = elem.currentStyle['display'];
    }
    else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(elem, "");
        displ = compStyle.getPropertyValue('display');
    }
    else {
        displ = "";
    }
    return displ;
}


function activateTab(elem) {
    //Make sure we're dealing with a LI element here.
    while(elem.nodeName != 'LI') {
        if(elem.nodeName == 'BODY') return;
        elem = elem.parentNode;
    }
    var allTabs     = elem.parentNode.childNodes;
    var tabCount    = allTabs.length;
    for(i = 0; i < tabCount; i++) {
        if(allTabs[i].className == 'tabCenter_active') {
            deactivateTab(allTabs[i]);
        }
    }
    //Activate tabs
    var elemsToChange = new Array();
    elemsToChange[0] = elem.previousSibling;
    elemsToChange[1] = elem;
    elemsToChange[2] = elem.nextSibling;

    //Change tabStyles
    for(j= 0; j < 3; j++) {
        indx = elemsToChange[j].className.lastIndexOf('on');
        if(j == 0) var clName = elemsToChange[j].className.substr(0, indx) + 'active';
        else {
            var clName = elemsToChange[j].className.replace('on','active');
        }
        elemsToChange[j].className = clName;
    }

    //Change linkStyle
    var kids = elem.childNodes;
    for(j = 0; j < kids.length; j++) {
        if(kids[j].nodeName == 'A') {
            kids[j].style.display = 'none';
        }
        else if(kids[j].nodeName == 'SPAN') {
            kids[j].style.display = 'block';
        }
    }
    if (eId('tabScrollLeft')) {
        handleScrollers();
    }
}

function deactivateTab(elem) {
    var elemsToChange = new Array();
    elemsToChange[0] = elem.previousSibling;
    elemsToChange[1] = elem;
    elemsToChange[2] = elem.nextSibling;

    //Change tabStyles
    for(var j= 0; j < 3; j++) {
        var clName = elemsToChange[j].className.replace('active','on');
        elemsToChange[j].className = clName;
    }
    //Change linkStyle
    var kids = elem.childNodes;
    for(j = 0; j < kids.length; j++) {
        if(kids[j].nodeName == 'A') {
            kids[j].style.display = 'block';
        }
        else if(kids[j].nodeName == 'SPAN') {
            kids[j].style.display = 'none';
        }
    }
}

function ajaxTabClick(e) {
    var targ;
    if (!e) { e = window.event; }
    targ = e.target ? e.target : e.srcElement;
    activateTab(targ);
    getUrl(targ.href + '?isAjaxCall', 'body','');
    pDomApi.preventDefault(e);      // prevent default action (follow link)
}

function initTabSelect() {
	var selectTabs = pDomApi.getElementsByClassName(eId('tabMenu'),'li','tabSelect');

	for ( var i = 0; i < selectTabs.length ; i++ ) {

		selectTabs[i].keepActive = ( pDomApi.hasClassName(selectTabs[i],'tabCenter_active'))
									? true : false;

		var list = selectTabs[i].getElementsByTagName('ul')[0];
		if ( list.currentStyle && list.currentStyle['max-height']) {
			list.style.height = list.currentStyle['max-height'];
		}
	}
}

function tabShowHide(e, showHide) {

    if (! e) { var e = window.event; }
    var elem = e.target ? e.target : e.srcElement;
    var i;

    while (! pDomApi.hasClassName(elem, 'tabSelect')) {
        elem = elem.parentNode;
    }

   	if ( ! elem.keepActive ) {

	   	var from =  (showHide == 'show') ? 'inactive' : 'active';
	   	var to   =  (showHide == 'show') ? 'active'   : 'inactive';

	   	var previous = elem.previousSibling;
	   	while ( typeof(previous.tagName) == 'undefined') {
	   		previous = previous.previousSibling;
	   	}

	   	var next = elem.nextSibling;
	   	while ( (next != null ) && typeof(next.tagName) == 'undefined') {
	   		next = next.nextSibling;
	   	}

	   	pDomApi.setClassName(elem, 'tabCenter_' + to, 'tabCenter_' + from);
	   	pDomApi.setClassName(previous, 'tabStart_' + to, 'tabStart_' + from);
	   	pDomApi.setClassName(next,     'tabEnd_'   + to, 'tabEnd_'   + from);
   	}

    for (i=0; i < elem.childNodes.length; i++) {
        if (elem.childNodes[i].nodeType == 1 && elem.childNodes[i].tagName.toLowerCase() == 'div') {
            pDomApi.setClassName(elem.childNodes[i], showHide, showHide == 'show' ? 'hide' : 'show');
            break;
        }
    }

    var selectElems = eId('body').getElementsByTagName('SELECT');

    if (/msie|MSIE 6/.test(navigator.userAgent)) {
		to 		= (showHide == 'show') ? 'hidden' : 'visible';
		for(i=0; i < selectElems.length; i++) {
			selectElems[i].style.visibility = to;
		}
    }
}
// Events
var tabSelects = null;
actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('a', 'ajaxTab', 'click', ajaxTabClick));
actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('li', 'tabSelect', 'mouseover', function (e) { tabShowHide(e,'show'); }));
actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('li', 'tabSelect', 'mouseout',  function (e) { tabShowHide(e,'hide'); }));
pDomApi.addEvent(window, 'domload', function() {
	initTabSelect();
//	initTabScroller();
//	tabSelects = pDomApi.getElementsByClassName(window, '*', 'tabSelect');
});

