// This file should contain the minimal amount of code
// necessary to initiate the login & signup modal.
// Any additional changes should go into another javascript class
var SD_Modern_LoginSignup = {
    'startLogin': function (modalArgs, customIframeOptions)
    {
        var customModalOptions, url, iframe;

        if (this.useModal(modalArgs))
        {
            customModalOptions = this.extractModalOptions(modalArgs);
            url = this.getLoginPageUrl(modalArgs);
            iframe = this.getIframe(url, customIframeOptions);
            this.buildModal(iframe, customModalOptions);
        }
        else if (typeof modalArgs.action_source != 'undefined')
        {
            document.location = this.baseLoginPageUrl + '?action_source=' + modalArgs.action_source;
        }
        else
        {
            document.location = this.baseLoginPageUrl;
        }
    },

    'startSignup': function (modalArgs, customIframeOptions)
    {
        var customModalOptions, url, iframe, args;

        if (this.useModal(modalArgs))
        {
            customModalOptions = this.extractModalOptions(modalArgs);
            url = this.getSignupPageUrl(modalArgs);
            iframe = this.getIframe(url, customIframeOptions);
            this.buildModal(iframe, customModalOptions);
        }
        else if (typeof modalArgs.action_source != 'undefined')
        {
            args = {
                'action_source': modalArgs.action_source,
            };

            if (modalArgs.redirectUrl)
            {
                args['url'] = modalArgs.redirectUrl;
            }

            if (modalArgs.skipChangeUsername)
            {
                args['skipChangeUsername'] = modalArgs.skipChangeUsername;
            }

            document.location = this.baseSignupPageUrl + '?' + $.param(args);
        }
        else
        {
            document.location = this.baseSignupPageUrl;
        }
    },

    // Everything below this line shouldn't be called or accessed directly

    'containerId': 'simplemodal-container',

    // TODO: Clean up the overlayCss, shouldn't really be in the .js code
    'modalOptions': {
        'containerId': this.containerId,
        'overlayClose': true,
        'overlayCss': {
            'background': '#000'
        },
        'minWidth': 800,
        'minHeight': 750,
        'zIndex': 900000,
        'onShow': function ()
        {
            $('.simplemodal-wrap').css('overflow', 'visible');
        }
    },

    'iframeOptions': {
        'allowtransparency': true,
        'frameborder': 0,
        'height': 800,
        'id': 'loginsignup',
        'scrolling': 'no',
        'width': 800,
    },

    'targetIframeId': 'loginsignup',
    'baseLoginPageUrl': '/forums/login.php',
    'baseSignupPageUrl': '/forums/register.php',

    'buildModal': function (el, customModalOptions)
    {
        $.modal.close();
        $.modal('', $.extend(this.modalOptions, customModalOptions));
        $('#' + this.containerId).html(el);
    },

    'getLoginPageUrl': function (modalArgs)
    {
        return this.baseLoginPageUrl + '?modal=1&modernview=1' + (modalArgs ? '&' + $.param(modalArgs) : '');
    },

    'getSignupPageUrl': function (modalArgs)
    {
        return this.baseSignupPageUrl + '?modal=1&modernview=1' + (modalArgs ? '&' + $.param(modalArgs) : '');
    },

    'isIframeLoaded': function ()
    {
        return (document.getElementById(this.targetIframeId) !== null);
    },

    'isIframeUrl': function (url)
    {
        return (document.getElementById(this.targetIframeId).getAttribute('src') !== url);
    },

    'getIframe': function (url, customIframeOptions)
    {
        if (this.isIframeLoaded() && this.isIframeUrl(url))
        {
            return document.getElementById(this.targetIframeId);
        }

        return this.createIframe(url, customIframeOptions);
    },

    'createIframe': function (url, customIframeOptions)
    {
        var iframe = document.createElement('iframe'),
            options = this.iframeOptions,
            attributeKey;

        iframe.style.background = 'none transparent';

        if (customIframeOptions)
        {
            options = $.extend(options, customIframeOptions);
        }

        options.src = url;

        for (attributeKey in options)
        {
            if (options.hasOwnProperty(attributeKey))
            {
                iframe.setAttribute(attributeKey, options[attributeKey]);
            }
        }

        return iframe;
    },

    'extractModalOptions': function (modalArgs)
    {
        var modalOptions = {};

        if (modalArgs && modalArgs.hasOwnProperty('modalOptions'))
        {
            modalOptions = modalArgs.modalOptions;
            delete modalArgs.modalOptions;
        }

        return modalOptions;
    },

    'useModal': function (modalArgs)
    {
        var useModalActionSources = [
            'SEM Full Registration'
        ];

        if (typeof modalArgs === 'object' && modalArgs.useModal === true)
        {
            return true;
        }

        if (typeof modalArgs.action_source != 'undefined' && useModalActionSources.indexOf(modalArgs.action_source) > -1)
        {
            return true;
        }

        return false;
    }
};

;window.sd_ajax_register = function (signUpArgs)
{
    signUpArgs = signUpArgs || {};

    SD_Modern_LoginSignup.startSignup(signUpArgs);
};

window.sd_ajax_login = function (loginArgs)
{
    loginArgs = loginArgs || {};
    loginArgs.username = '';

    if ($('#dealalerts_subscribe_popup').is(':visible'))
    {
        $('#dealalerts_subscribe_popup').hide();
    }

    // This is necessary to not break backwards compatibility with classic by renaming all of these calls
    // This will also make all the login calls trigger the registration page instead of the login page
    SD_Modern_LoginSignup.startSignup(loginArgs);
};