﻿/// <reference path="~/js/external/jquery-1.3.2.js"/>


// first, declare the two namespaces if they do not already exist
if (Adlib == null || typeof (Adlib) != "object") { var Adlib = new Object(); }
if (Adlib.Page == null || typeof (Adlib.Page) != "object") { Adlib.Page = new Object(); }


/****************************************************************************/
/***** Page Term ************************************************************/
/****************************************************************************/
Adlib.Page.Term = function () {

  //first run
  var first_run = true;

  /****************************/
  /***** Method Set Handlers *****/
  /****************************/
  var setEventHandlers = function () {

    //Set event handlers can only run one time
    if (first_run) { first_run = false; } else { return; }


    $j("#termUsedFor a.removeField, #termUsedForEng a.removeField, #termSourceAlternative a.removeField, #termSourceWebsite a.removeField, #termSourceWebsiteEng a.removeField").live("click", function (e) {
      $j(this).parent().remove();
    });

    $j("#termSource a.removeField").live("click", function (e) {
      $j(this).parent().parent().parent().remove();

      //Remove the space between lines for the first source
      $j("#termSource div.searchCol2 div.spaceBetLinesNormal:first").hide();
    });

    $j("#termSourceEng a.removeField").live("click", function (e) {
      $j(this).parent().parent().parent().remove();

      //Remove the space between lines for the first source
      $j("#termSourceEng div.searchCol2 div.spaceBetLinesNormal:first").hide();
    });

    $j("#termUsedFor a.addField, #termUsedForEng a.addField, #termSourceAlternative a.addField, #termSourceWebsite a.addField, #termSourceWebsiteEng a.addField").live("click", function (e) {
      var htmlMarkup = $j(this).parent().clone();
      $j(this).parent().after(htmlMarkup);
      $j(this).parent().children("a.removeField").show();
      $j(this).parent().children("a.addField").hide();
      $j(this).parent().children("input").val($j(this).parent().next("input").val());

      $j(this).parent().next("div").children("input").val("").focus();

    });

    $j("#termSource a.addField").live("click", function (e) {
      var htmlMarkup = $j(this).parent().parent().parent().clone();
      $j(this).parent().parent().parent().after(htmlMarkup);
      $j(this).parent().parent().parent().find("a.removeField").show();
      $j(this).parent().parent().parent().find("a.addField").hide();
      $j(this).parent().parent().parent().next("div").find("div.spaceBetLinesNormal").show();
      $j(this).parent().parent().parent().next("div").find("input").val("");
      $j(this).parent().parent().parent().next("div").find("input:first").focus();
    });

    $j("#termSourceEng a.addField").live("click", function (e) {
      var htmlMarkup = $j(this).parent().parent().parent().clone();
      $j(this).parent().parent().parent().after(htmlMarkup);
      $j(this).parent().parent().parent().find("a.removeField").show();
      $j(this).parent().parent().parent().find("a.addField").hide();
      $j(this).parent().parent().parent().next("div").find("div.spaceBetLinesNormal").show();
      $j(this).parent().parent().parent().next("div").find("input").val("");
      $j(this).parent().parent().parent().next("div").find("input:first").focus();
    });

    $j("#btSaveTerm").live("click", function (e) {

      //TODO: Find a simpler way to prepare de data for the web service
      var formStr = Adlib.Base.Functions.Encode(JSON.stringify(getEditReactionForm()));

      $j.ajax({
        url: $j("#hdBaseUrl").val() + "term/sendeditreaction",
        data: "language=" + Adlib.Base.Data.Get("language") + "&" +
                "priref=" + $j("#divTermInfoBox").data("priref") + "&" +
                "form=" + formStr,
        success: function (msg) {
          Adlib.Base.Data.LoadSavedPage("search");

          Adlib.Base.Message.Info(Adlib.Base.Data.GetText('reaction_sent_msg_screen'));
        },

        error: function (xhr) {
          Adlib.Base.Message.Error(xhr);
        }

      });


    }); // $j("#btSaveTerm")

    $j("#btCreateTerm").live("click", function (e) {

      //TODO: Find a simpler way to prepare de data for the web service
      var formStr = Adlib.Base.Functions.Encode(JSON.stringify(getCreateReactionForm()));
      $j.ajax({
        url: $j("#hdBaseUrl").val() + "term/sendcreatereaction",
        data: "language=" + Adlib.Base.Data.Get("language") + "&" +
                "priref_broader=" + $j("#divTermInfoBox").data("priref") + "&" +
                "form=" + formStr,
        success: function (msg) {
          Adlib.Base.Data.LoadSavedPage("search");
          Adlib.Base.Message.Info(Adlib.Base.Data.GetText('reaction_sent_msg_screen'));
        },

        error: function (xhr) {
          Adlib.Base.Message.Error(xhr);
        }

      });


    }); //$j("#btCreateTerm")

    $j("#chkPrivateComment").live("click", function (e) {

      var sender = $j(this);

      if (sender.attr("checked")) {
        $j("#txtFreeTxtPublic").hide();
        $j("#txtFreeTxtPrivate").show();
      } else {
        $j("#txtFreeTxtPublic").show();
        $j("#txtFreeTxtPrivate").hide();
      }

    }); //$j("#chkPrivateComment")

  }; //setEventHandlers


  var getEditReactionForm = function (data) {

    var editReactionForm = new Object();

    editReactionForm.term = $j("#lblTerm").text();
    editReactionForm.publicText = $j("#txtFreeTxtPublic").val();
    editReactionForm.privateText = $j("#txtFreeTxtPrivate").val();

    editReactionForm.usedForList = new Array();
    $j(".usedForItem input.textBox").each(function () {
      editReactionForm.usedForList.push($j(this).val());
    });

    editReactionForm.termSourceList = new Array();
    $j(".sourceItem").each(function () {


      var sourceAux = new Object();
      sourceAux.title = $j(this).find(".sourceTitle input.textBox").val();
      sourceAux.author = $j(this).find(".sourceAuthor input.textBox").val();
      sourceAux.year = $j(this).find(".sourceYear input.textBox").val();
      sourceAux.edition = $j(this).find(".sourceEdition input.textBox").val();
      sourceAux.page = $j(this).find(".sourcePage input.textBox").val();

      editReactionForm.termSourceList.push(sourceAux);
    });


    editReactionForm.termSourceAlternativeList = new Array();
    $j(".termSourceAlternativeItem input.textBox").each(function () {
      editReactionForm.termSourceAlternativeList.push($j(this).val());
    });


    editReactionForm.priref = $j("#divTermInfoBox").data("priref");
    editReactionForm.name = $j("#txtName").val();
    editReactionForm.email = $j("#txtEmail").val();

    return editReactionForm;

  }; //getEditReactionForm

  var getCreateReactionForm = function (data) {

    var createReactionForm = new Object();

    createReactionForm.term = $j("#txtTerm").val();
    createReactionForm.alternative = $j("#txtAlternative").val();

    createReactionForm.termEng = $j("#txtTermEng").val();
    createReactionForm.alternativeEng = $j("#txtAlternativeEng").val();

    createReactionForm.broaderTerm = $j("#lblBroaderTerm").text();

    createReactionForm.usedForList = new Array();
    $j(".usedForItem input.textBox").each(function () {
      createReactionForm.usedForList.push($j(this).val());
    });

    createReactionForm.scopeNote = $j("#txtScopeNote").val();
    createReactionForm.scopeNoteEng = $j("#txtScopeNoteEng").val();

    createReactionForm.privateText = $j("#txtFreeTxtPrivate").val();

    //    createReactionForm.englTranslation = $j("#txtEnglTranslation").val();

    createReactionForm.termSourceList = new Array();
    $j("#termSource .sourceItem").each(function () {


      var sourceAux = new Object();
      sourceAux.title = $j(this).find(".sourceTitle input.textBox").val();
      sourceAux.author = $j(this).find(".sourceAuthor input.textBox").val();
      sourceAux.place = $j(this).find(".sourcePlace input.textBox").val();
      sourceAux.year = $j(this).find(".sourceYear input.textBox").val();
      sourceAux.edition = $j(this).find(".sourceEdition input.textBox").val();
      sourceAux.page = $j(this).find(".sourcePage input.textBox").val();

      createReactionForm.termSourceList.push(sourceAux);
    });

    createReactionForm.termSourceEngList = new Array();
    $j("#termSourceEng .sourceItem").each(function () {


      var sourceAux = new Object();
      sourceAux.title = $j(this).find(".sourceTitleEng input.textBox").val();
      sourceAux.author = $j(this).find(".sourceAuthorEng input.textBox").val();
      sourceAux.place = $j(this).find(".sourcePlaceEng input.textBox").val();
      sourceAux.year = $j(this).find(".sourceYearEng input.textBox").val();
      sourceAux.edition = $j(this).find(".sourceEditionEng input.textBox").val();
      sourceAux.page = $j(this).find(".sourcePageEng input.textBox").val();

      createReactionForm.termSourceEngList.push(sourceAux);
    });

    //    createReactionForm.termSourceAlternativeList = new Array();
    //    $j(".termSourceAlternativeItem input.textBox").each(function () {
    //      createReactionForm.termSourceAlternativeList.push($j(this).val());
    //    });

    createReactionForm.termSourceWebsiteList = new Array();
    $j("#termSourceWebsite .termSourceWebsiteItem input.textBox").each(function () {
      createReactionForm.termSourceWebsiteList.push($j(this).val());
    });

    createReactionForm.termSourceWebsiteEngList = new Array();
    $j("#termSourceWebsiteEng .termSourceWebsiteItem input.textBox").each(function () {
      createReactionForm.termSourceWebsiteEngList.push($j(this).val());
    });

    createReactionForm.prirefBroader = $j("#divTermInfoBox").data("priref");

    createReactionForm.name = $j("#txtName").val();
    createReactionForm.email = $j("#txtEmail").val();

    if ($j("#chkAgreement:checked").length == 1) {
      createReactionForm.userAgreement = true;
    }
    else {
      createReactionForm.userAgreement = false;
    }

    return createReactionForm;

  }; //getEditReactionForm

  var loadData = function (data) {
    $j("#divContentLeftTop").html(data.htmlForm);
    $j("#divContentRight").html(data.htmlDetail);

    //The term detail box is reused from the searhcc, and it is necessary to remove buttons that only should work on Search page
    $j("#divContentRight .boxButtonLinks").remove();

    //disable all the links
    $j("#divContentRight a:not(.DetailButton)").each(function () {
      $j(this).replaceWith("<span>" + $j(this).html() + "</span>");
    });

    //hide links on detatils box
    $j("#divContentRight a.DetailButton").css('visibility', 'hidden');

  }

  return {

    GetParams: function () {

      return params;
    }
    ,

    SetParams: function (paramsIn) {

      params = paramsIn;

    }
    ,

    /****************************/
    /***** Method Page Init *****/
    /****************************/
    Init: function (paramsIn) {

      //TODO: Change when exists a user repository!

      /*
      if (Adlib.Base.Data.Get("user") == undefined) {
      var data_next_page = new Object();

      data_next_page.next_page = "term";
      data_next_page.params = paramsIn;
      Adlib.Base.Navigation.OpenNewPage("user", data_next_page);

      return;
      }
      */

      //TODO: Change when exists a user repository!

      var user = new Object();
      user.username = '';
      user.name = '';
      user.email = '';

      Adlib.Base.Data.Set("user", user);

      if (paramsIn.action == 'edit') {
        var url = "term/getedittermbox";
        var data = "language=" + Adlib.Base.Data.Get("language") + "&" +
              "text_language=" + Adlib.Base.Data.Get("text_language") + "&" +
              "priref=" + paramsIn.priref + "&" +
              "name=" + Adlib.Base.Functions.Encode(Adlib.Base.Data.Get("user").name) + "&" +
              "email=" + Adlib.Base.Functions.Encode(Adlib.Base.Data.Get("user").email);
      }
      else {
        if (paramsIn.action == 'new') {
          var url = "term/getnewtermbox";
          var data = "language=" + Adlib.Base.Data.Get("language") + "&" +
              "text_language=" + Adlib.Base.Data.Get("text_language") + "&" +
              "priref_broader=" + paramsIn.priref + "&" +
              "name=" + Adlib.Base.Functions.Encode(Adlib.Base.Data.Get("user").name) + "&" +
              "email=" + Adlib.Base.Functions.Encode(Adlib.Base.Data.Get("user").email);
        }
      }

      $j.ajax({
        url: $j("#hdBaseUrl").val() + url,
        data: data,
        success: function (data) {

          $j("#divResultsList, #divContentRight").html("");
          $j("#divLinksResultList").hide();
          loadData(data);
          $j("#divTermInfoBox").data("priref", paramsIn.priref);
        },

        error: function (xhr) {
          Adlib.Base.Message.Error(xhr);
        }

      });


      setEventHandlers();

      //display back button
      $j("#divButtonBar").show();
      $j("#lnkBack").attr("rel", "search");

    }, //Init


    /****************************/
    /***** Method Page Dispose *****/
    /****************************/
    Dispose: function () {


    } //Dispose

  };
} ();







