$(document).ready(function() {
  $(".sorter").click(function() {
    var thisSorter = $(this).attr("id");
    $("#sortpicker a").parent().removeClass("current");
    $(this).parent().addClass("current");

    if (thisSorter == 'openstaand') {
      $("#interim-opdrachten > li.interim-opdracht-item").tsort("div.title",{attr:"title",order:"asc"});
    }
    else {
      resetSort();
      if (thisSorter == 'datum') {$("#interim-opdrachten > li.interim-opdracht-item").tsort("div.datum",{attr:"title",order:"desc"});}
      if (thisSorter == 'regio') {$("#interim-opdrachten > li.interim-opdracht-item").tsort("div.regio",{attr:"title",order:"asc"}).tsort("div.regio",{order:"asc"});}
      if (thisSorter == 'vakgebied') {$("#interim-opdrachten > li.interim-opdracht-item").tsort("div.vakgebied",{attr:"title",order:"asc"});}
      if (thisSorter == 'sector') {$("#interim-opdrachten > li.interim-opdracht-item").tsort("div.sector",{attr:"title",order:"asc"});}
    }
    clearPaging(totalItems, perPage);
    setPaging()
    return false;
  });

  function resetSort(){
    $("#interim-opdrachten > li.interim-opdracht-item").tsort("div.title",{attr:"title",order:"asc"});
  }

  $(".interim-opdrachten .filteropties .opties .filterbox").click(function(){
    // disable all checkboxes: this to ensure that the entire DOM has been build up first before the user can click again
    disableFilters();

    // for each filter group
    //var buildLink = '?';
    var buildLink = '';
    $(".interim-opdrachten .filteropties").each(function(){
      // check if anything is checked
      var checkedObjects = $(this).find(".opties input:checked").length;
      var showFilter = $(this).find(".opties input").first().attr("name") + "_show";
      var hideFilter = $(this).find(".opties input").first().attr("name") + "_hide";
      var checkedNodes = $(this).find(".opties input").first().attr("name") + "=";
      // if array is not empty
      if (checkedObjects > 0){
        // build array of checked values
        var allowedClasses = '';
        $(this).find(".opties input:checked").each(function(i){
          allowedClasses += "." + $(this).attr("id");
          checkedNodes += $(this).attr("value");
          if (i < checkedObjects - 1) {allowedClasses += ",";}
        })
        checkedNodes += "&";
        // remove hide and show class from all entries
        $("#interim-opdrachten li.interim-opdracht-item").removeClass(showFilter).removeClass(hideFilter);

        $("#interim-opdrachten li.interim-opdracht-item").each(function(){
          if($(this).is(allowedClasses)) {$(this).addClass(showFilter);}
          else {$(this).addClass(hideFilter);}
        });
        buildLink += checkedNodes;
      }
      // else array is empty
      else {
        // remove hide and show class from all entries
        $("#interim-opdrachten li.interim-opdracht-item").removeClass(showFilter);
        $("#interim-opdrachten li.interim-opdracht-item").removeClass(hideFilter);
      }
    });
    // for each entry
    $("#interim-opdrachten li.interim-opdracht-item").each(function(){
      var currentLink = $(this).find("div a").first().attr("href");
      var indexLink = currentLink.indexOf('?');
      var linkLength = currentLink.length;
      // reset the current Link
      if (indexLink > 0) {var pureLink = currentLink.substring(0, indexLink);}
      else {var pureLink = currentLink;}
      // add the buildLink to it
      pureLink = pureLink + "?" + buildLink;
      // set new link to the object href
      $(this).find("div a").first().attr("href", pureLink);
      //if (indexLink > 0){$(this).find("div a").first().attr("href", currentLink.substring(0, linkLength) + '&' + buildLink);}
      //if (indexLink > 0){$(this).find("div a").first().attr("href", currentLink.substring(0,indexLink) + buildLink);}
      //else{$(this).find("div a").first().attr("href", currentLink + '?' + buildLink);}
      // if entry has filter any group hide class
      var itemclass = $(this).attr("class");
      if (itemclass.indexOf('_hide') > 0){$(this).slideUp();}
      else {$(this).slideDown();}
    });

    clearPaging(totalItems, perPage);
    setTimeout(function(){setPaging();},1000);

    // enable all checkboxes again
    setTimeout(function(){enableFilters();},1000);
  });

  // Start the paging
  var totalItems = $("#interim-opdrachten li.interim-opdracht-item").length;
  clearPaging(totalItems);
  setPaging()

  function disableFilters(){
    $(".interim-opdrachten .filteropties .opties .filterbox").each(function(){
      $(this).attr('disabled', true);
    }); 
  }

  function enableFilters(){
    $(".interim-opdrachten .filteropties .opties .filterbox").each(function(){
      $(this).removeAttr('disabled');
    });
  }

  function setPaging() {
    // (re)calculate the correct number of pages: filter and sort both have an impact on this
    // default items per page comes from the admin parameter perPage
    var currentPage = 1;
    var visibleItems = $("#interim-opdrachten li:visible").length;
    var pages = Math.ceil(visibleItems / perPage);

    //setTimeout(function(){addPaging(perPage);},2000);
    addPaging(perPage);
    writePaging(currentPage, pages, perPage, visibleItems);
  }

  function writePaging(currentPage, pages, perPage, visibleItems){
    // set the HTML for the paging and add it to the corresponding div element
    $("div.paging").empty();
    var pagingHTML = "Interim Opdrachten: <ul class='interim-opdracht-paging'>";
    for (i = 1; i <= pages; i++) {
      startInterimOpdracht = ((i - 1) * perPage) + 1;
      lastInterimOpdracht = (i * perPage);
      interimopdrachten = "";
      if (lastInterimOpdracht > visibleItems) {lastInterimOpdracht = visibleItems;}
      if (startInterimOpdracht == lastInterimOpdracht){interimopdrachten = startInterimOpdracht;}
      else {interimopdrachten = startInterimOpdracht + " - " + lastInterimOpdracht;}
			if (i == currentPage) {
				pagingHTML += "<li class='currentpage page" + i +"'>" + interimopdrachten;
				if (pages > 1 && i != pages){
				  pagingHTML += "&nbsp;|&nbsp;";
				}
				pagingHTML += "</li>";
			}
			else {
				pagingHTML += "<li class='page" + i + "'><a rel='" + i + "' href='#'>" + interimopdrachten + "</a>";
				if (pages > 1 && i != pages){
				  pagingHTML += "&nbsp;|&nbsp;";
				}
				pagingHTML += "</li>";
			}
    }
		pagingHTML += "</ul>";
		$("div.paging").append(pagingHTML);

    // init display of paging
    displayPaging(currentPage);

		//pager navigation behaviour
		$("div.paging a").click(function() {
			//grab the REL attribute 
			var clickedLink = $(this).attr("rel");
			currentPage = clickedLink;

      displayPaging(currentPage);
      writePaging(currentPage, pages, perPage, visibleItems);
			return false;
		});
  }

  function displayPaging(clickedLink){
  	//remove current class
    $("ul.paging li").removeClass("currentpage");
  	//Add current class to clicked link
  	$("ul.paging li a[rel=" + clickedLink + "]").parent("li").addClass("currentpage");
  
  	//hide and show relevant links
    $("#interim-opdrachten li.interim-opdracht-item").each(function(){
      if($(this).is('.page' + clickedLink)){
        //alert('ja:' + $(this).attr('class'));
        $(this).show();
      }
      else{
        //alert('nee:' + $(this).attr('class'));
        $(this).hide();
      }
    });
  }

  function clearPaging(totalItems, variant) {
    // clear all paging classes
    for (i = 1; i <= totalItems; i++) {
      if(variant == 2){
        $("#interim-opdrachten li.interim-opdracht-item").each(function(){
          if($(this).is('.page' + i)){$(this).show();}
        });
      }
      $("#interim-opdrachten li.interim-opdracht-item").removeClass('page' + i);
    }
  }

  function addPaging(perPage){
    // add paging classes per visible item
    var pageCounter = 1;
    $("#interim-opdrachten li:visible").each(function(i){
			if((i < pageCounter * perPage) && (i >= (pageCounter-1) * perPage)) {
			  $(this).addClass("page" + pageCounter);
			}
			else {
				$(this).addClass("page" + (pageCounter+1));
				pageCounter ++;
			}      
    });
  }
});
