
/*
 * Update functions
 */

updateSearchResults = function(){
	$("#searchresults ul").empty()
	
	addLoader("#searchresults ul")
	getArticlesByQuery()
}

updateFreeArticles = function(){
	addLoader("#giveaway ul")
	getFreeArticles()
}

updateLatestArticles = function() {
	addLoader("#latest ul")
	getLatestArticles()
}

/*
 * render functions
 */

renderSearchData = function(data) {
	renderResults(data)
	renderPager(data)
}

/* 
 * filter functions
 */

getSubjects = function (filter, market) {
    // set correct datasource
	var data
	if (market == "Basisonderwijs") {
		data = searchSubjectsBO
	} else {
		data = searchSubjectsSO
	}	
	
	return $.grep(data, function (n,i) {
        return n.Parent == filter
    })
}

// set levels
setLevels = function () {
	
	var market = $("input[name='Market']").val()
	var pulldown = $("#level")
	
	pulldown.empty()
	pulldown.append($("<option/>").val("-").text("Filter op niveau:").attr("selected","selected"))
	
	if (market == "") {
		
		// fill all levels
		pulldown.append($("<option/>").val("Kleuteronderwijs").text("Kleuteronderwijs"))
		pulldown.append($("<option/>").val("Lager onderwijs").text("Lager onderwijs"))
		pulldown.append($("<option/>").val("Buitengewoon basisonderwijs").text("Buitengewoon basisonderwijs"))
		pulldown.append($("<option/>").val("Secundair onderwijs").text("Secundair onderwijs"))
		pulldown.append($("<option/>").val("Buitengewoon secundair onderwijs").text("Buitengewoon secundair onderwijs"))
		
	} else {
		
		if (market == "Basisonderwijs") {
			// fill BO levels
			pulldown.append($("<option/>").val("Kleuteronderwijs").text("Kleuteronderwijs"))
			pulldown.append($("<option/>").val("Lager onderwijs").text("Lager onderwijs"))
			pulldown.append($("<option/>").val("Buitengewoon basisonderwijs").text("Buitengewoon basisonderwijs"))
		} else {
			// fill SO levels
			pulldown.append($("<option/>").val("Secundair onderwijs").text("Secundair onderwijs"))
			pulldown.append($("<option/>").val("Buitengewoon secundair onderwijs").text("Buitengewoon secundair onderwijs"))
		}	
	} 
}


// set themalist
setThemalist = function (market) {

	// fill pulldown
	var container = $("#subThemalist");
	// first empty container
	container.empty()
	
	var data = getSubjects("Beleid", market)
	
	// add maak uw keuze
	container.append($("<option/>").val("-").text("Kies een thema:"))
	
	$.each(data, function(i,item){ 
		container.append($("<option/>").val(item.Title).text(item.Title))
	})

}

// set subject checkboxes
setSearchSubjects = function(parent, market) {
	var container = $(".checkboxes")
	
	// clean out mess
	container.empty()
	// hide checkall
	$(".checkall").hide()
	
	// no subjects to set, enable subthema pulldown @ beleid only.. 
	if (parent == "Beleid") {
		
		setThemalist(market)
		
		// enable pulldown
		$("#subThemalist").show()
		$("#subThemalist").attr("disabled", "")
		// .. and reset pulldown to top position
		$("#subThemalist").val("-")
		
		if ($("#BOlist").val() != "-") {
			$("#subThemalist").removeClass("SO")
		} else {
			// SO list choosen
			$("#subThemalist").addClass("SO")
		}	
		
	} else {
		if ($("#BOlist").val() != "Beleid" && $("#SOlist").val() != "Beleid") {
			// no subthema here
			$("#subThemalist").hide()
			$("#subThemalist").attr("disabled", "disabled")
		}
		
		var data = getSubjects(parent, market)
		var index
		var newData = []

		// proceed if something else selected than 'maak uw keuze'               	
		if (parent != "-") {
			
			// filter out varia, and keep to add after sort               
			$.each(data, function(i,item) { 
				if (item.Title != "Varia") {
					newData.push(item)
				} else {
					index = i
				}				
			})
			
			// sort newdata
			var newData = $(newData).sort("Title",false)
			// add varia as last item
			newData.push(data[index])
					
			// iterate over filtered collection	
			$.each(newData, function(i,item){ 
				
				// show checkall just for the first added item
	   			if (i==1) {
	   				$(".checkall").show()
	   				$("#toggle").attr("checked","checked")
	   			}
	   			
				// make sure item is short enough.., add title tag for full item description
				var itemShort = item.Title
				if (item.Title.length > 35) itemShort = item.Title.substr(0,32) + "..."
				
				var currentContainer = $(container[(i)%3])
				                             
				currentContainer.append($("<input type=\"checkbox\"/>").attr("value",item.Parent + "|" + item.Title).attr("name","Subject").attr("id","cb_"+i).attr("checked","checked"))
				currentContainer.append($("<label/>").attr("for","cb_"+i).attr("title",item.Title).text(itemShort))
				currentContainer.append($("<br/>"))
				
			})
		}	
		
	}	

	// add handler for subjects
	$(".checkboxes input").click (function(){
		// if any other item checked, uncheck toggle
		$("#toggle").attr("checked", false)
		
		// get searchresults
		getArticlesByQuery()
	})
	
	// refresh results
	updateSearchResults()

}

//set author pulldown
setSearchAuthors = function(data) {
	var container = $("#author")
	
	// sort fields
	data.sort()
	
	// init previous author
	var previousItem = ""
	
	$.each(data, function(i,item){ 
		
		// author only, skip function
		item = item.split("%")[0]
		
		// add item only if unique
		if (item != previousItem) {
			container.append($("<option/>").val(item).text(item))
		}
		
		// set target for new items
		previousItem = item
	})
}


// render searchresults
renderResults = function(data) {
	
	// always reset page with new request
	setPage(1)	
	
	if (data.Status == 1) {
		// Status no error

		if (data.Articles.length == 0) {
			// show no result
			renderSearchNoResults()
		} else {
			// show results
			var container = $("#searchresults ul")
			
			// clean out mess
			container.empty()
			
			$.each(data.Articles, function(i,item){ 
			
				var src = item.Metadata.ImageURI	
				var h3 = item.Metadata.Title
				var p = item.Metadata.Summary
				
				var IndicationWorkMaterial = item.Metadata.IndicationWorkMaterial
				var IndicationMedia = item.Metadata.IndicationMedia
				var DocumentURI = item.DocumentID	
			
				var firstDiv = $("<div/>")
				if (src != "") firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<img/>").attr("class","preview").attr("src",src)))
				firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<h3/>").html(h3)))
				firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<p/>").html(p.substr(0,200) + " ...")))
				
				var secondDiv = $("<div/>").attr("class", "moreinfo clear")
				if (IndicationWorkMaterial) secondDiv.append($("<img/>").attr("class","icon").attr("title","dit artikel bevat werkmateriaal").attr("src","../css/images/icons/icon_attachment.gif"))
				if (IndicationMedia) secondDiv.append($("<img/>").attr("class","icon").attr("title","dit artikel bevat media bestanden").attr("src","../css/images/icons/icon_media.gif"))
				secondDiv.append($("<a/>").attr("class","small left negative").attr("href",DocumentURI).html("LEES MEER"))
				
				var li = $("<li/>")
				li.append(firstDiv)
				li.append(secondDiv)
									
				container.append(li)
			})
		
			container.append($("<div/>").attr("class", "clear"))
			
			// handle popup, beware.. after each.. register only one handler!
			$("#searchresults a").click(function() {
				retrieveArticle($(this).attr("href"))
				return false
			})
		}	

	} else {
		// Status error
		renderSearchArticlesError()
	}	
}

// render freearticles
renderFreeArticles = function(data) {
	
	if (data.Status == 1) {
		// Status no error
	
		var container = $("#giveaway ul")
		
		// clean out mess
		container.empty()
		
		$.each(data.Articles, function(i,item){ 
		
			var src = item.Metadata.ImageURI	
			var h3 = item.Metadata.Title
			var p = item.Metadata.Summary
			
			var DocumentURI = item.DocumentID	
		
			var firstDiv = $("<div/>")
			if (src != "") firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<img/>").attr("class","preview").attr("src",src)))
			firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<h3/>").html(h3)))
			firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<p/>").html(p.substr(0,200) + " ...")))
			firstDiv.append($("<br/>").attr("class", "clear"))
			
			var li = $("<li/>")
			li.append(firstDiv)
								
			li.append($("<a/>").attr("class","left small negative").attr("href",DocumentURI).html("LEES MEER"))
			li.append($("<div/>").attr("class", "clear"))
			
			container.append(li)
		})
		
		// handle popup, beware.. after each.. register only one handler!
		$("#giveaway a").click(function() {
			retrieveArticle($(this).attr("href"))
			return false
		})
		
		
	} else {
		// Status error
		renderFreeArticlesError()
	}	

}

// render latestarticles
renderLatestArticles = function(data) {
	
	if (data.Status == 1) {
		// Status no error
		var container = $("#latest ul")
		
		// clean out mess
		container.empty()
		
		$.each(data.Articles, function(i,item){ 
		
			var src = item.Metadata.ImageURI	
			var h3 = item.Metadata.Title
			var p = item.Metadata.Summary
			
			var DocumentURI = item.DocumentID	
		
			var firstDiv = $("<div/>")
			if (src != "") firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<img/>").attr("class","preview").attr("src",src)))
			firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<h3/>").html(h3)))
			firstDiv.append($("<a/>").attr("href",DocumentURI).html($("<p/>").html(p.substr(0,200) + " ...")))
			firstDiv.append($("<br/>").attr("class", "clear"))
			
			var li = $("<li/>")
			li.append(firstDiv)
								
			li.append($("<a/>").attr("class","left small").attr("href",DocumentURI).html("LEES MEER"))
			li.append($("<div/>").attr("class", "clear"))
			
			container.append(li)
	
		})
		
		// handle popup, beware.. after each.. register only one handler!
		$("#latest a").click(function() {
			retrieveArticle($(this).attr("href"))
			return false
		})
		
	} else {
		// Status error
		renderLatestArticlesError()
	}
}

/*
 * render no results
 */

renderSearchNoResults = function() {
	var container = $("#searchresults ul")
	
	// first, clean out the mess..
	container.empty()
	
	var message = $("<h2/>").html("Er zijn geen resultaten gevonden.")
	message.append($("<p/>").html(
		"Suggesties:<br/>" +
		"* Vink meerdere onderwerpen aan.<br/>" +
		"* Probeer andere zoektermen.<br/>" +
		"* Zorg ervoor dat alle woorden goed gespeld zijn.<br/>" + 
		"* Maak de zoektermen algemener.<br/>" +
		"* Gebruik minder zoekwoorden.<br/>"
	))
	container.append(message)
}

/*
 * render errors
 */

renderFreeArticlesError = function() {
	var container = $("#giveaway ul")
	
	// first, clean out the mess..
	container.empty()
	
	// add message
	var message = $("<h2/>").html("Er is een communicatiefout opgetreden.")
	container.append(message)
}

renderLatestArticlesError = function() {
	var container = $("#latest ul")
	
	// first, clean out the mess..
	container.empty()
	
	var message = $("<h2/>").html("Er is een communicatiefout opgetreden.")
	container.append(message)
}

renderSearchArticlesError = function() {
	var container = $("#searchresults ul")
	
	// first, clean out the mess..
	container.empty()
	
	var message = $("<h2/>").html("Er is een communicatiefout opgetreden.")
	container.append(message)
}


/* 
 * pager function
 */

//render pager
renderPager = function(data) {
	
	var container = $("#pagebrowser .container")
	
	if (data.NumberOfPages <=1) {
		// no pager if only one page
		container.empty()
	} else {
		// render pager for more than 1 page
		container.pager({ 
			pagenumber: data.CurrentPage, 
			pagecount: data.NumberOfPages, 
			buttonClickCallback: handlePager 
		});
	}
	
	// center list of pages
	positionPager()
}

// handle pager
handlePager = function(pageclickednumber) {
	// update page field for submitting of query
	setPage(pageclickednumber)
	
	// fire query
	getArticlesByQuery()
}

// set clicked pagenumber in hidden datafield
setPage = function(pageclickednumber) {
	$("input#page").val(pageclickednumber)
}


/*
 *  Deeplink interfaces
 */

// articleId

getArticleID = function () {
	return jQuery.url.param("articleID")
}

showDeeplinkedArticle = function () {
	if (getArticleID()) {
		retrieveArticle(getArticleID())
	}	
}

// author

getAuthor = function () {
	return jQuery.url.param("author")
}

listAuthorArticles = function () {
	if (getAuthor()) {
		getArticlesByAuthor(getAuthor())
	}
}	

// docset

getDocset = function () {
	return jQuery.url.param("docset")
}

listDocsetArticles = function () {
	if (getDocset()) {
		getArticlesByDocset(getDocset())
	}
}	

// Modulelist

getBODropdownValue = function () {
	return jQuery.url.param("BOlist")
}

getSODropdownValue = function () {
	return jQuery.url.param("SOlist")
}

// function called *after* searchsubjects available
setModuleValue = function() {
	// set forms by homepage
	var BODropdownValue = getBODropdownValue()
	var SODropdownValue = getSODropdownValue()
		
	if (BODropdownValue != null) {
		// a specific module is choosen from the homepage
		// set dropdown
		$("#BOlist").val(BODropdownValue)
		handleBOlistChanged()
	} 
	
	if (SODropdownValue != null) {
		// a specific module is choosen from the homepage
		// set dropdown
		$("#SOlist").val(SODropdownValue)
		handleSOlistChanged()
	}
}

/*
 * handlers
 */

handleBOlistChanged = function() {
	// clean out mess
	var container = $(".checkboxes")
	container.empty()
	// hide checkall
	$(".checkall").hide()
	
	//reset the other form elements
	$("#SOlist").val("-")
	$("#author").val("-")
	$("#level").val("-")
	
	// reset keyword
	$("#keyword").val("")
	
	//set market & module
	if ($("#BOlist").val() == "-") {
		// reset market & module
		$("input[name='Market']").val("")
		$("input[name='Module']").val("")
	} else {	
		$("input[name='Market']").val("Basisonderwijs")
		$("input[name='Module']").val($("#BOlist").val())
	}

	// update subjectlist
	setSearchSubjects($("#BOlist").val(), "Basisonderwijs")
	
	// update levellist
	setLevels()
	
	// invoke query
	//updateSearchResults()
}

handleSOlistChanged = function() {
	// clean out mess
	var container = $(".checkboxes")
	container.empty()
	
	//reset the other form elements
	$("#BOlist").val("-")
	$("#author").val("-")
	$("#level").val("-")
	
	// reset keyword
	$("#keyword").val("")
	
	//set market & module
	if ($("#SOlist").val() == "-") {
		// reset market & module
		$("input[name='Market']").val("")
		$("input[name='Module']").val("")
	} else {	
		$("input[name='Market']").val("Secundair onderwijs")
		$("input[name='Module']").val($("#SOlist").val())
	}	

	// update subjectlist
	setSearchSubjects($("#SOlist").val(), "Secundair onderwijs")
	
	// update levellist
	setLevels()	
	
	// invoke query
	//updateSearchResults()
}

openSearchPage = function(){
	var urlSearch = "Artikels/"
	
	// get/set value
	var argumentBO = $("#BOlist_home").val()
	var argumentSO = $("#SOlist_home").val()
	
	if (argumentBO != "-" || argumentSO != "-") {
		if (argumentBO != "-") {
			argument = "?BOlist=" + argumentBO
		} else {
			argument = "?SOlist=" + argumentSO
		}
	} else {
		argument = ""
	}		
	// open window
	window.open(urlSearch + argument, "_self")
}

handleToggleSubjects = function (newStatus){
	$("input[name=Subject]").attr("checked",newStatus)
}

setSearchResultsHeader = function (string) {
	$("#searchresults h1").text(string)
}

resetSearchform = function () {
	// init forms pulldowns
	$("#BOlist").val("-")
	$("#SOlist").val("-")
	$("#author").val("-")
	$("#level").val("-")
	
	// reset keyword
	$("#keyword").val("")
	
	// hide checkall
	$(".checkall").hide()	
	
	// reset subjects
	$(".checkboxes").empty()
	
	// hide themalist
	$("#subThemalist").hide()
}


/* 
 * form handlers
 */

$(document).ready(function(){
	
	// reset form to init
	resetSearchform()
	
	// formhandler for enter key
	$("#keyword").keypress(function (e) {  
		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {  
			getArticlesByQuery();
			return false;  
		} else {  
			return true;  
		}
	})
		
	// make sure only one market is choosen
	$("#BOlist").change(function () {
		handleBOlistChanged()
	})
	
	$("#SOlist").change(function () {
		handleSOlistChanged()
	})
	
	// handle size for authors pulldown
	$("#author").focus(function() {
		$(this).addClass("open")
		$(this).attr("size",6)
	   
	});

	$("#author").blur(function() {
		$(this).removeClass("open")
		$(this).attr("size",1)
	});
	
	// handle popup, beware.. after each.. register only one handler!
	$("#citaatbox a").click(function() {
		retrieveArticle($(this).attr("href"))
		return false
	})

	// add handler for subject toggle
	$("#toggle").click (function(){
		var status = $(this).attr("checked")
		handleToggleSubjects(status)
		
		// get searchresults
		getArticlesByQuery()
	})
	
	// add handler for thema
	$("#subThemalist").change (function(){
		// check pulldown for market
		var market = $("input[name='Market']").val()

		// set subject checkboxes
		setSearchSubjects($(this).val(), market)
	
	})
	
})	

