// Sitewide script

// Gloabl Vars
var kaLoginCheckComplete = false;
var kaLoggedIn = false;
var kaUserID = null;
var kaUserName = null;

var login_check_url = 
  "http://you.sportshydrant.com/service/isUserLoggedIn.kickAction?callback=?";

var loginUrl =
  'http://members.sportshydrant.com/Security/login';

var registerUrl =
  'http://members.sportshydrant.com/register';

var forgotPasswordUrl =
  'http://members.sportshydrant.com/Security/lostpassword';

var profileUrl = 'http://members.sportshydrant.com/profile';

var logoutUrl = 'http://members.sportshydrant.com/auth/logout';

$(document).ready(function() {
  checkKickappsLoginStats();
});

function checkKickappsLoginStats() {
  // check for the cookies first
  if ($.cookie('ka_info_userid') &&
      $.cookie('ka_info_userid') != '' &&
      $.cookie('ka_info_username') &&
      $.cookie('ka_info_username') != '') {
    // we are logged in via cookie
    var data = new Object();
    data.isLoggedIn = "true";
    data.userid = $.cookie('ka_info_userid');
    data.username = $.cookie('ka_info_username');
    // pretend to be the AJAX response.
    loginStatusResponse(data);
  }
  else {
    // otherwise check the login status with KA
    $.ajax({
      dataType: 'jsonp',
      data: {as: 57111},
      jsonp: 'checkLogin',
      url: login_check_url,
      success: loginStatusResponse,
      error: function( objAJAXRequest, strError ) {
        // if we error on kickapps stats, reload and try again.
        location.reload();
      }
    });
  }
}

function loginStatusResponse(data) {
  if(data.isLoggedIn == "true") {
    kaLoginCheckComplete = true;
    kaLoggedIn = true;
    kaUserID = data.userid;
    kaUserName = data.username;

    // Set cookies
    $.cookie('ka_info_userid', kaUserID, { domain: '.sportshydrant.com', path: '/' });
    $.cookie('ka_info_username', kaUserName,
             { domain: '.sportshydrant.com', path: '/' });

    var profileLink = '<a href="' + profileUrl + '">' + kaUserName + '</a>';
    var logoutLink = '<a id="logout-link" href="' + logoutUrl + '">sign out</a>';

    $('.login-content').html('Welcome, ' + profileLink + '&nbsp;&nbsp;' + logoutLink);

    $('#logout-link').click(function() {
      document.cookie = 'logout_returnto=http://sportshydrant.com'  +
        ';domain=.sportshydrant.com;path=/';
    });

    // TODO - check registration status goes here
    // se if we have and .regoforms on the page
    if ($('.regoform').length > 0) {
      // we have rego forms. Get a list of events this user is registered for,
      // and then update the forms.
      $.ajax({
        dataType: 'jsonp',
        data: {userid: kaUserID, username: kaUserName},
        url: "/registration/list_events",
        success: function (data) {
        //alert(data.events)
          $('.regoform').each(function(idx) {
            var evtid = $(this).attr('data-eventid');
            var this_sel = ".regoform[data-eventid='" + evtid + "']";
            // see if this event is in the users list
            if (_.include(data.events, evtid)) {
              $(this_sel + " .loginregister").hide();
              $(this_sel + " .alreadyregistered").show();
            }
            else {
              $(this_sel + " .loginregister").hide();
              $(this_sel + " .alreadyloggedin").show();
            }
          });
        },
        error: function( objAJAXRequest, strError ) {
          // ignore, will try again on next request
        }
      });
    }

    // Hide the welcome box
    $('.home-welcome-box').hide();

    // Confirm user in rego system if needed
    // TODO - merge in to some common function library, as it's shared
    // only if we haven't done it this session.
    if (!getCookie('confirmed_' + kaUserName)) {
      // Do the confirm call 
      $.ajax({
        dataType: 'jsonp',
        data: {userid: kaUserID, username: kaUserName},
        url: "/registration/confirm",
        success: function (data) {
          document.cookie = 'confirmed_' + kaUserName + '=true' +
                            ';domain=.sportshydrant.com;path=/';
        },
        error: function( objAJAXRequest, strError ) {
          // ignore, will try again on next request
        }
      });
    }

  } else { // Not logged in
    kaLoginCheckComplete = true;
    kaLoggedIn = false;
    // We are not logged in. Open the lightbox with login/rego

    // Build link
    var loginLink = '<a class="login-link" href="' + loginUrl + '">log in</a>';
    var registerLink = '<a href="' + registerUrl + '">join now</a>';
    var forgotLink = '<a href="' + forgotPasswordUrl + '">forgot password</a>';
    
    // insert into element
    $('.login-content').html(loginLink + '&nbsp;&nbsp;' + registerLink +
                             '&nbsp;&nbsp;' + forgotLink);
						
	// if My Hydrant sidebar exists, add Log In item	 
	if ( $('#sh_rightnav_list').length ){
		var myhydrant = $('#sh_rightnav_list');
		myhydrant.prepend('<li><a class="login-link icon-friends" href="' + loginUrl + '">Log In</a></li>');
	}

    // Activate fancybox
    // $("a.login-link").fancybox();
  }
}

var loginFormAjaxComplete = false;
var loginFormAjaxInProgress = false;

/** Registration **/
$(document).ready(function() {
  $('.regoLogin').click(function() {
    var parts = $(this).attr('data-value').split('||');
    // Insert the checkbox
    var cboxHtml = '<input type="checkbox" id="eventRegoCheckbox" name="eventRegoCheckbox" checked="yes">';
    cboxHtml += '&nbsp;&nbsp <strong>Yes, I would like to attend ' + parts[1] + "</strong><br>";
    $('#headerSignInPassInput').after(cboxHtml);
    // Insert an email form element
    var emfieldHtml = "E-mail address:<br>";
    emfieldHtml += '<input class="text" id="email" maxlength="124" size="30" name="email" type="text" />';
    $('#headerSignInUserInput').after(emfieldHtml);
    // Change login field to remove email reference
    $('#headerSignInUser').html('Username');
    // Remove the join section -shouldn't be used in this situation.
    $('#kaJoinBox').hide();
    // Hijack the form submission
    $("#ka_loginPopup").submit(function () {
      // check if the rego checbox is checked. If it's not, just return true  
      if (!$('#eventRegoCheckbox').attr('checked')) {
        return true;
      }

      // Ensure the username box doesn't contain an email!
      if ($('#username').val().indexOf('@') > -1) {
        alert('You must enter your username, not email address in the email box!');
        return false;
      }

      // Ensure the email box has an email address!
      if ($('#email').val().indexOf('@')  == -1) {
        alert('Please enter your email address');
        return false;
      }

      if (!loginFormAjaxComplete) {
        if (loginFormAjaxInProgress) {
          // do nothing,
          return false;
        }
        else {
          $.ajax({
            dataType: 'jsonp',
            data: {"event": parts[0], email: $('#email').val(), username: $('#username').val()},
            url: "/registration/register",
            success: function (data) {
              // callback with data
              loginFormAjaxComplete = true;
              loginFormAjaxInProgress = false;
              $("#ka_loginPopup").submit();
            },
            error: function( objAJAXRequest, strError ) {
              // if we error on kickapps stats, reload and try again.
              alert("We're sorry, and error occured. Please try again soon");
              location.reload();
            }
          });
          loginFormAjaxInProgress = true;
          return false;
        }
      } // end form not complete
      else {
        // Reset cofnirm cookie
        document.cookie = 'confirmed_' + $('#username').val() + '=false' +
               '; expires=Thu, 01-Jan-70 00:00:01 GMT ;domain=.sportshydrant.com;path=/';
        $('#eventRegoCheckbox').remove();
        $('#email').remove();
        return true;
      }
    });

    // open the box
    // TODO - on cancel, reload the whole page - to reset state. This is bad.
    // $.fancybox({'href':'#ka_login_form', onClosed: function(){ window.location.reload(); }});
  });

  $('.regoRegister').click(function() {
    var parts = $(this).attr('data-value').split('||');
    var regourl = "http://you.sportshydrant.com/user/displayUserRegisterPage.kickAction?as=57111&STATUS=MAIN";
    regoUrl = regourl + "&eventid=" + parts[0] + "&eventname=" + escape(parts[1]) + "&sitehost=" + escape(window.location.protocol + '//' + window.location.host);
    window.location = regoUrl;
  });

  // Register & unregister (logged in)
  $('.regoExistingLogin').click(function() {
    var evtid = $(this).attr('data-value');  
    var email = $("#regoEmail" + evtid).val();
    if (email.indexOf('@') == -1) {
      alert("You must provide an email address");
      return false;
    }

    $(this).attr('disabled', 'true');
    
    $.ajax({
      dataType: 'jsonp',
      data: {"event": evtid, email: email, username: kaUserName, userid: kaUserID},
      url: "/registration/register",
      success: function (data) {
        document.cookie = 'confirmed_' + kaUserName + '=false' +
               '; expires=Thu, 01-Jan-70 00:00:01 GMT ;domain=.sportshydrant.com;path=/';
        // callback with data
        window.location.reload();
      },
      error: function( objAJAXRequest, strError ) {
        // if we error on kickapps stats, reload and try again.
        alert("We're sorry, and error occured. Please try again soon");
        location.reload();
      }
    });
  });


  $('.regoUnregister').click(function() {
    var evtid = $(this).attr('data-value');  
    if (confirm("Are you sure you want to unregister from this event?")) {

      $(this).attr('disabled', 'true');
      
      $.ajax({
        dataType: 'jsonp',
        data: {"event": evtid, userid: kaUserID, username: kaUserName},
        url: "/registration/unregister",
        success: function (data) {
          document.cookie = 'confirmed_' + kaUserName + '=false' +
                 '; expires=Thu, 01-Jan-70 00:00:01 GMT ;domain=.sportshydrant.com;path=/';
          // callback with data
          window.location.reload();
        },
        error: function( objAJAXRequest, strError ) {
          // if we error on kickapps stats, reload and try again.
          alert("We're sorry, and error occured. Please try again soon");
          location.reload();
        }
      });
    }
  });
});

/** Misc functions **/

function getCookie(name) {
  var theCookies = document.cookie.split(/[; ]+/);
  for (var i = 0 ; i < theCookies.length; i++) {
    var aName = theCookies[i].substring(0,theCookies[i].indexOf('='));
    if (aName == name)
      return theCookies[i].substring(theCookies[i].indexOf('=')+1,
                                     theCookies[i].length);

  }
}

