/*
     $Revision$
     $Id$

     File:               modal_kenmerken.js
     Description:        Javascript functies om kenmerken in een modal scherm te tonen
                         Het modal scherm met de kenmerken wordt getoond door de functie showKenmerkModal(key, url, title) aan te roepen.
                         Voor het submitten van een scherm die gebruik maakt van dit modal scherm moet submitten met de functie doSubmitWithKenmerken(key)
     Parameters:         De functies showKenmerkModal(key, url, title) verwacht de volgende parameters
                         key                  Key (Discipline / objectsoort/enz) die zijn eigen groep met kenmerken heeft
                         url                  Url naar kenmerken bestand voor het tonen van de module specifieke kenmeken
                         titel                Parameters die de weergave van het modal scherm bepalen
                         De functie doSubmitWithKenmerken(key) verwacht alleen de bovenstaande parameter key
     Globals:
     Context:            Wordt gebruikt door de XXX_search.asp (overzicht) bestanden
     Note:
*/

// Voeg dkenmmodal divs toe aan de <body>
$(document).ready(function() {
  var content = '<div id="dkenmmodal2" style="display:none"></div>'
              + '<div id="dkenmmodal"></div>' // div "dkenmmodal" wordt buiten het formulier (<form>) gebracht door jquery

  $("form").append(content);
});

(function($)
  { // Om in FireFox de gewijzigde waarden in de velden over te nemen
    // moet deze functie gebruikt worden in plaats van html().
    // Anders krijgt men de velden terug zoals die gezet zijn bij het maken van het scherm.
    var oldHTML = $.fn.html;
    $.fn.formhtml = function()
      {
        if (arguments.length) return oldHTML.apply(this,arguments);
        $("input,button", this).each(function()
        {
            this.setAttribute('value',this.value);
        });
        $("textarea", this).each(function()
        {
            this.innerHTML = this.value;
        });
        $("input:radio,input:checkbox", this).each(function()
        {
            if (this.checked)
                this.setAttribute('checked', 'checked');
            else
                this.removeAttribute('checked');
        });
        $("option", this).each(function()
        {
            if (this.selected)
                this.setAttribute('selected', 'selected');
            else
                this.removeAttribute('selected');
        });
        return oldHTML.apply(this);
      };
      // optional to override real .html() if you want
      // $.fn.html = $.fn.formhtml;
  }
)(jQuery);


// Array voor het opslaan van de html van de kenmerken van de verschillende activiteiten
var kenmerk_html;
var kenmerk_waarden = new Array();
//var script_html = new Array();
var lasturl = "";
var sameurl = false;

// Deze functie uitvoeren als op de zoek button wordt geklikt
function doSubmitWithKenmerken()
{
  $('div#dkenmmodal2').formhtml(kenmerk_html);

  // Strip alle velden er uit die niets doen. Voorkomt extreem lange querystring
  var $dk2 = $('div#dkenmmodal2'); // shortcut
  /* Global kenmerk_waarden */
  for (var m = 0; m < kenmerk_waarden.length; m++)
  {
    if (kenmerk_waarden[m].op == 'IS NOT NULL' || kenmerk_waarden[m].op == 'IS NULL')
        continue; // blijven
    if (kenmerk_waarden[m].val && kenmerk_waarden[m].typ != "R" && kenmerk_waarden[m].typ != "S")
        continue;
    if (kenmerk_waarden[m].val != '-1' && kenmerk_waarden[m].val != '' && (kenmerk_waarden[m].typ == "R" || kenmerk_waarden[m].typ == "S"))
        continue;
    // Schrappen
    $dk2.find("#k" + (m+1) + "val").remove();
    $dk2.find("#k" + (m+1) + "key").remove();
    $dk2.find("#k" + (m+1) + "t").remove();
    $dk2.find("#ko" + (m+1)).remove();
    $dk2.find("#Suggestk" + (m+1) + "_show").remove();
    $dk2.find("#execDonek" + (m+1)).remove();
    $dk2.find("#has_k" + (m+1) + "val").remove();
  }
  document.forms.u2.submit();
  $('div#dkenmmodal2').formhtml("").hide();
}

function kenmerkValues(n)
{
  if ($("#k" + n + "t").val() == "N" && $("#has_k" + n + "val").val() == 1)
  { // Het is een checkbox
    this.checkbox = true;
    if ($("#k" + n + "val").prop("checked"))
      this.val = 1;
    else
      this.val = 0;
  }
  else
    this.val = $("#k" + n + "val").val();

  this.key = $("#k" + n + "key").val();
  this.typ = $("#k" + n + "t").val();
  this.op = $("#ko" + n).val();
  this.suggest = (this.typ == "S"? $("#Suggest" + "k" + n + "_show").val(): "");
}

function showKenmerkModal(purl, ptitle)
{
  // ***** START INTERNE FUNCTIES *****
  function _doOk()
  {
    var kenmerkArray = new Array();
    kenmerk_waarden.length = 0;
    var aantal_kenm = $("#k_all").val();
    // Ingevulde waarden van de kenmerken bewaren.
    for (var n = 1; n <= aantal_kenm; n++)
    {
      kenmerkArray[kenmerkArray.length] = new kenmerkValues(n);
    }
    kenmerk_waarden = kenmerkArray;
    $('div#dkenmmodal').dialog("close");
    // Als dialog scherm gesloten is kunnen we nog bij de kenmerken.
    // Alleen de waarden worden niet meegenomen met de submit, omdat dialog buiten het formulier (<form>) wordt gehouden.
    // Alle velden van dkenmmodal kopiëren naar dkenmmodal2. (Binnen div zetten).
    // Als nu discipline/objectsoort wordt aangepast dan dkenmmodal2 leeg maken.
    // Daarom voor elke catalogus de html van de kenmerken opslaan, zodat later de kenmerken naar modal2 gekopieerd kunnen worden.
    kenmerk_html = $('div#dkenmmodal').formhtml();

    // dkenmmodal leeg maken
    $('div#dkenmmodal').formhtml("");

    // Doorloop kenmerk_waarden om te kijken of er kenmerk waarden zijn ingevuld. Dan op "Geavanceerd.." button een class zetten
    var toggle = false;
    for (var m = 0; m < kenmerk_waarden.length; m++)
    {
      if ((kenmerk_waarden[m].val) || (kenmerk_waarden[m].op=='IS NOT NULL') || (kenmerk_waarden[m].op=='IS NULL') ) toggle = true;
    }

    if (toggle)
      $("li:contains('" + L("lcl_advanced") + "')").addClass("selected");  // zoek op "Geavanceerd", dus zonder ".." erachter!
    else
    {
      $("li:contains('" + L("lcl_advanced") + "')").removeClass("selected");
      kenmerk_html = ""; // Er is geen geavanceerde selectie ingesteld, dus hidden velden voor kenmerken verwijderen.
    }
  }

  function _doReset()
  {
    var aantal_kenm = $("#k_all").val();
    for (i = 1; i <= aantal_kenm; i++)
    {
      $('#ko' + i).val("=");
      $('#k' + i + 'val').val("");
      $('#Suggest' + "k" + i + '_show').val(""); // Mocht het een Suggestbox zijn dan text ook legen
    }
  }

  // ***** EINDE INTERNE FUNCTIES *****

  // Open dialog scherm met de kenmerken
  params = { buttons: { "Ok!": _doOk, "Reset": _doReset },
             //close: _dialogClose,// Niet verwijderen anders hebben we geen toegang meer tot de kenmerken
                                   // $('div#dkenmmodal').remove();
             xheight: 600,
             closeOnEscape: true,
             modal: false,
             resizable: false,
             bgiframe: true, /* IE6 */
             title: ptitle,
             width: 725
           };
/*
    FcltMgr.openModalDetail("../shared/flex_search.asp?load_url=" + escape(purl), ptitle,
            { callback: function (data)
                { kenmerk_html = data;
                    } });

    return;
*/

  if (lasturl == purl)
    sameurl = true;
  else
  {
    sameurl = false;
    kenmerk_waarden.length = 0;
  }
  lasturl = purl;

  // Nu div vullen met asp bestand met url
  $("#dkenmmodal").load(purl,
                        function()
                        {
                          $('div#dkenmmodal').dialog(params).dialog('open')
                          if (sameurl)
                          { // Zet de geselecteerde waarden
                            for (var n = 0; n < kenmerk_waarden.length; n++)
                            {
                              $("#k" + (n + 1) + "t").val(kenmerk_waarden[n].typ);
                              if (kenmerk_waarden[n].typ == "S")
                              {
                                $("#Suggest" + "k" + (n + 1) + "_show").val(kenmerk_waarden[n].suggest)
                              }
                              // Een numeriek "N" kenmerk kan ook een checkbox zijn.
                              if (kenmerk_waarden[n].typ == "N" && kenmerk_waarden[n].checkbox)
                              { // Het is een checkbox.
                                if (kenmerk_waarden[n].val == 1)
                                  $("#k" + (n + 1) + "val").prop("checked", true); // Checkbox aanvinken.
                              }
                              else
                                $("#k" + (n + 1) + "val").val(kenmerk_waarden[n].val);
                              $("#k" + (n + 1) + "key").val(kenmerk_waarden[n].key);
                              $("#ko" + (n + 1)).val(kenmerk_waarden[n].op);
                            }
                          }
                        });
}

function resetFilter()
{
    $("li:contains('" + L("lcl_advanced") + "')").removeClass("selected");
    kenmerk_html = ""; // Er is geen geavanceerde selectie ingesteld, dus hidden velden voor kenmerken verwijderen.
}

