function addEvent(el, ev, fn, useCapture)
{
	if(el.addEventListener)
	{
		el.addEventListener(ev, fn, useCapture);
	}
	else if(el.attachEvent)
	{
		var ret = el.attachEvent("on"+ev, fn);
		return ret;
	}
	else
	{
		el["on"+ev] = fn;
	}
}
function getGoodElement(el,nn,cn,next)
{
	if(next == 1)
	{
		el = el.parentNode;
	}
	while(el.nodeName.toLowerCase() != nn && el.nodeName.toLowerCase() != "body")
	{
		el = el.parentNode;
	}
	thisClass = ' '+el.className+' ';
	if(el.nodeName.toLowerCase() != "body" && thisClass.indexOf(' '+cn+' ') == -1)
	{
		return getGoodElement(el,nn,cn,1);
	}
	else if(thisClass.indexOf(' '+cn+' ') != -1)
	{
		return el;
	}
	return false;
}
function setupTabHover()
{
	if ( vIE() != 6 )
	{
		return;
	}
	var container = document.getElementById( 'global_area_tabs_ctn' ); 
	if ( container == null )
	{
		container = document.getElementById( 'global_area_tabs_ctn_pkg' );
	}
	if ( container == null )
	{
		return;
	}
	
	allDivs = container.getElementsByTagName( 'div' );
	for( x = 0; x < allDivs.length; x++ )
	{
		div = allDivs[x];
		thisClass = ' ' + div.className + ' ';
		if ( thisClass.indexOf( ' global_area_tabs_item ' ) != -1 )
		{
			addEvent( div, 'mouseover', tabItemHighlight, false );
			addEvent( div, 'mouseout', tabItemLolight, false );
		}
	}
}
var currentHigh = false;
var waitEl = false;
function tabItemHighlight()
{
	var srcEl = window.event ? window.event.srcElement : null;
	if(!srcEl)
	{
		return;
	}
	div = getGoodElement( srcEl, 'div', 'global_area_tabs_item', 0 );
	if(!div)
	{
		return;
	}
	div.className = 'global_area_tabs_item tabHighlight';
	currentHigh = div;
}
function tabItemLolight( )
{
	var srcEl = window.event ? window.event.srcElement : null;
	if(!srcEl)
	{
		return;
	}
	div = getGoodElement( srcEl, 'div', 'global_area_tabs_item', 0 );
	if(!div)
	{
		return;
	}
	div.className = 'global_area_tabs_item';
}
function vIE()
{
	return (navigator.appName=='Microsoft Internet Explorer') ? parseFloat( ( new RegExp( "MSIE ([0-9]{1,}[.0-9]{0,})" ) ).exec( navigator.userAgent )[1] ) : -1;
}


addEvent(window, "load", setupTabHover, false);

//
// Page-able tabs
//
var tabStart = { };
var tabMax = { };
var tabTransition = { };
function PageTab( tab, delta, max, params )
{
	if ( tabTransition[tab] )
		return;
	
	if ( !tabStart[tab] )
		tabStart[tab] = 0;
	if ( !tabMax[tab] )
		tabMax[tab] = 0;
	
	if ( tabStart[tab] + delta >= max )
		return;
	
	tabStart[tab] += delta;
	tabTransition[tab] = true;
	if ( tabStart[tab] > tabMax[tab] )
	{
		if ( !params )
			params = {};
		params.tab = tab;
		params.start = tabStart[tab];
		new Ajax.Updater( 
				'tab_' + tab + '_items', 
				'http://store.steampowered.com/search/tab', 
				{ parameters: params, method: 'get', insertion: 'bottom', onComplete: TabCompletionClosure( tab, delta, max ) } );
		tabMax[tab] = tabStart[tab];
	}
	else 
	{
		new Effect.Move( $('tab_' + tab + '_items'), {y: -57 * delta, afterFinish: TabScrollFinishClosure( tab, delta ) } );
		TabUpdateCounts( tab, delta, max );
	}
	
}

function TabCompletionClosure( tab, delta, max )
{
	var tab_closure = tab;
	var delta_closure = delta;
	var max_closure = max;
	return function() { 
		new Effect.Move( $('tab_' + tab_closure + '_items'), {y: -57 * delta_closure, afterFinish: TabScrollFinishClosure( tab_closure, delta_closure ) } );
		TabUpdateCounts( tab_closure, delta_closure, max_closure ); 
	};
	
}

function TabScrollFinishClosure( tab, delta )
{
	var tab_closure = tab;
	var delta_closure = delta;
	return function() { 
		tabTransition[tab_closure] = false; 
	};
}

function TabUpdateCounts( tab, delta, max )
{
	$('tab_' + tab + '_count').update( (tabStart[tab] + 1) + '-' + Math.min( tabStart[tab] + Math.abs(delta), max ) );
	if ( tabStart[tab] > 0 )
		$('tab_' + tab + '_prev').style.visibility='visible';
	else
		$('tab_' + tab + '_prev').style.visibility='hidden';
	
	if ( tabStart[tab] + delta >= max )
		$('tab_' + tab + '_next').style.visibility='hidden';
	else
		$('tab_' + tab + '_next').style.visibility='visible';
}

