function FillSearchCities(plaatsen) {
   $('l-ID_plaats').empty();
   var option = new Element('option');
   option.innerHTML = 'selecteer een plaats';
   option.value = '';
   option.inject($('l-ID_plaats'));
   plaatsen.each(function(item, index) {
      var option = new Element('option');
      option.innerHTML = item['name'];
      option.value = item['ID'];
      option.inject($('l-ID_plaats'));
   });
   option.selectedIndex = 0; // eerste element selecteren
   $('l-ID_plaats').unspin();
   $('l-ID_plaats').fireEvent('change');
}

function GetSelectedSubrubrieken() {
   var checkedSubrubrieken = Array();
   $$('.innerSearchBlockFormActivities input[type=checkbox].ZCheckbox').each(function(item,index){
      // De geselecteerde rubrieken bewaren, zodat deze straks ook weer geselecteerd kunenn worden gemaakt
      //
      if(item.getValue()=='Yes') {
         checkedSubrubrieken.push(item.id.split('_')[1]);
      }
   });
   return checkedSubrubrieken;
}
var searchCategoriesJSON = null;
var readyToUpdateCategories = false;
var loadingExtraData = false;
var resultsShown = 0;
var resultsAvailable = 0;
var searchOptionsChanged = false;
var lastkeypressed = null;
var minTimeBetweenKeypressAndRequest = 2000;
function GetSearchCategories(force) {
   var checkedSubrubrieken = null;
   var ID_regio = 0;
   var ID_plaats = 0;
   var keyword = '';
   var budget = null;
   var personen = null;
   if($('s-regionCheck').checked) {
      ID_regio = $('l-ID_regio').value;
   }
   if($('s-cityCheck').checked) {
      ID_plaats = $('l-ID_plaats').value;
   }
   if($('s-keywordCheck').checked) {
      keyword = $('s-keyword').value;
   }
   if($('s-activityCheck').checked) {
      checkedSubrubrieken = GetSelectedSubrubrieken();
   }
   if($('s-budget').checked) {
      try {
         var minB = $('s-BudgetSlidermin').value;
         var maxB = $('s-BudgetSlidermax').value;
      }catch(e) {
      }
      budget = {
         'min' : minB,
         'max' : maxB
      }
   }
   if($('s-numberOfPersons').checked) {
      try {
         var minP = $('s-PersonenSlidermin').value;
         var maxP = $('s-PersonenSlidermax').value;
      }catch(e) {
      }
      personen = { 
         'min' : minP,
         'max' : maxP
      }
   }
   
   if($('searchActivities_opened').getStyle('opacity')==1) {
      $('searchActivities_opened').spin({'class':'LoadingActivities'});
   }
   
   var spinner = $('aantalGevonden').get('spinner');
   $('aantalGevonden').innerHTML = '&nbsp;&nbsp;&nbsp;';
   $('aantalGevonden').spin();
   
   if(searchCategoriesJSON != null) {
      // Wanneer hij al bezig was annuleren we hem eerst...
      //
      searchCategoriesJSON.cancel();
      searchCategoriesJSON = null;
   }
   var now = new Date();
//    console.log('now '+(now));
//    console.log('last keypress '+(lastkeypressed));
//    console.log('last keypress was '+(now - lastkeypressed)+ ' ago');
   if((force && readyToUpdateCategories) || (readyToUpdateCategories && (lastkeypressed == null || (lastkeypressed != null && (now - lastkeypressed > minTimeBetweenKeypressAndRequest))))) {
      searchCategoriesJSON = new Request.JSON({url: baseURL+'json', onSuccess: function(response){
         document.fireEvent('jsoncomplete', {element:this, response:response});
      }}).get({'c-Object':'subrubriek' ,'c-Action':'HaalByZoekData', 'l-ID_regio':ID_regio, 'l-ID_plaats':ID_plaats, 's-budget':budget, 's-aantalPersonen':personen, 's-keyword':keyword, 'l-checkedSubrubrieken':checkedSubrubrieken});
   }else {
      GetSearchCategories.delay(500);
   }
}

function UpdateNumSubrubriekenSelected() {
   var checkedSubrubrieken = GetSelectedSubrubrieken();
   try {
      $('numSubrubriekenSelected').innerHTML = checkedSubrubrieken.length;
      if(checkedSubrubrieken.length == 0) {
         $('s-activityCheck').setValue('No');
      }
   }catch(e) {
      // Dit is waarschijnlijk geen zoekpagina   
   }
}

var checkedCategories = {};
function FillSearchCategories(subrubrieken) {
   $('SearchActivitiesColumn1').empty();
   $('SearchActivitiesColumn2').empty();
   $('SearchActivitiesColumn3').empty();
   if($('GeenPresentatiesGevonden')) {
      $('GeenPresentatiesGevonden').destroy();
   }
   var aantal = 0;
   subrubrieken.each(function(item,index){
      var checkbox = new Element('input',{type:'checkbox'});
      checkbox.addClass('styled');
      checkbox.addClass('ZCheckbox');
      checkbox.id = 'l-subr_'+item.ID;
      checkbox.name = 'l-subr_'+item.ID;
      checkbox.store('aantal', item.aantal);
//       console.log(item.ID+' '+item.aantal+' '+item.selected);
      if(item.selected == 'Yes') {
         checkbox.checked = true;
         checkbox.value = 'Yes';
//          console.log('subr_'+item.ID+' checked '+checkbox.checked);
      }
      checkbox.inject($('SearchActivitiesColumn'+(index%3 +1)));

      var label = new Element('label',{'for':checkbox.id});
      label.innerHTML = item.name+' <!-- ('+item.aantal+') -->';
      label.inject($('SearchActivitiesColumn'+(index%3 +1)));
      
      var br = new Element('br');
      br.inject($('SearchActivitiesColumn'+(index%3 +1)));
console.log('aantal '+aantal+' -> '+item.aantal+' -> '+parseInt(item.aantal));
      aantal += parseInt(item.aantal);
   });
   
   $$('.innerSearchBlockFormActivities input[type=checkbox].ZCheckbox').each(function(item,index){
      // Zcheckboxes maken van de rubrieken
      //
      ZCheckboxInstances[ZCheckboxInstances.length] = new ZCheckbox(item);
   });
   $$('.innerSearchBlockFormActivities input[type=checkbox].ZCheckbox').each(ReloadSearchdata); // eventlisteners zetten zodat automatisch opnieuw gezocht wordt na wijzigen formulier
   UpdateNumSubrubriekenSelected();
   $('searchActivities_opened').unspin();
   $('aantalGevonden').unspin();
   setSearchSubrubriekenListeners();
   if(subrubrieken.length == 0) {
      $('s-activityCheck').setValue('No');
      var txt = new Element('div');
      txt.id = 'GeenPresentatiesGevonden';
      txt.innerHTML = 'Geen presentaties gevonden, wijzig uw zoekopdracht';
      txt.inject($$('.innerSearchBlockFormActivities')[0],'top');
      UpdateSearchSubrubriekenHeight();
      //CloseSearchSubrubrieken();
   }else {
      UpdateSearchSubrubriekenHeight();
   }
   $('s-activityCheck').store('aantal', aantal);
   if($('aantalGevonden')) {
      // Als er geen vinkje staat bij zoeken op rubriek, dan tellen alle gevonden uitjes mee, en anders alleen de uitjes bij de aangevinkte rubrieken
      //
      UpdateAantalGevonden();
   }
}

function UpdateSearchSubrubriekenHeight(force) {
   if($('searchActivities_opened').getStyle('opacity') == 1 || force) {
      $('searchActivities_container').removeClass('hidden');
      var floater = 0;
      if($('searchFilterFloater')) {
         floater = $('searchFilterFloater').getSize().y;
      }
      var margin;
      try {
         margin=320+floater + $$('div.ZSlideshow.promotie')[0].getSize().y;
      }catch(e) {
         // geen promotie slider
         //
         margin = 320+floater;
      }
      $$('.content')[0].morph({'margin-top':parseInt(margin+$$('.innerSearchBlockFormActivities')[0].getSize().y)+'px'}) 
      $('searchActivities_container').morph({height:$$('.innerSearchBlockFormActivities')[0].getSize().y});
      $('searchActivities_opened').setStyle('opacity', 1);
      $('searchActivities_closed').morph({opacity:0});
   }
}

function UpdateAantalGevonden() {
   var aantal = 0;
//    console.log('updating aantallen');
   if(!$('s-activityCheck').checked && !isNaN(parseInt($('s-activityCheck').retrieve('aantal')))) {
       aantal = parseInt($('s-activityCheck').retrieve('aantal'));
   }else {
      $$('.innerSearchBlockFormActivities input[type=checkbox].ZCheckbox').each(function(item,index){
         if(item.checked || !$('s-activityCheck').checked) {
            aantal += parseInt(item.retrieve('aantal'));
         }
      });
   }
   $('aantalGevonden').innerHTML = aantal;
   $$('span.searchBlockResult').each(function(item,index){item.removeClass('hidden')});
   
}

function CloseSearchSubrubrieken() {
   var margin;
   var floater = 0;
   if($('searchFilterFloater')) {
      floater = $('searchFilterFloater').getSize().y;
   }
   try {
      margin=320+floater + $$('div.ZSlideshow.promotie')[0].getSize().y;
   }catch(e) {
      // geen promotie slider
      //
      margin = 320+floater;
   }

   $$('.content')[0].morph({'margin-top':margin+'px'})
   $('searchActivities_container').morph({height:'0'});
   $('searchActivities_closed').setStyle('opacity', 1);
   $('searchActivities_opened').morph({'opacity':0});
}

function setSearchSubrubriekenListeners() {
   $$('.innerSearchBlockFormActivities input.ZCheckbox').each(function(item,index){
      item.addEvent('change', function() {
         if(this.checked) {
            $('s-activityCheck').setValue('Yes');
         }
         UpdateAantalGevonden();
      })
   });
}

function AddSearchResults(arrangementen, searchOptionsChanged) {
   // Zoekresultaten dynamisch onderaan de lijst toevoegen.
   // Daarna loadingExtraData op false zetten zodat weer opnieuw gezocht wordt bij omlaag scrollen.
   //
   try {
      $('searchSpinnerContainer').unspin();
   }catch(e) {
      // Nog geen searchSpinner
   }
   
   if(searchOptionsChanged) {
      // First remove the old searchresults from the list
      //
      $$('.results .result').each(function(item,index){
         item.nix(); // dissolves and destroys
      });
   }
   
   try {
      arrangementen.each(function(item, index) {
         // Convert the HTML element to a real DOM object
         //
         var div = new Element('div');
         div.innerHTML = item;
         var arrangement = div.getFirst('.result');
         arrangement.setStyle('opacity',0);
         
         // Toevoegen aan kolom waarin de minste  items staan...
         //
         if($$('#linkerkolom .result').length <= $$('#rechterkolom .result').length || (searchOptionsChanged && index%2==0)) {
            arrangement.inject($('linkerkolom'), 'bottom');
         }else {
            arrangement.inject($('rechterkolom'), 'bottom');
         }
         setResultAnimation(arrangement, $$('.results .result').length); // eventhandlers instellen
         var myFx = new Fx.Elements(arrangement, {
             onComplete: function(){
   //               alert('complete');
             }
         }).start({
             0: {
                 /* height: [0, arrangement.getDimensions().height],*/
                 height: [0, parseInt(arrangement.getStyle('height'))],
                 opacity: [0,1]
             }
         });
         myFx.start();
      });
   }catch(e) {
      // Geen arrangementen gevonden
      //
   }
   loadingExtraData = false;
}

function ReloadSearchdata(item, index) {
   if(page=="zoeken") {
      item.addEvent('change', function() {
         // Wanneer er iets op het zoekformulier wijzigt zetten we searchOptionsChanged
         //
         searchOptionsChanged = true;
         
         // En zetten we een delay om na een aantal seconden opnieuw te gaan zoeken
         //
         var searchAgain = function() {
            var subrubrieken = "";
            if($('s-activityCheck').checked) {
               subrubrieken = GetSelectedSubrubrieken().toString();
            }
            loadingExtraData = true;
            GetWithJSON("&c-Object=arrangement&c-Action=GetNextSearchResults&c-Offset=0&c-Limit=10&searchOptionsChanged=1&l-subrubriek="+subrubrieken);
         }
         if(loadingExtraData) {
            clearInterval(loadingExtraData);
         }
         loadingExtraData = searchAgain.delay(3500);
      });
   }
}


window.addEvent('domready', function() {
   try {
      $('l-ID_regio').addEvent('change', function() {
         $('s-regionCheck').setValue((this.value=='')?'No':'Yes');
         if(!$('s-regionCheck').checked) {
            $('s-cityCheck').setValue('No');
            $('l-ID_plaats').empty();
            var option = new Element('option');
            option.innerHTML = 'Selecteer eerst een regio';
            option.value = '';
            option.inject($('l-ID_plaats'));
            option.selectedIndex = 0; // eerste element selecteren
            $('l-ID_plaats').fireEvent('change');
         }else {
            $('l-ID_plaats').empty();
            var option = new Element('option');
            option.innerHTML = "Een ogenblik geduld...";
            option.value = '';
            option.inject($('l-ID_plaats'));
            option.selectedIndex = 0; // eerste element selecteren
            $('l-ID_plaats').fireEvent('change');
            $('l-ID_plaats').spin();
            var jsonRequest = new Request.JSON({url: baseURL+'json', onSuccess: function(response){
               this.fireEvent('jsoncomplete', {element:this, response:response});
               document.fireEvent('jsoncomplete', {element:this, response:response});
            }.bind(this)}).get({'c-Object':'geostad' ,'c-Action':'GetPlaatsenByProvincie', 'l-ID_regio':$('l-ID_regio').value});
            
         }
         
         GetSearchCategories(true);
      });
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
   }

   try {
      $('s-keyword').addEvent('change', function() {
         $('s-keywordCheck').setValue((this.value=='')?'No':'Yes');
         GetSearchCategories.delay(50);
      });
      $('s-keyword').addEvent('keyup', function() {
         $('s-keywordCheck').setValue((this.value=='')?'No':'Yes');
         GetSearchCategories.delay(50);
      });
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
      //console.log(e);
   }

   try {
      $('l-ID_plaats').addEvent('change', function() {
         $('s-cityCheck').setValue((this.value=='')?'No':'Yes');
         GetSearchCategories(true);
      });
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
      //console.log(e);
   }

   try {
      $('s-regionCheck').addEvent('change', function() {
         if(!this.checked) {
            $('s-cityCheck').setValue('No');
         }
         GetSearchCategories(true);
      })
   }catch(e) {
   
   }

   try {
      $('s-cityCheck').addEvent('change', function() {
         if(this.checked) {
            $('s-regionCheck').setValue('Yes');
         }
         GetSearchCategories(true);
      })
   }catch(e) {
   
   }

   try {
      $('s-activityCheck').addEvent('change', function() {
         UpdateAantalGevonden();      
      });
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
      //console.log(e);
   }

   try {
      setSearchSubrubriekenListeners();
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
      //console.log(e);
   }

   try {
      $$('#SearchForm input, #SearchForm select').each(ReloadSearchdata);
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
      //console.log(e);
   }

   // Zoekformulier activiteiten open en dichtklappen
   //
   try {
      $('searchActivities_opened').addEvent('click', function() {
         // content en results omhoogschuiven
         //
         UpdateNumSubrubriekenSelected();
         CloseSearchSubrubrieken();
      });
      $('searchActivities_closed').addEvent('click', function() {
         // content en results omhoogschuiven
         //
         UpdateSearchSubrubriekenHeight(true);
      });
      $('searchActivities_closed').set('morph', {
         onComplete: function() {
            $('searchActivities_closed').setStyle('zIndex','0');
            $('searchActivities_opened').setStyle('zIndex','1');
         }
      });
      $('searchActivities_opened').set('morph', {
         onComplete: function() {
            $('searchActivities_opened').setStyle('zIndex','0');
            $('searchActivities_closed').setStyle('zIndex','1');
         }
      });
      $('searchActivities_container').set('morph', {
         onComplete: function() {
            if($('searchActivities_container').getSize().y<20) {
               $('searchActivities_container').addClass('hidden');
            }
         }
      });
      $$('.results')[0].setStyle('overflow','hidden');
      var margin;
      var floater = 0;
      if($('searchFilterFloater')) {
         floater = $('searchFilterFloater').getSize().y;
      }
      try {
         margin=320+floater + $$('div.ZSlideshow.promotie')[0].getSize().y;
      }catch(e) {
         // geen promotie slider
         //
         margin = 320+floater;
      }      
      $$('.content')[0].setStyle('margin-top', margin+'px');
      $('searchActivities_opened').setStyles({'opacity': 0, 'zIndex':0});
      $('searchActivities_closed').setStyles({'opacity': 1, 'zIndex':1});
      $('searchActivities_closed').removeClass('hidden');
      $('searchActivities_container').setStyles({height:'0px'});
      $('searchActivities_container').addClass('hidden');
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
   }
   
   // Budget en aantal personen sliders
   //
   try {
      $$('.ZRangeSlider').each(function(item,index) {
         new ZRangeSlider({element:item,method:"html"});
      });
      $('s-budget').addEvent('change', function() {
         GetSearchCategories(true);
      });
      $('s-numberOfPersons').addEvent('change', function() {
         GetSearchCategories(true);
      });
      $('s-keywordCheck').addEvent('change', function() {
         GetSearchCategories();
      });
      $('s-PersonenSlider').addEvent('range:OnChange', function() {
         var min = $('s-PersonenSlidermin').value;
         $('lblMinPersonen').innerHTML = (min >= 200)?'200+':min;
         $('s-numberOfPersons').setValue('Yes');
         GetSearchCategories(true);
      })  
      $('s-BudgetSlider').addEvent('range:OnChange', function() {
         var min = Math.min($('s-BudgetSlidermin').value, $('s-BudgetSlidermax').value);
         var max = Math.max($('s-BudgetSlidermin').value, $('s-BudgetSlidermax').value);
         $('lblMinBudget').innerHTML = (min >= 200)?'200+':min;
         $('lblMaxBudget').innerHTML = (max >= 200)?'200+':max;
         $('s-budget').setValue('Yes');
         GetSearchCategories(true);
      })  
      $('s-Personen').fireEvent('range:OnChange');
      $('s-Budget').fireEvent('range:OnChange');
   }catch(e) {
      // Mogelijk is er op de betreffende pagina geen zoekformulier
      //
   }
   // ---------------------------------

   // Sorteervolgorde aanpassen
   //
   try {
      $('o-OrderField').addEvent('change', function() {
         if(page=="zoeken" || page=="top100") {
            GetWithJSON("&c-Object=arrangement&c-Action=GetNextSearchResults&c-Offset=1&o-OrderField="+this.value+"&c-Limit=10&searchOptionsChanged=1&page="+page);
         }else if(page=="recensies") {
            GetWithJSON("&c-Object=recensie&c-Action=GetNextSearchResults&c-Offset=1&o-OrderField="+this.value+"&c-Limit=10&searchOptionsChanged=1");
         }
      })
   }catch(e) {
      //  Mogelijk is er op de betreffende pagina geen sorteerbalk
      //
   }
   
   // -------------------------


   // Automatisch extra zoekresultaten laden bij omlaag scrollen
   //
   if(page=="zoeken" || page=="recensies" || page=="top100") {
      window.addEvent('scroll', function() {
         resultsShown = $$('.results .result').length;
         resultsAvailable = parseInt($('aantalGevonden').innerHTML);
         if(window.getScrollSize().y - (window.getScroll().y+window.getSize().y) < 1500 && !loadingExtraData && resultsShown < resultsAvailable) {
//             console.log('load next 10 results...');
            loadingExtraData = true;
            searchSpinnerContainer.spin();
            if(page=="zoeken" || page=="top100") {
               GetWithJSON("&c-Object=arrangement&c-Action=GetNextSearchResults&c-Offset="+(parseInt(resultsShown)+1)+"&c-Limit=10&page="+page);
            }else if(page=="recensies") {
               GetWithJSON("&c-Object=recensie&c-Action=GetNextSearchResults&c-Offset="+(parseInt(resultsShown)+1)+"&c-Limit=10");
            }
         }
         
      });
      // Verwijder ook de paginering balk
      // 
      var searchSpinnerContainer = new Element('div', {id:'searchSpinnerContainer'});
      searchSpinnerContainer.inject($('searchNav'),'after');
      $('searchNav').dispose();
   }

   // ----------------------------------------------------------

   window.addEvent('keyup', function() {
      lastkeypressed = new Date();
   })

   // Vanaf nu mogen de categorien geupdate worden bij onchange events.
   //
   readyToUpdateCategories = true;
   UpdateNumSubrubriekenSelected();
   GetSearchCategories.delay(500);
});
