﻿// Javascript File
var cCookieName = "";
var bResult = false;
var cTargetTab = "";
var bWait = true;
var bIE_DOM = false;
bIE_DOM = isMSIE = /*@cc_on!@*/0;
var xmlDataSet = parseXML("<data />");
try{
  xmlDataSet.setProperty("SelectionLanguage", "XPath");
}
catch(err){}

  function parseXML(data) {
      var isMSIE = /*@cc_on!@*/0;

      if (window.DOMParser && !isMSIE) { // Standard
          var tmp = new DOMParser();
          var xml = tmp.parseFromString(data, "text/xml");
      } else { // IE
          var xml = new ActiveXObject("Microsoft.XMLDOM");
          xml.async = "false";
          xml.loadXML(data);
      }
   
//      tmp = xml.documentElement;
   
//      if (!tmp || !tmp.nodeName || tmp.nodeName === "parsererror") {
//          jQuery.error("Invalid XML: " + data);
//      }
   
      return xml;
  }


$(document).ready(function()
{
      $(document).bind('refresh_filterlist', function(e) {
        var objIds = [];
        objIds.length = 0;

        var objIds = $(".ListFilterResult").data("objects");

        // Bouw een xml-string op voor de verversing
        objIds.sort(function(a,b){return a - b}) //Sorteren op objectID's

        var selectxml = "<param>";
        var lastid = 0;
        for (i=0;i<objIds.length;i++){
          if(lastid!=objIds[i]) selectxml += "<objectid>" + objIds[i] + "</objectid>";
          lastid=objIds[i];
        } // einde for
        selectxml += "</param>";
        
        // Bepaal de containerId welke gebruikt wordt om te tonen...
        var cResultId = "#" + $(".SearchObjects:has(#cntResponse)").attr("id") + " ";
        // Toon een wacht-animatie
        if (bWait) $(cResultId+"#cntResponse").html("<img src='images/dnnanim.gif' />");
        // Ververs de objectenlijst
        $(this).trigger('list_print', [cResultId, selectxml, false]);
        
        
//        cCookieName = $(cID+"#cookiename").val();
//        $.cookie(cCookieName, selectxml, { expires: 500, path: '/'});
//        $(cID+"#xmlFilter").val(selectxml)

//        // Redirect naar de resultaten pagina     
//        if (bWait) $(cID+"#cntResponse").html("<img src='images/dnnanim.gif' />");
//        cTargetTab = $(cID+"#targettab").val();
//        if(cTargetTab!=""){
//          window.location = cTargetTab; 
//        }else{
//          // Zoek een lijstweergave
//          var cResultId = "#" + $(".SearchObjects:has(#cntResponse)").attr("id") + " ";

//          $(this).trigger('list_print', [cResultId, selectxml, false]);
//        }        
      }); // einde refresh_filterlist

      // Code voor afhandeling als resultaatlijst
      // Verversen van het resultaat
      $(document).bind('list_print', function(e, cParentId, xml, bScroll) {
        cCookieName = $(cParentId+"#cookiename").val();

        var ajaxTimeout = 10000;
        var cPostURL = $(cParentId+"#postURL").val();
        var cTemplate = $(cParentId+"#template").val();
        var cTargetTab = $(cParentId+"#targettab").val();
        var sortorder = $(cParentId+"#sortorder").val();
        var PortalId = $(cParentId+"#portalid").val();
        //alert(xml);
        
        pst=$.ajax({url: cPostURL,
          type: "POST", 
          timeout: ajaxTimeout,
          data: xml,
          beforeSend:function(XMLHttpRequest){
            XMLHttpRequest.setRequestHeader("template",cTemplate);
            XMLHttpRequest.setRequestHeader("targettab",cTargetTab);
            XMLHttpRequest.setRequestHeader("sortorder",sortorder);
            XMLHttpRequest.setRequestHeader("portalid",PortalId);
          },
          error: function(req, error){
            alert('fout bij verzenden gegevens naar ' + cPostURL + ', neem contact op met de support afdeling.\nfoutmelding:' + error.toString());
          }
          ,success: function(resp) {      
            // start succes
            try{
              $(cParentId+"#cntResponse").html(resp);
              //$("#calcForm").hide();
            }
            catch(err){
              $(cParentId+"#cntResponse").html(err.toString());
            }
            if (bScroll){
              var lastselected = $.cookie(cCookieName + '_lastobject');
              if (lastselected!= null && lastselected!=""){
                //alert("activeren: " + lastselected);
                try {
                  $(document).scrollTop($(cID+'#' + lastselected).position().top);
                }catch(ex){}
              }
            }
          } // close succes: function(xml)
        }); // close $.ajax
      }); // einde list_print

      // Genereer een mogelijkheid om de lijst te updaten
      $(document).bind('refresh_count', function(e, cParentID) {
        // generate a XPATH query
        var filter = ""
        if ($(cParentID + "input#defaultxpath").val().trim()!="") filter+=((filter!="")?" and ":"")+ $(cParentID+"input#defaultxpath").val().trim();
        if ($(cParentID + "input#txtAdres").length != 0 && $(cParentID + "input#txtAdres").val().trim()!="") filter+=((filter!="")?" and ":"")+ "starts-with(adres,'" + $(cParentID+"input#txtAdres").val().trim().toLowerCase() + "')";
        if ($(cParentID + "input#txtPostcode").length != 0 && $(cParentID + "input#txtPostcode").val().trim()!="") filter+=((filter!="")?" and ":"")+ "starts-with(postcode,'" + $(cParentID+"input#txtPostcode").val().trim() + "')";

        if ($(cParentID + "select#listPlaatsnamen").length != 0 && $(cParentID + "select#listPlaatsnamen option:selected").length !=$(cParentID+"select#listPlaatsnamen option").length){
          var plaatsfilter = "";
          $(cParentID + "select#listPlaatsnamen option:selected").each(function () {
            plaatsfilter += ((plaatsfilter!="")?" or ":"") + 'translate(plaatsnaam, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")="' + this.value.toLowerCase() + '"';
          });
          if (plaatsfilter!="") filter+=((filter!="")?" and ":"")+ "(" + plaatsfilter + ")";
        }    

        var minprijs = $(cParentID + "select#minPrijs option:selected").val();
        var maxprijs = $(cParentID + "select#maxPrijs option:selected").val();

        if (parseInt(maxprijs) < parseInt(minprijs)){
          maxprijs=minprijs;
          $(cParentID + "select#maxPrijs").val(maxprijs);
        }

        var minprijsFilter = "";
        var maxprijsFilter = "";
        if (minprijs!=0) minprijsFilter = "prijs >= " + minprijs.toString();
        if (maxprijs!=99999999) maxprijsFilter = "prijs <= " + maxprijs.toString();
        if (minprijsFilter!="" && maxprijsFilter!="") filter+=((filter!="")?" and ":"") + "(" + minprijsFilter + " and " + maxprijsFilter + ")";
        if (minprijsFilter!="" && maxprijsFilter=="") filter+=((filter!="")?" and ":"") + "(" + minprijsFilter + ")";
        if (minprijsFilter=="" && maxprijsFilter!="") filter+=((filter!="")?" and ":"") + "(" + maxprijsFilter + ")";

        var xpath = "/data/objecten" + ((filter=="")?"":"[" + filter + "]");
        var ResultCount = 0;

        $(cParentID + "#xpath").val(xpath + "/objectid");
        $(cParentID + "#resultcounter").html("<strong>" + ResultCount.toString() + "</strong> regels voldoen aan de opgegeven filter*: <br/>" + xpath);
        if (bIE_DOM) {
          var oResult = xmlDataSet.selectNodes(xpath);
          if (oResult != null) ResultCount = oResult.length;
        }else{
          var oEvaluator = new XPathEvaluator();
          var oResult = oEvaluator.evaluate(xpath, xmlDataSet.documentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
          if (oResult != null) {
            var oElement = oResult.iterateNext();
            while(oElement) {
              ResultCount ++;
              oElement = oResult.iterateNext();
            }
          }
        }
        $(cParentID + "#resultcounter").html("<strong>" + ResultCount.toString() + "</strong> regels vallen binnen het zoekresultaat.");
        $(cParentID + "#resultCount").val(ResultCount);
      }); // einde refresh_count

      $(document).bind('refresh_filters', function(e) {
        var ListContainers =  $(".ListFilter", document);

        var container = $(ListContainers[0]);
        MainObjIds = [];
        MainObjIds.length = 0;

        // Bouw de startlijst met alle beschikbare objectid's op
        $(".filterCheck", container).each(function(index){
          //var aObjects = $(this).data("objects");
          var value=$(this).val();
          $(value.split(",")).each(function(index, objectid){
            if(jQuery.inArray( objectid, MainObjIds)==-1) MainObjIds[MainObjIds.length] = objectid;
          });
        });
        
        ListContainers.each(function(index){
          // Lus door de elementen heen
          var container = $(this);
          //alert($(".ListFilterHdr", this).text());
          // selecteer alle checkboxes
          $(".filterCheck", container).each(function(index){
              var value=$(this).val();
              //alert(value + "--'" + $(this).next(".counter").length + "'");
              var bIsInMainList = false;
              var aObjects = $(this).data("objects");
              count = 0;
              if(value!=""){
                $(value.split(",")).each(function(index, objectid){
                  var pos = jQuery.inArray( objectid, MainObjIds);
                  // Verwijder het objectId
                  if(pos!=-1) {
                    bIsInMainList = true;
                    count = count + 1
                  }
                });
              }

              if(!bIsInMainList){
                checked = $(this).attr('checked')
                count=0;
                
                $(this).removeAttr("checked");
                $(this).data('oldval', checked)
                $(this).attr('disabled', 'disabled');
              }else{
                $(this).removeAttr('disabled');
                if ($(this).data('oldval') == true){
                   $(this).attr('checked', 'checked');
                }

                checked = $(this).attr('checked')
                if(!checked) count=0;
              }

              //$(this).next(".counter").html(count);
          });

          // selecteer alle checkboxes
          count = 0;

          $(".filterCheck", container).each(function(index){
            var value=$(this).val();
            var checked = $(this).attr("checked");
            // Verwijder objectids van geselecteerde elementen
            if(!checked){
              $(value.split(",")).each(function(index, objectid){
                var pos = jQuery.inArray( objectid, MainObjIds);
                // Verwijder het objectId
                if(pos!=-1) {
                  MainObjIds.splice(pos,1);
                }
              });
            }else{
              count = count + value.split(",").length;
            }
          });

          // Update de header
          container.find(".maincounter").text(MainObjIds.length);
          $(".ListFilterResult").data("objects",MainObjIds);
          $(".ListFilterResult").html(MainObjIds.length.toString() + " resultaten na filtering...")
        });
      });      // Einde refresh_filters

  $(".SearchObjects").each(function(index) {
    
    var cID = "#" + $(this).attr("id") + " ";
    var strXml = $(cID+"#xmlsearch").val();
    var PortalId = $(cID+"#portalid").val();
    //var parser = new DOMParser();
    //var xmlDataSet = parser.parseFromString(strXml, "text/xml");
    xmlDataSet = parseXML(strXml);
    try{
      xmlDataSet.setProperty("SelectionLanguage", "XPath");
    }
    catch(err){}

    cTargetTab = $(cID+"#targettab").val();
    bResult = ($(cID+"#isResult").val() == "true");
    cCookieName = $(cID+"#cookiename").val();
//    if($(cID+"#cookiename").attr("type")=="text"){
//      alert("cookie:" + cCookieName);
//    }
    if (! bResult){
      var bIE_DOM = typeof xmlDataSet.getElementsByTagName("data")[0].text=="string";

      // Afvangen van change event van de lists
      $("select.handleevent").change(function(){
          var cID = "#" + $(this). closest(".SearchObjects").attr("id") + " ";
          if ($(cID + "input#txtAdres").length != 0 || $(cID + "select#listPlaatsnamen").length != 0){
            $(document).trigger('refresh_count', [cID]);
          }
      }); // einde listPlaatsnamen.change()

      $("input.handleevent").keyup(function(){
          var cID = "#" + $(this).closest(".SearchObjects").attr("id") + " ";
          if ($(cID + "input#txtAdres").length != 0 || $(cID + "select#listPlaatsnamen").length != 0){
            $(document).trigger('refresh_count', [cID]);
          }

      }); // einde txtAdres.keyup()
      

      $(".ToonResultaten").click(function(){
        var cID = "#" + $(this).closest(".SearchObjects").attr("id") + " ";

        // Haal een range op van alle objecten die voldoen
        var xpath = $(cID+"#xpath").val();
        if (xpath == "")
          xpath = "*";
        var selectxml = "<param>";
        if (bIE_DOM) {
          var oResult = xmlDataSet.selectNodes(xpath);
          if (oResult != null){
            for (i=0;i<oResult.length;i++){
              selectxml += "<objectid>" + oResult[i].text + "</objectid>";
            } // einde for
          } // einde if
        }else{
          var oEvaluator = new XPathEvaluator();
          var oResult = oEvaluator.evaluate(xpath, xmlDataSet.documentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
          if (oResult != null) {
            var oElement = oResult.iterateNext();
            while(oElement) {
              selectxml += "<objectid>" + oElement.textContent + "</objectid>";
              oElement = oResult.iterateNext();
            } // einde while
          } // einde if
        } // einde else
        selectxml += "</param>";
        //contentType: "text/txt"

        //alert(selectxml);
        cCookieName = $(cID+"#cookiename").val();
        $.cookie(cCookieName, selectxml, null);
        //$.cookie(cCookieName, selectxml, { expires: 500, path: '/'});
        $(cID+"#xmlFilter").val(selectxml)

        // Redirect naar de resultaten pagina     
        if (bWait) $(cID+"#cntResponse").html("<img src='images/dnnanim.gif' />");
        cTargetTab = $(cID+"#targettab").val();
        if(cTargetTab!=""){
          window.location = cTargetTab; 
        }else{
          // Zoek een lijstweergave
          var cResultId = "#" + $(".SearchObjects:has(#cntResponse)").attr("id") + " ";
          $(this).trigger('list_print', [cResultId, selectxml, false]);
        }
      }); // einde $(".ToonResultaten").click(function(){

      $(".StartFilter").click(function(){
        $(this).trigger('refresh_filterlist');
      });

      $(".filterCheckReset").click(function(){
        $(".filterCheck", $(this).parent()).each(function(index){
          $(this).attr("checked", "checked");
        });
        $(this).trigger('refresh_filters');
      });

      $(".ListFilterHdr").click(function(){
        $(".filterCheck", $(this).parent()).each(function(index){
          $(this).removeAttr("checked");
        });

        $(this).trigger('refresh_filters');
      });

      $(".filterCheck").click(function(){
        $(this).data('oldval', null)
        $(this).trigger('refresh_filters');
      });


      //var objIds = [];
      
      // Refresh van de teller
      if ($(cID + "input#txtAdres").length != 0 || $(cID + "select#listPlaatsnamen").length != 0){
        $(document).trigger('refresh_count', [cID]);
      }
    }else{// einde if bresult 


      var sortorder = $(cID+"#sortorder").val(); // Std volgorde
      $("input[name='optsortorder']").each(function(index) {
        var value = "";
        if ($(this).val()==sortorder){value="checked"};
        $(this).attr("checked", value);
      });
    
      $("input[name='optsortorder']").click(function(){
        var cID = "#" + $(this).closest(".SearchObjects").attr("id") + " ";
        cCookieName = $(cID+"#cookiename").val();
        sortorder = $(cID+"#sortorder").val();
        if (sortorder!=this.value){
          sortorder = this.value
          $(cID+"#sortorder").val(sortorder);
          
          var listxml = $(cID+"#xmlFilter").val();
          //alert(listxml);
  //        if (cSourceType=="1") listxml = $.cookie(cCookieName);
  //        if (cSourceType=="2") listxml = $(cID+"#xmlFilter").val();

          if (listxml!= null && listxml!=""){
            $(cID+"#cntResponse").html("<img src='/images/dnnanim.gif' />");
            $(this).trigger('list_print', [cID, listxml, false]);
          }
        }
      });
    }// einde if bresult 
  }); // Einde each
/*



   


//    $(".object_link").live("click", function(){
//      var cID = "#" + $(this).parent(".SearchObjects").attr("id") + " ";
//      cCookieName = $(cID+"#cookiename").val();
//      var target = this.id;
//      //alert(target);
//      $.cookie(cCookieName + '_lastobject', target,{ expires: 500, path: '/'});
//    });

  }else{

//    var listxml = $.cookie(cCookieName);
//    if (listxml!= null && listxml!=""){
//      $(this).trigger('list_print', [listxml, true]);
//    }
  }
 // $.scrollTo( '#' + lastselected, 1500, {easing:'easeOutElastic'} );                

*/
}); // einde .ready(function()

