var initial = true;
var selected = '';

// Set to false after facet blocks are build initially. After that we can just
// update the counts belonging to the facets, rather than build them again.
var facetSearchInitial = false;

// Globally keep track of the searchpage we are on.
var facetSearchCurrentPage = 0;

// Number of visible pagenumbers.
var facetSearchPageNumbersVisible = 11;

// Variables set in the showResult function, where we have the data(search result object).
// NOTE: used for paging(should make plugin to prevent global variables)

// Number of results.
var facetSearchNumRows = 0;

// Total number of pages(depends on the items per page).
var facetSearchNumPages = 10;

// Number of items per page.
var facetSearchNumPerPage = 25;

$(document).ready(function(){
  if ($("#solrSearchFacetsAdvanced").length > 0){
    $("#searchform").submit(formProcess);

    search('initial');

    //initially hide the video player on top
    $("div[id*='cover_container_']").hide();

    moveSearchFieldsToPagePart();
    $("#query").autocomplete( {
      source: $("#autocompleteurl").attr("value"),

      minLength: 2

    });

    $('a.moreLink').live('click',function() {
      myId = $(this).attr("id");

      visible = $('#div' + myId).css("display");

      if (visible == 'none') {
        $('#div' + myId).show('blind');
        $(this).html('Minder');
      } else {
        $('#div' + myId).hide('blind');
        $(this).html('Meer');
      }
      return false;
    });

    //when clicked on a filter
    $('a.facet').live("click", searchFacet);

    //when clicked on a choosen filter (means remove!)
    $('#choosenFilters a.facet').live("click", removeFacet);

    $('.suggestion').live("click", function(){
      newkeyword = $(this).attr("id");
      $('#query').val(newkeyword);
      search();
      $('#suggestions').html("");
      return false;
    });

    // Bind click to the next option of the pager.
    $('a.next').bind('click', function(event) {
        if (facetSearchCurrentPage < (facetSearchNumPages-1)) {
            facetSearchCurrentPage++;
            $('html, body').animate({scrollTop:0}, 'slow');
            search();
        }
        return false;
    });

    // Initially hide the next and previous link.
    $('span.previous').hide();
    $('span.next').hide();

    // Bind click to the previous option of the pager.
    $('a.previous').bind('click', function(event) {
        if (facetSearchCurrentPage > 0) {
            facetSearchCurrentPage--;
            $('html, body').animate({scrollTop:0}, 'slow');
            search();
        }
        return false;
    });

    $("#solrSearchFacetsAdvanced input[type='submit']").click(function(){
      facetSearchCurrentPage = 0;
      search('',$(this).val());
      return false;
    });
  }

});

function removeFacet(){
  $(this).remove();

  // update all counters for the facets
  /*
  $('.facetdef').each(function() {
    search('',$(this).val());
  });
  */
  facetSearchCurrentPage = 0;
  search('',$(this).val());
}

function hideMoreDivs() {
  // hide the "more" divs
  $("div.more").each(function() {
    $(this).hide();
  });
}

function formProcess(event) {
  event.preventDefault();

  search('');

  return false;
}

function search(mode, currentFacet) {
  // hide the "more" divs
  hideMoreDivs();

  //put the keyword in the searchresult title
  $("#keywordResult").html($("#query").val());

  if ($('#ajaxcall').length > 0) {
    base = $('#ajaxcall').attr("href");

    // Determine the start index.
    var start = (facetSearchCurrentPage) * facetSearchNumPerPage;

    base += '&start=' + start;
    base += '&query=' + encodeURI($('#query').val());
    base += '&queryOr=' + encodeURI($('#queryOr').val());
    base += '&queryNot=' + encodeURI($('#queryNot').val());
    base += '&queryFrom=' + encodeURI($('#queryFrom').val());
    base += '&queryTo=' + encodeURI($('#queryTo').val());
    base += '&numberofitemsperpage=' + $('#nrOfItemsPerPage').val();
    base += '&numberofsnippets=' + $('#nrSnippets').val();
    base += '&snippetlength=' + $('#snippetLength').val();
    base += '&timelimitSearch=' + $('#timelimitSearch').val();
    base += '&facets=' + $('#facets').val();

    if (mode != 'initial') {

      $("input.facetdef").each(function() {
        if ($(this).val() != currentFacet) {
          base += '&facets=' + $(this).val();
        }
      });

      $('#choosenFilters a.facet').each(function () {
        var facetPart = $(this);
        if (facetPart.attr("name") != currentFacet) {
          base += '&' + $(facetPart).attr("name") + '=' + encodeURI($(facetPart).attr("value"));
        }
      });

    }

    // workaround for the first submit
    if (base.indexOf('&facets=contentdate') == -1) {
      base += '&facets=contentdate';
    }


    if (typeof currentFacet != 'undefined') {
      url = base + '&retrieve=facets&currentFacet=' + currentFacet;
    } else {
      url = base + '&retrieve=all';
    }
    url += '&elementId=' + $('#searchElementId').val() + '&jsoncallback=?';
    //$.getJSON(url,fillResult);
     $.ajax({
       url: url,
       dataType: 'json',
       async: true,
       success: function(json){
         fillResult(json);
       }
     });

  }
}

function moveSearchFieldsToPagePart(){
  if ($("#solrSearchFacetsAdvanced") != undefined){
    $("#solrSearchFacetsAdvanced").html($("#solrSearchform").html());
    $("#solrSearchform").remove();

    //bind submit button again
    //$("#solrSearchFacetsAdvanced input[type='submit']").click(search('',$(this).val()));
  }
}

function moveFacetsToPagePart(){
  if ($("#solrSearchFacetsRefine") != undefined){
    $("#solrSearchFacetsRefine").html($("#facetinfo").html());
    $("#facetinfo").html("");
  }
}

function searchFacet() {
  var facetPart = $(this).closest('td');

  $("#choosenFilters a.facet[name='" + $(this).attr("name") + "']").remove();
  $("#choosenFilters").append($(this));


  // update all counters for the facets
  /*
  $('.facetdef').each(function() {
    if (facetPart.attr("name") != $(this).val()) {
      search('',$(this).val());
    }
  });*/
  facetSearchCurrentPage = 0;
  search('',$(this).val());
}

function fillValues(data) {
  var newData = '<div id="solrFacets">';
  $.each(data.facets, function(i,facet){
    newData += '<div class="fieldgrp-checkbox facetdiv_' + facet.facet + '"><div class="formcheckbox-default"><label><span class="name">' + facet.facetnicename + '</span></label><input type="hidden" class="facetdef" name="facets" value="' + facet.facet + '" />';

    var amountOfItems= 6;

    // now print the values
    valueCount = facet.values.length;
    $.each(facet.values, function(j,facetvalue){
      if (typeof facetvalue !=  'undefined') {
        if (j == amountOfItems) {
          newData += '<div class="more" id="divmore_' + facet.facet + '">';
        }
        var classAddition = "";
        if ((facetvalue.divId).toString().indexOf("facet_og_locatie_") > 0){
          classAddition = " location";
          var lokatieName = facetvalue.label;

          if (lokatieName.indexOf("||") > 0){
            lokatieName = lokatieName.substring(lokatieName.indexOf("||") + 2,lokatieName.length);
          }

          newData += '<div class="field' + classAddition + '" id="'+ facetvalue.name + '"><a href="#" class="facet" value="' + facetvalue.name + '" name="' + facet.facet + '">' + lokatieName + '</a>';
        } else { //not a location, regular print
          newData += '<div class="field' + classAddition + '"><a href="#" class="facet" value="' + facetvalue.name + '" name="' + facet.facet + '">' + facetvalue.label + '</a>';
        }
        newData += ' (<span class="facetcount" id="' + facetvalue.divId + '">' + facetvalue.count + '</span>)';

        if ((facet.facet).toString() == "facet_og_regio"){
          newData += "<div class='sublocation_" + facetvalue.name + "'></div>";
        }

        newData += "</div>";

      }
    });
    if (valueCount > amountOfItems) {
      newData += '</div><a href="" class="moreLink" id="more_' + facet.facet + '">Meer</a>';
    }
    newData += '</div></div>';


  });
  newData += '</div>';
  //console.log(newData);
  $('#solrSearchFacetsRefine').html(newData);

  hideMoreDivs();

  //moveFacetsToPagePart();
  //moveLocationsUnderRegions();
}

function moveLocationsUnderRegions() {
  $(".location").each(function(){
    var connectedRegion = $(this).attr("id");
    if (connectedRegion.indexOf("||") > 0){
      connectedRegion = connectedRegion.substring(0,connectedRegion.indexOf("||"));
    }
    $(".sublocation_" + connectedRegion).append($(this));
  });

  //hide the location
  $(".facetdiv_facet_og_locatie").hide();
}

function showVideo(mediaUrl,title, relatedlink){
 var idOfPlayer = $("div[id*='cover_container_']").attr("id");
 var player = $("#" + idOfPlayer + " embed");
 //support ie object
 //alert(player);
 if ($(player).attr("src") == null){
   player = $("#" + idOfPlayer + " object");
   var src = $(player).find("param[name='movie']").attr("value");
   var flashvars = $(player).find("param[name='flashvars']").attr("value");
 } else { //firefox
   var src = $(player).attr("src");
   var flashvars = $(player).attr("flashvars");
 }

 var width = $(player).attr("width");
 var height = $(player).attr("height");

 //check if file is filled in flashvars
 if (flashvars.indexOf("file=") > 0){
   flashvars = flashvars.substring(0,flashvars.indexOf("file="));
 }

 //build new player
 var so = new SWFObject(src,'ply' + idOfPlayer,width,height,'9');
 so.addParam('allowfullscreen','true');
 so.addParam('allowscriptaccess','always');
 so.addParam('wmode','opaque');
 so.addParam('flashvars',flashvars + "file=" + mediaUrl.replace("http://rtmp://media.omroepgelderland.nl/","&streamer=rtmp://media2.omroepgelderland.nl/stream&file=") + "&title=" + title + "&link=" + relatedlink);
 so.write(idOfPlayer);

 //show player
 $("div[id*='cover_container_']").show();
 //hide image in top bar
 $("#g-header-center div.img-clear").remove();

 return false;
}

function fillResult(data) {

  // Set the number of results global.
  facetSearchNumRows = data.count;
  facetSearchNumPages = Math.ceil(facetSearchNumRows / facetSearchNumPerPage);

  $('#searchresult').empty();
  var newData = '<div class="search-result-count">Gevonden: ' + data.count + ' resultaten</div><div class="search-wrapper"><dl>';

  //loop through teaserresults
  newData += "<div class='teaserresults'>";
  $.each(data.teaserresults, function(i,r){
    var className = ((i%2 == 0) ? 'odd' : 'even');
    var resultCount = ((facetSearchCurrentPage*facetSearchNumPerPage)+i+1);
    var clickFunction = "";

    if (r.isaudiovideo == "true"){
      clickFunction = ' onclick="showVideo(\'' + r.mediaurl + '\',\'' + r.title + '\',\'' + r.relatedlink + '\');return false;" ';
    }

    contentData = '<dt' + clickFunction + ' class="' + className + '"><span class="count">' + ((resultCount < 10) ? '0' : '') + resultCount + '</span>';
    contentData += '<a href="' + r.location + '" target="_blank"><span>' + r.title + '</span></a></dt>';
    contentData += '<dd' + clickFunction + ' class="' + className + '"><div class="text"><span>';

    if (r.image != '') {
      contentData += '<img src="' + r.image + '" width="132" height="74" align="left"  />';
    }

    if (r.snippets.length > 0) {
      $.each(r.snippets, function(j,s){
        contentData += '...' + s.snippet + '...&nbsp;&nbsp;';
      });
    } else {
      contentData += '<i>' + ((r.summary.length > 100) ? r.summary.substring(0,100) + '...' : r.summary) + '</i><br />';
    }

    contentData += "<br/><br/>";

    contentData += '</span></div></dd>';
    newData += contentData;

  });
  newData += "</div>";


  //loop through regular results
  $.each(data.results, function(i,r){
    var className = ((i%2 == 0) ? 'odd' : 'even');
    var resultCount = ((facetSearchCurrentPage*facetSearchNumPerPage)+i+1);
    var clickFunction = "";

    if (r.isaudiovideo == "true"){
      clickFunction = ' onclick="$(\'html, body\').animate({scrollTop:0}, \'slow\');showVideo(\'' + r.mediaurl + '\',\'' + r.title + '\',\'' + r.relatedlink + '\');return false;" ';
    }

    contentData = '<dt' + clickFunction + ' class="' + className + '"><span class="count">' + ((resultCount < 10) ? '0' : '') + resultCount + '</span>';
    contentData += '<a href="' + r.location + '" target="_blank"><span>' + r.title + '</span></a> <span id="contentdate">(' + r.contentdate  + ')</span></dt>';
    contentData += '<dd' + clickFunction + ' class="' + className + '"><div class="text"><span>';

    if (r.image != '') {
      contentData += '<img src="' + r.image + '" width="132" height="74" align="left"  />';
    }
//    contentData += '<br />';

    if (r.snippets.length > 0) {
      $.each(r.snippets, function(j,s){
        contentData += '...' + s.snippet + '...&nbsp;&nbsp;';
      });
    } else {
      contentData += '<i>' + ((r.summary.length > 100) ? r.summary.substring(0,100) + '...' : r.summary) + '</i><br />';
    }

    contentData += "<br/><br/>";

    contentData += '</span></div></dd>';
    newData += contentData;

  });

  $('#searchresult').append(newData + "</dl></div>");

  suggestions = '';
  $.each(data.suggestions, function(i,r){
    suggestions += '<a href="#" class="suggestion" id="' + r.suggestion + '">' + r.suggestion + '</a> ';
  });
  if (suggestions != '') {
    $('#suggestions').html('<span style="color:red">Bedoelt u: </span>' + suggestions);
  }

  // Set up the paging.
  buildPageNumbers();

  if (initial) {
    fillValues(data);
    initial = false;
  } else {
    fillValues(data);
    updateValues(data);
  }
}


function updateValues(data) {
  $.each(data.facets, function(i,facet){
    if (facet.facet == data.currentFacet) {
      // now update the values
      $.each(facet.values, function(j,facetvalue){
        if (typeof facetvalue !=  'undefined') {
          $('#' + facetvalue.divId).html(facetvalue.count);
        }
      });
    }

  });
  hideMoreDivs();
}

function buildPageNumbers() {
    // Reset the pager pages.
    $('a.pagenumber').remove();
    $('span.active').remove();

    // The pagenumbers will be inserted before this selected element.
    $pager = $('span.next');


    // Hide the previous button when not needed.
    (facetSearchCurrentPage > 0) ? $('span.previous').show() : $('span.previous').hide();

    // Hide the next button when not needed.
    (facetSearchCurrentPage == (facetSearchNumPages-1) || facetSearchNumPages==1) ? $('span.next').hide() :$('span.next').show();

    if (facetSearchNumPages > 1) {
      for (var page = 0; page < facetSearchNumPages; page++) {
          // NOTE: closure!
          // The click handler refers to the page variable, which is defined outside the function.
          // This means all clicks would refer to the same value(last value of the loop).
          // So we use the 'data' option in JQuery.
          var from = (((page)*facetSearchNumPerPage)+1);
          var to =  ((page+1)*facetSearchNumPerPage);
          if (to > facetSearchNumRows) {
            to = facetSearchNumRows;
          }
          // <a href="${link.url}"><span>1</span></a> <span class="active">2</span>
          if (facetSearchCurrentPage == page) {
            $('<span class="active">' + (page+1) + '</span>').insertBefore($pager);
          } else {
            $('<a class="pagenumber num' + (page + 1) + '"><span>' + (page+1) + '</span></a>')
            .bind('click', {'newPage': page}, function(event) {
                facetSearchCurrentPage = event.data['newPage'];
                search();
                $('html, body').animate({scrollTop:0}, 'slow');
                return false;
            }).insertBefore($pager);
          }
      }
    }
    reInitPageNumbers();
}

// Setup the max number of pagenumbers to show.
function reInitPageNumbers() {

    // Determine number of page-options to the left and right of the selected page.
    var leftRightNumber = Math.floor(facetSearchPageNumbersVisible / 2);

    // Set current class.
    $('.resultPages').children('a').removeClass('current');

    // Foreach so we can use more than one pager(for example top and bottom).
    $('.resultPages').each(function() {
        currentSelector = 'a.num'+ (facetSearchCurrentPage+1);

        $(this).find(currentSelector).addClass('current');

        if (facetSearchPageNumbersVisible != -1 && facetSearchNumPages > facetSearchPageNumbersVisible) {
            // Lower boundary.
            if ((facetSearchCurrentPage - leftRightNumber) <= 0) {
                $(this).find('a.pagenumber:gt(' + (facetSearchPageNumbersVisible-1) + ')').hide();
                $(this).find('a.pagenumber:lt(' + (facetSearchPageNumbersVisible) + ')').show();
            } else {
                // Upper boundary.
                if ((facetSearchCurrentPage + leftRightNumber)>=facetSearchNumPages) {
                    $(this).find('a.pagenumber:lt(' + (facetSearchNumPages-facetSearchPageNumbersVisible) + ')').hide();
                    $(this).find('a.pagenumber:gt(' + (facetSearchNumPages-facetSearchPageNumbersVisible) + ')').show();
                } else {
                    // Default.
                    $(this).find('a.pagenumber').hide();
                    for (i=(facetSearchCurrentPage - (leftRightNumber-1));i<(facetSearchCurrentPage + (facetSearchPageNumbersVisible-(leftRightNumber-1)));i++) {
                        showSelector = 'a.num' + i;
                        $(showSelector).show();
                    }
                }
            }
        }
    })
}
