/**
 *	Login
 *	
 *	
 *	@param $settings object
 *
 */
(function($){
	$.fn.login = function(settings) {
		$form = this;
	/**
	 *	Settings
	 *	estende os parametros padrões do plugin
	 *	@object
	 */
		var settings = jQuery.extend({}, $.fn.login.defaults, settings);
	/**
	 *	Runtime
	 *	objeto memoria do estado de execução
	 *	@object
	 */
		var runtime = new Object();
	/**
	 *	Rules
	 *	métodos de validação
	 *	@object
	 */
		var rules = {
			required : function(data){
				return ( data != "" && data != null && typeof data != "undefined" );
			}
		};
	/**
	 *	validate
	 *	valida os campos "usr" e "pwd" do formulário de login
	 *	@return boolean
	 */
		function validate(){
			$usr = $form.find("input[type=text]");
			$pwd = $form.find("input[type=password]");	
			if ( rules.required($usr.val()) === false )
				return displayError(settings.message.usr);
			else if ( rules.required($pwd.val()) === false )
				return displayError(settings.message.pwd);
			else
				return true;
		};
	/**
	 *	displayError
	 *	esconde form, mostra mensagem de erro ao usuário
	 *
	 *	@param $message string
	 *	@return false
	 */
		function displayError(message){
			if ( runtime.message ) {
				$form[settings.effect[0]]();
				runtime.message.find("span").text(message).end()[settings.effect[1]]();
			}
			else {
				$form[settings.effect[0]]();
				runtime.message = $("<p class=\"message error\"><span>"+message+"</span> "+settings.linkWrapper+"</p>").insertAfter($form)[settings.effect[1]]();
				bindReturn();
			}
			return false;
		};
	/**
	 *	bindReturn
	 *	adiciona evento de click no link de retorno ao formulário
	 *
	 *	@return void
	 */
		function bindReturn(){
			runtime.message.find("a").bind("click",function(event){
				event.preventDefault();
				$form[settings.effect[1]]();
				runtime.message[settings.effect[0]]();
			});
		};
	/**
	 *	event.submit
	 *	valida formulário ao ser submetido
	 *
	 *	@return void
	 */
		this.submit(function(event){
			if ( validate() === false ) event.preventDefault();
		});
	/**
	 *	return
	 *	retorna objeto jQuery do formulário, permite encadeamento jQuery
	 */
		return this;
	};
/**
 *	Plugin default parameters
 *	parametros padrões do plugin, permite alteração global:
 *		$.login.defaults = {}
 *	@object
 */
	$.fn.login.defaults = {
		message : {
			usr : "Informe o usuário.",
			pwd : "Informe a senha.",
			fail :"Ocorreu um erro, tente novamente."
		},
		effect : [ "hide", "show" ],
		linkWrapper : "<a href=\"#\" class=\"button voltar\">&raquo; login</a>"
	};
})(jQuery);
