var Login = {
	src_active: 	"/img/layout/header_key_active.png",
	src_inactive: 	"/img/layout/header_key_inactive.png",
	src_processing: "/img/layout/login_processing.gif",
	
	int_processing: null,
	
	user_id:		null,
	username:		'',
	_logged_in:		false,
	marginTop:		-80,
	
	init: function() {
		if( Login.username != '' && Login._logged_in == true ) {
			//Login.setLoggedIn();
			$('login-form').setStyle('margin-top: ' + Login.marginTop + 'px;');
		}
		
		$('key').observe('click', function(e) {
			Login.toggle();
			
			$('search').hide();
			e.stop();
		});
	
		$('login-button').observe('click', function(e) {
			Login.login();
			e.stop();
		});
		
		$('logout').observe('click', function(e) {
			Login.logout();
			e.stop();
		});
	},
	
	isLoggedIn: function() {
		return Login._logged_in;
	},
	
	hide: function() {
		if( $('login').getStyle('display') == 'none' ) return;
		$('login').slideUp({duration: .2});
	
		// If they're logged in, don't do this.
		if( !Login._logged_in ) $('key-image').src = Login.src_inactive;
	},
	
	show: function() {
		$('login').slideDown({duration: .2});
	
		// If they're logged in don't do this
		$('key-image').src = Login.src_active;
	},
	
	toggle: function() {
		if( $('login').getStyle('display') != 'none' ) {
			Login.hide();
		} else {
			Login.show();
		}
	},
	
	processingStart: function() {		
		// Do something
		Layout.loading(true);
	},
	
	processingEnd: function() {
		// Do something
		Layout.loading(false);
	},
	
	login: function() {
		if( Login.isLoggedIn() ) {
			// We need to be loggin out instead
			return Login.logout();
		}
		
		Login.processingStart();
		
		// Clear the errors.
		$('user_name-div').removeClassName('error');
		$('user_password-div').removeClassName('error');
		
		new Ajax.Request('/key/sign-in/format/json', {
			method:		'post',
			onSuccess: 	Login.processLoginResponse,
			parameters: {
				username:	$('user_name').value,
				password:	$('user_password').value
			}
		});
		
		$('user_password').value = '';
	},
	
	logout: function() {
		Login.processingStart();
		
		new Ajax.Request('/key/sign-out/format/json', {
			method:		'post',
			onSuccess: 	Login.processLogoutResponse
		});
	},
	
	setErrors: function() {
		Login._logged_in = false;
		Login.processingEnd();
		$('key-image').src = Login.src_active;
	},
	
	setLoggedIn: function() {
		Login._logged_in = true;
		Login.processingEnd();
		$('key-image').src = Login.src_active;
		$('login-register').hide();
		new Effect.Morph($('login-form'), {
			style: 'margin-top: -80px',
			duration: 0.6,
			afterFinish: Login.waitAndHide
		});
	},
	
	setLoggedOut: function() {
		Login._logged_in = false;
		Login.processingEnd();
		$('key-image').src = Login.src_inactive;
		$('login-register').show();
		new Effect.Morph($('login-form'), {
			style: 'margin-top: 0;',
			duration: 0.6,
			afterFinish: Login.waitAndHide
		});
	},
	
	waitAndHide: function(obj) {
		Login.hideInt = setTimeout(Login.hide, 1000);
		$('login').observe('mouseover', function(e) {
			clearTimeout(Login.hideInt);
		});
	},
	
	processLoginResponse: function(response) {		
		if( response.status == 200 ) {
			var res = response.responseJSON;
			
			if( res.errors ) {
				Login.setErrors();

				// Clear the password
				$('user_password').value = '';
				
				if( res.errors.username.length ) {
					$('user_name-div').addClassName('error');
				} else {
					$('user_name-div').removeClassName('error');
				}
				
				if( res.errors.password.length ) {
					$('user_password-div').addClassName('error');
				} else {
					$('user_password-div').removeClassName('error');
				}
			} else {				
				if( res.logged_in ) {
					Login._logged_in 		= true;
					Login.username			= res.username;
					Login.user_id 			= res.user_id;
					Login.setLoggedIn();
				}
			}
		}
	},
	
	processLogoutResponse: function(response) {
		if( response.status == 200 ) {
			var res = response.responseJSON;
			
			if( res.errors ) {
				// Send them to the page
				document.location = 'key/sign-out';
				return;
			} else {
				Login.username 		= '';
				Login.user_id  		= null;
				Login._logged_in 	= false;
				
				Login.setLoggedOut();
			}
		}
	}
};