// $Id: NicknameLib.js,v 1.3 2009-12-22 16:22:02 jbesson Exp $

function NicknameLib(name) {

	var __pub = {
		name : name,
		busy : false
	}

	var _renderDelays = {
		nickname        : 600,
		nickname_taken  : 600,
		avatar_srcs     : 1000,
		avatar          : 600,
		verify_srcs     : 600,
		all_games       : 1000,
		firefox_warning : 1000
	};

	var _xlations = {
		OB_NICKNAME_TAKEN : 'Sorry, your chosen Alias is already in use, please enter another alias between 2-10 characters in length.<br /><br />Please note your Alias cannot be changed once set.',
		OB_NICKNAME_INVALID_FORMAT : 'Please ensure that when selecting your Alias that you do not enter spaces or punctuation marks. Underscores (_) are permitted.'
	}

	var _timeout = {
		ms : 5000,
		timer : null
	};

	try {eval(applyOverrideJS);} catch (e) {}

	var Req = ReqLib(name, {
		reqType : 'nickname',
		type : null,
		refreshNormal : null,
		refreshIdle : null,
		url : null,
		respType : 'arr',
		renderDelay : null
	});

	var _urls = {
		nickname        : getBaseURL() + '?action=set_user_data',
		nickname_taken  : getBaseURL() + '?action=set_user_data',
		avatar_srcs     : getBaseURL() + '?action=go_avatars',
		avatar          : getBaseURL() + '?action=set_user_data',
		verify_srcs     : getBaseURL() + '?action=go_verify',
		all_games       : getBaseURL() + '?action=all_games',
		firefox_warning : getBaseURL() + '?action=get_ajax_data&name=poker_firefox_warning'
	};

	var _which = '';
	var _proceedCode = '';
	var _cancelCode = '';
	var _els = {};
	var _choice = '';
	var _result = '';
	var _msg = '';
	var _suggestions = [];
	var _verify_srcs = {
		ok : false,
		msgs : {}
	};
	var _avatar_srcs = {
		ok : false,
		avs : []
	};
	var _info = null;
	var _midRequest = false;


function canReq() {

	if (Req.canReq(true) && !_midRequest) {
		return true;
	}
	return false;
}

function makeURL() {

	var url = _urls[_which];

	switch (_which) {
		case 'nickname':
		case 'nickname_taken':
			url += '&nickname=' + _choice;
			break;
		case 'avatar_srcs':
			break;
		case 'avatar':
			url += '&avatar_id=' + _choice;
			break;
		case 'verify':
			break;
		case 'all_games':
			break;
		case 'firefox_warning':
			break;
	}

	return url;
}

function makeId() {

	return _which + ',' + _choice;
}

function _reset() {

	_choice          = '';
	_result          = '';
	_msg             = '';

	Req.setRenderDelay(_renderDelays[_which]);

	if (_timeout.timer != null) {
		clearTimeout(_timeout.timer);
	}
}

function req() {

	if (!Req.canReq()) {
		return false;
	}

	_reset();

	var choice_ret = _getChoice();

	if (!choice_ret.good) {
		if (choice_ret.msg != '') {
			_els.msg.innerHTML = choice_ret.msg;
		}
		return false;
	} else {
		_els.msg.innerHTML = '&nbsp;';
	}

	_choice = choice_ret.choice;

	_timeout.timer = setTimeout(_timedout, _timeout.ms);

	_midRequest = true;

	Req.req();

	return false;
}

function render() {

	var i, c, img;

	if (_timeout.timer != null) {
		clearTimeout(_timeout.timer);
	}

	_midRequest = false;

	switch (_which) {
		case 'avatar_srcs':

			_result = 'OB_OK';
			_msg    = '&nbsp;';

			_avatar_srcs.ok = true;
			_avatar_srcs.avs = [];

			c = 1;
			for (i = 0; i < Req.pub.items[0]; i++) {
				_avatar_srcs.avs.push({
					id  : Req.pub.items[c],
					url : Req.pub.items[c + 1]
				});

				img = new Image();
				img.src = Req.pub.items[c + 1];
				c += 2;
			}

			break;

		case 'verify_srcs':

			_result = 'OB_OK';
			_msg    = '&nbsp;';


			_verify_srcs.ok = true;
			_verify_srcs.msgs = {};

			var msgs = ['title_txt', 'title_blurb', 'ok_txt'];
			for (i = 0; i < msgs.length; i++) {
				_verify_srcs.msgs[msgs[i]] = Req.pub.items[i];
			}

			break;

		case 'all_games':

			_result = 'OB_OK';
			_msg    = '&nbsp;';

			document.all_games = [];

			var num_games = Req.pub.items[0];
			var c = 1;
			for (var i = 0; i < num_games; i++) {
				document.all_games.push({
					name  : Req.pub.items[c],
					cg_id : Req.pub.items[c + 1],
					desc  : Req.pub.items[c + 2]
				});
				c += 3;
			}

			break;

		case 'firefox_warning':

			_result = 'OB_OK';
			_msg    = '&nbsp;';

			document.firefox_warning = Req.pub.items[0];

			break;

		default:

			var cookie  = Req.pub.items[0];
			_result = Req.pub.items[1];
			_msg    = Req.pub.items[2];

			if (Req.pub.items[3] == '') {
				_suggestions = [];
			} else {
				_suggestions = Req.pub.items[3].split('|');
			}

			if (cookie != '') {
				set_cookie(document.login_cookie, cookie, '', '/', '', '');
			}

			dispLogin();

			break;
	}

	hint('done');
}

function hint(which) {

	switch (which) {
		case 'update':
		case 'new':
			switch (_which) {
				case 'avatar_srcs':
					_els.msg.innerHTML = 'Loading avatars...';
					break;
				case 'verify_srcs':
					_els.msg.innerHTML = '&nbsp;';
					break;
				case 'all_games':
					_els.msg.innerHTML = 'Loading games...';
					break;
				default:
					_els.msg.innerHTML = 'Please wait...';
					break;
			}

			_setChoiceDisabled(true);

			for (var i = 0; i < _els.buttons.length; i++) {
				_els.buttons[i].hide();
			}
			break;

		case 'done':

			_els.msg.innerHTML = _msg;

			switch (_which) {
				case 'avatar_srcs':

					if (_result == 'OB_OK') {

						sky.overlay.destroy();
						__pub.busy = false;
						showForm('avatar', _proceedCode, _cancelCode, _info);

					} else if (_result == 'TIMEOUT') {

						_els.buttons[0].show();

					}
					break;

				case 'verify_srcs':

					if (_result == 'OB_OK') {

						sky.overlay.destroy();
						__pub.busy = false;
						showForm('verify', _proceedCode, _cancelCode, _info);

					} else if (_result == 'TIMEOUT') {

						_els.buttons[0].show();

					}
					break;

				case 'all_games':

					if (_result == 'OB_OK') {

						sky.overlay.destroy();
						__pub.busy = false;
						_proceedCode(document.all_games);

					} else if (_result == 'TIMEOUT') {

						_els.buttons[0].show();

					}
					break;

				case 'firefox_warning':

					if (_result == 'OB_OK') {

						sky.overlay.destroy();
						__pub.busy = false;
						showForm('firefox_warning', _proceedCode, _cancelCode, _info);

					} else if (_result == 'TIMEOUT') {

						_els.buttons[0].show();

					}
					break;

				default:

					if (_result == 'OB_OK' || _result == 'OB_NICKNAME_ALREADY_SET') {

						_setChoiceDisabled(true);
						_els.buttons[2].show();

					} else if (_result == 'OB_NICKNAME_TAKEN') {

						sky.overlay.destroy();
						__pub.busy = false;
						_xlations['OB_NICKNAME_TAKEN'] = _msg;

						showForm('nickname_taken', _proceedCode, _cancelCode, _info);

					} else {

						_setChoiceDisabled(false);
						_els.buttons[0].show();
						_els.buttons[1].show();
					}
					break;
			}
			break;
	}
}

function _timedout() {

	if (_timeout.timer != null) {
		clearTimeout(_timeout.timer);
	}

	if (!_midRequest) {
		return;
	}
	_midRequest = false;

	_result = 'TIMEOUT';
	_msg    = 'There was a problem contacting the server. Please try again.';

	hint('done');

	Req.incrCount();
}

function showForm(which, proceedCode, cancelCode, info) {

	if (__pub.busy) {
		return false;
	}
	__pub.busy = true;

	_proceedCode = proceedCode;
	_cancelCode  = cancelCode;

	_info = info;

	switch (which) {
		case 'nickname':
			if (_info != null && _info != '') {
				var promptText = _info;
			} else {
				var promptText = 'Before you play you need to create a Poker Alias.';
			}
			sky.overlay.getChoice(
					'Create Poker Alias',
					promptText + '<form id="choice_frm" action="" onSubmit="return false;"><p class="centre"><label>Your Poker Alias <input type="text" id="choice_el" name="nickname" size="10" maxlength="10" /></label></p></form>Your Poker Alias needs to be 2-10 characters long and once set up cannot be changed.<br /><br /><span id="nickname_msg">&nbsp;</span>',
					[
						sky.overlay.button(
							'Ok',
							function () {
								Nickname.req();
							},
							function () {
								return false;
							}
						),
						sky.overlay.button(
							'Cancel',
							function () {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						),
						sky.overlay.button(
							'Proceed',
							function () {
								Nickname.pub.busy = false;
								eval(proceedCode);
							}
						)
					]
				);
			break;
		case 'nickname_taken':
			var html, i;
			html = _xlations['OB_NICKNAME_TAKEN'];
			html += '<form id="choice_frm" action="" onSubmit="return false;"><p class="centre"><label>Alias <input type="text" id="choice_el" name="nickname" size="10" maxlength="10" /></label></p><p><strong>Suggested Alternatives</strong></p><ol>';
			for (i = 0; i < _suggestions.length; i++) {
				html += '<li><label><input name="nickname_suggest" type="radio" value="' + _suggestions[i] + '"> ' + _suggestions[i] + '</label></li>';
			}
			html += '</ol></form><span id="nickname_msg">&nbsp;</span>';
			sky.overlay.getChoice(
					'Sorry, that Alias is already in use',
					html,
					[
						sky.overlay.button(
							'Ok',
							function () {
								Nickname.req();
							},
							function () {
								return false;
							}
						),
						sky.overlay.button(
							'Cancel',
							function () {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						),
						sky.overlay.button(
							'Proceed',
							function () {
								Nickname.pub.busy = false;
								eval(proceedCode);
							}
						)
					]
				);
			break;
		case 'avatar_srcs':
		case 'avatar':
			var current_avatar = State.login.avatar;
			var txt, title;
			if (current_avatar != '') {
				title = 'Change Avatar';
				txt = 'Please pick an avatar from the choices below.';
			} else {
				title = 'Please choose an Avatar';
				txt = 'To take part in a poker game, you must first pick an avatar from the choices below.';
			}

			if (which == 'avatar_srcs') {

				sky.overlay.getChoice(
					title,
					txt + '<br /><br /><span id="nickname_msg">&nbsp;</span>',
					[
						sky.overlay.button(
							'Cancel',
							function () {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						)
					]
				);

			} else {

				if (!_avatar_srcs.ok) {
					__pub.busy = false;
					return showForm('avatar_srcs', proceedCode, cancelCode, info);
				}

				var img_str = '';
				for (var i = 0; i < _avatar_srcs.avs.length; i++) {
					img_str += '<li><label><img src="' + _avatar_srcs.avs[i].url + '" id="avatar_img" alt="" />';
					if (current_avatar == _avatar_srcs.avs[i].id) {
						img_str += '<input name="avatar" type="radio" value="' + _avatar_srcs.avs[i].id + '" checked="checked"/>';
					} else {
						img_str += '<input name="avatar" type="radio" value="' + _avatar_srcs.avs[i].id + '"/>';
					}
					img_str += '</label></li>';
				}
				sky.overlay.getChoice(
					title,
					txt + '<br /><form id="choice_frm" action="" onSubmit="return false;"><input type="hidden" value="" id="choice_el" name="avatar"</input><p class="centre"><ul class="setavatar">' + img_str + '</ul></p></form><br /><span id="nickname_msg">&nbsp;</span>',
					[
						sky.overlay.button(
							'Ok',
							function () {
								Nickname.req();
							},
							function () {
								return false;
							}
						),
						sky.overlay.button(
							'Cancel',
							function () {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						),
						sky.overlay.button(
							'Proceed',
							function () {
								Nickname.pub.busy = false;
								eval(proceedCode);
							}
						)
					]
				);
			}
			break;
		case 'verify_srcs':
			sky.overlay.getChoice(
				'Loading...',
				'<span id="nickname_msg">&nbsp;</span>',
				[
					sky.overlay.button(
						'Cancel',
						function () {
							Nickname.pub.busy = false;
							eval(cancelCode);
						}
					)
				]
			);
			break;
		case 'verify':
			if (!_verify_srcs.ok) {
				__pub.busy = false;
				showForm('verify_srcs', proceedCode, cancelCode, info);
				return;
			}
			sky.overlay.getChoice(
				_verify_srcs.msgs.title_txt,
				_verify_srcs.msgs.title_blurb + '<span id="nickname_msg">&nbsp;</span>',
				[
					sky.overlay.button(
						_verify_srcs.msgs.ok_txt,
						function () {
							pu(document.xferURLAcct + '?action=GoAcctVerifyRetry&skin=poker&wstyle=popup', 'pu_acct_verify');
							Nickname.pub.busy = false;
							eval(proceedCode);
						}
					),
					sky.overlay.button(
						'Cancel',
						function () {
							Nickname.pub.busy = false;
							eval(cancelCode);
						}
					)
				]
			);
			break;
		case 'all_games':
			if (document.all_games == null) {
				sky.overlay.getChoice(
					'All Games',
					'<span id="nickname_msg">&nbsp;</span>',
					[
						sky.overlay.button(
							'Cancel',
							function () {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						)
					]
				);
			} else {
				_proceedCode(document.all_games);
			}
			break;
		case 'firefox_warning':
			if (document.firefox_warning == null) {
				sky.overlay.getChoice(
					'Warning',
					'<span id="nickname_msg">&nbsp;</span>',
					[
						sky.overlay.button(
							'Cancel',
							function () {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						)
					]
				);
			} else {
				var pre_warning = (!_info || _info == '') ? '' : '<div><strong>' + _info + '</strong></div>';
				sky.overlay.getChoice(
					'Warning',
					pre_warning + document.firefox_warning,
					[
						sky.overlay.button(
							'Open anyway',
							function() {
								Nickname.pub.busy = false;
								eval(proceedCode);
							}
						),
						sky.overlay.button(
							'Cancel',
							function() {
								Nickname.pub.busy = false;
								eval(cancelCode);
							}
						)
					]
				);
				return true;
			}
			break;
		default:
			return false;
	}

	_which = which;

	_els = {
		fm      : document.forms['choice_frm'],
		choice  : document.getElementById('choice_el'),
		msg     : document.getElementById('nickname_msg'),
		buttons : sky.overlay.getButtons()
	};

	if (_els.buttons.length == 3) {
		_els.buttons[2].hide();
	}

	if (_which == 'avatar_srcs' || _which == 'verify_srcs' || _which == 'all_games' || _which == 'firefox_warning') {
		req();
	} else if (_which == 'avatar' && current_avatar != '') {
		_els.choice.value = current_avatar;
	}

	return true;
}

function _getChoice() {

	var choice = '';
	var good = true;
	var msg = '';

	switch (_which) {
		case 'nickname':
		case 'nickname_taken':
			choice = _els.choice.value;

			if (good && choice == '') {
				msg  = 'Please enter an Alias';
				good = false;
			}
			if (good && !choice.match(new RegExp('^[A-Za-z0-9_-]{2,10}$'))) {
				msg  = _xlations['OB_NICKNAME_INVALID_FORMAT'];
				good = false;
			}
			break;

		case 'avatar_srcs':
			choice = '';

			break;

		case 'avatar':
			choice = _els.choice.value;

			if (good && choice == '') {
				msg  = 'Please choose an avatar';
				good = false;
			}
			break;

		case 'verify_srcs':
			choice = '';

			break;

		case 'all_games':
			choice = '';

			break;

		case 'firefox_warning':
			choice = '';

			break;
	}

	return {
		good   : good,
		choice : choice,
		msg    : msg
	};
}

function _setChoiceDisabled(value) {

	if (_els.fm) {
		for (var i = 0; i < _els.fm.elements.length; i++) {
			_els.fm.elements[i].disabled = value;
		}
	}
}

	var _this = {
		pub : __pub,
		Req : Req,
		canReq : canReq,
		makeURL : makeURL,
		makeId : makeId,
		req : req,
		render : render,
		hint : hint,
		showForm : showForm
	};

	Req.regPar(_this);

	return _this;
}
