// globals
var searchSubjectsBO, searchSubjectsSO = new Object()

// flag for initial results by URL deeplink
var resultsByURL = false

/* 
 * dataLoader proxy method
 */

var dataLoader =  {
	
	// init flags
	authors: false,
	subjectsBO: false,
	subjectsSO: false,
	called: false,
	
	// add update functions
	subjectsBOReady: function () {
		this.subjectsBO = true;
		if (this.ready()) this.handleURL()
	},
	
	subjectsSOReady: function () {
		this.subjectsSO = true;
		if (this.ready()) this.handleURL()
	},
	
	authorsReady: function () {
		this.authors = true;
		if (this.ready()) this.handleURL()
	},
	
	// define ready
	ready: function () {
		return (this.authors && this.subjectsBO && this.subjectsSO && !this.called)
	},
	
	// define action
	handleURL: function () {
		
		this.called = true
		
		// now add url handlers
		setModuleValue() 
		showDeeplinkedArticle()
		listAuthorArticles()
		listDocsetArticles()
		
		// fill levels
		setLevels()
		
		// enable all disabled pulldowns
		$("select").attr("disabled", "")
		
		if (!resultsByURL) {
			// get initial search results
			updateSearchResults()
		}		
	}
	
}

// getArticles
getArticlesByQuery = function() {
	
	var url = "/handlers/search.ashx"
	if (debug) url = "../data/search.json"	
	
	$.ajax({
		url: url,
		type: "POST",
		dataType: 'json',
		data: "action=GetArticlesByQuery&" + getQuery(),
		success: function (data, textStatus) {
			setSearchResultsHeader("Zoekresultaten...")	
			renderSearchData(data)
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderSearchArticlesError()
		} 
	}) 
}

//getSearchSubjects
getSearchSubjects = function() {
	
	var url = "/handlers/List.ashx"
	if (debug) url = "../data/subjectlist.json"	
	
	// BO subjects call
	$.ajax({
		url: url,
		type: "POST",
		data: "action=GetBOSubjects",
		dataType: 'json',
		success: function(data) {
			// set data to global var
			searchSubjectsBO = data
			
			dataLoader.subjectsBOReady()
			
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderSearchArticlesError()
		} 
	})
	
	// SO subjects call
	$.ajax({
		url: url,
		type: "POST",
		data: "action=GetSOSubjects",
		dataType: 'json',
		success: function(data) {
			// set data to global var
			searchSubjectsSO = data
			
			dataLoader.subjectsSOReady()
			
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderSearchArticlesError()
		} 
	})	
	
}

// getSearchAuthors
getSearchAuthors = function() {

	var url = "/handlers/List.ashx"
	if (debug) url = "../data/auteurs.json"		
	
	$.ajax({
		url: url,
		type: "POST",
		dataType: 'json',
		data: "action=GetAuthors",
		success: function(data) {
			// set data to global var
			setSearchAuthors(data)
			
			dataLoader.authorsReady()
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			//renderSearchArticlesError()
			renderSearchArticlesError()
		} 
	})
}



// serialize form input
getQuery = function () {
 	
	// get input and selectors
	var queryString = ""
	
	var selectors = 
	    $("input[name=Keywords]").
	    add("select[name=Level]").
	    add("select[name=Author]").
	    add("input[type=hidden]")

	$.each(selectors, function (i,item) {
		var value = $(item).val()
		if (value == "-") value = ""
		queryString += $(item).attr("name") + "=" + value + "&"
	})
	
	// get array with checked checkboxes
	var querySubjects = new Array()
	
	var selectors = $(".checkboxes input:checkbox:checked")
	
	$.each(selectors, function (i,item) {
		querySubjects.push($(item).val())
	})
	
	/*
	 * add modulename or subtheme path in case of beleid
	 */
	
	// add module name as subject
	var selectedModule = $("input[name=Module]").val()
	
	// beleid selected
	if (selectedModule == "Beleid") {
		// set theme
		var selectedTheme = $("#subThemalist").val()
		
		// only beleid selected		
		if (selectedTheme == "-") {
			// include all beleid subjects
			querySubjects.push("Beleid")
		} else {
			// include all items that contain Beleid|sometheme if all subjects choosen
			if ($("#toggle").attr("checked")) {
				querySubjects.push("Beleid|" + selectedTheme)
			} else {
				querySubjects.push("dummy")
			}	
		}	
	}
	
	if (selectedModule == "Zorg" || selectedModule == "Didactiek") {
		// include all items that contain module name in subject
		if ($("#toggle").attr("checked")) {
			querySubjects.push(selectedModule)
		} else {
			querySubjects.push("dummy")
		}	
	}	
	
	// add subjects to queryString
	$.each(querySubjects, function (i,item) {
		queryString += "subject=" + item + "&"
	})

	return encodeURI(queryString)
	//return $("form").serialize();
}

getQueryPreview = function() {
	return $("#overlay form").serialize()
}

// getfreearticles
getFreeArticles = function(responseHandler) {
	
	$.ajax({
		url: "/handlers/search.ashx",
		type: "POST",
		dataType: 'json',
		data: { action: "GetFreeArticles", noOfItems: 3 },
		success: function(data) {
			renderFreeArticles(data)
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderFreeArticlesError()
		} 
	}) 
}	
	
// getLatestArticles
getLatestArticles = function(responseHandler) {

	$.ajax({
		url: "/handlers/search.ashx",
		type: "POST",
		dataType: 'json',
		data: { action: "GetLatestArticles", noOfItems: 3 },
		success: function(data) {
			renderLatestArticles(data)
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderLatestArticlesError()
		} 
	})
}	

// getArticlesByAuthor
getArticlesByAuthor = function(author) {
	
	// set flag for initial results by URL deeplink
	resultsByURL = true

	var url = "/handlers/search.ashx"
	if (debug) url = "../data/search.json"	
	
	$.ajax({
		url: url,
		type: "POST",
		dataType: 'json',
		data: { action: "GetArticlesByAuthor", author: author },
		success: function (data, textStatus) {
			setSearchResultsHeader("Zoekresultaten voor alle artikels van de auteur " + author.split(",")[1] + " " + author.split(",")[0] + "...")
			
			// reset form and set author pulldown
			resetSearchform()			
			$("#author").val(author)
			
			renderSearchData(data)
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderSearchArticlesError()
		} 
	}) 
}


// getArticlesByDocset
getArticlesByDocset = function(docset) {
	
	// set flag for initial results by URL deeplink
	resultsByURL = true
	
	var url = "/handlers/search.ashx"
	if (debug) url = "../data/search.json"	
	
	$.ajax({
		url: url,
		type: "POST",
		dataType: 'json',
		data: { action: "getArticlesByDocumentset", documentset: docset },
		success: function (data, textStatus) {
			setSearchResultsHeader("Zoekresultaten voor alle artikels binnen " + docset + "...")
			resetSearchform()
			renderSearchData(data)
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
			renderSearchArticlesError()
		} 
	}) 
}


