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($.stringifyJSON(request));

    $.jsonp({
      cache: true,
      url: SERVICE_URL,
      data: {body: $.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
      );
    }
  };
}();
