// $Id: LoginLib.js,v 1.4.6.1 2010-05-21 14:42:29 jbesson Exp $

function LoginLib(name) {

	var __pub = {
		name      : name,
		extraData : []
	};

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

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

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

	var _inputs       = [];
	var _formType     = '';
	var _extraInfo    = '';
	var _successCB    = '';
	var _result       = '';
	var _button       = null;

	var _midRequest = false;


function canReq() {

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

function makeURL() {

	return getBaseURL('committed');
}

function makePOST() {

	var post = _inputs.join('&') + '&action=ajax_login';
	if (_extraInfo) {
		post += '&extra_info=' + _extraInfo;
	}
	return post;
}

function makeId() {

	return null;
}

function req(formType, button, extraInfo, successCB) {

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

	var form;

	if (formType == 'main') {

		form = document.forms['fmLogin'];

		var username = form.uname.value;

		if (username == '') {
			sky.overlay.doAlert('&nbsp;', 'Please enter your User ID', 'warning');
			return false;
		}

		if (document.getElementById('remember_me').checked) {
			set_cookie(document.remember_me_cookie, username, oneYearFromNow(), '/', '', '');
		} else {
			set_cookie(document.remember_me_cookie, '', '', '/', '', '');
		}

		if (!document.ajax_login || !document.isHTTPS) {
			throw('No ajax login');
		}

	} else if (formType == 'popup') {

		form = document.forms['popupLoginForm'];

		var username = form.uname.value;

		if(username == '') {
			document.getElementById('popup_login_msg').innerHTML = 'Please enter your User ID';
			return false;
		} else {
			document.getElementById('popup_login_msg').innerHTML = '&nbsp;';
		}

		if (!document.ajax_login || !document.isHTTPS) {
			form.submit();
		}

	} else {
		throw('Bad formType');
	}

	_formType  = formType;
	_button    = button;
	_extraInfo = extraInfo;
	_successCB = successCB;
	_inputs    = [];

	var inputs = form.getElementsByTagName('input');
	for (i = 0; i < inputs.length; i++) {
		switch (inputs[i].type) {
			case 'text' :
			case 'password' :
			case 'hidden' :
			case 'submit' :
				if (inputs[i].name == 'action') {
					continue;
				}
				_inputs.push(inputs[i].name + '=' + inputs[i].value);
			break;
		}
	}

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

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

	_midRequest = true;

	Req.req();

	// blank password box
	form.pword.value = '';

	return false;
}

function render() {

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

	_midRequest = false;

	_result = Req.pub.items[0];

	if (_result == 'OK') {
		set_cookie_no_escape(document.secure_login_cookie, Req.pub.items[1], '', '/secure', '', 1);
		set_cookie(document.login_cookie, Req.pub.items[2], '', '/', '', '');
		if (document.community_cookie == 'AT') {
			set_cookie_no_escape(document.community_cookie, Req.pub.items[3], '', document.community_path, document.community_domain, 1);
		} else {
			set_cookie_no_escape(document.community_cookie, Req.pub.items[3], '', '/', document.community_domain, '');
		}

		if (_extraInfo) {
			var i;
			__pub.extraData = [];
			for (i = 4; i < Req.pub.items.length; i++) {
				__pub.extraData.push(Req.pub.items[i]);
			}
		}
	}

	State.parseLogin();

	hint('done');
}

function hint(which) {

	switch (which) {
		case 'update':
		case 'new':
			if (_formType == 'main') {
				if (_button) {
					sky.addClass(_button,'disabled');
					_button.disabled = true;
				}
			} else {
				var buttons = sky.overlay.getButtons();
				buttons[0].hide();
				buttons[1].hide();
			}
			break;
		case 'done':
			if (_formType == 'main') {
				if (_button) {
					sky.removeClass(_button,'disabled');
					_button.disabled = false;
				}
				if (_result == 'OK') {
					_loginOK();
				} else {
					dispLogin(false, _result);
				}
			} else {
				if (_result == 'OK') {
					document.getElementById('popup_login_msg').innerHTML = 'Login successful';
					setTimeout(_loginOK, 600);
				} else {
					document.getElementById('popup_login_msg').innerHTML = _result;
					var buttons = sky.overlay.getButtons();
					buttons[0].show();
					buttons[1].show();
				}
			}
			break;
	}
}

function _timedout() {

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

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

	Req.incrCount();

	_result = 'Your login request timed out. Please try again.';

	hint('done');

	// server may have seen the login attempt to incr uid
	try {
		var uid = parseInt(document.forms['fmLogin'].login_uid.value);
		document.forms['fmLogin'].login_uid.value = uid + 1;
	} catch(e) {}
}

function setLoginUID(uid) {

	try {
		document.forms['fmLogin'].login_uid.value = uid;
	} catch(e) {}
}

function showPopupForm(simpleForm, extraInfo, successCB, cancelCB) {

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

	var vis_html = '';
	if (!simpleForm) {
		vis_html += '<div class="msg">If you do not have an account please <a href="' + document.sbXferURL + '?action=GoAcctReg1&amp;skin=poker" onClick="return goAcctReg(this)">Join us</a>.</div>';
	}
	vis_html += '<div class="inpts">';
	vis_html += '<label for="pu_uid">User ID</label>';
	vis_html += '<input size="12" maxlength="12" name="uname" type="text" id="pu_uid" />';
	vis_html += '<label for="pu_pwd">PIN</label>';
	vis_html += '<input size="6" maxlength="6" name="pword" type="password" id="pu_pwd"  />';
	vis_html += '</div>';
	vis_html += '<span class="error" id="popup_login_msg">&nbsp;</span>';

	var form = document.getElementById('fmLogin').cloneNode(false);
	form.innerHTML = vis_html;
	form.name = 'popupLoginForm';
	form.id = 'popupLoginForm';

	var inputs = document.getElementById('fmLogin').getElementsByTagName('input');
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].type == 'hidden') {
			form.appendChild(inputs[i].cloneNode(true));
		}
	}

	var div = document.createElement('div');
	div.appendChild(form);

	var popupHTML = div.innerHTML;

	delete div;

	sky.overlay.getChoice(
		'You need to login to proceed',
		popupHTML,
		[
			sky.overlay.button(
				'Login',
				function() {
					Login.req('popup', null, extraInfo, successCB);
				},
				function () {
					return false;
				}
			),
			sky.overlay.button(
				'Cancel',
				typeof cancelCB == 'string' ? function() {eval(cancelCB)} : function() {}
			)
		],
		'pu_login'
	);

	autoUsername('popup');
}

function _loginOK() {

	if (_formType == 'popup') {
		sky.overlay.destroy();
	}

	if (typeof _successCB == 'string') {
		eval(_successCB);
	} else if (document.isMainPage) {
		dispLogin(false);
		if (State.login.logged_in && State.login.temp_reg) {
			var fn = function () {
				document.location = document.scgiURL + '?action=export_user&target=SKYBET_WW&import_action=action~GoAcctReg1@skin~poker&logout=Y';
			};
			sky.overlay.getChoice(
				'Complete your registration before proceeding',
				'You will be automatically taken to the registration page shortly. If this does not happen click the Register button to go there',
				[
					sky.overlay.button(
						'Register',
						fn
					)
				],
				'warning'
			);
			setTimeout(
				fn,
				3000
			);
		} else {
			BG.poll();
		}
	}
}

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

	Req.regPar(_this);

	return _this;
}
