jQuery.noConflict();

var explodeQueryString = function(query) {
    var paramList = query.split("&");
    var params = {};
    var index = paramList.length;
    while (index--) {
        var param = paramList[index];
        var foundEq = param.indexOf("=");
        params[param.substr(0, foundEq)] = param.substr(foundEq+1);
    }
    return params;
};

var Messaging = function() {
  // console.log("Messaging");
  var SERVICE_URL = "http://login.cooliris.com/rpc?jsonp=?";
  
  var genId = function() {
    return new Date().getTime() % 100000000;
  };
  
  var genHeader = function() {
    return {
      "message_id": genId(), 
      "phase": "kRequest"
    };
  };
  
  var genRequest = function(req_name, req_body) {
    var req = {
      header: genHeader()
    };
    req[req_name] = req_body;
    return req;
  };
  
  var doRequest = function(req_name, req_body, callback) {
    var request = genRequest(req_name, req_body);
    
    // console.log("req_name:", request);
    // console.log(jQuery.stringifyJSON(request));

    jQuery.jsonp({
      cache: true,
      url: SERVICE_URL,
      data: {body: jQuery.stringifyJSON(request)},
      success: callback,
      error: error_callback
    });
  };
  
  var error_callback = function(xOptions, textStatus) {
    // console.log("ERROR");
    // console.log("xOptions: ", xOptions);
    // console.log("textStatus: ", textStatus);
  };
  
  return {
    genRequest: genRequest,
    doRequest: doRequest,
    genSessToken: function(provider, success_url, failure_url, callback) {
      doRequest(
        "gen_sess_token_request", 
        {
          "provider": provider,
          "success_url": success_url,
          "failure_url": failure_url
        },
        callback
      );
    },
    getSessionState: function(session_token, callback) {
      doRequest(
        "get_session_state_request", 
        {"session_token": session_token},
        callback
      );
    },
    getUser: function(session_token, callback) {
      doRequest(
        "get_user_request",
        {"session_token": session_token},
        callback
      );
    },
    revokeSession: function(session_token, callback) {
      doRequest(
        "revoke_session_request", 
        {"session_token": session_token},
        callback
      );
    }
  };
}();
var User = function() {
  var COOKIE_SESSION_TOKEN = "builder_session_token";
  var user_object;
  var session_token;
  var login_success_callback;
  var loginUrl = "http://login.cooliris.com/ui/choose";
  var myPath = location.href.substring(0,location.href.lastIndexOf("/")+1);
  
  var showLoggedInUI = function() {
    jQuery(".logged-in-name").text(User.getName());
    jQuery(".logged-in-fname").text(User.getFirstName());
    jQuery(".logged-out").hide();
    jQuery(".logged-in").show();
    if(cooliris && cooliris.embed){ cooliris.embed.onUserLogin(); }
  };

  var showLoggedOutUI = function() {
    jQuery(".logged-in").hide();
    jQuery(".logged-out").show();
    if(cooliris && cooliris.embed){ cooliris.embed.onUserLogout(); }
  };
  
  var showLogin = function() {
    jQuery('#loginDialogBG').show();
    jQuery("#loginDialog").css({  
      "position": "absolute",  
      "top":  134,  
      "left": jQuery(window).width() / 2 - jQuery('#loginDialog').width() / 2  
    });
    
    jQuery('#loginDialog').show();
  };

  var hideLogin = function() {
    jQuery('#loginDialogBG').hide();
    jQuery('#loginDialog').hide();
  };
  
  jQuery(function(){
    jQuery(".login-link").click(function(){
      if (jQuery(this).hasClass("do-reload")) {
        User.doLogin(function(){window.location.reload(0);});
      }
      else {
        User.doLogin();
      }
      return false;
    });
    jQuery(".logout-link").click(function(){
      if (jQuery(this).hasClass("do-reload")) {
        User.doLogout(function(){window.location.reload(0);});
      }
      else {
        User.doLogout();
      }
      return false;
    });

    jQuery("#loginDialog a.close_button").click(function(event){
      event.preventDefault();
      hideLogin();
    });
    jQuery("#loginDialog a.continue").click(function(event){
      event.preventDefault();
      hideLogin();
    });

  });
  
  return {
    getInstance: function() {
        return user_object;
    },
    
    init: function(callback) {
      // if (jQuery.cookie("sid")) {
      //   jQuery.cookie(COOKIE_SESSION_TOKEN, jQuery.cookie("sid"));
      // }
      
      if (this.isLoggedIn()) {
        session_token = jQuery.cookie(COOKIE_SESSION_TOKEN);
        Messaging.getUser(
          session_token,
          function(response) {
            if (response.get_user_response) {
              user_object = response.get_user_response.user;
              showLoggedInUI();
              if (typeof callback === "function") {
                callback();
              }
            } 
            else {
              showLoggedOutUI();
              if (typeof callback === "function") {
                callback();
              }
            }
          }
        );
      }
      else {
        showLoggedOutUI();
        if (typeof callback === "function") {
          callback();
        }
      }
    },
    
    getSessionToken: function() {
      return jQuery.cookie(COOKIE_SESSION_TOKEN);
    },
    
    getName: function() {
      if (user_object) {
        return user_object.first_name + " " + user_object.last_name;
      }
      else {
        return "Guest";
      }
    },
    
    getFirstName: function() {
      if (user_object) {
        return user_object.first_name;
      }
      else {
        return "Guest";
      }
    },

    isLoggedIn: function() {
      return !!(jQuery.cookie(COOKIE_SESSION_TOKEN));
    },
    
    doLogin: function(callback) {
      jQuery("#login-iframe").attr("src", loginUrl + "?responseUrl=http://www.cooliris.com/mobile/products/liveshare/events/success.html");
      showLogin();
      if (typeof callback === "function") {
        login_success_callback = callback;
      }
    },
    
    doSuccessPageCallback: function(query) {
      var params = explodeQueryString(query.substr(1));
      // console.log(params);
      hideLogin();
      if (params["response"] == "success" || ((params["token"] && params["user"]))) {
        session_token = params["token"];
        user_object = jQuery.toJSON(decodeURIComponent(params["user"]));
        jQuery.cookie(COOKIE_SESSION_TOKEN, session_token);
        showLoggedInUI();
        if (login_success_callback) {
          login_success_callback();
        }
      }
    },
    
    doLogout: function(callback) {
      Messaging.revokeSession(
        session_token,
        function(response) {
          session_token = null;
          jQuery.cookie(COOKIE_SESSION_TOKEN, null);
          showLoggedOutUI();
          if (typeof callback === "function") {
            callback();
          }
        }
      );
    }
  };
}();

jQuery(function(){
    window.cooliris = {};
    
    User.init();
});

