﻿$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());

                            if (response.RedirectUrl) {
                                window.location.href = response.RedirectUrl;
                            }
                            else {
                                success(response);
                            }
                        }
                        else
                            failure(response);
                    },
                    failure: function(response) {
                        MatchCore.CP.ui_done();
                        failure({ "Messages": [{ Text: "There was a problem submitting your login information."}] });
                    }
                });
            }
            else {
                success({ "Success": true, "Messages": [{ Text: "Already logged in."}] });
            }

        },

        onSuccess: function(handler) {
            _successDelegate.add(handler);
        },

        onFailure: function(handler) {
            _failureDelegate.add(handler);
        }
    };
} ();

