﻿(function ($) {

    var g_user;

    var Init = function (o, options) {
        trace('Init');
        var element = $(o);


        var _vmode = 0; // 0:join,1:signin,2:forgot,3:profile,4:forgotpass
        var _status = $('.status:first');

        this.IsValidJoin = function () {
            _vmode = 0;
            _status = $('.join.status').empty();
            return $('#aspnetForm').valid();
        };
        this.IsValidSignin = function () {
            _vmode = 1;
            _status = $('.signin.status').empty();
            return $('#aspnetForm').valid();
        };
        this.IsValidForgot = function () {
            _vmode = 2;
            _status = $('.forgot.status').empty();
            return $('#aspnetForm').valid();
        };
        this.IsValidForgotPass = function () {
            _vmode = 4;
            _status = $('.forgotpass.status').empty();
            return $('#aspnetForm').valid();
        };
        this.IsValidProfile = function () {
            _vmode = 3;
            _status = $('.profile.status').empty();
            return $('#aspnetForm').valid();
        };
        this.setStatus = function (s) {
            if (_status) _status.html(s);
        };

        var defaults = {
            'ApiKey': '2_iE9bm-oD3WcTpjy43oSX5ZU2xjP8R569XnVqTD-Gl7RCKhq5qtEGzuNxa4ZQ88Wv',
            'HomePage': '/Default.aspx',
            'ServicePage': '/mDefault.ashx',
            'AccountPage': '/Users/Account.aspx',
            'LogoutPage': '/Signout.aspx',
            'ForgotPage': '/Password.aspx',
            'DeactivatePage': '/Deactivate.aspx',
            'DefaultClassName': 'slurpee',
            'IsAuth': null,
            'Source': 'Slurpee'
        };

        this.opts = $.extend(defaults, options);

        this.views = 'find signin join auth finished link-account forgot-password';

        $.validator.addMethod('dob', function () {
            var mm = $('#dob_mm').val();
            var dd = $('#dob_dd').val();
            var yyyy = $('#dob_yyyy').val();
            var sdtm = parseInt(mm, 10) + '/' + parseInt(dd, 10) + '/' + parseInt(yyyy, 10);
            var dtm = new Date(sdtm);
            var xdtm = (dtm.getMonth() + 1) + '/' + dtm.getDate() + '/' + dtm.getFullYear();
            return (sdtm == xdtm);
        }, 'Invalid Date of Birth');

        $.validator.addMethod('mobile', function () {
            var mobile_npa = $('#mobile_npa').val();
            var mobile_nxx = $('#mobile_nxx').val();
            var mobile_xxxx = $('#mobile_xxxx').val();

            if (mobile_npa.length > 0 || mobile_nxx.length > 0 || mobile_xxxx.length > 0) {
                return (mobile_npa.length == 3 && mobile_nxx.length == 3 && mobile_xxxx.length == 4);
            }
            return true;
        }, 'Invalid Mobile Number');

        $.validator.addMethod('mobile_flag', function () {
            trace('mobile_flag');
            var mobile_npa = $('#mobile_npa').val();
            var mobile_nxx = $('#mobile_nxx').val();
            var mobile_xxxx = $('#mobile_xxxx').val();
            var is_checked = $('#slurpee_mobile_flag').is(':checked');

            if (is_checked) {
                return (mobile_npa.length == 3 && mobile_nxx.length == 3 && mobile_xxxx.length == 4);
            }
            return true;
        }, 'Mobile Number is required for alerts.');

        this.validator = $('#aspnetForm').validate({
            onsubmit: false,
            onkeyup: false,
            focusInvalid: false,
            errorClass: 'no-error',
            groups: {
                dob: 'dob_mm dob_dd dob_yyyy',
                mobile: 'mobile_npa mobile_nxx mobile_xxxx'
            },
            rules: {
                forgot_email_address: { required: function () { return (_vmode == 2); }, email: function () { return (_vmode == 2); } },
                forgotpass_email_address: { required: function () { return (_vmode == 4); }, email: function () { return (_vmode == 4); } },
                forgotpass_password: { required: function () { return (_vmode == 4); } },
                forgotpass_password_confirm: { required: function () { return (_vmode == 4); }, equalTo: '#forgotpass_password' },
                signin_email_address: { required: function () { return (_vmode == 1); }, email: function () { return (_vmode == 1); } },
                signin_password: { required: function () { return (_vmode == 1); } },
                email_address: { required: function () { return (_vmode == 0); }, email: function () { return (_vmode == 0); } },
                password: { required: function () { return (_vmode == 0); } },
                confirm_password: { required: function () { return (_vmode == 0); }, equalTo: '#password' },
                first_name: { required: function () { return (_vmode == 0); } },
                profile_first_name: { required: function () { return (_vmode == 3); } },
                dob_mm: { required: function () { return (_vmode == 0); }, digits: function () { return (_vmode == 0); }, min: 1, max: 12 },
                dob_dd: { required: function () { return (_vmode == 0); }, digits: function () { return (_vmode == 0); }, min: 1, max: 31 },
                dob_yyyy: { required: function () { return (_vmode == 0); }, digits: function () { return (_vmode == 0); }, min: 1900, max: 2010, dob: function () { return (_vmode == 0); } },
                mobile_npa: { digits: function () { return (_vmode == 0); } },
                mobile_nxx: { digits: function () { return (_vmode == 0); } },
                mobile_xxxx: { digits: function () { return (_vmode == 0); }, mobile: function () { return (_vmode == 0); } },
                slurpee_mobile_flag: { mobile_flag: function () { return (_vmode == 0); } },
                terms_flag: { required: function () { return (_vmode == 0); } },
                captcha: { required: function () { return (_vmode == 0); } }
            },
            messages: {
                forgot_email_address: { required: 'Email Address is required.', email: 'Invalid Email Address' },
                forgotpass_email_address: { required: 'Email Address is required.', email: 'Invalid Email Address' },
                forgotpass_password: { required: 'Password is required.' },
                forgotpass_password_confirm: { required: 'Confirm Password is required.', equalTo: 'Passwords do not match.' },
                signin_email_address: { required: 'Email Address is required.', email: 'Invalid Email Address' },
                signin_password: { required: 'Password is required.' },
                email_address: { required: 'Email Address is required.', email: 'Invalid Email Address' },
                password: { required: 'Password is required.' },
                confirm_password: { required: 'Confirm Password is required.', equalTo: 'Passwords do not match' },
                first_name: { required: 'First Name is required.' },
                profile_first_name: { required: 'First Name is required.' },
                dob_mm: { required: 'Date of Birth is required.', min: 'Invalid Birth Month.', max: 'Invalid Birth Month.' },
                dob_dd: { required: 'Date of Birth is required.', min: 'Invalid Birth Day.', max: 'Invalid Birth Day.' },
                dob_yyyy: { required: 'Date of Birth is required.', min: 'Invalid Birth Year.', max: 'Invalid Birth Year.', dob: 'Invalid Date of Birth.' },
                terms_flag: { required: 'Please accept the terms and conditions.' },
                captcha: { required: 'Captcha code is required.' }
            },
            success: function (label) {
                var id = label.attr('for') + '_error';
                if (_status) _status.find('#' + id).remove();
            },
            errorPlacement: function (label, element) {
                var id = label.attr('for') + '_error';
                if (id == 'dob_error') {
                    //trace(label.html());
                    //trace($(element).attr('name')	);
                }
                if (_status) {
                    if (_status.find('#' + id).length == 0) {
                        _status.append($('<div>').attr('id', id).html(label.html()));
                    } else {
                        _status.find('#' + id).html(label.html());
                    }
                }
            }
        });


        this.conf = { APIKey: this.opts.ApiKey, enabledProviders: 'facebook,google,twitter,yahoo,foursquare,myspace', connectWithoutLoginBehavior: 'alwaysLogin', newUsersPendingRegistration: false };
        window.document.conf = this.conf;

        var params = { onLogin: gigya_Login, onLogout: gigya_Logout, onConnectionAdded: gigya_ConnectionAdded, onConnectionRemoved: gigya_ConnectionRemoved };
        gigya.services.socialize.addEventHandlers(this.conf, params);
        function trimUID() {
            if (g_user && g_user.UID) g_user.UID = g_user.UID.replace('\r', '').replace('\n', '');
        }
        function gigya_ConnectionRemoved(e) {
            trace('gigya_ConnectionRemoved');
            trace(e);
            g_user = e.user;
            trimUID();
            reload_win();
        }
        function gigya_ConnectionAdded(e) {
            trace('gigya_ConnectionAdded');
            trace(e);
            if (e.source != 'showLoginUI') return;  // solves the problem with page refresh on share+authenticate
            g_user = e.user;
            trimUID();
            GigyaConnection();
            reload_win();
        }
        function gigya_Logout(e) {
            trace('gigya_Logout');
            trace(e);
            trace(e.context);
            g_user = null;
            if (e.context) {
                switch (e.context.cmd) {
                    case 'Logout':
                    case 'DisableAccount':
                        var init = element.data('gigya.Init');
                        location.href = init.opts.LogoutPage;
                        break;
                }
            }
        }
        function gigya_Login(e) {
            trace('gigya_Login');
            trace(e.source);
            if (e.source != 'showLoginUI') return;

            g_user = e.user;
            trace(g_user);

            if (!gigya_VerifySig()) {
                g_user = null;
                return;
            }
            trimUID();

            var init = element.data('gigya.Init');

            var UID = g_user.UID;
            var email = g_user.email;
            var facebook_id = null;

            if (g_user && g_user.identities && g_user.identities.facebook) {
                facebook_id = g_user.identities.facebook.providerUID;
            }

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'AutoLogin';
            data.email_address = email;
            data.uid = UID;
            data.user_id = $('#auth_user_id').val();
            data.facebook_id = facebook_id ? facebook_id : '';
            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                trace(data);
                if (data.status == 'success') {
                    location.hash = null;
                    reload_win(0);
                } else {

                    $('.mlogin').each(function (i, o) {
                        var element = $(this);
                        if (data.status_cd == '01') {
                            var i = e.context;
                            element.removeClass(init.views);
                            element.addClass('signin');
                            element.find('#signin_email_address').trigger('focus');
                            element.addClass('link-account');
                            element.find('.provider-name').html(ucfirst(e.user.loginProvider));

                            var displayName = '';
                            var auth_displayname = $('#auth_displayname').val();
                            if (auth_displayname.length > 0) displayName = auth_displayname;
                            if (g_user && g_user.firstName.length > 0) displayName = g_user.firstName;
                            if (g_user && g_user.nickname.length > 0) displayName = g_user.nickname;
                            if (displayName.length > 13) displayName = displayName.substring(0, 10) + '...';

                            element.find('.salutation').html('Hi ' + displayName + '!');
                        } else if (data.status_cd == '02') {
                            init.setStatus(data.error);
                            //location.href = init.opts.DeactivatePage;
                        } else {
                            trace(data.error);
                        }
                    });
                }
            }
            $.ajax(settings);
        }
        function gigya_VerifySig() {
            trace('gigya_VerifySig');
            var init = element.data('gigya.Init');

            var retval = false;

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = false;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'GigyaVerifySig';
            data.uid = g_user.UID;
            data.ts = g_user.signatureTimestamp;
            data.sig = g_user.UIDSignature;

            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    if (data.is_valid == 'True') {
                        retval = true;
                    }
                } else {
                    trace(data.error);
                }
            };
            $.ajax(settings);
            return retval;
        }
        function ucfirst(s) {
            return s.charAt(0).toUpperCase() + s.substr(1);
        }
        function GigyaConnection() {
            var init = element.data('gigya.Init');
            var retval = false;
            var facebook_id = null;

            if (g_user && g_user.identities && g_user.identities.facebook) {
                facebook_id = g_user.identities.facebook.providerUID;
            }

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = false;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'GigyaConnection';
            data.uid = g_user.UID;
            data.user_id = $('#auth_user_id').val();
            data.facebook_id = facebook_id ? facebook_id : '';

            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    retval = true;
                } else {
                    trace(data.error);
                }
            };
            $.ajax(settings);
            return retval;
        }

        // ssl mode checks here
        // the concept is that you have ssl regex expressions on the url
        // secure regex patterns
        // non_secure regex patterns
        // secure takes priority on match
        var non_secure_regex = /\.*/ig;
        var secure_regex = /account\.aspx|register\.aspx|login\.aspx|\#!Join$|#!SignIn$/ig;

        var href = location.href;
        var non_secure = (href.match(non_secure_regex) != null);
        var secure = (href.match(secure_regex) != null);
        var is_ssl = (href.match(/^https:\/\/.*/i) != null);

        trace('href:' + href);
        //trace('non_secure:' + non_secure);
        trace('secure:' + secure);
        trace('is_ssl:' + is_ssl);
        //alert('wait');

        if (secure && !is_ssl) {
            if (href.indexOf('slurpee.integerdallas.com') != -1) { href = href.replace('slurpee.integerdallas.com', 'slurpee.integerdallas.com:446'); }
            location.href = href.replace(/^http:\/\//i, 'https://');
        } else if (non_secure && !secure && is_ssl) {
            if (href.indexOf('slurpee.integerdallas.com:446') != -1) { href = href.replace('slurpee.integerdallas.com:446', 'slurpee.integerdallas.com'); }
            location.href = href.replace(/^https:\/\//i, 'http://');
        }

        gigya.services.socialize.getUserInfo(this.conf, { callback: function (r) { g_user = r.user; trimUID(); trace('g_user.UID:' + g_user.UID); trace(g_user); } });
        var iid = window.setInterval(function () { if (g_user) { $('#menubox').mlogin('menubox'); $('#profile').mlogin('profile'); $('#forgotpass').mlogin('forgotpass'); window.clearInterval(iid); } }, 300);

        element.data('gigya.Init', this);
        return true;
    };

    var MenuBox = function (o) {

        //trace('MenuBox');
        var element = $(o);

        var init = $(document).data('gigya.Init');
        if (!init) init = $(document).gigya('init').data('gigya.Init');

        element.hide();
        element.addClass('mlogin').addClass(init.opts.DefaultClassName);

        function ClearForm(div) {
            div.find('input[type=text],input[type=password]').val('');
            div.find('input[type=checkbox],input[type=radio]').removeAttr('checked');
            div.find('#seven_news_flag').attr('checked', true);
            div.find('#slurpee_news_flag').attr('checked', true);
            div.find('.overlay.one input[type=checkbox]').attr('checked', true);
            div.find('.overlay.one #careers').removeAttr('checked');
            div.find('.overlay.one #franchise_opportunities').removeAttr('checked');

            div.find('select').val('');
            div.find('.status').html('');
        }
        function Forgot(element, sender) {
            var p = $(sender).parent();
            if (p.hasClass('wait')) return;
            p.addClass('wait');

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'Forgot';
            data.email_address = $('#forgot_email_address').val();
            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    element.addClass('finished');
                } else {
                    init.setStatus(data.error);
                }
                p.removeClass('wait');
            };
            $.ajax(settings);
        }
        function Join(element, sender) {

            var p = $(sender).parent();
            if (p.hasClass('wait')) return;

            p.addClass('wait');

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';


            var data = {};
            data.cmd = 'UpdateUser';
            data.uid = g_user.UID;
            data.user_id = $('#auth_user_id').val();
            trace("user_id:" + data.user_id);
            if (data.user_id.length == 0) data.user_id = '00000000-0000-0000-0000-000000000000';

            trace("user_id:" + data.user_id);
            trace("uid:" + data.uid);
            trace("is_guid:" + is_guid(data.user_id));

            var div = element.find('> div.content > div.join-content');

            data.IsApproved = (g_user && g_user.UID.length > 0) ? true : false;
            data.Email = div.find('#email_address').val();
            data.Password = div.find('#password').val();
            data.FirstName = div.find('#first_name').val();
            data.LastName = div.find('#last_name').val();
            data.Address = div.find('#address').val();
            data.City = div.find('#city').val();
            data.State = div.find('#state').val();
            data.Zip = div.find('#zip').val();
            data.BirthMonth = div.find('#dob_mm').val();
            data.BirthDay = div.find('#dob_dd').val();
            data.BirthYear = div.find('#dob_yyyy').val();
            data.MobileNpa = div.find('#mobile_npa').val();
            data.MobileNxx = div.find('#mobile_nxx').val();
            data.MobileXxxx = div.find('#mobile_xxxx').val();
            data.AltEmail = div.find('#alternate_email_address').val();

            data.SevenNews = div.find('#seven_news_flag').is(':checked') ? 1 : 0;
            data.SlurpeeNews = div.find('#slurpee_news_flag').is(':checked') ? 1 : 0;
            data.SlurpeeMobileNews = div.find('#slurpee_mobile_flag').is(':checked') ? 1 : 0;

            var odiv = div.find('.overlay.one');

            data.Exclusive = div.find('#exclusive_promotions').is(':checked') ? 1 : 0;
            data.Games = div.find('#games_and_entertainment').is(':checked') ? 1 : 0;
            data.Food = div.find('#food').is(':checked') ? 1 : 0;
            data.Drinks = div.find('#drinks').is(':checked') ? 1 : 0;
            data.Financial = div.find('#financial_services').is(':checked') ? 1 : 0;
            data.Careers = div.find('#careers').is(':checked') ? 1 : 0;
            data.Franchise = div.find('#franchise_opportunities').is(':checked') ? 1 : 0;

            data.Ethnicity = div.find('#ethnicity').val();

            data.Gender = div.find('#gender_01').is(':checked') ? '01' : div.find('#gender_02').is(':checked') ? '02' : '';
            data.Captcha = div.find('#captcha').val();
            data.Source = init.opts.Source;

            //trace(data);
            //trace(g_user);

            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    _gaq.push(['_trackEvent', 'Membership', 'Click', 'Join Slurpee Nation - Confirmed']);

                    //add gigya share auto popup
                    showShareOnNewRegistration();

                    if (data.is_approved == "true") {
                        if (location.hash == '#!Join' || location.hash == '#!SignIn') location.hash = null;
                        reload_win();
                    } else {
                        element.addClass('finished');
                        element.find('.extended').hide();
                    }
                } else {
                    init.setStatus(data.error);
                }
                p.removeClass('wait');

            };
            $.ajax(settings);
        }
        function JoinMode() {

            if (element.hasClass('signin') && element.hasClass('link-account')) {
                element.find('.signin-content .join.button').trigger('click');
                return;
            }
            if (window.only_click) window.only_click(0);
            ClearForm(element);
            element.removeClass(init.views);
            element.addClass('join');
            init.status = element.find('.join.status');
            //element.addClass('finished'); // for dev only
        }
        function SignInMode() {

            if (window.only_click) window.only_click(0);
            ClearForm(element);
            element.removeClass(init.views);
            element.addClass('signin');
            element.find('#signin_email_address').trigger('focus');
            init.status = element.find('.signin.status');
            if (false) { // link-account for dev only
                element.addClass(function () {
                    if (g_user) element.find('.provider-name').html(ucfirst(g_user.loginProvider));
                    var displayName = '';
                    var auth_displayname = $('#auth_displayname').val();
                    if (auth_displayname.length > 0) displayName = auth_displayname;
                    if (g_user && g_user.firstName.length > 0) displayName = g_user.firstName;
                    if (g_user && g_user.nickname.length > 0) displayName = g_user.nickname;
                    if (displayName.length > 13) displayName = displayName.substring(0, 10) + '...';
                    element.find('.salutation').html('Hi ' + displayName + '!');
                    return 'link-account';
                });
            }
            if (false) { // forgot-password for dev only
                if (window.only_click) window.only_click(0);
                ClearForm(element);
                element.removeClass(init.views);
                element.addClass('signin');
                init.status = element.find('.forgot.status');
                element.addClass('forgot-password');
                element.find('#forgot_email_address').trigger('focus');
            }


        }
        element.find('.find-button').click(function () {
            if (window.only_click) window.only_click(0);
            ClearForm(element);
            element.removeClass(init.views);
            element.addClass('find');
            init.status = null;
        });
        element.find('.join-button').click(function () {
            // event tracking
            _gaq.push(['_trackEvent', 'Membership', 'Click', 'Join Slurpee Nation - Initial']);
            if (location.href.match(/^https:\/\//) != null) {
                JoinMode();
            } else {
                var href = location.href.replace(/^http:\/\//i, 'https://');
                href = href.replace(location.hash, '');
                if (href.substr(href.length - 1, 1) == '#') href = href.substring(0, href.length - 1);
                if (href.indexOf('slurpee.integerdallas.com') != -1) { href = href.replace('slurpee.integerdallas.com', 'slurpee.integerdallas.com:446'); }
                if (href.indexOf('#!Join') == -1) href = href + '#!Join';
                location.href = href;
            }
        });
        element.find('.signin-button').click(function () {
            // event tracking
            _gaq.push(['_trackEvent', 'Membership', 'Click', 'Sign In - Initial']);
            if (location.href.match(/^https:\/\//) != null) {
                SignInMode();
            } else {
                var href = location.href.replace(/^http:\/\//i, 'https://');
                href = href.replace(location.hash, '');
                if (href.substr(href.length - 1, 1) == '#') href = href.substring(0, href.length - 1);
                if (href.indexOf('slurpee.integerdallas.com') != -1) { href = href.replace('slurpee.integerdallas.com', 'slurpee.integerdallas.com:446'); }
                if (href.indexOf('#!SignIn') == -1) href = href + '#!SignIn';
                location.href = href;
            }
        });
        element.find('.forgot.link').click(function () {
            // event tracking
            _gaq.push(['_trackEvent', 'Membership', 'Click', 'Forgot Password']);
            if (window.only_click) window.only_click(0);
            ClearForm(element);
            element.removeClass(init.views);
            element.addClass('signin');
            init.status = element.find('.forgot.status');
            element.addClass('forgot-password');
            element.find('#forgot_email_address').trigger('focus');
        });
        element.find('.gigya-connections').each(function (i, o) {
            var id = $(this).attr('id');
            var params = { showEditLink: false, showTermsLink: false, height: 30, width: 210, containerID: id };
            if ($(this).hasClass('gigya-small')) {
                params.height = 17;
                params.width = 127;
            }
            if ($(this).hasClass('gigya-edit')) {
                params.width = 240;
            }
            gigya.services.socialize.showAddConnectionsUI(init.conf, params)
        });
        element.find('.connections-edit').click(function (e) {
            var params = { showTermsLink: 'false', onLoad: function () { trace('loaded'); } };
            gigya.services.socialize.showEditConnectionsUI(init.conf, params);
        });
        element.find('.gigya-login').each(function (i, o) {
            var id = $(this).attr('id');
            var params = { showTermsLink: 'false', height: 30, width: 210, containerID: id, pendingRegistration: false };
            if ($(this).hasClass('gigya-small')) {
                params.height = 17;
                params.width = 127;
            }
            gigya.services.socialize.showLoginUI(init.conf, params);
        });
        element.find('.required,.legend').each(function (i, o) {
            var div = $('<div>').addClass('asterisk');
            $(this).append(div);
        });
        element.find('.seveneleven.customize.link').click(function () {
            element.find('.overlay').fadeOut(100);
            var t = element.find('.overlay.one').css('top');
            var h = element.find('> div.content').height() - parseInt(t) - 15;
            element.find('.overlay.one').css({ 'height': h + 'px' }).fadeIn(100);
        });
        element.find('.slurpee.customize.link').click(function () {
            element.find('.overlay').fadeOut(100);
            var t = element.find('.overlay.two').css('top');
            var h = element.find('> div.content').height() - parseInt(t) - 15;
            element.find('.overlay.two').css({ 'height': h + 'px' }).fadeIn(100);
        });
        element.find('.learn.link').click(function () {
            element.find('.overlay').fadeOut(100);
            var t = element.find('.overlay.three').css('top');
            var h = element.find('> div.content').height() - parseInt(t) - 15;
            element.find('.overlay.three').css({ 'height': h + 'px' }).fadeIn(100);
        });
        element.find('.terms.link').click(function () {
            element.find('.overlay').fadeOut(100);
            var t = element.find('.overlay.four').css('top');
            var h = element.find('> div.content').height() - parseInt(t) - 15;
            element.find('.overlay.four .tos').css({ 'height': (h - 47) + 'px' });
            element.find('.overlay.four').css({ 'height': h + 'px' }).fadeIn(100);
        });
        element.find('.why.link').click(function () {
            element.find('.overlay').fadeOut(100);
            var t = element.find('.overlay.five').css('top');
            var h = element.find('> div.content').height() - parseInt(t) - 15;
            element.find('.overlay.five').css({ 'height': h + 'px' }).fadeIn(100);
        });
        element.find('.overlay .close.link').click(function () {
            element.find('.overlay').fadeOut(100);
        });
        element.find('.overlay.one .ok.button').click(function () {
            element.find('.overlay').fadeOut(100);
        });
        element.find('.cancel.button').click(function () {
            element.find('.extended').hide();
            element.removeClass(init.views);
            element.addClass('find');
        });
        element.find('.finished-content .close.button').click(function () {
            element.removeClass(init.views);
            element.addClass('find');
        });
        element.find('.button').mousedown(function () {
            $(this).addClass('down');
        }).mouseup(function () {
            $(this).removeClass('down');
        });
        element.find('.signout.link').click(function () {
            element.find('.hover').fadeOut(100);
            if (element.hasClass('slurpee')) {
                element.find('> .footer').show();
            }

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = false;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'Logout';
            data.uid = g_user.UID;

            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    var params = { forceProvidersLogout: false, context: { 'cmd': 'Logout'} };
                    gigya.services.socialize.logout(init.conf, params);
                } else {
                    //trace(data.error);
                }
            };
            $.ajax(settings);

        });
        element.find('.account.link').click(function () {
            location.href = init.opts.AccountPage;
        });
        element.find('.auth-button').bind('mouseenter click', function () {
            element.find('.hover').fadeIn(100, function () {
                if (element.hasClass('slurpee')) {
                    element.find('> .footer').hide();
                }
            });
        });
        element.find('.hover').mouseleave(function () {
            element.find('.hover').fadeOut(100);
            if (element.hasClass('slurpee')) {
                element.find('> .footer').show();
            }
        });
        element.mouseleave(function () {
            element.find('.hover').fadeOut(100);
            if (init.opts.DefaultClassName == 'slurpee') {
                element.find('> .footer').show();
            }
        });
        element.find('.signin.button').click(function () {
            if (init.IsValidSignin()) {
                var p = $(this).parent();
                if (p.hasClass('wait')) return;

                p.addClass('wait');

                var params = { forceProvidersLogout: false, context: { 'cmd': 'Login'} };
                gigya.services.socialize.logout(init.conf, params);

                var email_address = $('#signin_email_address').val();
                var password = $('#signin_password').val();
                var settings = {};
                settings.url = init.opts.ServicePage;
                settings.cache = false;
                settings.async = false;
                settings.dataType = 'json';

                var data = {};
                data.cmd = 'Login';
                data.email_address = email_address;
                data.password = password;

                if (g_user) {
                    data.uid = g_user.UID;
                    data.ts = g_user.signatureTimestamp;
                    data.sig = g_user.UIDSignature;
                }

                settings.data = data;

                settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
                settings.success = function (data, textStatus, XMLHttpRequest) {
                    if (data.is_valid) {
                        /* Google event Tracking */
                        _gaq.push(['_trackEvent', 'Membership', 'Click', 'Sign In - Confirmed']);
                        if (location.hash == '#!Join' || location.hash == '#!SignIn') location.hash = null;
                        reload_win();
                    } else {
                        init.setStatus('Invalid credentials');
                        p.removeClass('wait');
                    }
                };
                $.ajax(settings);
            }
        });
        element.find('#forgot_email_address').keypress(function (e) {
            if (e.which == 13) element.find('.submit.button').trigger('click');
        });
        element.find('#signin_email_address, #signin_password').keypress(function (e) {
            if (e.which == 13) element.find('.signin.button').trigger('click');
        });
        element.find('.join-content .join.button').click(function () {
            if (init.IsValidJoin()) {
                Join(element, this);
            }
        });
        element.find('.signin-content .submit.button').click(function () {
            if (init.IsValidForgot()) {
                Forgot(element, this);
            }
        });
        element.find('.signin-content .join.button').click(function () {
            element.removeClass(init.views);
            element.addClass('link-account').addClass('join');
            if (g_user) {
                if (g_user.email.length > 0) element.find('#email_address').val(g_user.email).trigger('blur');
                if (g_user.firstName.length > 0) element.find('#first_name').val(g_user.firstName).trigger('blur');
                if (g_user.birthDay.length > 0) element.find('#dob_dd').val(g_user.birthDay).trigger('blur');
                if (g_user.birthMonth.length > 0) element.find('#dob_mm').val(g_user.birthMonth).trigger('blur');
                if (g_user.birthYear.length > 0) element.find('#dob_yyyy').val(g_user.birthYear).trigger('blur');
            }
        });
        element.find('#forgot-password').each(function (i, o) {
            var felement = $(this);
            felement.find('.submit.button').click(function () {
                var email_address = felement.find('#email_address').val();
                var retval = null;
                var settings = {};
                settings.url = init.opts.ServicePage;
                settings.cache = false;
                settings.async = true;
                settings.dataType = 'json';

                var data = {};
                data.cmd = 'Forgot';
                data.email_address = email_address;
                settings.data = data;

                settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
                settings.success = function (data, textStatus, XMLHttpRequest) {
                    if (data.status == "success") {
                        felement.html('<h2>Success</h2><div>Sweet! Your password has been sent. You can check your email now. <a href="./">Home Page</a></div>');
                    } else {
                        felement.html('<h2>Whoops</h2><div>' + data.error + '</div>');
                    }
                };
                $.ajax(settings);
            });
        });
        element.find('#mobile_npa,#mobile_nxx,#mobile_xxxx').keyup(function (e) {
            var npa = $('#mobile_npa').val();
            var nxx = $('#mobile_nxx').val();
            var xxxx = $('#mobile_xxxx').val();
            if (npa.length == 3 && nxx.length == 3 && xxxx.length == 4) {
                element.find('#slurpee_mobile_flag').attr('checked', true);
            } else {
                element.find('#slurpee_mobile_flag').removeAttr('checked');
            }
        });
        element.find('#mobile_npa,#mobile_nxx,#mobile_xxxx,#dob_mm,#dob_dd,#dob_yyyy').DigitsOnly().placeholder();
        element.find('.captcha-refresh').click(function () {
            var dtm = new Date();
            var src = '/mcaptcha.aspx?n=' + (dtm - 0);
            element.find('.captcha-image img').attr('src', src);
        });

        if (init.opts.isAuth == null) init.opts.isAuth = ($('#is_auth').val() == 'True');
        if (init.opts.isAuth) {

            // now first it may come from gigya
            // but gigya will only have it in session
            // if there is no guser in session then use Membership.UserName - displayname will take took long to get
            // if there is no gigya then hide all the social stuff from the profile hover
            var pdiv = element.find('.hover .photo').parent();
            if (g_user && g_user.thumbnailURL.length > 4) pdiv.html($('<img>').attr('src', g_user.thumbnailURL).css({ 'width': '50px', 'height': '50px' }));
            else pdiv.html($('<img>').attr('src', '/images/profile-nophoto.png').css({ 'width': '50px', 'height': '50px' }));

            var displayName = 'Account';
            var auth_displayname = $('#auth_displayname').val();
            if (auth_displayname.length > 0) displayName = auth_displayname;
            if (g_user && g_user.firstName.length > 0) displayName = g_user.firstName;
            if (g_user && g_user.nickname.length > 0) displayName = g_user.nickname;

            var pName = displayName;
            if (pName.length > 13) pName = pName.substring(0, 10) + '...';
            pdiv.append($('<div>').addClass('name').html(pName));

            element.find('.salutation').html('Hi ' + auth_displayname + '!');
        }

        var className = init.opts.isAuth ? 'auth' : 'find';
        element.addClass(className);
        element.fadeIn(100);

        if (location.hash == '#!Join') JoinMode();
        else if (location.hash == '#!SignIn') SignInMode();

        element.data('gigya.MenuBox', this);
        return true;
    };

    var ForgotPass = function (o) {
        //trace('ForgotPass');

        var element = $(o);
        element.hide();
        element.addClass('mpassword');

        var init = $(document).data('gigya.Init');

        element.find('.submit.button').click(function () {
            if (init.IsValidForgotPass()) {

                var settings = {};
                settings.url = init.opts.ServicePage;
                settings.cache = false;
                settings.async = false;
                settings.dataType = 'json';

                var data = {};
                data.cmd = 'ResetPassword';
                data.email = $('#forgotpass_email_address').val();
                data.password = $('#forgotpass_password').val();
                data.erid = $('#erid').val();

                settings.data = data;

                settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
                settings.success = function (data, textStatus, XMLHttpRequest) {
                    if (data.status == 'success') {
                        element.addClass('finished');
                        element.find('.continue.link').attr('href', init.opts.HomePage + '?SignIn=1');
                    } else {
                        init.setStatus(data.error);
                        p.removeClass('wait');
                    }
                };
                $.ajax(settings);
            }
        });
        element.find('.button').mousedown(function () {
            $(this).addClass('down');
        }).mouseup(function () {
            $(this).removeClass('down');
        });
        element.find('#forgotpass_email_address,#forgotpass_password,#forgotpass_password_confirm').keypress(function (e) {
            if (e.which == 13) element.find('.submit.button').trigger('click');
        });

        element.fadeIn(100);
        element.data('gigya.ForgotPass', this);
        return true;
    };

    var Profile = function (o) {

        var element = $(o);

        var init = $(document).data('gigya.Init');
        if (!init) init = $(document).gigya('init').data('gigya.Init');

        element.hide();
        element.addClass('mprofile').addClass(init.opts.DefaultClassName);

        function GetPoints(div) {
            GetLeaderboard(div);
        }
        function GetUserId(uid) {
            var retval = null;
            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = false;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'GetUserId';
            data.uid = uid;
            settings.data = data;

            settings.beforeSend = function (XMLHttpRequest, settings) { };
            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    retval = data.user_id;
                } else if (data.status == 'error' && data.status_cd == '02') {
                    retval = 'DNE';
                }
            };
            $.ajax(settings);
            return retval;
        }
        function GetUserPoints(uid) {

            var user_id = $('#auth_user_id').val();
            var mode = 0; // 0 = earned, 1 = spent , 2 = balance
            if (arguments.length > 1) mode = arguments[1];

            var retval = 0;
            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = false;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'GetPoints';
            if (uid.length > 0) data.uid = uid;
            if (user_id.length > 0) data.user_id = user_id;
            data.mode = mode;
            settings.data = data;

            settings.beforeSend = function (XMLHttpRequest, settings) { };
            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    retval = data.points;
                }
            };
            $.ajax(settings);
            return retval;
        }
        function GetTransactions(div) {
            if (g_user) {
                var settings = {};
                settings.url = init.opts.ServicePage;
                settings.cache = false;
                settings.async = true;
                settings.dataType = 'json';

                var data = {};
                data.cmd = 'GetTransactions';
                data.user_id = $('#auth_user_id').val();
                data.imax = 500;
                settings.data = data;

                $('.transactions-btm .items').html($('<div>').addClass('loading'));
                settings.beforeSend = function (XMLHttpRequest, settings) { };
                settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
                settings.success = function (data, textStatus, XMLHttpRequest) {
                    if (data.status == 'success') {
                        g_transactions = data.items;
                        g_redeemed_transactions = [];
                        g_earned_transactions = [];
                        for (var i = 0; i < g_transactions.length; i++) if (g_transactions[i].type == 'credit') g_earned_transactions[g_earned_transactions.length] = g_transactions[i];
                        for (var i = 0; i < g_transactions.length; i++) if (g_transactions[i].type == 'debit') g_redeemed_transactions[g_redeemed_transactions.length] = g_transactions[i];
                        $('.transactions-btm .redeemed .pager').pagination(g_redeemed_transactions.length, { separator: '/', prev_text: 'Prev', next_text: 'Next', items_per_page: 5, callback: TransactionsPage });
                        $('.transactions-btm .earned .pager').pagination(g_earned_transactions.length, { separator: '/', prev_text: 'Prev', next_text: 'Next', items_per_page: 5, callback: TransactionsPage });

                        if (g_earned_transactions.length > 0) {
                            $('.transactions-btm .earned').prepend($('<div>').addClass('header').append($('<div>').addClass('name').html('Item')).append($('<div>').addClass('points').html('Points')).append($('<div>').addClass('date').html('Date')));
                            var sender = $('.transactions-btm .earned .pager');
                            TransactionsPage(0, sender);
                        } else {
                            $('.transactions-btm .earned .items').html($('<div>').addClass('item').append($('<div>').addClass('no-results').html('No results found.')));
                        }

                        if (g_redeemed_transactions.length > 0) {
                            $('.transactions-btm .redeemed').prepend($('<div>').addClass('header').append($('<div>').addClass('name').html('Item')).append($('<div>').addClass('points').html('Points')).append($('<div>').addClass('date').html('Date')));
                            var sender = $('.transactions-btm .redeemed .pager');
                            TransactionsPage(0, sender);
                        } else {
                            $('.transactions-btm .redeemed .items').html($('<div>').addClass('item').append($('<div>').addClass('no-results').html('No results found.')));
                        }

                    }
                };
                $.ajax(settings);
            }
        }
        function TransactionsPage(index, sender) {
            var pager = $(sender);
            var div = pager.parent();
            var items_div = div.find('.items').empty();
            var items = div.hasClass('redeemed') ? g_redeemed_transactions : g_earned_transactions;

            var page_id = index;
            var page_size = 5;

            for (var i = 0; i < page_size; i++) {
                var ii = ((page_id) * page_size) + i;
                if (items.length > ii) {
                    var item = items[ii];
                    var item_title = item.title;

                    if (item.url && item.url.length > 0) {
                        //trace(item_title);
                        item_title = $('<a>').attr('href', item.url).html(item_title);
                    }

                    items_div.append($('<div>').addClass('item').append($('<div>').addClass('name').html(item_title)).append($('<div>').addClass('points').html(item.points)).append($('<div>').addClass('date').html(item.date)));
                }
            }
        }
        function GetLeaderboard(div) {
            var lfs = [];
            var params = { detailLevel: 'basic', callback: function (data) {
                var items = [];
                if (data.status == 'OK') {
                    var friends = data.friends.arr;

                    for (var i = 0; i < friends.length; i++) {
                        var friend = friends[i];
                        friend.UID = friend.UID.replace('\r', '').replace('\n', '');
                        if (friend.isSiteUser || is_guid(friend.UID)) {
                            friend.points = GetUserPoints(friend.UID, 2);
                            items[items.length] = friend;
                            if (items.length > 10) break;
                        }
                        if (friend.isSiteUser) {
                            var lf = {};
                            lf.name = friend.nickname;
                            lf.UID = friend.UID;
                            //lf.identities = friend.identities;
                            lf.UserID = GetUserId(friend.UID);
                            lf.isSiteUser = friend.isSiteUser;
                            lf.isSiteUID = friend.isSiteUID;
                            lf.points = friend.points;
                            lfs[lfs.length] = lf;
                        }
                    }
                }

                var points = 0;

                if (g_user) {
                    var nickname = 'You';
                    var displayName = $('#auth_displayname').val();
                    if (displayName.length > 0) nickname = displayName;
                    if (g_user.nickname.length > 0) nickname = g_user.nickname;
                    points = GetUserPoints(g_user.UID, 2);
                    var auser = { 'nickname': nickname, 'points': points, 'isAuthUser': true };
                    items[items.length] = auser;
                }

                div.find('.points').html(points);

                items.sort(function (a, b) { return (b.points - a.points); });
                lfs.sort(function (a, b) { return (b.points - a.points); });

                //trace('All Friends');
                for (var i = 0; i < lfs.length; i++) { trace(lfs[i]); }

                var ldiv = div.find('.leaderboard');
                var hdiv = $('<div>').addClass('header').addClass('name').append('Name').append($('<div>').addClass('earned').html('Earned'));
                ldiv.append(hdiv);

                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    var ndiv = $('<div>').addClass('name').append(item.nickname).append($('<div>').addClass('earned').html(item.points));
                    if (item.isAuthUser) ndiv.addClass('selected');
                    ldiv.append(ndiv);
                    if (i > 7) break;
                }
                setTimeout(function () { GetTransactions(div); }, 1300);
            }
            };
            gigya.services.socialize.getFriendsInfo(init.conf, params)
        }
        function ChangePassword(div) {
            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'ChangePassword';
            data.user_id = $('#auth_user_id').val();
            data.old_password = div.find('#old_password').val();
            data.new_password = div.find('#new_password').val();
            data.confirm_password = div.find('#confirm_password').val();
            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    div.find('.error').html('');
                    div.find('.inform').html('Your password has been changed.').show();
                    div.find('#old_password').val('');
                    div.find('#new_password').val('');
                    div.find('#confirm_password').val('');
                } else {
                    div.find('.password.status').html(data.error);
                }
            };
            $.ajax(settings);
        }
        function DisableAccount(div) {
            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'DisableAccount';
            data.user_id = $('#auth_user_id').val();
            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    div.find('.inform').html('Your account has been deactivated. You will not be logged out of the system').show();
                    window.setTimeout(function () {
                        var params = { forceProvidersLogout: false, context: { 'cmd': 'DisableAccount'} };
                        gigya.services.socialize.logout(init.conf, params);
                    }, 3667);
                } else {
                    trace(data.error);
                }
            };
            $.ajax(settings);
        }
        function SaveProfile(div) {
            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'UpdateUser';
            data.user_id = $('#auth_user_id').val();

            if (data.user_id.length == 0) return;

            //trace("user_id:" + data.user_id);
            //trace("is_guid:" + is_guid(data.user_id));

            data.IsApproved = (g_user && g_user.UID.length > 0) ? true : false;
            data.Email = div.find('#email_address').val();
            data.Password = div.find('#password').val();
            data.FirstName = div.find('#profile_first_name').val();
            data.LastName = div.find('#last_name').val();
            data.Address = div.find('#address').val();
            data.City = div.find('#city').val();
            data.State = div.find('#state').val();
            data.Zip = div.find('#zip').val();
            data.BirthMonth = div.find('#dob_mm').html();
            data.BirthDay = div.find('#dob_dd').html();
            data.BirthYear = div.find('#dob_yyyy').html();
            data.MobileNpa = div.find('#mobile_npa').val();
            data.MobileNxx = div.find('#mobile_nxx').val();
            data.MobileXxxx = div.find('#mobile_xxxx').val();
            data.AltEmail = div.find('#alternate_email_address').val();


            data.SevenNews = div.find('#seven_news_flag').is(':checked') ? 1 : 0;
            data.SlurpeeNews = div.find('#slurpee_news_flag').is(':checked') ? 1 : 0;
            data.SlurpeeMobileNews = div.find('#slurpee_mobile_flag').is(':checked') ? 1 : 0;

            var odiv = div.find('.overlay.one');

            data.Exclusive = div.find('#exclusive_promotions').is(':checked') ? 1 : 0;
            data.Games = div.find('#games_and_entertainment').is(':checked') ? 1 : 0;
            data.Food = div.find('#food').is(':checked') ? 1 : 0;
            data.Drinks = div.find('#drinks').is(':checked') ? 1 : 0;
            data.Financial = div.find('#financial_services').is(':checked') ? 1 : 0;
            data.Careers = div.find('#careers').is(':checked') ? 1 : 0;
            data.Franchise = div.find('#franchise_opportunities').is(':checked') ? 1 : 0;

            data.Ethnicity = div.find('#ethnicity').val();

            data.Gender = div.find('#gender').val();

            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                //trace(data);
                if (data.status == 'success') {
                    $('.inform').html('Your profile has been saved.').show();

                    var np = 0;
                    var fields = div.find('input[type=text],select').not('#old_password,#new_password,#confirm_password');
                    for (var i = 0; i < fields.length; i++) if ($(fields[i]).val().length > 0) np += (1 / fields.length);
                    np = parseInt(np * 100, 10);
                    div.find('.greeting-copy').html('Your profile is ' + np + '% complete.');


                } else {
                }
            };
            $.ajax(settings);
        }
        function ImageInfo(img) {
            var retval = { width: 200, height: 200 }
            if (img.attr('src') != '/images/profile-nophoto.png') {
                var settings = {};
                settings.url = init.opts.ServicePage;
                settings.cache = false;
                settings.async = false;
                settings.dataType = 'json';

                var data = {};
                data.cmd = 'ImageInfo';
                data.img_src = img.attr('src');
                settings.data = data;

                settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
                settings.success = function (data, textStatus, XMLHttpRequest) {
                    if (data.status == 'success') {
                        retval.width = data.width;
                        retval.height = data.height;
                    }
                };
                $.ajax(settings);
            }
            return retval;
        }
        function GetProfile(div) {
            //trace('GetProfile');

            div.find('input[type=text],input[type=password]').val('');
            div.find('input[type=checkbox],input[type=radio]').removeAttr('checked');
            div.find('select').val('');

            var settings = {};
            settings.url = init.opts.ServicePage;
            settings.cache = false;
            settings.async = true;
            settings.dataType = 'json';

            var data = {};
            data.cmd = 'GetProfile';
            data.user_id = $('#auth_user_id').val();
            settings.data = data;

            settings.error = function (XMLHttpRequest, textStatus, errorThrown) { trace('Error'); trace(textStatus); trace(errorThrown); };
            settings.success = function (data, textStatus, XMLHttpRequest) {
                if (data.status == 'success') {
                    //trace(data);
                    var prof = data.profile;
                    var email_display = data.email;
                    if (email_display.length > 23) email_display = email_display.substr(0, 23) + '...';

                    div.find('#email_address').html(email_display);
                    div.find('#profile_first_name').val(prof.FirstName);
                    div.find('#last_name').val(prof.LastName);
                    div.find('#address').val(prof.Address);
                    div.find('#city').val(prof.City);
                    div.find('#state').val(prof.State);
                    div.find('#zip').val(prof.Zip);
                    div.find('#dob_mm').html(prof.BirthMonth);
                    div.find('#dob_dd').html(prof.BirthDay);
                    div.find('#dob_yyyy').html(prof.BirthYear);
                    div.find('#mobile_npa').val(prof.MobileNpa);
                    div.find('#mobile_nxx').val(prof.MobileNxx);
                    div.find('#mobile_xxxx').val(prof.MobileXxxx);
                    div.find('#alternate_email_address').val(prof.AltEmail);

                    div.find('.greeting').html('Hello, ' + prof.FirstName);


                    if (prof.SevenNews) div.find('#seven_news_flag').attr('checked', true);
                    if (prof.SlurpeeNews) div.find('#slurpee_news_flag').attr('checked', true);
                    if (prof.SlurpeeMobileNews) div.find('#slurpee_mobile_flag').attr('checked', true);

                    var pdiv = div.find('.photo');
                    var img = $('<img>');

                    if (g_user && g_user.photoURL.length > 4) img.attr('src', g_user.photoURL);
                    else img.attr('src', '/images/profile-nophoto.png');

                    // now handle the height, width, position
                    var inf = ImageInfo(img);
                    //trace(inf);

                    var height_max = 170;
                    var width_max = 130;

                    if (inf.width >= inf.height) {
                        if (inf.width > width_max) {
                            inf.height = inf.height * width_max / inf.width;
                            inf.width = width_max;
                        }
                    } else {
                        if (inf.height > height_max) {
                            inf.width = inf.width * height_max / inf.height;
                            inf.height = height_max;
                        }
                    }
                    inf.top = parseInt((height_max - inf.height) / 2) + 10;
                    inf.left = parseInt((width_max - inf.width) / 2) + 10;

                    img.css({ 'top': inf.top + 'px', 'left': inf.left + 'px', 'width': inf.width + 'px', 'height': inf.height + 'px' });

                    pdiv.html(img);


                    var odiv = div.find('.overlay.one');

                    if (prof.Exclusive) div.find('#exclusive_promotions').attr('checked', true);
                    if (prof.Games) div.find('#games_and_entertainment').attr('checked', true);
                    if (prof.Food) div.find('#food').attr('checked', true);
                    if (prof.Drinks) div.find('#drinks').attr('checked', true);
                    if (prof.Financial) div.find('#financial_services').attr('checked', true);
                    if (prof.Careers) div.find('#careers').attr('checked', true);
                    if (prof.Franchise) div.find('#franchise_opportunities').attr('checked', true);

                    var ini = 0;
                    if (prof.Exclusive) ini |= 1;
                    if (prof.Games) ini |= 2;
                    if (prof.Food) ini |= 4;
                    if (prof.Drinks) ini |= 8;
                    if (prof.Financial) ini |= 16;
                    if (prof.Careers) ini |= 32;
                    if (prof.Franchise) ini |= 64;
                    odiv.data('ini', ini);

                    if (ini == 127) odiv.find('#select_all').attr('checked', true);

                    div.find('#ethnicity').val(prof.Ethnicity);
                    div.find('#gender').val(prof.Gender);

                    var np = 0;
                    var fields = div.find('input[type=text],select').not('#old_password,#new_password,#confirm_password');
                    for (var i = 0; i < fields.length; i++) if ($(fields[i]).val().length > 0) np += (1 / fields.length);
                    np = parseInt(np * 100, 10);
                    div.find('.greeting-copy').html('Your profile is ' + np + '% complete.');


                }
                GetPoints(div);
            };
            $.ajax(settings);
        }
        element.find('.required,.legend').each(function (i, o) {
            var div = $('<div>').addClass('asterisk');
            $(this).append(div);
        });
        element.find('.gigya-connections').each(function (i, o) {
            var id = $(this).attr('id');
            var params = { showEditLink: false, showTermsLink: false, height: 30, width: 210, containerID: id };
            if ($(this).hasClass('gigya-small')) {
                params.height = 17;
                params.width = 127;
            }
            if ($(this).hasClass('gigya-edit')) {
                params.width = params.width + 10;
            }
            gigya.services.socialize.showAddConnectionsUI(init.conf, params)
        });
        element.find('.connections-edit').click(function (e) {
            var params = { showTermsLink: 'false', onLoad: function () { trace('loaded'); } };
            gigya.services.socialize.showEditConnectionsUI(init.conf, params);
        });
        element.find('.gigya-login').each(function (i, o) {
            var id = $(this).attr('id');
            var params = { showTermsLink: 'false', height: 30, width: 210, containerID: id, pendingRegistration: false };
            if ($(this).hasClass('gigya-small')) {
                params.height = 17;
                params.width = 127;
            }
            gigya.services.socialize.showLoginUI(init.conf, params);
        });
        element.find('.points').click(function () {
            window.open('http://www.slurpee.com/rewards');
        });
        element.find('.learn').click(function () {
            var w = 458;
            var h = element.find('.overlay.three').parent().height();
            element.find('.overlay').hide();
            element.find('.overlay.three').css({ 'width': w + 'px', 'height': h + 'px' }).fadeIn('fast');
        });
        element.find('.seveneleven.customize').click(function () {
            var w = 458;
            var h = element.find('.overlay.two').parent().height();
            element.find('.overlay').hide();
            element.find('.overlay.one').css({ 'width': w + 'px', 'height': h + 'px' }).fadeIn('fast');
        });
        element.find('.slurpee.customize').click(function () {
            var w = 458;
            var h = element.find('.overlay.two').parent().height();
            element.find('.overlay').hide();
            element.find('.overlay.two').css({ 'width': w + 'px', 'height': h + 'px' }).fadeIn('fast');
        });
        element.find('.why.link').click(function () {
            var w = 458;
            var h = element.find('.overlay.five').parent().height();
            element.find('.overlay').hide();
            element.find('.overlay.five').css({ 'width': w + 'px', 'height': h + 'px' }).fadeIn('fast');
        });
        element.find('.overlay .close.link').click(function () {
            element.find('.overlay').fadeOut(100);
        });
        element.find('.overlay.one .ok.button').click(function () {
            element.find('.overlay').fadeOut(100);
        });
        element.find('.save.button').click(function () {
            if (init.IsValidProfile()) {
                SaveProfile(element);
            }
        });
        element.find('.cancel.button').click(function () {
            location.href = init.opts.DefaultClassName.toLowerCase() == 'slurpee' ? '/' : './';
        });
        element.find('.disable.link').click(function () {
            var w = 458;
            var h = element.find('.overlay.six').parent().height();
            element.find('.overlay').hide();
            element.find('.overlay.seven').css({ 'width': w + 'px', 'height': h + 'px' }).fadeIn('fast');
        });
        element.find('.column.two .profile.link').click(function () {
            element.find('.column.two').removeClass('password');
        });
        element.find('.column.two .password.link').click(function () {
            element.find('.column.two').addClass('password');
        });
        element.find('.overlay.seven .link').click(function () {
            element.find('.overlay').fadeOut(100);
            if ($(this).hasClass('yes')) DisableAccount(element);
        });
        element.find('.password-content .submit.button').click(function () {
            ChangePassword(element);
        });
        element.find('#old_password, #new_password, #confirm_password').keypress(function (e) {
            if (e.which == 13) element.find('.password-content .submit.button').trigger('click');
        });
        element.find('.transactions-top > .earned').click(function () {
            $(this).parent().parent().addClass('earned');
        });
        element.find('.transactions-top > .redeemed').click(function () {
            $(this).parent().parent().removeClass('earned')
        });
        element.find('.content-top .slurpee.link').click(function () {
            window.open('http://www.slurpee.com');
        });
        element.find('.content-top .what.link').click(function () {
            var w = 458;
            var h = element.find('.overlay.six').parent().height();
            element.find('.overlay').hide();
            element.find('.overlay.six').css({ 'width': w + 'px', 'height': h + 'px' }).fadeIn('fast');
        });

        setTimeout(function () { GetProfile(element); }, 100);

        element.fadeIn(100, function () {
            if ($.query.get('Active') == '1' || $.query.get('Active') == 1) {
                $('.inform').html('Your account is now active.').show();
            } else if ($.query.get('Password') == '1' || $.query.get('Password') == 1) {
                $('.inform').html('Your password has been changed.').show();
            }
        });

        return true;
    };

    var methods = {
        'init': function (options) {
            return this.each(function () {
                (new Init(this, options));
            });
        },
        'menubox': function () {
            return this.each(function () {
                (new MenuBox(this))
            });
        },
        'profile': function () {

            window.setInterval(function () {
                $('.inform').each(function (i, o) {
                    if ($(this).is(':visible')) {
                        var dtm = $(this).data('dtm');
                        if (dtm) {
                            var cdtm = new Date();
                            var delta = cdtm - dtm;
                            if (delta > 2167) {
                                $(this).fadeOut(667, function () { $(this).data('dtm', null); });
                            }
                        } else {
                            var dtm = new Date();
                            $(this).data('dtm', dtm).show();
                        }
                    }

                });
            }, 667);

            return this.each(function () {
                (new Profile(this))
            });
        },
        'forgotpass': function () {
            return this.each(function () {
                (new ForgotPass(this));
            });
        }
    };

    $.fn.mlogin = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.mlogin');
        }
    };
    function is_guid(s) {
        var re = /^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$/;
        return re.test(s);
    }
    function is_int(s) {
        var re = /^(\+|\-)?\d+$/;
        return re.test(s);
    }
    function is_email(s) {
        var re = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
        return re.test(s);
    }
    function reload_win() {
        //alert('reload_win');
        var ssl_mode = 0; // 0 off, 1 on, 2 either

        if (arguments.length > 0) ssl_mode = arguments[0];

        var is_ssl = (location.href.match(/^https:\/\/.*/i) != null);

        if (ssl_mode == 1 && !is_ssl) {
            var href = location.href.replace(/^http:\/\//i, 'https://');
            if (href.indexOf('slurpee.integerdallas.com') != -1) { href = href.replace('slurpee.integerdallas.com', 'slurpee.integerdallas.com:446'); }
            if (location.hash != null && href.indexOf(location.hash) == -1) href = href + location.hash;
            location.href = href;
        } else if (ssl_mode == 0 && is_ssl) {
            var href = location.href.replace(/^https:\/\//i, 'http://');
            if (href.indexOf('slurpee.integerdallas.com:446') != -1) { href = href.replace('slurpee.integerdallas.com:446', 'slurpee.integerdallas.com'); }
            if (location.hash != null && href.indexOf(location.hash) == -1) href = href + location.hash;
            location.href = href;
        } else {
            location.reload();
        }
    }
    function trace(s) {
        if (window.console) window.console.log(s);
    }
})(jQuery);
