var bordered = ''; var icon = '';
var errors = new Object();
var parentUL = '';
var currList = '';
var listDiv = '';
var justAdded = ''; var gameCnt = 0;
var nofocus = false;

window.onload = function() {
	//Nifty('#mainblock');	Nifty('#mainblock-wide');
	if(document.forms[0] && !nofocus) Form.focusFirstElement(document.forms[0]);
	if($('msg'))	resizeMsgDiv = new fx.Height('msg', {duration:500});
	if($('hidden'))	{ resizeEditDiv = new fx.Height('bottom', {duration:500});	resizeEditDiv.hide(); }
	if(document.getElementsByClassName('gallery'))	initUserIcons();
}
var toggleWorkIndicator = {
	onCreate: function() {
		if($('indicator')) $('indicator').style.display = 'inline';
	},
	onComplete: function() {
		if(Ajax.activeRequestCount == 0)
			if($('indicator')) $('indicator').style.display = 'none';
	}
};
Ajax.Responders.register(toggleWorkIndicator);
function showUpdateSuccess() {
	if($('updatesuccess')) {
		$('updatesuccess').style.display = 'block';
		$('updatesuccess').innerHTML = 'Update Successful!';
	}
}

function checkForm(form) {
	var go = true;
	for(var e in errors)
		if(errors[e] != '') { go = false; }
	if(!isEmpty($('nick')) && checkLength($('nick')) && isAlphaNum('nick')) {
		if(!isEmpty($('email')) && isEmail($('email'))) {
			if(checkPass($('pass'), $('confirm'))) {
				if(icon) {
					if(go) return(true);
				}	else {
					errors.icon = 'You must select a user icon';
					handleErrors();
				}
			} else {
				errors.pass = 'You must enter a password';
				handleErrors();
			}
		} else {
			errors.email = 'You must enter an email address';
			handleErrors();
		}
	} else {
		errors.nick = 'You must enter a valid nickname';
		handleErrors();
	}
	return(false);
}
function handleForm(request) {
	response = request.responseText.split(';');
	switch(response[1]) {
		case 'email':
			errors.email = (response[0] == 'ok') ? '' : response[0];
		break;
		case 'nick':
			errors.nick = (response[0] == 'ok') ? '' : response[0];
		break;
		default:
			errors.other = (response[0] == 'ok') ? '' : response[0];
		break;
	}
	handleErrors();
}
function sendReqEle(ele) {
	if(!isEmpty(ele)) {
		if($(ele).id == 'email') {
			if(isEmail(ele)) {
				params = Form.Element.serialize(ele) + '&func=checkElement';
				new Ajax.Request('register.php', { method: 'post', parameters: params, onComplete: handleForm });
			} else {
				errors.email = 'You must enter a valid email address';
				handleErrors();
			}
		} else if($(ele).id == 'nick') {
			if(checkLength(ele) && isAlphaNum(ele)) {
				params = Form.Element.serialize(ele) + '&func=checkElement';
				new Ajax.Request('register.php', { method: 'post', parameters: params, onComplete: handleForm });
			} else {
				errors.nick = 'You must enter a valid nickname';
				handleErrors();
			}
		} else {
			params = Form.Element.serialize(ele) + '&func=checkElement';
			new Ajax.Request('register.php', { method: 'post', parameters: params, onComplete: handleForm });
		}
	}
}
function checkPass(a, b) {
	if(!isEmpty(a)) {
		var pa = a.value.replace(/^\s*|\s*$/g,'');
		var pb = b.value.replace(/^\s*|\s*$/g,'');

		if(checkLength(a) && checkLength(b)) {
			if(pa == pb) {
				errors.pass = '';	handleErrors();
				return(true);		
			}
		}
		errors.pass = 'Your passwords must be the same, and be at least 2 characters long';
		handleErrors();
		return(false);
	}
}
function checkLength(fld) {	return((fld.value.length >= 2 && fld.value.length <= 32) ? true : false); }
function isEmpty(fld) {	return((Form.Element.getValue(fld) == '') ? true : false); }
function isEmail(fld) {	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;	return(filter.test(fld.value)); }
function isAlphaNum(fld) { var filter = /^[A-Za-z\d_]+$/;	return(filter.test(fld.value)); }
function initUserIcons() {
	icon = '';
	$S('.gallery li img').action( {
		initialize: function() {
			if(typeof(bordered) == 'object') { bordered.setOpacity(1); this.style.border = ''; }
		},
		onclick: function() {
			this.style.border = '#000000 1px solid';
			if(typeof(bordered) == 'object') { bordered.setOpacity(1); this.style.border = ''; }
			var mooObj = new fx.Opacity(this);
			mooObj.setOpacity(0.5);
			bordered = mooObj;
			$('bigicon').src = icon = this.src;
			if($('msg')) { errors.icon = ''; handleErrors(); }
			if($('icon')) $('icon').value = icon;
		},
		onmouseover: function() {
			this.style.border = '#FFFFFF 1px solid';
			if(icon == '') $('bigicon').src = this.src;
		},
		onmouseout: function() {
			this.style.border = '';
		}
	});
}
function toggelMsgDiv(action) {
	if(action == 'open') {
		resizeMsgDiv.custom(0, 90);// starting height, ending height.
		$('msg').style.border = '#FFFFFF 3px solid';
	} 
	else if(action == 'close') {
		if(Element.getHeight($('msg')) != 0)
			resizeMsgDiv.custom(90, 0); // starting height, ending height.
			$('msg').style.border = '';
	}
}
function handleErrors() {
	var tmp = '';
	for(var i in errors) {
		if(errors[i] != '') {
			tmp += '&nbsp;-' + errors[i] + '<br />'; 
			if($(i)) $(i).style.background = '#FF9595'
		} else {
			if($(i)) $(i).style.background = '#FFFFFF';
		}	
	}
	if(tmp == '') toggelMsgDiv('close'); else toggelMsgDiv('open');
	$('msg').innerHTML  = tmp;
}
/*-- step 2 --------------------------------*/
var favGames = new Array();	var favCnt = 0;
var topGames = new Array();	var topCnt = 0;
function getGameList(list) {
	var selected = Form.Element.Serializers.select(list);
	new Ajax.Request('update-myarcade.php', { method: 'post', parameters: 'cat='+selected[1] + '&func=getGameList', onComplete: showGameList });
}
function showGameList(request) {
	var gameSelectList = $('catoptions');
	var optionGroup = gameSelectList.getElementsByTagName('option');
	var options = $A(optionGroup);
	options.each(function(node) {	// iterate through all the options and delete them first
		gameSelectList.removeChild(node);
	});
	
	var nodes = request.responseText.split(';');
	nodes.each( function(selectGame) { // populate all games in this category into the select control
		if(selectGame != '') {
			var newOption = document.createElement('option');
			var list = gameSelectList.appendChild(newOption);
			list.setAttribute('value', selectGame);
			list.appendChild(document.createTextNode(selectGame));
		}
	});
}
function showGameThumb(game, where) {
	if(game.value != '-') {
		$(where).innerHTML = '';
		var p = document.createElement('p');
		p.appendChild(document.createTextNode('game thumbnail:'));
		$(where).appendChild(p);
		$(where).innerHTML += '<img src="http://www.freearcade.com/thumbnails/rollovers/'+game.value.replace(/( )|(\.)|(')|(:)/gi,"")+'-lg.gif" width="146" height="101" border="0" alt="" />';
	}
}
function addToGameList(whichList) {
	listDiv = whichList;
	var games = $F('catoptions').toString().split(',');
	var list = '';	var stop = false;
	favCnt = favGames.length; topCnt = topGames.length;
	games.each( function(eachGame) { // create an unordered list w/each selected game in it
		if(!stop) { 
			if(eachGame != '') {
				switch(whichList) {
					case 'myfavs':
						justAdded = favGames[favCnt] = eachGame;
						favCnt++;		list = favGames;
					break;
					case 'mytop5':
						if(topGames.length > 4) { alert('You can only have 5 games in this list.'); stop = true; break; }
						justAdded = topGames[topCnt] = eachGame;
						topCnt++;		list = topGames;
					break;
					default:
						list = '';	whichList = '';
					break;
				}
			}
		}
	});
	if(list != '') listGames(list, whichList);
}
function listGames(gamesArray, htmlList) {
	if(gamesArray.length >= 0) {
		initList($(htmlList));	printListHead(htmlList);
		gamesArray.sort();
		for(var i = 0; i < gamesArray.length; i++) {
			if(gamesArray[i] != null) {
			  if(gamesArray[i] == gamesArray[i + 1])
					gamesArray.splice(i, 1);	// get rid of dupe games
				addToHTMLList(gamesArray[i], $(htmlList));
			}
		}
	}
}
function printListHead(l) {
	var h = document.createElement('li');
	h.setAttribute('className', 'header'); h.setAttribute('class', 'header');
	switch(l) {
		case 'mytop5':
			var t = document.createTextNode('your top 5 games');
		break;
		case 'myfavs':
			var t = document.createTextNode('your favorite games');
		break;
	}
	h.appendChild(t);	parentUL.appendChild(h);
}
function addToHTMLList(game, list) {
	gameCnt++;
	var b = parentUL.appendChild(document.createElement('li'));
	var link = document.createElement('a');
	link.setAttribute('className', 'remove'); link.setAttribute('class', 'remove');
	link.setAttribute('href', '#');
	link.onclick = function() {	removeGameFromList(this);return false; }
	link.setAttribute('title', 'remove this game');	link.appendChild(document.createTextNode(game));
	b.appendChild(link);
	if(game == justAdded) $(listDiv).scrollTop = gameCnt * 27;
}
function initList(container) {
	container.innerHTML = '';
	parentUL = container.appendChild(document.createElement('ul'));
}
function setGameList(l, g) {
	switch(l) {
		case 'top':
			currList = 'mytop5';
			if(g != '') topGames = g.split(',');
		break;
		case 'fav':
			currList = 'myfavs';
			if(g != '') favGames = g.split(',');
		break;
	}
}
function removeGameFromList(game) {
	switch(game.parentNode.parentNode.parentNode.id) {
		case 'mytop5':
			for(var i = 0; i < topGames.length; i++)
				if(topGames[i] == game.innerHTML) topGames.splice(i, 1);
			topCnt--;
			listGames(topGames, 'mytop5');
		break;
		case 'myfavs':
			for(var i = 0; i < favGames.length; i++)
				if(favGames[i] == game.innerHTML) favGames.splice(i, 1);
			favCnt--;
			listGames(favGames, 'myfavs');
		break;
	}
}
function clearList(list, nick) {
	switch(list) {
		case 'myfavs':
			currList = 'myfavs';
			favGames.length = 0;	favCnt = 0;
		break;
		case 'mytop5':
			currList = 'mytop5';
			topGames.length = 0;	topCnt = 0;
		break;
	}
	sendLists(nick, 'self');
}
function editList(list) {
	resizeEditDiv.custom(0, 494);
	$('addgame').onclick = function() { addToGameList(list); return false; }
	var a = document.createElement('div');	a.setAttribute('id', list);
	$('hook').appendChild(a);
	Element.remove($(list).previousSibling);
	var games = (list == 'mytop5') ? topGames : favGames;
	listGames(games, list);
}
function sendLists(nick, next) {
	var params = 'nick=' + nick + '&func=editGameList' + '&next=' + next;
	if(favGames.length > 0) {
		params += '&favlist=' + favGames;
	} else if(favGames.length == 0 && currList == 'myfavs') {
		if(confirm('Are you sure you don\'t want any games in this list?'))
			params += '&clear=myfavs';
		else	return(false);
	}
	if(topGames.length > 0) {
		params += '&toplist=' + topGames;
	} else if(topGames.length == 0 && currList == 'mytop5') {
		if(confirm('Are you sure you don\'t want any games in this list?'))
			params += '&clear=mytop5';
		else	return(false);
	}
	if(nick)	new Ajax.Request('update-myarcade.php', { method: 'post', parameters: params, onComplete: handleSendLists });
}
function handleSendLists(request) {	eval(request.responseText); }
function returnTopGames() {	return(topGames); }
function returnFavGames() {	return(favGames); }
/*-- step 3 --------------------------------*/
function colorScheme(colors) {
	this.colors = '';
	this.updateColors = updateColors;
	this.setColors = setColors;
	this.showPreview = showPreview;
	this.returnColors = returnColors;
}
function setColors(c) {	this.colors = c; }
function returnColors() { return(this.colors); }
function updateColors(nick) {
	if(this.colors != '') {
		var params = 'colors=' + this.colors + '&nick=' + nick + '&func=updateColorScheme';
		new Ajax.Request('update-myarcade.php', { method: 'post', parameters: params, onComplete: updateSchemeDisplay });
		return(true);
	} else {
		alert('You haven\'t selected a new color scheme!');
		return(false);
	}
}
function updateSchemeDisplay(request) {
	showUpdateSuccess();
	$('curcolors').innerHTML = request.responseText;
}
function showPreview() { $('schemesample').src = 'images/' + this.colors + '-sample.gif'; }
myScheme = new colorScheme();
function nextSignUpPage(p) {
	s = function() { window.location = 'sign-up.php?step=' + p }
	setTimeout(s, 1000);
}
/*-- edit pgs ------------------------------*/
function updateUserIcon(nick) {
	if(icon != '') {
		var params = 'icon=' + icon + '&nick=' + nick + '&func=updateIcon';
		new Ajax.Request('update-myarcade.php', { method: 'post', parameters: params, onComplete: showNewIcon });
	} else
		alert('You haven\'t selected an icon.');
}
function showNewIcon(request) {
	showUpdateSuccess();
	$('bigiconnew').src = request.responseText;
	initUserIcons();
}
function getDefalutGameDesc(game) {
	if(game != '') {
		var params = 'game=' + game + '&func=getDefalutDesc';
		new Ajax.Request('update-myarcade.php', { method: 'post', parameters: params, onComplete: handleDesc });
	} else	alert('there is no game selected.');
}
function updateGameDesc(game, desc, list, nick) {
	if(game != '') {
		if(desc.length > 145) {
			desc = desc.substr(0, 144);
			alert('Your description was too long, it is being trimmed down to 145 characters.');
		}
		var params = 'game=' + game + '&nick=' + nick + '&list=' + list + '&desc=' + desc + '&func=updateDesc';
		new Ajax.Request('update-myarcade.php', { method: 'post', parameters: params, onComplete: handleDesc });
	} else	alert('There is no game selected!');
}
function handleDesc(request) {
	if(request.responseText.substr(0, 9) == 'yesupdate') {
		showUpdateSuccess();
		$('desctxt').value = request.responseText.substring(9);
	} else {
		$('desctxt').value = request.responseText;
	}
}
/* the letters left funcs */
function letterCntTracker(fld, update) {
	var max = fld.getAttribute('maxlength');
	if(fld.value != fld.defaultValue)
		fld.style.background = (fld.value.length > max) ? '#FF9595' : '#FFFFFF';
	$(update).style.color = (fld.value.length > max) ? '#FF9595' : '';
	$(update).innerHTML = 'letters remaining: ' + (max - fld.value.length) + '/' + max;
}
function submitForm(form) { form.submit(); }
function verifyPass(p, n) {
	var ps = p.value.replace(/^\s*|\s*$/g,''); //trim whitespace
	var params = 'nick=' + n + '&pass=' + ps + '&func=verifyPass';
	new Ajax.Request('update-myarcade.php', { method: 'post', parameters: params, onComplete: handleErr });
}
function handleErr(request) {
	var response = request.responseText.split(';');
	if(response[0] == 'pass') {
		if(response[1] == 'false') {
			errors.curpass = 'Your password doesn\'t match the existing one.';
			handleErrors();
		} else
			errors.curpass = '';		handleErrors();
	} else if(response[0] == 'email') {
		if(response[1] == 'false') {
			errors.email = 'We encountered a problem, please try again.';
			handleErrors();
		} else {
			errors.email = '';	handleErrors();
		}
	}
}
function getPassError() {	return((errors.curpass == '') ? true : false); }
function setError() {	errors.email = 'this is wrong';	handleErrors(); }
function verifyEmail(addr) {
	if(!isEmpty(addr)) {
		if(isEmail(addr)) {
			errors.email = '';	handleErrors();
		} else {
			errors.email = 'That email address doesn\'t seem to be valid.';
			handleErrors();
		}
	}
}
function selectTextareaText(fld) { $(fld).focus(); $(fld).select(); }
function setFieldValue(fld, val) {	var input = document.getElementById(fld);	if(!input) return;	input.value = val;}


