var selectedDivId = null;
var helper_url = 'index.php?neverrewind&module=wsdc.luw&cmd=LeaderboardHelper';	//	default
var challenge_helper_url = 'index.php?neverrewind&module=wsdc.luw&cmd=ChallengeHelper';	//	default

function getCurrentPage() {
	if ( /page=\d+/i.test(window.location.toString()) )
	{
		var page = window.location.toString().replace(/^.*?&page=(\d+).*?$/, '$1');
		return (page);
	}
	return (1);
}
function getDisplayCount() {
	if ( /displayCount=\d+/i.test(window.location.toString()) )
	{
		var displayCount = window.location.toString().replace(/^.*?&displayCount=(\d+).*?$/, '$1');
		return (displayCount);
	}
	else
	{
		var oSelect = document.getElementById('displayCount');
		if ( oSelect )
		{
			if ( oSelect.tagName.toLowerCase() == 'select' )
			{
				var displayCount = oSelect[oSelect.selectedIndex].value;
				return (displayCount);
			}
		}
	}
	return (0);
}
function getChallengeType() {
	if ( /type=(\w+)/i.test(window.location.toString()) )
	{
		var type = window.location.toString().replace(/^.*?&type=(\w+).*?$/, '$1');
		return (type);
	}
	return ('weight');
}
function getSubProgramId() {
	if ( /sp=(\d+)/i.test(window.location.toString()) )
	{
		var sp = window.location.toString().replace(/^.*?&sp=(\d+).*?$/, '$1');
		return (sp);
	}
	return (1);
}
function changeDisplayCount(oDisplayCount) {
	var displayCount = oDisplayCount[oDisplayCount.selectedIndex].value;
	var page = getCurrentPage();
	window.location = getCleanURL() + '&displayCount=' + displayCount + '&page=' + page;
}
function getCleanURL()
{
	var URL = window.location.toString();
	
	var module = URL.replace(/^.*?module=([^&#]+).*?$/i, '$1');
	var cmd = URL.replace(/^.*?cmd=([^&#]+).*?$/i, '$1');

	URL = URL.replace(/\?.*$/, '');
	URL = URL.replace(/#.*$/, '');
	
	URL += '?module=' + module + '&cmd=' + cmd + '&sp=' + getSubProgramId() + '&type=' + getChallengeType();

	return (URL);
}
function changePage(page) {
	var displayCount = getDisplayCount();
	window.location = getCleanURL() + '&displayCount=' + displayCount + '&page=' + page;
}
function submitPage(evt)
{
	evt = (evt || window.event);
	evt.targetNode = ( evt.srcElement || evt.target );
	evt.key = (evt.charCode || evt.keyCode || evt.which || 0);

	if ( evt.key == 3 || evt.key == 13 )
	{
		changePage(evt.targetNode.value);
	}
}
function expand(divId, teamId)
{
	collapseAll();
	if ( selectedDivId == divId )
	{
		selectedDivId = null;
	}
	else
	{
		selectedDivId = divId;
		var oDiv = document.getElementById(selectedDivId);
		oDiv.style.display = 'block';

		//	no need to load any particular data more than once
		if ( !containsClass(oDiv, 'loaded') )
		{
			oDiv.innerHTML = '<p style="margin-left:2em;"><img src="/images/indicator.white.gif" /></p>';
			ajax(helper_url, 'post', 'populateTeamData', 'team_id=' + teamId.toString());
		}
	}
}

function expandChallenge(divId, chId)
{
	collapseAll();
	if ( selectedDivId == divId )
	{
		selectedDivId = null;
	}
	else
	{
		selectedDivId = divId;
		var oDiv = document.getElementById(selectedDivId);
		oDiv.style.display = 'block';

		//	no need to load any particular data more than once
		if ( !containsClass(oDiv, 'loaded') )
		{
			oDiv.innerHTML = '<p style="margin-left:2em;"><img src="/images/indicator.white.gif" /></p>';
			ajax(challenge_helper_url, 'post', 'populateChallengeData', 'challenge=' + chId.toString());
		}
	}
}


function collapseAll()
{
	var oDivs = getElementsByClass('lightenUpHidden');
	for (var i = 0; i < oDivs.length; i++)
	{
		oDivs[i].style.display = '';
	}
}
function populateTeamData(sData)
{
	var oDiv = document.getElementById(selectedDivId);
	if ( sData )
	{
		oDiv.style.display = 'block';
		oDiv.innerHTML = sData;
		oDiv.className += ' loaded';
	}
	else
	{
		//	no data returned
		oDiv.style.display = '';
	}
}

function populateChallengeData(sData)
{
	var oDiv = document.getElementById(selectedDivId);
	if ( sData )
	{
		oDiv.style.display = 'block';
		oDiv.innerHTML = sData;
		oDiv.className += ' loaded';
	}
	else
	{
		//	no data returned
		oDiv.style.display = '';
	}
}


function doSearch(evt)
{
	evt = (evt || window.event);
	evt.targetNode = ( evt.srcElement || evt.target );
	evt.key = (evt.charCode || evt.keyCode || evt.which || 0);

	if ( evt.key == 3 || evt.key == 13 )
	{
		var URL = getCleanURL();
		URL = URL.replace(/&search=[^&#]*/i, '');
		URL += '&search=' + encodeURIComponent(evt.targetNode.value);
		window.location = URL;
	}
}
/*----------------------------------------*/
function xAddEventListener(oElement, sType, fListener)
{
	if ( oElement.addEventListener )
	{
		oElement.addEventListener(sType, fListener, false);
	}
	else if ( oElement.attachEvent )
	{
		oElement.attachEvent('on' + sType, fListener);
	}
	else if ( typeof oElement['on' + sType] == 'function' )
	{
		var fOld = oElement['on' + sType];
		oElement['on' + sType] = function()
		{
			fOld();
			fListener();
		}
	}
	else
	{
		oElement['on' + sType] = fListener;
	}
	return;
}
function $()
{
	var oElements = new Array();
	for (var i = 0; i < arguments.length; i++)
	{
		var oNode = arguments[i];
		if (typeof oNode == 'string')
		{
			oNode = document.getElementById(oNode);
		}
		if (arguments.length == 1)
		{
			return oNode;
		}
		oElements.push(oNode);
	}
	return oElements;
}
function getElementsByClass(sClass, oNode, sTag)
{
	var oFinal = new Array();
	if ( oNode == null )
	{
		oNode = document;
	}
	if ( sTag == null )
	{
		sTag = '*';
	}
	var oPotential = oNode.getElementsByTagName(sTag);
	var sPattern = new RegExp('(^|\\s)' + sClass + '(\\s|$)');
	for (var i = 0, j = 0; i < oPotential.length; i++)
	{
		if ( sPattern.test(oPotential[i].className) )
		{
			oFinal[j] = oPotential[i];
			j++;
		}
	}
	return oFinal;
}
function createRequestObject()
{
	var ro;
	if ( window.XMLHttpRequest )
	{
		try
		{
			ro = new XMLHttpRequest();
		}
		catch(e)
		{
			ro = null;
		}
	}
	else if ( window.ActiveXObject )
	{
		try
		{
			ro = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				ro = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				ro = null;
			}
		}
	}
	return ro;
}
function ajax(sAction, sMethod, sHandler, sParams, bAbort)
{
	bAbort = ( bAbort != true ) ? false : true;
	sParams = ( sParams == null ) ? '' : sParams;
	var sData = ( sMethod == 'get' ) ? '' : sParams;

	var sURI = sAction;
	if ( sMethod == 'get' )
	{
		sURI += ( /\?/.test(sAction) ) ? '&' + sParams : '?' + sParams;
	}
	
	if ( bAbort )
	{
		if ( http )
		{
			if ( http.readyState != 0 )
			{
				http.abort();
			}
		}
	}
	var http = createRequestObject();
	
	if ( http )
	{
		http.onreadystatechange = function()
		{
			if ( http.readyState == 4 )
			{
				try
				{
					var iStatus = http.status;
				}
				catch (e)
				{
					var iStatus = 0;
				}
				if ( iStatus == 200 )
				{
					var sResponse = http.responseText.replace(/(\\|')/g, '\\$1');
					eval(sHandler + "('" + sResponse.replace(/[\n\r]/g, '\\n') + "');");
				}
				else if ( iStatus != 0 )
				{
					ajaxFail();
				}
			}
		};
		
		http.open(sMethod, sURI);
		http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		http.setRequestHeader('Content-length', sData.length);
		http.setRequestHeader('Connection', 'close');
		http.send(sData);
	}
	
	return;
}
function ajaxFail()
{
	return;
}
function safeRegExp(sText)
{
	return sText.replace(/([\^$(){}|?\\\/*+\[\].])/g, '\\$1');
}
function containsClass(oElement, sClass)
{
	var _regex = new RegExp("(^| )" + safeRegExp(sClass) + "( |$)");
	return ( oElement.className.match(_regex) ) ? true : false;
}
/*----------------------------------------*/
http = createRequestObject();
