function swLoginForm() {
	$('loginFormHolder').toggleClass('hidden');

	if(!$('loginFormHolder').hasClass('hidden')) {
		$('shadow').removeClass('hidden');
		center('loginFormHolder');
		$('loginInput').focus();
	} else {
		$('shadow').addClass('hidden');
		document.getElementById('errorBox').innerHTML = '&nbsp;';
		$('loginInput').removeClass('errorBack');
		$('passwordInput').removeClass('errorBack');
		$('wrapper').fade('in');
	}

	return true;
}

// Make popup
function popup(id, keepPosition) {	
	if($(id).hasClass('hidden')) {
		$('shadow').removeClass('hidden');
	} else {
		$('shadow').addClass('hidden');
	}

	$(id).toggleClass('hidden');
	if(!keepPosition) center(id)
	
	return true;
}

// Center element on screen
function center(id) {
	var maxWidth = window.getWidth(); 
	var maxHeight = window.getHeight();

	var width = $(id).getSize().x;
	var height = $(id).getSize().y;

	var moveToX = Math.round((maxWidth - width) / 2);
	var moveToY = Math.round((maxHeight - height) / 2);
	
	$(id).style.left = moveToX + document.documentElement.scrollLeft + 'px';
	$(id).style.top = moveToY + document.documentElement.scrollTop + 'px';
	
	return true;
}

// Delete objects in a smooth way
function smoothDelete(id) {
	if(!$(id)) return false;
	
	var m = new Fx.Morph($(id), {duration: 500, transition: Fx.Transitions.linear});
	
	$(id).setStyles({'overflow': 'hidden'});

	m.start({
		'opacity':[1,0],
		'width':[$(id).getSize().x, 0],
		'height':[$(id).getSize().y, 0]
	});
	
	(function () {
		$(id).dispose();
	}).delay(700);	
}

// Gets the cursor position inside input element
function getCPos(ctrl) {
	var caretPos = 0;

	// IE
	if (document.selection) {
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		caretPos = Sel.text.length;
	// Others
	} else if (ctrl.selectionStart || ctrl.selectionStart == 0){
		caretPos = ctrl.selectionStart;
	}

	return caretPos;
}

// Get me a random string
function randomString(iLen) {
	sChrs = "BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
	var maxLen = sChrs.length;
	var sRnd = '';
	
	for (var i=0; i < iLen; i++) { var randomPos = Math.floor(Math.random() * maxLen); sRnd = sRnd + sChrs.substring(randomPos,randomPos + 1); }

	return sRnd;
}

// Sets the cursor position
function setCPos(ctrl, pos) {
	// IE
	if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos, pos);
	// Others
	} else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}

loginHandler = {
	url: '/ajax/auth/',
	
	xml: {
		responseNodes: {
			error: 'error',
			result: 'message',
			redirect: 'redirect'
		},

		parse: function(xmlObj) {
			var xmlNodes = {};
			for (prop in loginHandler.xml.responseNodes){
				xmlNodes[prop] = xmlObj.getElementsByTagName(loginHandler.xml.responseNodes[prop]);
			}
			return xmlNodes;
		}
	},

	showError: function(xmlNodes) {
		inputs = { login: 'loginInput', password: 'passwordInput' };

		document.getElementById('errorBox').innerHTML = '';
		$('loginInput').removeClass('errorBack');
		$('passwordInput').removeClass('errorBack');	
				
		for (var i=0, length = xmlNodes.error.length; i<length; i++){
			if (xmlNodes.error[i].firstChild && xmlNodes.error[i].firstChild.nodeType == 3){
				message = xmlNodes.error[i].firstChild.data;
				target = xmlNodes.error[i].getAttribute('field');
				
				if(document.getElementById('errorBox').innerHTML) document.getElementById('errorBox').innerHTML += '; ';
				else document.getElementById('errorBox').innerHTML = '';
				document.getElementById('errorBox').innerHTML += message;
				$(inputs[target]).addClass('errorBack');
			}
		}
	},
	
	showResult : function (xmlNodes, params) {
		if(xmlNodes.redirect && xmlNodes.redirect.length) {
			document.location = xmlNodes.redirect[0].firstChild.data;
		}
	},
	
	server : {
			sendData : function () {
				var data = 'action=login';
				formData = $('loginForm').toQueryString();
				data += "&" + formData;
				ajaxLoadPost(loginHandler.url, data, loginHandler.server.sendDataOnLoad, window, {});				
			},

			sendDataOnLoad : function (ajaxObj, params) {
				if(ajaxObj && ajaxObj.responseXML) {
					var xmlObj = ajaxObj.responseXML;
					var xmlNodes = loginHandler.xml.parse(xmlObj);

					if(xmlNodes.error && xmlNodes.error.length) {
						loginHandler.showError(xmlNodes);
					}
					
					if(xmlNodes.result && xmlNodes.result.length) {
						loginHandler.showResult(xmlNodes, params);
					}
				}
			}
	}
}