/**
 * Handles case when user is not registered and tries to access functionality.
 * Can be as simple as redirecting to another url or more advanced such as opening
 * layers or AJAX forms.
 * Has a hash of possible ids with appropriate messages.
 * Todo- Pass the messages in as aMessages.
 * @requires JQuery.
 * @param {Object} sUrl Login url.
 * @param {Object} gUrl Registration url.
 * @param {Array} aMessages not used currently.
 */
function RegisteredGateway(sUrl, gUrl, aMessages) {
  var oThis = this;
  this.boxWidth = "";
  this.aLoginMessages = new Array();
  this.aLoginMessages["comment"] = "<a href=\"" + sUrl + "\">Login</a> or <a href=\"" + gUrl + "\">register</a> now to comment on this entry.";
  this.aLoginMessages["recommendation"] = "<a href=\"" + sUrl + "\">Login</a> or <a href=\"" + gUrl + "\">register</a> now to recommend this comment.";
  this.aLoginMessages["default"] = "<a href=\"" + sUrl + "\">LOGIN</a> or <a href=\"" + gUrl + "\">REGISTER</a> to participate.";

  // photo upload voting messages
  this.aLoginMessages["submitting_vote"] = "Submitting your vote...";
  this.aLoginMessages["already_vote"] = "You have already voted today.";
  this.aLoginMessages["thanks_vote"] = "Thanks for voting!";

  this.signinUrl = sUrl;
  this.gatewayUrl = gUrl;
  RegisteredGateway.prototype.init = function() {
    oThis.createRegisterDiv();
    jQuery("div.regblurb a.closebtn").click(
    function(event) {
        jQuery("div.regblurb").hide("fast");
        return false;
    });

  };

  /*
   * Create the unregistered user div. This is a div that pops up when the user tries to access a protected
   * piece of functionality.
   */
  RegisteredGateway.prototype.createRegisterDiv = function() {
    var regDiv = document.createElement("div");
    regDiv.id = "reglayer";
    regDiv.className = "regblurb";
    regDiv.innerHTML = "<dd><a href=\"#\" class=\"closebtn\">X</a> <p id=\"regtxt\"></p></span></dd>";
    document.body.appendChild(regDiv);
    this.boxWidth = regDiv.offsetWidth;
    regDiv.style.display = "none";

  };

  RegisteredGateway.prototype.getGatewayUrl = function() {
    return this.gatewayUrl;
  };

  /**
   *
   * @param {String} txt Text displayed when user is not logged in.
   */
  RegisteredGateway.prototype.setLoginText = function(txt) {
    if (document.getElementById("regtxt") === null) { return false; }
    document.getElementById("regtxt").innerHTML = txt;
    return true;
  };

  // Opens the register div near the element the user clicked on.
  RegisteredGateway.prototype.loginHandler = function(id, target) {
    var newPos = this.getY(target);
    var txt = this.aLoginMessages[id];
    var argc = arguments.length


    if (txt === undefined) {
        txt = this.aLoginMessages["default"];
    }
    var checkDiv = this.setLoginText(txt);
    if (!checkDiv) { return false; }

    if (argc > 2) {
        newPos[0] = newPos[0] + arguments[2];
        newPos[1] = newPos[1] + arguments[3];
    }


    var left = newPos[0];
    left += this.boxWidth/2;

    jQuery("div.regblurb").css("top", newPos[1]);
    jQuery("div.regblurb").css("left", left);
    jQuery("div.regblurb").show("fast");
    return false;

  };

  RegisteredGateway.prototype.getY = function(obj) {
    var curleft = 0;
    var curtop = 0;

    if (obj.offsetParent) {
      curleft = obj.offsetLeft;
      curtop = obj.offsetTop;
      while (obj = obj.offsetParent) {
        curleft += obj.offsetLeft;
        curtop += obj.offsetTop;
      }
    }
    return [curleft,curtop];
  };

}
