﻿(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_W7U5aXEDNXlDgwQUzyT8Vp8pwHGOom8dtEA83IBooVA6lNHCIoGcoBVim7sW0FUs',
      'HomePage': 'Default.aspx',
      'ServicePage': 'mDefault.ashx',
      'AccountPage': 'Account.aspx',
      'LogoutPage': 'Logout.aspx',
      'ForgotPage': 'Forgot.aspx',
      'DeactivatePage': 'Deactivate.aspx',
      'DefaultClassName': 'seven',
      'IsAuth': null,
      'Source':'SevenEleven'
    };

    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() {
      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;
      g_user = e.user;
      trimUID();

      var init = element.data('gigya.Init');
      var retval = false;
      var settings = {};
      settings.url = init.opts.ServicePage;
      settings.cache = false;
      settings.async = true;
      settings.dataType = 'jsonp';

      var data = {};
      data.cmd = 'GigyaConnection';
      data.uid = g_user.UID;
      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') {
          reload_win();
        } else {
          trace(data.error);
        }
      };
      $.ajax(settings);
    }
    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');
      if(e.source != 'showLoginUI') return;
      
      g_user = e.user;
      trace(g_user);

      trace('gigya_VerifySig');
      var init = element.data('gigya.Init');

      var retval = false;

      var settings = {};
      settings.url = init.opts.ServicePage;
      settings.cache = false;
      settings.async = true;
      settings.dataType = 'jsonp';

      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') {
            trimUID();
      
            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 = 'jsonp';
      
            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('GotError'); 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);

          }else{
            g_user = null;
          }
        } else {
          trace(data.error);
        }
      };
      $.ajax(settings);
    }
    function ucfirst(s) {
      return s.charAt(0).toUpperCase() + s.substr(1);
    }

    // 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 = 'jsonp';

      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 = 'jsonp';


      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') {

          if(_gaq) _gaq.push(['_trackEvent', 'Membership', 'Click', 'Join Slurpee Nation - Confirmed']);
          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 showShareOnNewRegistration() {
      var ua = new gigya.services.socialize.UserAction();
      ua.setTitle("Sign up to be a Slurpee superstar");
      ua.setDescription("I just signed up for a 7-Eleven membership with access to the wonderful world of Slurpee Nation rewards.  Register now on their Facebook tab and then maybe later we can do the secret handshake.");
      ua.setLinkBack("https://www.facebook.com/slurpee");
      ua.addActionLink("Register on Facebook", "https://www.facebook.com/slurpee");
      
      var img = {src: 'http://www.slurpee.com/images/7-11-logo.jpg', href: 'http://www.slurpee.com',type: 'image'};
      ua.addMediaItem(img);
      
      var params ={userAction:ua, showMoreButton:true, useHTML:true};
      gigya.services.socialize.showShareUI(this.conf, params);
      
      var sparams = {userAction:ua, scope: 'both'};
      gigya.services.socialize.publishUserAction(this.conf, sparams);
    }
    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() {
      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() {
      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() {
      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 settings = {};
      settings.url = init.opts.ServicePage;
      settings.cache = false;
      settings.async = true;
      settings.dataType = 'jsonp';

      var data = {};
      data.cmd = 'GetTos';
      settings.data = data;

      settings.error = function(XMLHttpRequest, textStatus, errorThrown) { trace(textStatus); trace(errorThrown); };
      settings.success = function(data, textStatus, XMLHttpRequest) {
        var h = element.find('> div.content').height() - parseInt(t) - 15;
        element.find('.overlay.four .tos').html(data.html).css({ 'height': (h - 47) + 'px' });
        element.find('.overlay.four').css({ 'height': h + 'px' }).fadeIn(100);
      };
      $.ajax(settings);
    });
    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 = true;
      settings.dataType = 'jsonp';

      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 = true;
        settings.dataType = 'jsonp';

        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) {
            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 = 'jsonp';

        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 = true;
        settings.dataType = 'jsonp';

        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 = 'jsonp';

      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 = 'jsonp';

      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) { trace('GetUserPoints_BeforeSend'); };
      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 = 'jsonp';

        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 = 'jsonp';

      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 = 'jsonp';

      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 = 'jsonp';

      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 = 'jsonp';

        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 = 'jsonp';

      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);
