function login (caller)
{
	function callback (httpRequest)
	{
		if (httpRequest.status == 200)
		{
			var args = {status: false};
			try	{ args = JSON.parse (httpRequest.responseText);	}
			catch (ex) {}
			if (args.status)
				location = "index.php";
			else
				alert (args.error ? args.error :
				 "There was an error logging in.\nPlease try again later.");
		}
	}

	var args = [];

	args[0] = JSON.stringify ({username: caller.username.value, pass: caller.pass.value});
	sajax_do_call ("login", args, callback);
}

function premiumOnly (type)
{
/*	var feature;

	switch (type)
	{
		case "a":
			feature = "Contacting a player's agent";
			break;
		case "l":
			feature = "This league";
			break;
		case "mi":
			feature = "More info request";
			break;
		case "n":
			feature = "Reminder about players";
			break;
		case "pf":
			feature = "Personal folders option";
			break;
		case "sm":
			feature = "The ability to send messages";
			break;
		case "sp":
			feature = "This search parameter";
			break;
		case "s":
			feature = "This season";
			break;
		case "v":
			feature = "Full games option";
			break;
		default:
			feature = "The selected feature";
		
	}
	alert (feature + " is available for premium users only." +
	 (uID == null ? "\nPlease log in first." : ""));
*/
	alert ("To view this information you have to be a registered user.\nPlease sign up first.");

	return false;
}

function validateDate (dateValue, empty)
{
	if (dateValue == '' && empty)
		return true;
	if (/^\d{1,2}\/\d{1,2}\/\d{4}$/.test (dateValue))
	{
		var dateComponents = dateValue.split ('/');
		var checkDate = new Date (dateComponents[2], dateComponents[1] - 1, dateComponents[0]);

		if ((checkDate.getDate() == dateComponents[0]) &&
			(checkDate.getMonth() == dateComponents[1] - 1) &&
			(checkDate.getFullYear() == dateComponents[2]))
			return true;
	}
	
	return false;
}

function convertHTML (str)
{
	if (!str)
		return "";

	str = str.replace (/&/g, "&amp;");
	str = str.replace (/</g, "&lt;");
	str = str.replace (/>/g, "&gt;");

	// There is no lookbehind assertion in javascript...
	str = str.replace (/(^|\x0A|\x20)\x20/g,
	 function (match, lookbehindGroup) { return lookbehindGroup + "&nbsp;"; });

	str = str.replace (/\x0A/g, "<br />");
    
    return str;
}

// Find event target
function getTarget (e)
{
	if (!e)
		e = window.event;

	if (e.target)
		return e.target;
	else
		if (e.srcElement)
			return e.srcElement;

	return null;
}

// Get element absolute position {left, top}
function getElementPosition (ID)
{
	var offsetTrail;
	if (typeof (ID) == "object")
		offsetTrail = ID;
	else
		if (typeof (ID) == "string")
			offsetTrail = document.getElementById (ID);
		else
			return {left: 0, top: 0};

	var offsetLeft = 0;
	var offsetTop = 0;
	while (offsetTrail)
	{
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if (navigator.userAgent.indexOf('Mac') != -1 &&
		typeof document.body.leftMargin != 'undefined')
	{
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}

	return {left: offsetLeft, top: offsetTop};
}

function getElementsByClassName (oElm, strTagName, oClassNames)
{
	var arrReturnElements = new Array();
	strTagName = strTagName.toLowerCase();
	
	if (typeof (oElm.getElementsByClassName) == "function")
	{ // Use a native implementation where possible FF3, Saf3.2, Opera 9.5
		var arrNativeReturn = oElm.getElementsByClassName (oClassNames);
		if (strTagName == "*")
			return arrNativeReturn;
		for (var h = 0; h < arrNativeReturn.length; h++)
			if (arrNativeReturn[h].tagName.toLowerCase() == strTagName)
				arrReturnElements[arrReturnElements.length] = arrNativeReturn[h];
		return arrReturnElements;
	}
	var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrRegExpClassNames = new Array();
	if (typeof oClassNames == "object")
		for (var i = 0; i < oClassNames.length; i++)
			arrRegExpClassNames[arrRegExpClassNames.length] =
			 new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)");
	else
		arrRegExpClassNames[arrRegExpClassNames.length] =
		 new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)");
	var oElement;
	var bMatchesAll;
	for (var j = 0; j < arrElements.length; j++)
	{
		oElement = arrElements[j];
		bMatchesAll = true;
		for (var k = 0; k < arrRegExpClassNames.length; k++)
			if (!arrRegExpClassNames[k].test(oElement.className))
			{
				bMatchesAll = false;
				break;
			}
		if (bMatchesAll)
			arrReturnElements[arrReturnElements.length] = oElement;
	}
	return (arrReturnElements);
}

function hookEvent (element, hookName, hookFunc)
{
	if (element.addEventListener)
		element.addEventListener (hookName, hookFunc, false);
	else
		if (window.attachEvent)
			element.attachEvent ("on" + hookName, hookFunc);
}

function moveCursorEnd (input)
{
	if (document.selection)
	{ // Internet Explorer
		var tr = input.createTextRange();
		tr.moveEnd ("character", input.value.length);
		// Alternative to moveEnd:
		// tr.collapse (false);
	}
	else // Firefox
		input.selectionStart = input.value.length;
}

function getFormValues (form)
{
	var values = {};
	var fields = form.elements;
	for (var i = 0; i < fields.length; i++)
	{
		var name = fields[i].name;
		var value = null;
		switch (fields[i].type)
		{
			case "text":
			case "textarea":
			case "select-one":
			case "hidden":
			case "password":
				value = fields[i].value;
				break;
			case "checkbox":
			case "radio":
				if (fields[i].checked)
					value = fields[i].value;
				break;
		}

		if (values[name] === undefined)
			values[name] = value;
		else
		{ // If there is already a value with this name, use an array.
			if (values[name] === null)
				values[name] = [];
			else
				if (typeof values[name] != "object")
					values[name] = [values[name]];
			if (value !== null)
				values[name][values[name].length] = value;
		}
	}

	return values;
}

function hideSearchLabel (status)
{
	var playerSearchInput = document.getElementById("playerSearchInput")
	var playerSearchLabel = document.getElementById("playerSearchLabel")

	if (status)
	{
		playerSearchLabel.style.display = "none";
		playerSearchInput.focus();
	}
	else
		if (playerSearchInput.value.length == 0)
			playerSearchLabel.style.display = "";
}