$(document).ready(

	function()
	{
    	initDatePickers();
    	
		initSearchPageables(0);
		
        $('#zoek-trefwoord').click(function()
		{
			$("#searchmethod").val("keyword");
			submitSearch('keyword');
			return false;
		
		});
		
		$('#zoek-datum').click(function()
		{
			$("#searchmethod").val("date");
			submitSearch('date');
			return false;
		});
		
		$("#keyword:input").keypress(function (e) {
			
			if (e.which == 13) {
				$("#searchmethod").val("keyword");
				submitSearch('keyword');
				return false;
			}
		});
		
		$("#dateselect:input").keypress(function (e) {
			
			if (e.which == 13) {
				$("#searchmethod").val("date");
				submitSearch('date');
				return false;
			}
		});

			
		$('#sorttype').change(function()
		{ 
			var type = $('#searchpage').val();
			searchmethod = $("#searchmethod").val();
			//default
			if(searchmethod == '') 
				searchmethod = 'keyword';
			updateSearchView(type, 0, 10, searchmethod , 2, $(this).val()  );
			
			
		});	
		
		if($('#searchpage').val() == 'zoek') {
		
			$('#keyword').val($('#trefwoord').val());
		
		}
	}	

);

function initDatePickers()
{
	if ( document.getElementById("dateselect") )
	{
		
		$("#dateselect").datepicker(
			{
				showOn: "both",
				buttonImage: "../static/images/kalender.gif" ,
				duration: ""
			}
		);
				
	}
}

/**
*	submit search
*
*/
function submitSearch(searchtype) {

	var page = $('#searchpage').val();
	
	updateSearchView(page, 0, 10, searchtype, 0, 'newest'  );
	
}

/**
*	initSearchPageables
*
*	inits the pager
*/
function initSearchPageables(currentIndex) {

	//om de gefloate links te centreren
	var pager = $("#pager .pager p");
								
	var numLinks = pager.find("a").size();
	var numShorters = pager.find("span").size();
	
	var marginLeft = Math.round( ((numLinks+numShorters) * 26) / 2 );
			
	pager.css( { margin: "0 0 0 -" + marginLeft + "px" } );
									
	//aantal pagina's opvragen
	var numPages = $(".pager p a:last").text();
	
	if(numPages > 0) 
	{
		//limit voor currentIndex
		var max = numPages - 1;
	}	
	
	function switchState() 
	{ 
		var page = $('#searchpage').val();
		searchmethod = $("#searchmethod").val(); 	
		//default keyword
		if(searchmethod == '')
			searchmethod = 'keyword';
		//search by keyword
		var order = $('#sorttype').val();
		
		updateSearchView(page, currentIndex, 10, searchmethod, 1, order );		
		
	}
		
	var pages =  $("#pager p a");
	
	pages.each(
						
		function(i)
		{
			$(this).click(
				
				function()
				{ 
										
					//currentIndex = i;
					currentIndex = ($(this).text()-1);
					switchState();
					
					return false;
				}
				
			);
		}
	);
		
	//vorige/volgende buttons instellen
	var prev = $("#pager .prev");
	var next = $("#pager .next");
	
	//vorige
	prev.click(
					
		function()
		{
		
			currentIndex--;
			if ( currentIndex <= 0 ) 
			{
				currentIndex = 0;						
			}
			
			switchState();
			
			return false;
		}
	);
	
	//volgende
	next.click(
		
		function()
		{
		
			currentIndex++;				
			if ( currentIndex >= max ) 
			{ 
				currentIndex = max;			
			}
			
			switchState();
			
			return false;
		}
	
	);
		
}
 
/**
*	updateSearchView
*
*	@param type		page
*	@param currentIndex		page index
*	@param resultLimit		items per page
*	@param searchtype		type of search - search by date/search by keyword
*	@param clickeditem		0=search, 1=pager, 2=orderby 	
*/
function updateSearchView(type, currentIndex, resultLimit, searchtype , clickeditem, orderby  )
{	 
		
		var keyword = '';
		if(searchtype == 'date') {
			//date
			var extradata = $('#dateselect').val(); 			
		}
		//keyword
		else if(searchtype == 'keyword'){
			var keyword = $('#keyword').val();
			//search in tags/text
			var extradata = $('#contenttype').val(); 
		}
		
		if(type == 'zoek') {
			var url = "/page/pager/getSearch/";
		}
		else {
			var url = "/page/ajax/getSearchResults/";
		}
		
		url += Math.random() * 10000000000000000000;
		
 		$.ajax({
			type: "POST",
			url: url,
			data: {type:type, currentIndex:currentIndex, resultLimit:resultLimit, searchtype:searchtype, extradata:extradata, keyword:keyword, orderby:orderby},
			dataType: "xml",
		
			success: function(xml) {
				
					//set class visible
					if($('#searchresults').attr('class') == "hidden") {
						$('#searchresults').attr('class', 'visible');						
					}
				
					//alles legen binnen searchresults
					$('.searchresults').text("");				
										
					var xmlResults = $(xml).find("item");
					var numXmlResults = xmlResults.size();
							
					var x = 0;
					var classname = "highlight";
				
					//aantal pagina's
					var xmlTotals = $(xml).find("pages");
					
					num_pages = xmlTotals.text();
					
					//zet zoektekst
					if(clickeditem == 0 || clickeditem == 2) {
						if(searchtype == 'date') {
						
							if(extradata == "") {
								$('#searchtext').html('U HEEFT GEEN DATUM OPGEGEVEN');
								
								if($('.sortbar').attr('class') != "hidden") {
									$('.sortbar').addClass("hidden");
								}
							}
							else {
							
								if(numXmlResults > 0) {
									$('#searchtext').html('RESULTATEN VOOR ' + extradata);
									if($('.sortbar').hasClass('hidden')) {
										$('.sortbar').removeClass('hidden');
									}
								}
								else {
									$('#searchtext').html('ER ZIJN GEEN RESULTATEN GEVONDEN VOOR ' + extradata);
									
									if(!$('.sortbar').hasClass('hidden')) {
										$('.sortbar').addClass('hidden');
									}
								}
							}
						}
						//keyword
						else if(searchtype == 'keyword'){
												
							if(numXmlResults > 0) {
								$('#searchtext').html('RESULTATEN VOOR "' + keyword +'"');
								
								if($('.sortbar').hasClass('hidden')) { 
									$('.sortbar').removeClass('hidden');
								}
							}
							else {
								$('#searchtext').html('ER ZIJN GEEN RESULTATEN GEVONDEN VOOR "' + keyword +'"');
								
								if(!$('.sortbar').hasClass('hidden')) {
									$('.sortbar').addClass('hidden');
								}
							}
														
						}
					}
										
					//pager items opbouwen wanneer er meer dan 1 pagina is
					if(num_pages > 1) {
						
							$('#pager').text("");	
						
							//build pager
							var pager = getPagerTemplate(num_pages, currentIndex);
							$('#pager').append(pager);
														

							//init pages
							initSearchPageables(currentIndex);
					}
					else {
						$('#pager').text("");	
						
					}		
								
					xmlResults.each(
			
						function(i)
						{ 
							
							var date = $(this).find('datum').text();
							var href = $(this).find('url').text();
							var headline = $(this).find('headline').text();
							var intro = $(this).find('intro').text();
							var rating = $(this).find('rating').text();
							var image_src = $(this).find('imgsrc').text();
							var new_date = $(this).find('new_date').text();
							var hasvideo = $(this).find('hasvideo').text();
						
							//voeg nieuw wrapper template toe bij nieuwe datum
							if(new_date == 1 ) { 
								x++;
								
								var wrapper = getSearchResultWrapperTemplate(date, x, classname);	
								wrapper.css({display: "none"});
									
								$(".searchresults").append(wrapper.fadeIn("slow"));	
							}	
							
							//content template
							var content = 	getSearchResultContentTemplate( image_src, href, headline, intro, date, rating, hasvideo);			
							$("#resultrow" + x).append(content);	
									
							//switch class bij een nieuwe datum									
							if(new_date == 1 ) {
								if(classname == 'highlight') {
									classname = "";
								} 
								else {
									classname = 'highlight'
								}								
								
							}

						}
					);
	         	 },
				 error: function(XMLHttpRequest, textStatus, errorThrown) { 
					//alert(textStatus); 
				 } 
				 	
				
			}); 
		
}


/**
*	updateSearchView
*
*	@param type		page
*	@param currentIndex		page index
*	@param resultLimit		items per page
*	@param searchtype		type of search - search by date/search by keyword
*	@param clickeditem		0=search, 1=pager, 2=orderby 	
*/
function updateSearchAllView(type, currentIndex, resultLimit, searchtype , clickeditem, orderby  )
{			

		
		var keyword = '';
		if(searchtype == 'date') {
			//date
			var extradata = $('#dateselect').val(); 			
		}
		//keyword
		else if(searchtype == 'keyword'){
			var keyword = $('#keyword').val();
			//search in tags/text
			var extradata = $('#contenttype').val(); 
		}
		
		//voor algemeen zoeken andere settings

 		$.ajax({
		
			type: "GET",
			url: ("/page/pager/getSearch/" + keyword +"/" + currentIndex + "/" + orderby) ,
									
			dataType: "xml",
		
			success: function(xml) {
				
					//set class visible
					if($('#searchresults').attr('class') == "hidden") {
						$('#searchresults').attr('class', 'visible');						
					}
				
					//alles legen binnen searchresults
					$('.searchresults').text("");				
										
					var xmlResults = $(xml).find("item");
					var numXmlResults = xmlResults.size();
							
					var x = 0;
					var classname = "highlight";
				
					//aantal pagina's
					var xmlTotals = $(xml).find("pages");
					
					num_pages = xmlTotals.text();
					
					//zet zoektekst
					if(clickeditem == 0 || clickeditem == 2) {
						if(searchtype == 'date') {
						
							if(extradata == "") {
								$('#searchtext').html('U HEEFT GEEN DATUM OPGEGEVEN');
								
								if($('.sortbar').attr('class') != "hidden") {
									$('.sortbar').addClass("hidden");
								}
							}
							else {
							
								if(numXmlResults > 0) {
									$('#searchtext').html('RESULTATEN VOOR ' + extradata);
									if($('.sortbar').hasClass('hidden')) {
										$('.sortbar').removeClass('hidden');
									}
								}
								else {
									$('#searchtext').html('ER ZIJN GEEN RESULTATEN GEVONDEN VOOR ' + extradata);
									
									if(!$('.sortbar').hasClass('hidden')) {
										$('.sortbar').addClass('hidden');
									}
								}
							}
						}
						//keyword
						else if(searchtype == 'keyword'){
												
							if(numXmlResults > 0) {
								$('#searchtext').html('RESULTATEN VOOR "' + keyword +'"');
								
								if($('.sortbar').hasClass('hidden')) { 
									$('.sortbar').removeClass('hidden');
								}
							}
							else {
								$('#searchtext').html('ER ZIJN GEEN RESULTATEN GEVONDEN VOOR "' + keyword +'"');
								
								if(!$('.sortbar').hasClass('hidden')) {
									$('.sortbar').addClass('hidden');
								}
							}
														
						}
					}
										
					//pager items opbouwen wanneer er meer dan 1 pagina is
					if(num_pages > 1) {
						
							$('#pager').text("");	
						
							//build pager
							var pager = getPagerTemplate(num_pages, currentIndex);
							$('#pager').append(pager);
														

							//init pages
							initSearchPageables(currentIndex);
					}
					else {
						$('#pager').text("");	
						
					}		
								
					xmlResults.each(
			
						function(i)
						{ 
							
							var date = $(this).find('datum').text();
							var href = $(this).find('url').text();
							var headline = $(this).find('headline').text();
							var intro = $(this).find('intro').text();
							var rating = $(this).find('rating').text();
							var image_src = $(this).find('imgsrc').text();
							var new_date = $(this).find('new_date').text();
							var hasvideo = $(this).find('hasvideo').text();
							
							//voeg nieuw wrapper template toe bij nieuwe datum
							if(new_date == 1 ) { 
								x++;
								
								var wrapper = getSearchResultWrapperTemplate(date, x, classname);	
								wrapper.css({display: "none"});
									
								$(".searchresults").append(wrapper.fadeIn("slow"));	
							}	
							
							//content template
							var content = 	getSearchResultContentTemplate( image_src, href, headline, intro, date, rating, hasvideo);			
							$("#resultrow" + x).append(content);	
									
							//switch class bij een nieuwe datum									
							if(new_date == 1 ) {
								if(classname == 'highlight') {
									classname = "";
								} 
								else {
									classname = 'highlight'
								}								
								
							}

						}
					);
	         	 },
				 error: function(XMLHttpRequest, textStatus, errorThrown) { 
					//alert(textStatus); 
				 } 
				 	
				
			}); 
		
}

/**
 * Calculate start and end point of pagination links depending on 
 * current_page and num_display_entries.
 * @return {Array}
 */
function getInterval(num_display_entries, current_page, np)  {
	var ne_half = Math.ceil(num_display_entries/2);
	var upper_limit = np-num_display_entries;
	var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;
	var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(num_display_entries, np);
	return [start,end];
}

//zet pager 
function getPagerTemplate(num_pages, currentIndex) {

	//aantal getoonde pagina's 
	var num_display_entries = 10;
	
	// extra entries die links en rechts in de verkorte pager worden getoond
	var num_edge_entries = 2;
	
	var shorten_text = '...';


	//interval 
	var interval = getInterval(num_display_entries, currentIndex, num_pages);
		
	var div = $('<div></div>').addClass("pager");
	var a_prev = $('<a></a>').attr({ href : '#' }).addClass("prev").text("Vorige");
	
	//vorige link verbergen indien nodig 
	if(currentIndex == 0) {
		a_prev.css({"display" : "none"});
	}
		
	var p = $("<p></p>");

	/*
	*	toon een pager met inkorting
	*	Voorbeeld:
	*	pager: aa...bbbbbb...cc
	*		aa = starting point
	*		bbb	= interval links
	*		cc = ending point
	*/
		
	if(num_pages > (num_display_entries + num_edge_entries)) {
		
		// Generate starting points
		if (interval[0] > 0 && num_edge_entries > 0)
		{
			var end = Math.min(num_edge_entries, interval[0]);
			for(var i=0; i<end; i++) {
				//appendItem(i);
				var a = $("<a></a>").attr( { href : '#' } ).text(i+1);
				if(i == currentIndex) {
					a.addClass("active");	
				}
				p.append(a);	
			}
			
			if(num_edge_entries < interval[0] && shorten_text)
			{
				var span = $("<span></span>").text(shorten_text);
				p.append(span);						
			}
		}
		
		// Generate interval links
		for(var i=interval[0]; i<interval[1]; i++) {
			//appendItem(i);
			//alert(i);
			
			var a = $("<a></a>").attr( { href : '#' } ).text(i+1);
			if(i == currentIndex) {
				a.addClass("active");	
			}
			p.append(a);	
		}
		
		// Generate ending points
		if (interval[1] < num_pages && num_edge_entries > 0)
		{ 
			
			if(num_pages-num_edge_entries > interval[1]&& shorten_text)
			{ 
				var span = $("<span></span>").text(shorten_text);
				p.append(span);	
			}
			
			var begin = Math.max(num_pages-num_edge_entries, interval[1]);
			for(var i=begin; i<num_pages; i++) {
				//appendItem(i);
				var a = $("<a></a>").attr( { href : '#' } ).text(i+1);
				if(i == currentIndex) {
					a.addClass("active");	
				}
				p.append(a);	
			}
			
			
		}
	
	}
	//toon normale pager 
	else {
		for(i = 0;i <= (parseInt(num_pages)-1); i++) {
						
			if(i == currentIndex) {
				var a = $("<a></a>").attr( { href : '#' } ).text(i+1).addClass("active");	
			}
			else {
				var a = $("<a></a>").attr( { href : '#' } ).text(i+1);	
			}
			p.append(a);			
		}
	}
	
	var a_next =  $('<a></a>').attr({ href : '#' }).addClass("next").text("Volgende");
	
	//volgende link verbergen 
	if((currentIndex == num_pages-1) || num_pages == 1) {
		a_next.css({"display" : "none"});
	}	
	
	div.append(a_prev).append(p).append(a_next);

	return div;
}

function getSearchResultWrapperTemplate(date, rowid, classname) {

		var div = $("<div></div>").addClass("row resultsets ");
		
		
		if(classname == "highlight") {
			div.addClass("highlight");
		}
		
		
		var h3 = $("<h3></h3>").text(date);
		
		var div2 = $("<div></div>").addClass("resultset").attr({id: 'resultrow'+rowid });
		
		div.append(h3).append(div2);	
		
		return div;
}
/*
	blokje van het type 'category'
*/
function getSearchResultContentTemplate( src, href, headline, intro, date, rating, video )
{  
	//set new content

	var div_row =  $("<div></div>").addClass("result stars" + rating);
	
	var h4_href = $('<a></a>').attr( { href : href } ).text(headline);	
		
	var h4 = $("<h4></h4>").append(h4_href);
		
	var a = $("<a></a>").attr( { href : href } ).text(intro + ' ');

	var arrows = $("<img></img>").attr({src: "/static/images/arrow_double.gif" });
	
	var p = $("<p></p>").addClass('arrows').append(a).append(arrows);
	
	
	if(src != '') {	
		var p_image = $("<p></p>").addClass("image").css( { "background-image" : "url(" + src + ")" });
	}
	else {
		var p_image = $("<p></p>").addClass("no-image");
		//var p_image = $("<p></p>").addClass("image").css( { "background-image" : "url('/static/images/sr_no_image.gif')" });
	}
	
	if(video == '1') {
		var a3 = $("<a></a>").addClass("uitzending").attr( { href : href } ).text("Meer details");
	}
	else {
		var a3 = $("<a></a>").attr( { href : href } ).text("Meer details");
	}
	
	p_image.append(a3);
	
	div_row.append(h4).append(p).append(p_image);	
	
	return div_row;
}
