/**
* @author Nivaria Innova Team
*/
function SendTo() {
   this.id = null;
   this.simplefields = new Array();      //Simple fields
}
SendTo.prototype = {
   initialize:function (objectId,json) {
      this.id = objectId;
          //Getting component simple fields values
      ncm.initSimpleFields(SendTo,this,json);
      //Initializing the events
      this.initSendFormEvents();
   },
   getRequestParams:function () {
      var res = ncm.getComponentConstructorParamsObject(this,SendTo,true);
      $jq.extend(res,ncm.getParametersFromUrlAsObject());
      return res;
   },
   sendToFriend:function (event) {
      var selector = this.getFormSelector();
      selector += " div.hidden";
      var x = ($jq(window).width() / 2) - ($jq(selector).width() / 2);
      var y = ($jq(window).height() / 2) - ($jq(selector).height() / 2);
      if (event != null && typeof (event) != "undefined") {
         $jq(selector).toggle().css({top:x + "px", left:y + "px"});
      } else {
         $jq(selector).toggle();
      }
      this.resetSendForm();
   },
   initSendFormEvents:function () {
      var selector0 = this.getFormSelector();
      selector0 += " form";
      var selector = selector0 + " fieldset dd button ";
      var Me = this;
      $jq(this.getFormSelector()+" div.forms-component-comment-close").click(function(){
         $jq(Me.getFormSelector()+" div.hidden").hide();
      }).keypress(function(){
         $jq(Me.getFormSelector()+" div.hidden").hide();
      });
      $jq("#" + this.id + "-addfriend").click(function () {
         Me.addFriendEmail(this);
      }).keypress(function () {
         Me.addFriendEmail(this);
      });
      selector = selector0 + " div.form-action button";
      $jq(selector + "." + SendTo.getProperty("class_submit_button")).click(function () {
         Me.submitSendForm();
      }).keypress(function () {
         Me.submitSendForm();
      });
      $jq(selector + "." + SendTo.getProperty("class_reset_button")).click(function () {
         Me.resetSendForm();
      }).keypress(function () {
         Me.resetSendForm();
      });
      var selector1 = this.getLinkSelector();
      $jq(selector1).click(function (event) {
         Me.sendToFriend(event);
      });
      $jq(this.getFormSelector() + " .hidden").draggable();
   },
   addFriendEmail:function (domElem) {
      var html = "";
      if (domElem != null) {
         html = "<dt></dt><dd>\n";
         html += "<input name=\"FRIENDMAIL\" value=\"\" title=\"" + SendTo.getProperty("lang_usermail") + "\" type=\"text\" style=\"width:180px;\"/>\n";
         html += "<button type=\"button\" class=\"btnRemove\" name=\"emailform\" title=\"" + SendTo.getProperty("lang_mail_remove") + "\" value=\"removemail\" onclick=\"SendTo.get(" + this.id + ").removeFriendEmail(this);\" onkeypress=\"SendTo.get(" + this.id + ").removeFriendEmail(this);\"><span>X</span></button>\n";
         html += "</dd>\n";
         $jq(domElem).parent().after(html);
      }
   },
   removeFriendEmail:function (domElem) {
      if (domElem != null) {
         $jq(domElem).parent().prev().remove();
         $jq(domElem).parent().remove();
      }
   },
   submitSendForm:function () {
      var jspfile = SendTo.getProperty("jsp_default");
      if (jspfile == "") {
         jspfile = "components/sendto/sendto.jsp";
      }
      var selector = this.getFormSelector();
      selector += " form";
      var params = {
         action: 3,
         pageRef: window.location.protocol + "//" + window.location.host + window.location.pathname,
         params: ncm.getParametersFromUrlAsString(":")
      };
      $jq.extend(params,ncm.serializeToObject(selector),this.getRequestParams());
      var Me = this;
      this.clearErrorMessage(true);
      $jq.getJSON(jspfile,params,function (json) {
         if (json != null) {
            if (json.valid) {
               if (json.sent) {
                  Me.sendToFriend();
                  ncm.showDialog(Me.id, SendTo.getProperty("lang_mail_sent"));
               } else {
                  ncm.showDialog(Me.id, SendTo.getProperty("lang_mail_error"));
               }
            } else {
               Me.showErrorMessage(json);
            }
         }
      });
   },
   resetSendForm:function () {
      var selector = this.getFormSelector();
      selector += " form";
      $jq(selector + " :text").val("");
      $jq(selector + " textarea").val("");
      $jq(this.getFormSelector()+" div.show-message").html("");
   },
   clearErrorMessage:function (isSend) {
      ncm.hideDialog(this.id);
      $jq(this.getFormSelector()+" div.show-message").html("");
      var className = SendTo.getProperty("class_label_incorrect");
      if(className) {
         var selector = this.getFormSelector();
         selector += this.id;
         selector += " form .";
         selector += className;
         $jq(selector).removeClass(className);   
      }
   },
   showErrorMessage:function (json) {
      var className = SendTo.getProperty("class_label_incorrect");
      var message = "";
      if (!json.valid) {
         if (json.wrongObligFields.length) {
            message += SendTo.getProperty("lang_inputoblig");
            message += "<br/>";
            for (var i = 0; i < json.wrongObligFields.length; i++) {
               message += "  * " + json.wrongObligFields[i].title;
               message += "<br/>";
               var sel = "#" + json.wrongObligFields[i].id;
               $jq(sel).parent().addClass(className).prev().addClass(className);
            }
         }
         if (json.wrongEmailFields.length) {
            message += SendTo.getProperty("lang_wrongemail");
            message += "<br/>";
            for (var i = 0; i < json.wrongEmailFields.length; i++) {
               message += "  * " + json.wrongEmailFields[i].title;
               message += "<br/>";
               var sel = "#" + json.wrongEmailFields[i].id;
               $jq(sel).parent().addClass(className).prev().addClass(className);
            }
         }
      } else {
         if (!json.saved) {
            message += SendTo.getProperty("lang_save_error");
         }
      }
      if (message != "") {
         var html = "<p>";
         html += message;
         html += "</p>";
         //ncm.showDialog(this.id, html);
         //window.scrollTo(0, 0);
            /*$jq(this.getFormSelector()+" div.show-message").html(html).css("color","red");*/
            $jq(this.getFormSelector()+" div.show-message").html(html);
      }
   },
   getLinkSelector:function () {
      var s = SendTo.getProperty("link_selector");
      if(!s) {
         s = ".send2friend a";
      }
      return s;
   },
   getFormSelector:function () {
      var selector = "#send-to";
      selector += this.id;
      return selector;
   }
};
SendTo.instances = new Array();
SendTo.properties = new Array();
SendTo.datatype = null;
SendTo.jsp_utils = null;
SendTo.language = null;
SendTo.pageUrl = null;
SendTo.channel = null;
SendTo.inPreview = false;
SendTo.issueId = null;
SendTo.skin = null;
SendTo.pageId = null;

SendTo.register = function (objectId,json) {
   var sendToObject = new SendTo();
   sendToObject.initialize(objectId,json);
   SendTo.instances["" + objectId] = sendToObject;
};
SendTo.getRegistered = function (objectId) {
   return SendTo.instances["" + objectId];
};
SendTo.get = function (objectId) {
   return SendTo.getRegistered(objectId);
};
SendTo.initProperties = function (options) {
   ncm.initProperties(SendTo, options);
};
SendTo.getProperty = function (propName) {
   var res = SendTo.properties[propName];
   if (res == null) {
      res = "";
   }
   if (typeof (res) == "undefined") {
      res = "";
   }
   return res;
};


