var Auth = window.Auth || {};

/**
 *	Ajax methods
 *	Standardixed ways to handle ajax
 */
/* !Auth.Ajax */
Auth.Ajax = {
	_is_init : false,
	
	Init : function() {
		if(Auth.Ajax._is_init == false) {
			Auth.Ajax._is_init = true;
		
			$(".ajax_post_form").on("keypress", function(e) {
				if (e.keyCode == 13) {
					$(".ajax_post", this).trigger("click");
					return false;
				}
			});
		
			$(".ajax_post").on("click", function(elem) {
				var container_selector = $(this).parents(".ajax_post_container");
				var parent_form = $('form', container_selector);
				var params      = parent_form.serialize(),
					route       = parent_form.attr("action"),
					identifier   = parent_form.find('input[name="identifier"]').val();

				/* Trigger a before handler */
				var handler_event_name = Auth.Ajax.GetBeforeHandlerName(identifier);
				$(document).trigger(handler_event_name, [container_selector]);
			
				$.post(route, params, function(data) {
					var response_data = $.parseJSON(data);
					/* Trigger a complete handler */
					var handler_event_name = Auth.Ajax.GetCompleteHandlerName(identifier);
					$(document).trigger(handler_event_name, [container_selector, response_data]);
				});
			
				return false;
			});

		
			/* handlers for password form */
			Auth.Ajax.BindBeforeHandler("password_form", function(event, container_selector) {
				$(container_selector).find('.loading_animation').removeClass('hidden');
			});

			Auth.Ajax.BindCompleteHandler("password_form", function(event, container_selector, response_data) {
				// clear any existing errors
				$('[data-message]').addClass('hidden');
				$('input[name="user_password"]').closest('.text').removeClass('error');

				if(response_data.error.length == 0) {
					document.location.href = $(container_selector).find('input[name="TargetUrl"]').val();
				} else {

					// hide loading animation
					$(container_selector).find('.loading_animation').addClass('hidden');

					// show error message
					$('[data-message]').removeClass('hidden');
					$('[data-error-message]').text(response_data.jdata.ErrorMessage);
					$('input[name="user_password"]').closest('.text').addClass('error');

					// reset password value
					$(container_selector).find('input[name="user_password"]').val('');
				}
			});
		
		}
		
	},
	
	GetBeforeHandlerName : function(identifier) {
		return 'ajax_' + identifier + '_before_handler';
	},

	GetCompleteHandlerName : function(identifier) {
		return 'ajax_' + identifier + '_complete_handler';
	},

	BindBeforeHandler : function(identifier, func_closure) {
		$(document).bind( Auth.Ajax.GetBeforeHandlerName(identifier), func_closure );
	},
	
	BindCompleteHandler : function(identifier, func_closure) {
		$(document).bind( Auth.Ajax.GetCompleteHandlerName(identifier), func_closure );
	}
	
};