String.prototype.trim = function ()
{
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

String.prototype.filter = function(legal)
{
	var i;
	var ret = "";
	for (i=0;i<this.length;i++)
	{
		if (legal.indexOf(this.substr(i, 1)) >= 0)
		{
			ret += this.substr(i, 1);
		}
	}
	return ret;
}

// Return random element of an array.
Array.prototype.rand = function()
{
	return this[Math.floor(Math.random()*this.length)];
}

// Return value in array appearing
// after value 'current'.  If current
// not found or last in array, first value
// in array is returned.
Array.prototype.after = function(current)
{
	var i;
	var found = false;
	var ret = this[0];
	for (i=0;i<this.length;i++)
	{
		if (found)
		{
			ret = this[i];
			break;
		}
		if (this[i] == current)
		{
			found = true;
		}
	}
	return ret;
}

function tick()
{
	if (seconds < 2)
	{
		clearInterval(turntimer);
		$('span#timer').parent().html('<a href=\"'+document.location+'\">Next turn is ready!</a>');
		if (title_update_ok)
		{
			document.title = 'Other World (next turn ready)';
		}
	} else {
		seconds--;
		var min = Math.floor(seconds/60);
		var sec = seconds%60;
		if (sec < 10)
		{
			sec = "0"+sec;
		}
		$('span#timer').html(min+':'+sec);
		if (title_update_ok)
		{
			document.title = 'Other World ('+min+':'+sec+' until turn)';
		}
	}
		
}

// Grey screen and open AJAX pop-up
function popWin(url)
{
	$('body').append('<div class="mask"></div><div class="popwin" id="popwin"><div id="popclose" onclick="popClose();">X</div><div id="popwin_pane">loading...</div>');
	$('div#popwin_pane').load(url);
}

function popClose()
{
	$('div.mask').remove();
	$('div.popwin').remove();
}

function prep()
{
	// Initialize turn countdown.
	if ($('span#timer').length > 0)
	{
		turntimer = setInterval('tick()', 1000);
	}
}

gear_ID = 0;
gear_target = false;
function gearOut()
{
	gear_ID = 0;
	gear_target = false;
	$('div#floaty').hide();
}

function gearOver(new_gear_ID, target)
{
	gear_target = target;
	gear_ID = new_gear_ID;
	$.post("gear_detail.php", { gear_ID:new_gear_ID },
		function(data)
		{
			if (gear_ID != 0)
			{
				var floaty = $('div#floaty');
				floaty.html(data);
				var offset = $(gear_target).offset();
				floaty.css('top', offset.top+30);
				floaty.css('left', offset.left);
				floaty.show();
			}
		});
}

function showQuestDescription()
{
	var quest_ID = $('#quest_select').val();
	$('div.quest_description').hide();
	if (quest_ID != '')
	{
		$('div#quest_id_'+quest_ID).show();
	}
}

function anotherQuest(select, character_ID)
{
	var group_ID = $(select).val();
	document.location ='char.php?character_ID='+character_ID+'&group_ID='+group_ID;
}

// Check login creds.
// On fail, display error message.
// On success, submit form (sans login & password)
//
// Form elements must have standardised IDs like:
// 	<form_id>_submit
//	<form_id>_login
//	<form_id>_password
//	<form_id>_remember
//	<form_id>_dest
//	<form_id>_args
function attemptLogin(form_id)
{
	var frm = $('form#'+form_id);
	var btn = $('input#'+form_id+'_submit');
	var disable = function() {
		btn.val('please wait...');
		btn.addClass('disabled');
		};
	var enable = function() {
		btn.val('log in');
		btn.removeClass('disabled');
		};

	disable();

	// Do ajax call.
	var vlogin = $('input#'+form_id+'_login').val();
	var vpassword = $('input#'+form_id+'_password').val();
	var vremember = '';
	if ($('input#'+form_id+'_remember:checked').length > 0)
	{
		vremember = 1;
	}
	var params = {action:'login',login:vlogin,password:vpassword,remember:vremember};
	if (params.login.trim() == ''
		|| params.password.trim() == '')
	{
		alert('please enter username and password');
		enable();
		return false;
	}
	$.post('login_ajax.php', params, function(data) {
		if (data == '1')
		{
			var dest = $('input#'+form_id+'_dest').val();
			var sargs = $('input#'+form_id+'_args').val();
			if (sargs.trim().length > 0)
			{
				sargs = "?sargs="+escape(sargs);
			}
			document.location=dest+sargs.trim();
			return false;
		} else {
			alert('That email / password combination did not work.  Please try again.');
			enable();
		}
		});

	return false;
}

