/***************************************************************
*  Copyright notice
*
*  (c) 2009 Netcreators <klaus@netcreators.com>
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license
*  from the author is found in LICENSE.txt distributed with these scripts.
*
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* ncverdictsearch.js
*
* @author Klaus Bitto <klaus@netcreators.com> 
*/

var currentView = {
  getNextQuery: function() {
    if(!this.hasMore)
      return false;
    this.offset += this.limit;
    var offsetQuery = this.query + '&' + escape('tx_ncverdictsearch_pi1[offset]') + '='+this.offset;
    return offsetQuery;
  },
  init: function() {
    this.query = '';
    this.offset = 0;
    this.limit = 0;
    this.hasMore = true;
    this.searching = false;
  }
};

$(document).ready(function() {
  var datepickerOptions = {
    changeMonth: true,
    changeYear: true,
    dateFormat: 'dd-mm-yy',
    dayNames: [ "Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"],
    dayNamesShort: [ "Zon", "Maan", "Din", "Woe", "Don", "Vrij", "Zat"],
    dayNamesMin: [ "Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"],
    firstDay: 1,
    monthNames: [ "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
    monthNamesShort: [ "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
    showOtherMonths: true,
    yearRange: '1995:+'+(new Date()).getFullYear()
  };
  $('#ncverdictsearch-date-after').datepicker(datepickerOptions);
  $('#ncverdictsearch-date-before').datepicker(datepickerOptions);
  $('#ncverdictsearch-searchword1').keyup(onChangeSearchword);
  $('#ncverdictsearch-searchword2').keyup(onChangeSearchword);
  $('#ncverdictsearch-search-methods').accordion({ 
    autoHeight: false,
    header: 'h3',
    active: 1,
    change: function(event, ui) {
      var active = $('#ncverdictsearch-search-methods').accordion('option', 'active');
      if(active != 0)
        $('#ncverdictsearch-code').attr("value","");
    }
  });
  $('#ncverdictsearch-form').ajaxForm({
    beforeSubmit: onBeforeInitialSearch,
    success: onInitialSearchSuccess,
    async: true
  });
  $(window).scroll(onScroll);
  $('#ncverdictsearch-form :submit').enable(true);
  //$('#ncverdictsearch-searchMoreButton').click(searchMore);
}); 

function onBeforeInitialSearch(formData, jqForm, options) {
  $('#ncverdictsearch-results').empty();
  $(':submit', jqForm).html('Zoeken...').enable(false);
  $('#ncverdictsearch-upper-searchThrobber', jqForm).removeClass('ncverdictsearch-hidden');
  $('#ncverdictsearch-lower-searchThrobber', jqForm).removeClass('ncverdictsearch-hidden');
  $('#ncverdictsearch-noMoreResults').addClass('ncverdictsearch-hidden');
  populateCurrentView(jqForm);
  onBeforeSearch(formData, jqForm, options);
}

function onBeforeSearchMore(formData, jqForm, options) {
  $('#ncverdictsearch-searchMoreThrobber').removeClass('ncverdictsearch-hidden');
  onBeforeSearch(formData, jqForm, options);
}

function onBeforeSearch(formData, jqForm, options) {
  currentView.searching = true;
}

function onInitialSearchSuccess(data, status) {
  $('#ncverdictsearch-form :submit').html("Zoek!").enable(true);
  $('#ncverdictsearch-upper-searchThrobber').addClass('ncverdictsearch-hidden');
  $('#ncverdictsearch-lower-searchThrobber').addClass('ncverdictsearch-hidden');
  onSearchSuccess(data, status);
  self.location.href = self.location.href.split("#")[0] + "#ncverdictsearch-results";
}

function onSearchMoreSuccess(data, status) {
  $('#ncverdictsearch-searchMoreThrobber').addClass('ncverdictsearch-hidden');
  onSearchSuccess(data, status);
}

function onSearchSuccess(data, status) {
  var resultsContainer = $('#ncverdictsearch-results');
  $('h2', resultsContainer).removeClass('ncverdictsearch-hidden');
  var data = $.secureEvalJSON(data);
  if(!data.length) {
    currentView.hasMore = false;
    $('#ncverdictsearch-noMoreResults').removeClass('ncverdictsearch-hidden');
    return;
  }
  for(var i=0;i<data.length;i++) {
    var resultBox = $('#ncverdictsearch-search-result-model-container .ncverdictsearch-search-result').clone();
    $('div.ncverdictsearch-search-result-date', resultBox).html(data[i].date);
    var permalink = $('div.ncverdictsearch-search-result-permalink a', resultBox);
    permalink.attr('href',
      permalink.attr('href') + data[i].verdictId
    );
    $('h3', resultBox).html(data[i].header);
    $('p', resultBox).html(data[i].bodytext);
    resultsContainer.append(resultBox);
  }
  currentView.searching = false;
}

function populateCurrentView(jqForm) {
  currentView.init();
  currentView.query = jqForm.formSerialize();
  currentView.limit = parseInt(jqForm[0]['tx_ncverdictsearch_pi1[limit]'].value);
}

function searchMore() {
  if(currentView.searching)
    return;
  var nextData = currentView.getNextQuery();
  if(!nextData) // end of results hit already.
    return;
  $.ajax({
    beforeSend: onBeforeSearchMore,
    success: onSearchMoreSuccess,
    data: nextData,
    url: '/index.php',
    async: true
  });
}

function onScroll(e) {
  if  ($(window).scrollTop() > $(document).height() - $(window).height() - 50 /* threshold */){
    searchMore();
  }
}

var searchwordAutoShow = {
  "ncverdictsearch-searchword1": "#ncverdictsearch-searchword-extrabox1",
  "ncverdictsearch-searchword2": "#ncverdictsearch-searchword-extrabox2"
}

function onChangeSearchword(e) {
  var influencedElement = $(searchwordAutoShow[this.id]);
  var influencedElementInput = $(searchwordAutoShow[this.id]+' input');
  if(this.value.length > 0) {
    influencedElement.removeClass('ncverdictsearch-hidden');
  } else {
    influencedElement.addClass('ncverdictsearch-hidden');
    influencedElementInput.attr('value','');
    influencedElementInput.keyup();
  }
}