﻿$jq.namespace('MatchCore.CP');

$jq(document).ready(function() {
	MatchCore.CP.Login.init();
});

MatchCore.CP.Login = function() {
	var _handle;
	var _password;
	var _rememberMe = false;
	var _failureDelegate = new MatchCore.Delegate();
	var _successDelegate = new MatchCore.Delegate();
	var _busy = false;
	
	var consumeForm = function() {
		_handle = $jq('#formLogin INPUT[@name="handle"]').val();
		_password = $jq('#formLogin INPUT[@name="password"]').val();
		_rememberMe = ($jq('#formLogin INPUT[@name="rememberMe"][@checked]').val() != null);
	}
	
	var failure = function (response) {
		if (_failureDelegate.count() > 0)
			_failureDelegate.fire(response);
		else 
			MatchCore.CP.Messaging.show(response.Messages);
	}
	
	var success = function (response) {
		if (_successDelegate.count() > 0)
			_successDelegate.fire(response);
	}
	
	return {
		init : function(opts) {
			if (opts) {
				if (opts.fail)
					_failureDelegate.add(opts.fail);
					
				if (opts.success)
					_successDelegate.add(opts.success);
			}
				
			$jq('.btnLogin').bind('click', this.submit);
			
			MatchCore.CP.CurrentUser.onReady(function() {
				if (!MatchCore.CP.CurrentUser.LoggedIn() && MatchCore.CP.CurrentUser.Registered()) {
					$jq('#formLogin INPUT[@name="handle"]').val(MatchCore.CP.CurrentUser.Handle());
				}
			});
		},
		
		submit : function() {
			consumeForm();
			var errors = [];
				
			if (_handle == null || _handle == '') {
				errors.push({ Field : "handle", Text : MatchCore.CP.ClientMessages.LoginHandle });
			}
			
			if (_password == null || _password == '') {
				errors.push({ Field : "password", Text : MatchCore.CP.ClientMessages.LoginPassword });
			}
			
			if (errors.length > 0) {
				failure({ "Messages" : errors });
				return;
			}	
			
			var postData = {
				"handle" : _handle,
				"password" : _password,
				"remember" : _rememberMe,
				"sid" : MatchCore.CP.SID(),
				"theme" : MatchCore.CP.Theme()
			};
			
			if (!MatchCore.CP.CurrentUser.LoggedIn()) {
				MatchCore.CP.ui_busy();
				
				MatchCore.CP.Services.invoke({
					method : 'Login',
					data : postData,
					verb : 'POST',
					success : function(response) {
						
						MatchCore.CP.ui_done();
						
						if (response.Success) {
							MatchCore.CP.Services.persistCookies(response);
							
							var loginCount = ($jq.readCookie('IsRegisteredLoginCounter') != null) ? parseInt($jq.readCookie('IsRegisteredLoginCounter')) : 0;
							
							loginCount++;
							
							$jq.createCookie('IsRegisteredLoginCounter', loginCount.toString());
							success(response);
						}
						else
							failure(response);
					},
					failure : function(response) {
						MatchCore.CP.ui_done();
						failure({ "Messages" : [{ Text : "There was a problem submitting your login information." }] });
					}
				});
			}
			else {
				failure({ "Messages" : [{ Text : "You are already logged in" }] });
			}
			
		},
		
		onSuccess : function (handler) {
			_successDelegate.add(handler);
		},
		
		onFailure : function (handler) {
			_failureDelegate.add(handler);
		}
	};
}();

