/*
Login form class
Requires Common.js

Author: Stepan Reznikov (stepan@design.ru)
20.10.2007
*/

function LoginForm(){

	this.bInit = null;
	this.bKeep = false;

	var me = this;

	// контейнер с формой
	this.oContainer = document.getElementById('login_form');
	if (this.oContainer) {
		Common.Event.add(this.oContainer, 'click', function(evt){ me.keep(evt); });

		// форма
		this.oForm = this.oContainer.getElementsByTagName('form')[0];
		if (this.oForm) {
			Common.Event.add(this.oForm, 'submit', function(evt){ if ( me.send(evt) ){ return Common.Event.cancel(evt); } });
		}

		// крестик закрытия
		this.oClose = document.getElementById('login_form_close');
		if (this.oClose) {
			Common.Event.add(this.oClose, 'click', function(evt){ me.hide(evt); return Common.Event.cancel(evt); });
		}
	}

	// поле ввода
	this.oInput = document.getElementById('j_username');
	this.iTimer = null;
	Common.Event.add(window, 'load', function(evt){ me.iTimer = setInterval(function(){ me.xFormCheck(); }, 100);});

	// контейнер для показа прогресс-бара
	this.oProgress = document.getElementById('login_form_progress');

	// контейнер для вывода сообщений об ошибках
	this.oError = document.getElementById('login_form_error');

	// контейнер со ссылками на форму
	this.oLinkContainer = document.getElementById('login_link');

	if (this.oLinkContainer) {
		var aLinks = this.oLinkContainer.getElementsByTagName('a');
		if (aLinks.length > 0) {
			for (var i = 0, iLength = aLinks.length, oLink; i < iLength; i++) {
				oLink = aLinks[i];
				Common.Event.add(oLink, 'click', function(evt){ if ( me.toggle(evt) ){ return Common.Event.cancel(evt); } });
			}
		}
	}

	// AJAX routine
	this.oAjax = new AJAXRequestClass('/j_security_check/', 'POST');

	var oAjaxCallback = function(oXHR) {
		//alert(oXHR.responseText);
		if (oXHR.responseText.indexOf('request-uri: /profile/') >= 0) {
			me.allow();
		} else {
			//me.deny(oXHR.responseText);
			me.deny();
		}
	}

	this.oAjax.SetCallback(oAjaxCallback);
}

LoginForm.prototype.isInit = function(){
	if (this.bInit == null) {
		this.bInit = this.oContainer && this.oForm && this.oInput;
	}
	return this.bInit;
}

LoginForm.prototype.toggle = function(evt){
	if (this.isInit()) {
		if (Common.Class.match(this.oContainer, 'hidden')) {
			this.show(evt);
		} else {
			this.hide(evt);
		}
		return true;
	} else {
		return false;
	}
}

LoginForm.prototype.show = function(evt){
	if (this.isInit()) {
		Common.Class.remove(this.oContainer, 'hidden');
		this.oInput.focus();
		var me = this;
		this.documentClickHandler = function(evt){ me.hide(evt); }
		this.documentKeyDownHandler = function(evt){ me.cancel(evt); }
		Common.Event.add(document, 'click', this.documentClickHandler);
		Common.Event.add(document, 'keydown', this.documentKeyDownHandler);
	}
}

LoginForm.prototype.keep = function(evt){
	if (this.isInit()) {
		this.bKeep = true;
	}
}

LoginForm.prototype.hide = function(evt){
	if (this.isInit()) {
		if (this.bKeep) {
			this.bKeep = false;
			return;
		}
		Common.Class.add(this.oContainer, 'hidden');
		Common.Event.remove(document, 'click', this.documentClickHandler);
		Common.Event.remove(document, 'keydown', this.documentKeyDownHandler);
	}
}

LoginForm.prototype.cancel = function(evt){
	if (this.isInit()) {
		if (window.event) {
			evt = window.event;
		}
		var code = evt.keyCode ? evt.keyCode : evt.which ? evt.which : null;
		if (code == 27) {
			this.hide(evt);
		}
	}
}


LoginForm.prototype.send = function(evt){
	if (this.isInit() && this.oProgress && this.oError) {

		//this.oError.innerHTML = '';
		Common.Class.add(this.oError, 'hidden');
		Common.Class.remove(this.oProgress, 'hidden');

		var aInputs = this.oForm.getElementsByTagName('input');
		var oLoginData = {};
		for (var i = 0, iLength = aInputs.length, oInput; i < iLength; i++) {
			oInput = aInputs[i];
			if (oInput.name) {
				oLoginData[oInput.name] = oInput.value;
			}
		}

		this.oAjax.SetParams(oLoginData);
		this.oAjax.Load();

		return true;
	} else {
		return false;
	}
}

LoginForm.prototype.allow = function(){
	if (this.isInit()) {
		//this.oForm.submit();
		document.location.reload();
	}
}

//LoginForm.prototype.deny = function(sMsg){
LoginForm.prototype.deny = function(){
	if (this.isInit() && this.oProgress && this.oError) {
		Common.Class.add(this.oProgress, 'hidden');
		Common.Class.remove(this.oError, 'hidden');
		//this.oError.innerHTML = sMsg;
	}
}

LoginForm.prototype.xFormCheck = function(){
	if (this.isInit()) {
		if (this.oInput.value != '') {
			if (window.xForm) {
				xForm.init();
			}
		}
		clearInterval(this.iTimer);
	}
}
