/**
 * Adds Authentication
 */

(function($) {
	
	$.Authentication = function() {
		
		var keys = [];
		var overlay;
		var ifLoggedEls = $('.ifLogged'); 
		var loginUrl = 'sessions/login';
		var logoutUrl = 'sessions/logout';
		var isAuthenticated = false;
		
		var monitorLogged = function() {
			if (isAuthenticated) {
				
				$.each(ifLoggedEls, function() {
					$(this).removeClass('hide');
				});
			}
			else {
				
				$.each(ifLoggedEls, function() {
					$(this).addClass('hide');
				});
			}
		};
		
		var login = function(username, password) {

			$.ajax({
				url : loginUrl,
				type : 'POST',
				data : {
					'name' : username,
					'password' : password
				},
				complete : function(xhr) {
					isAuthenticated = true;
					overlay[0].parentNode.removeChild(overlay[0]);
					sld.app.alertUpdate(xhr.responseText);
					monitorLogged();
				}
			});
		};
		
		var logout = function() {
			$.ajax({
				url : logoutUrl,
				type : 'GET',
				success : function() {
					isAuthenticated = false;
				},
				complete : function(xhr) {		
					sld.app.alertUpdate(xhr.responseText);
					monitorLogged();
				}
			});
		};
		
		var prompt = function() {
			overlay = sld.overlay({
				width : 500,
				ajax : {
					url : loginUrl
				}
			});
		};
		
		$('#login-submit').live('click', function(e) {
			
			e.preventDefault();
			
			var name = $('#name').val();
			var password = $('#password').val();
			
			login(name, password);
		});
		
		$('#logout').live('click', function(e) {
			e.preventDefault();
			logout();
		});
		
		var test = function(key) {
			switch (keys.length) {
				case 0 : 
					if (key === 108) keys.push(key); 
					break;
				case 1 :
					(key === 111) ? keys.push(key) : keys = [];
					break;
				case 2 :
					(key === 103) ? keys.push(key) : keys = [];
					break;
				case 3 :
					(key === 105) ? keys.push(key) : keys = [];
					break;
				case 4 :
					(key === 110) ?	prompt() : keys = [];
			}
		};
	
		$(window).keypress(function(e){
			test(e.which);
		});
		
		return {
			authenticate : function(boo) {
				isAuthenticated = (boo) ? true : false ;
				monitorLogged();
			}
		};
	}();
})(jQuery);
