
// Returns true if the passed value is found in the
// array. Returns false if it is not.
Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		// Matches identical (===), not just similar (==).
		if (this[i] === value) return true;
	}
	return false;
};


var tx_itevuddvaelg = {
	
	ajaxSources : {},
	
	domElements : {},
	animationSpeed : 100,
	
	educationData : {},
	singleViewData : {},
	currentSingleView : 0,
	
	headlineCanHide : true,
	
	currentCEobject : false,
	storedCEobjects : {},
	
	currentFilterID : "",
	activeFilterUIDs : [],
	freetextSearch : "",
	minimumSearchLength : 3,
	searchableFields : [],
	
	labels : {},
	
	entryTemplate : "",
	
	
	tabClick : function(e, doNotClearSearch) {
		
		var tab = jQuery(this).data("associatedTab");
		
		if (jQuery(this).hasClass("active") && !tab.hasClass("alphabeticalTab")) return;
		
		tx_itevuddvaelg.clearResultField();
		
		jQuery(this).addClass("active").siblings().removeClass("active");
		
		var targetHeight = 0;
		var tc = tx_itevuddvaelg.domElements.tabContainer;
		if (tab.hasClass("alphabeticalTab")) {
			tc.addClass("noBottomBorder");
		} else {
			targetHeight = tab.data("origHeight");
			tc.removeClass("noBottomBorder");
		}
		
		// Deselect any selected filter at once
		jQuery('a[id^="filterLink_'+ tx_itevuddvaelg.currentFilterID +'_"]').removeClass("active");
		tx_itevuddvaelg.currentFilterID = "";
		tx_itevuddvaelg.activeFilterUIDs = [];
		tx_itevuddvaelg.headlineCanHide = true;
		tx_itevuddvaelg.hideFilterCE();
		tx_itevuddvaelg.currentCEobject = false;
		tx_itevuddvaelg.closeEducation();
		
		tab.fadeIn(tx_itevuddvaelg.animationSpeed).siblings().fadeOut(tx_itevuddvaelg.animationSpeed);
		tc.animate({"height" : targetHeight + "px"}, tx_itevuddvaelg.animationSpeed );
		
		// If this is the "alphabetical"-tab, remove all filters and display all entries
		if (tab.hasClass("alphabeticalTab")) {
			if (!doNotClearSearch) {
				tx_itevuddvaelg.freetextSearch = "";
				tx_itevuddvaelg.domElements.tabBar.find("> .search input").val("");
			}
			tx_itevuddvaelg.showMainHeader();
			tx_itevuddvaelg.updateSearchResults(true, true);
			tx_itevuddvaelg.domElements.tabDescriptorHeader.text( jQuery(this).text() );
			tx_itevuddvaelg.headlineCanHide = false;
			
		} else {
			tx_itevuddvaelg.freetextSearch = "";
			tx_itevuddvaelg.domElements.tabBar.find("> .search input").val("");
			tx_itevuddvaelg.updateSearchResults();
		}
		
		
		
	},
	
	filterClick : function() {
		
		var link = jQuery(this);
		link.blur();
		var id = link.attr("id");
		var idData = id.split("_");
		
		// Find out what data to filter by
		var filterIdentifier = idData[1];
		var filterUID = idData[2];
		var ceUID = idData[3];
		var title = link.find(".title");
		
		if (tx_itevuddvaelg.currentFilterID != filterIdentifier) {
			jQuery('a[id^="filterLink_'+ tx_itevuddvaelg.currentFilterID +'_"]').removeClass("active");
		}
		
		link.toggleClass("active").siblings().removeClass("active");
		
		// If the link is active now, show ceRef (content element reference)
		if (link.hasClass("active") && ceUID) {
			tx_itevuddvaelg.loadAndShowFilterCE( ceUID );
		} else {
			tx_itevuddvaelg.currentCEobject = false;
			tx_itevuddvaelg.hideFilterCE();
			tx_itevuddvaelg.clearResultField();
			//tx_itevuddvaelg.showGenericCE();
		}
		// Store the new filter information
		tx_itevuddvaelg.currentFilterID = filterIdentifier;
		tx_itevuddvaelg.activeFilterUIDs = [];
		
		link.siblings().andSelf().filter(".active").each(function() {
			var tID = jQuery(this).attr("id");
			var tidData = tID.split("_");
			var uid = tidData[2];
			tx_itevuddvaelg.activeFilterUIDs.push( uid );
		});
		
		// Hide or show headline
		if (link.hasClass("active")) {
			tx_itevuddvaelg.showMainHeader();
		} else {
			tx_itevuddvaelg.hideMainHeader();
		}
		
		tx_itevuddvaelg.closeEducation();
		
		
		// Finally, update the search results
		tx_itevuddvaelg.updateSearchResults();
		
		// ... and scroll the browser down, if the current scroll position isn't high enough
		var targetPosition = tx_itevuddvaelg.domElements.tabHolder.offset().top;
		var currentPosition = jQuery( jQuery.browser.msie ? "html": "html,body" ).scrollTop();
		if (currentPosition < targetPosition) {
			jQuery( jQuery.browser.msie ? "html": "html,body" ).animate({ scrollTop : targetPosition + "px"}, tx_itevuddvaelg.animationSpeed * 3);
		}
	},
	
	
	showMainHeader : function() {
		tx_itevuddvaelg.domElements.tabDescriptorHeader.slideDown( tx_itevuddvaelg.animationSpeed );
		tx_itevuddvaelg.hideGenericCE();
	},
	
	hideMainHeader : function() {
		if (!tx_itevuddvaelg.currentSingleView && !tx_itevuddvaelg.activeFilterUIDs.length && tx_itevuddvaelg.headlineCanHide) {
			tx_itevuddvaelg.domElements.tabDescriptorHeader.slideUp( tx_itevuddvaelg.animationSpeed );
			tx_itevuddvaelg.showGenericCE();
		}
	},
	
	
	performFreeSearch : function() {
		
		var newQuery = jQuery(this).val().replace(/[^a-z0-9æøåÆØÅ\-\s]/i, "");
		if (newQuery != tx_itevuddvaelg.freetextSearch ) {
			tx_itevuddvaelg.clearResultField();
			jQuery(this).val(newQuery);
			tx_itevuddvaelg.freetextSearch = newQuery;
			//tx_itevuddvaelg.domElements.tabBar.find(".tab:last").click();
			tx_itevuddvaelg.tabClick.call(tx_itevuddvaelg.domElements.tabBar.find(".tab:last"), false, true);
			tx_itevuddvaelg.updateSearchResults(true);
		}
		
	},
	
	
	educationClick : function(e) {
		
		e.preventDefault();
		
		jQuery(this).parents(".itev_uddvaelg_search:first").find(".entry.active").removeClass("active");
		jQuery(this).parents(".entry:first").addClass("active");
		var uid = jQuery(this).data("uid");
		if (uid != tx_itevuddvaelg.currentSingleView) {
			tx_itevuddvaelg.currentSingleView = uid;
			tx_itevuddvaelg.hideGenericCE();
			tx_itevuddvaelg.loadEducation(uid);
		}
		return false;
	},
	
	
	loadEducation : function(uid) {
		var eH = tx_itevuddvaelg.domElements.singleEntryHolder.find("> .entry");
		if (!eH.filter(":visible").length) {
			eH.slideDown( tx_itevuddvaelg.animationSpeed );
		} else {
			if (eH.height() < 50) eH.animate({"height" : "50px"}, tx_itevuddvaelg.animationSpeed);
		}
		if ( tx_itevuddvaelg.singleViewData[uid] ) {
			tx_itevuddvaelg.displayEducation(uid);
		} else {
			tx_itevuddvaelg.domElements.singleEntryHolder.find("> .entry").html("");
			tx_itevuddvaelg.domElements.singleEntryHolder.find("> .loading").fadeIn( tx_itevuddvaelg.animationSpeed );
			jQuery.ajax({
				url : tx_itevuddvaelg.ajaxSources.edu[uid],
				type : "GET",
				success : function(r) {
					tx_itevuddvaelg.singleViewData[uid] = r;
					tx_itevuddvaelg.displayEducation(uid);
				}
			});
		}
	},
	
	
	displayEducation : function(uid) {
		tx_itevuddvaelg.domElements.singleEntryHolder.find("> .loading").hide();
		tx_itevuddvaelg.domElements.singleEntryHolder.find("> .entry")
			.stop(1,1)
			.css("height", "auto")
			.html( tx_itevuddvaelg.singleViewData[uid] )
		;
		
		tx_itevuddvaelg.domElements.singleEntryHolder.find("> .entry a").not("a[href^='javascript:']").attr("target", "_blank");
		tx_itevuddvaelg.hideFilterCE();
		
		// Show or hide "related"-section
		var related = tx_itevuddvaelg.educationData[uid].related;
		tx_itevuddvaelg.domElements.relatedDataHolder.find("*").remove();
		if (related.length) {
			var showHeadline = false;
			tx_itevuddvaelg.domElements.relatedDataHolder.find("*").remove();
			for (rI = 0; rI < related.length; rI++) {
				if (related[rI]) {
					showHeadline = true;
					tx_itevuddvaelg.addEntry( related[rI], tx_itevuddvaelg.domElements.relatedDataHolder );
				}
			}
			if (showHeadline) tx_itevuddvaelg.domElements.relatedHeadline.slideDown( tx_itevuddvaelg.animationSpeed );
			else tx_itevuddvaelg.domElements.relatedHeadline.slideUp( tx_itevuddvaelg.animationSpeed );
		} else {
			tx_itevuddvaelg.domElements.relatedHeadline.slideUp( tx_itevuddvaelg.animationSpeed );
		}
		
		
	},
	
	closeEducation : function() {
		
		tx_itevuddvaelg.currentSingleView = false;
		tx_itevuddvaelg.domElements.singleEntryHolder.find("> .entry").slideUp( tx_itevuddvaelg.animationSpeed, function(){ jQuery(this).html(""); });
		tx_itevuddvaelg.domElements.relatedHeadline.slideUp( tx_itevuddvaelg.animationSpeed );
		tx_itevuddvaelg.domElements.relatedDataHolder.find("*").remove();
		tx_itevuddvaelg.domElements.resultHolder.find("> .entry").removeClass("active");
		
		if (tx_itevuddvaelg.currentCEobject) tx_itevuddvaelg.displayFilterCE( tx_itevuddvaelg.currentCEobject );
		
		//tx_itevuddvaelg.showGenericCE();
		tx_itevuddvaelg.hideMainHeader();
	},
	
	
	clearResultField : function() {
		tx_itevuddvaelg.domElements.resultHolder.find("*").remove();
	},
	
	
	addEntry : function( uid, domTarget ) {
		var data = tx_itevuddvaelg.educationData[uid];
		var entry = tx_itevuddvaelg.entryTemplate;
		
		entry = entry.replace("###LINK###", data.__singleView );
		entry = entry.replace("###TITLE###", data.title );
		entry = entry.replace("###ABSTRACT###", data['abstract'] );
		
		var entryDom = jQuery(entry);
		entryDom.find("a").data("uid", data.uid).click( tx_itevuddvaelg.educationClick );
		
		if (domTarget) domTarget.append(entryDom);
		else tx_itevuddvaelg.domElements.resultHolder.append(entryDom);
	},
	
	
	updateSearchResults : function(showAll, sortByName) {
		
		var searchInProgress = false;
		
		tx_itevuddvaelg.clearResultField();
		
		// First, get all the UIDs we can use.
		var usableUIDs = {};
		
		// Then, run through any and all active filters.
		if (tx_itevuddvaelg.currentFilterID && tx_itevuddvaelg.activeFilterUIDs.length) {
			searchInProgress = true;
			for (uidIdx = 0; uidIdx < tx_itevuddvaelg.activeFilterUIDs.length; uidIdx++) {
				for (uid in tx_itevuddvaelg.educationData) {
					if ( tx_itevuddvaelg.educationData[uid][ tx_itevuddvaelg.currentFilterID ].inArray( tx_itevuddvaelg.activeFilterUIDs[ uidIdx ] ) ) {
						usableUIDs[uid] = true;
					}
				}
			}
		}
		
		if (!searchInProgress && showAll) {
			for (uid in tx_itevuddvaelg.educationData) {
				usableUIDs[ uid ] = true;
			}
		}
		
		
		// Lastly, we'll print the results - but while we're at it, we might as well perform the
		// freetext search (if anything has been typed into the search field, that is)
		var finalOutput = [];
		for (uid in usableUIDs) {
			var usable = false;
			
			if (tx_itevuddvaelg.freetextSearch.length >= tx_itevuddvaelg.minimumSearchLength) {
				searchInProgress = true;
				var data = tx_itevuddvaelg.educationData[uid];
				for (fieldIdx = 0; fieldIdx <  tx_itevuddvaelg.searchableFields.length; fieldIdx++ ) {
					var fieldName = tx_itevuddvaelg.searchableFields[fieldIdx];
					var pattern = new RegExp(tx_itevuddvaelg.freetextSearch, "gi");
					if ( data[fieldName].match( pattern ) ) {
						usable = true;
					}
				}
			} else {
				usable = true;
			}
			
			if (usable) {
				finalOutput.push( tx_itevuddvaelg.educationData[uid] );
			}
		}
		var entryCount = finalOutput.length;
		
		
		// Sort remaining entries
		//if (sortByName) {
		if (true) {
			// Sort by title
			finalOutput.sort( function(a, b) {
				var nameA=a.title.toLowerCase(), nameB=b.title.toLowerCase();
				if (nameA < nameB) return -1;
				if (nameA > nameB) return 1;
				return 0;
			});
		} else {
			// Sort by TYPO3 internal sorting
			finalOutput.sort( function(a, b) {
				return a.sorting - b.sorting;
			});
		}
		
		// Print results
		for (idx = 0; idx < finalOutput.length; idx++) {
			tx_itevuddvaelg.addEntry( finalOutput[idx].uid );
		}
		
		
		/*
		// If no entries have been found, but no search is in progress, display everything!
		if (!entryCount) {
			if (!searchInProgress) {
				for (uid in tx_itevuddvaelg.educationData) {
					tx_itevuddvaelg.addEntry( uid );
				}
			}
		}
		*/

		var activeTitle;
		if (!searchInProgress) {
			//activeTitle = tx_itevuddvaelg.labels.allEducations;
		} else {
			if (tx_itevuddvaelg.activeFilterUIDs.length > 1) {
				activeTitle = tx_itevuddvaelg.labels.multipleSelected;
			} else {
				if (tx_itevuddvaelg.currentFilterID && tx_itevuddvaelg.activeFilterUIDs.length) {
					var tUid = tx_itevuddvaelg.activeFilterUIDs[0];
					var activeLink = jQuery("*[id^='filterLink_" + tx_itevuddvaelg.currentFilterID + "_" + tUid + "_']");
					activeTitle = activeLink.find(".title").text();
				}
			}
			
			if (tx_itevuddvaelg.freetextSearch) {
				if (!activeTitle) activeTitle = tx_itevuddvaelg.labels.allEducations;
				activeTitle += " " + (activeTitle ? "(" : "") + tx_itevuddvaelg.labels.searchFor + " '" + tx_itevuddvaelg.freetextSearch + "'" + (activeTitle ? ")" : "");
			}
		}
		
		//if (!entryCount) activeTitle += " (" + tx_itevuddvaelg.labels.noResults+ ")";
		
		tx_itevuddvaelg.domElements.tabDescriptorHeader.text( activeTitle );
		
	},
	
	
	
	loadAndShowFilterCE : function(uid) {
		tx_itevuddvaelg.hideGenericCE();
		tx_itevuddvaelg.domElements.filterCEHolder.slideDown( tx_itevuddvaelg.animationSpeed);
		if (uid) {
			if (tx_itevuddvaelg.storedCEobjects[uid]) tx_itevuddvaelg.displayFilterCE(uid);
			else {
				tx_itevuddvaelg.domElements.filterCEHolder.find("> .loading").show();
				if (typeof(tx_itevuddvaelg.ajaxSources.ce) == "object") {
					if (tx_itevuddvaelg.ajaxSources.ce[uid]) {
						jQuery.ajax({
							url : tx_itevuddvaelg.ajaxSources.ce[uid],
							type : "GET",
							success : function(r) {
								tx_itevuddvaelg.storedCEobjects[uid] = r;
								tx_itevuddvaelg.displayFilterCE(uid);
							}
						});
					}
				}
				
			}
			
		}
	},
	
	displayFilterCE : function(uid) {
		tx_itevuddvaelg.currentCEobject = uid;
		tx_itevuddvaelg.domElements.filterCEHolder.find("> .loading").hide();
		tx_itevuddvaelg.domElements.filterCEHolder.find("> .entry").html( tx_itevuddvaelg.storedCEobjects[uid] );
		
		if (!tx_itevuddvaelg.currentSingleView) tx_itevuddvaelg.domElements.filterCEHolder.find("> .entry").show();
		
	},
	
	
	hideFilterCE : function() {
		//tx_itevuddvaelg.domElements.filterCEHolder.find("> .entry").hide();
		tx_itevuddvaelg.domElements.filterCEHolder.slideUp( tx_itevuddvaelg.animationSpeed, function() { jQuery(this).find("> .entry").hide(); } )
	},
	
	
	showGenericCE : function() {
		if (!tx_itevuddvaelg.currentCEobject && !tx_itevuddvaelg.currentSingleView) {
			for (idx = 0; idx < tx_itevuddvaelg.genericCEref.length; idx++) {
				jQuery("#c" + tx_itevuddvaelg.genericCEref[idx]).slideDown(tx_itevuddvaelg.animationSpeed );
			}
		}
	},
	
	hideGenericCE : function() {
		for (idx = 0; idx < tx_itevuddvaelg.genericCEref.length; idx++) {
			jQuery("#c" + tx_itevuddvaelg.genericCEref[idx]).slideUp(tx_itevuddvaelg.animationSpeed );
		}
		
	},
	
	
	
	
	prepareEducationData : function() {
		
		for (uid in tx_itevuddvaelg.educationData) {
			var data = tx_itevuddvaelg.educationData[uid];
			tx_itevuddvaelg.educationData[uid].fields = data.fields.split(",");
			tx_itevuddvaelg.educationData[uid].location = data.location.split(",");
			tx_itevuddvaelg.educationData[uid].subjects = data.subjects.split(",");
			tx_itevuddvaelg.educationData[uid].related = data.related.split(",");
			tx_itevuddvaelg.educationData[uid].university = data.university.split(",");
			tx_itevuddvaelg.educationData[uid].cities = data.cities.split(",");
		}
		
	},
	
	
	determineAdminMode : function() {
		
		var url = tx_itevuddvaelg.uncachedAjaxURL;
		if (url) {
			jQuery.ajax({
				url : url,
				data : { "tx_itevuddvaelg[get]" : "bestatus" },
				cache : false,
				success : function(r) {
					if (r.toString() == "1") {
						var tabs = tx_itevuddvaelg.domElements.tabContainer.find("> *");
						tabs.each( function() {
							jQuery(this).find("> a").each(function() {
								var lnk = jQuery(this);
								var idData = lnk.attr("id").split("_");
								var filterType = idData[1];
								var filterID = idData[2];
								
								var button = jQuery("<button type='button' class='directLink'>Hent direkte link</button>");
								button.data("qr", { filterType : filterType, filterID : filterID });
								button.click( function(e) {
									jQuery(this).text('Arbejder...').attr("disabled", "disabled").addClass('disabled');
									var data = jQuery(this).data("qr");
									var btn = jQuery(this);
									jQuery.ajax({
										url : tx_itevuddvaelg.uncachedAjaxURL,
										data : {
											"tx_itevuddvaelg[get]" : "calculateDirectLink",
											"tx_itevuddvaelg[filterType]" : data.filterType,
											"tx_itevuddvaelg[filterID]" : data.filterID
										},
										success : function(r) {
											var filterTitle = tx_itevuddvaelg.domElements.tabBar.find("." + filterType + "Tab").text();
											var filterIDTitle = tx_itevuddvaelg.domElements.tabContainer.find("." + filterType + "Tab > a[id^='filterLink_" + filterType + "_" + filterID + "_'] .title").text();
											var html = "<div class='adminLinkDisplay'><b>Link til '" + filterTitle + "' -&gt; '"+ filterIDTitle + "':</b> <a href='"+ r +"' target='_blank'>" + r + "</a><br/>";
											html += "<b>QR:</b> ";
											html += "<a href='http://qrcode.kaywa.com/img.php?s=5&d=" + escape(r) + "' target='_blank' class='qrLink'>195px</a>";
											html += "<a href='http://qrcode.kaywa.com/img.php?s=6&d=" + escape(r) + "' target='_blank' class='qrLink'>234px</a>";
											html += "<a href='http://qrcode.kaywa.com/img.php?s=8&d=" + escape(r) + "' target='_blank' class='qrLink'>312px</a>";
											html += "<a href='http://qrcode.kaywa.com/img.php?s=12&d=" + escape(r) + "' target='_blank' class='qrLink'>468px</a>";
											html += "</div>";
											var output = jQuery(html);
											tx_itevuddvaelg.domElements.tabDescriptorHeader.before(output);
											btn.remove();
										}
									});
									e.preventDefault();
									e.stopPropagation();
									return false;
								});
								lnk.append(button);
								
							});
						});
					}
				}
			});
		}
		
	},
	
	
	
	initialize : function() {
		
		
		// Load the education JSON-data, if it exists
		var jsonHolder = jQuery(".itev_uddvaelg_search .jsData .entryJSON");
		if (jsonHolder.length) {
			var rawText = jsonHolder.html();
			tx_itevuddvaelg.educationData = jQuery.parseJSON(rawText);
			tx_itevuddvaelg.prepareEducationData();
		}
		
		
		// Load searchable fields, if THEY exist
		var sfiHolder = jQuery(".itev_uddvaelg_search .jsData .searchableFields");
		if (sfiHolder.length) {
			var rawFields = sfiHolder.text();
			tx_itevuddvaelg.searchableFields = rawFields.split(",");
		}
		
		// Entry template?
		var tmplHolder = jQuery(".itev_uddvaelg_search .jsData > .template");
		if (tmplHolder.length) {
			tx_itevuddvaelg.entryTemplate = tmplHolder.html();
		}
		
		// Set up some DOM elements. They may or may not actually be there, but if they aren't,
		// we won't need them anyway.
		tx_itevuddvaelg.domElements.resultHolder = jQuery(".itev_uddvaelg_search > .entries");
		tx_itevuddvaelg.domElements.relatedHeadline = jQuery(".itev_uddvaelg_search .relatedHeadline");
		tx_itevuddvaelg.domElements.relatedDataHolder = jQuery(".itev_uddvaelg_search .relatedDataHolder");
		tx_itevuddvaelg.domElements.singleEntryHolder = jQuery(".itev_uddvaelg_single");
		tx_itevuddvaelg.domElements.filterCEHolder = jQuery(".itev_uddvaelg_filterCE");

		
		
		
		// Set up the tab system
		tx_itevuddvaelg.domElements.tabHolder = jQuery(".itev_uddvaelg_index");
		if (tx_itevuddvaelg.domElements.tabHolder.length) {
			
			// Set up generic CE references
			var tmp = tx_itevuddvaelg.genericCEref;
			tx_itevuddvaelg.genericCEref = [];
			tx_itevuddvaelg.genericCEref = tmp.split(",");
			
			// Add the "close"-button to the singleEntry-holder, now that we know the search thingie exists.
			var closeButton = jQuery("<div class='closeEducation'>&nbsp;</div>");
			tx_itevuddvaelg.domElements.singleEntryHolder.append( closeButton );
			closeButton.click( tx_itevuddvaelg.closeEducation );
			
			
			tx_itevuddvaelg.domElements.tabDescriptorHeader = tx_itevuddvaelg.domElements.tabHolder.find(".descriptorHeader");
			tx_itevuddvaelg.domElements.tabBar = tx_itevuddvaelg.domElements.tabHolder.find("> .tabBar");
			tx_itevuddvaelg.domElements.tabContainer = tx_itevuddvaelg.domElements.tabHolder.find("> .tabs");
			var tabs = tx_itevuddvaelg.domElements.tabContainer.find("> .tab");
			
			tabs.each(function(i) {
				var tab = jQuery(this).removeClass("tab");
				var tabButton = jQuery("<div />");
				var title = tab.attr("title");
				var classes = tab.attr("class");
				tabButton
					.text(title)
					.click( tx_itevuddvaelg.tabClick )
					.data("associatedTab", tab)
					.addClass("tab")
					.addClass(classes)
				;
				if (i + 1 == tabs.length) tabButton.addClass("last");
				tx_itevuddvaelg.domElements.tabBar.append(tabButton);
				tab
					.attr("title", "")
					.data("origHeight", tab.outerHeight(true))
					.data("associatedTab", tabButton)
					.css({
						left : 0,
						top : 0,
						position: "absolute"
					})
					.hide()
				;
				
				// First, setup onclick for each of the links (filters), and then determine how many
				// educations actually match each filter.
				tab.find("a").click( tx_itevuddvaelg.filterClick ).each( function() {
					
					var link = jQuery(this);
					var id = link.attr("id");
					var idData = id.split("_");
					
					// Find out what data this filter activates
					var filterIdentifier = idData[1];
					var filterUID = idData[2];
					var results = 0;
					
					// Check through the educations and see how much matches.
					if (filterIdentifier && filterUID) {
						for (uid in tx_itevuddvaelg.educationData) {
							if ( tx_itevuddvaelg.educationData[uid][ filterIdentifier ].inArray( filterUID ) ) {
								results++;
							}
						}
					}
					
					if (results) {
						link.find(".count").text(results);
					} else {
						link.find(".count").remove();
					}
					
				});
			});
			
			tx_itevuddvaelg.domElements.tabDescriptorHeader.show();
			
			// Hide the singleview-holder for now.
			tx_itevuddvaelg.domElements.singleEntryHolder.find("> .entry").hide();
			
			// Set up functionality on the search field
			tx_itevuddvaelg.domElements.tabBar.find("> .search").each(function(){
				jQuery(this).find("input")
				.keydown( function(e) {
					try {
						if (e.keyCode == 13) jQuery(this).blur();
						if (e.keyCode == 27) jQuery(this).val("");
					} catch(e){};
				})
				.blur( tx_itevuddvaelg.performFreeSearch )
				;
				jQuery(this).find("button").click( tx_itevuddvaelg.performFreeSearch );
			});
			
			// If a filter type is preselected (through a QR-code or similar), click the corresponding tab now
			if (tx_itevuddvaelg.loadFilterType) {
				tx_itevuddvaelg.domElements.tabBar.find("." + tx_itevuddvaelg.loadFilterType + "Tab").click();
			} else {
				// "Click" the first tab, to make it active
				tx_itevuddvaelg.domElements.tabBar.find(".tab:first").click();
			}
			
			// Hide the headline
			tx_itevuddvaelg.hideMainHeader();
			
			
			// If a filter ID is preselected (through a QR-code or similar), click the corresponding link now
			if (tx_itevuddvaelg.loadFilterType && tx_itevuddvaelg.loadFilterID) {
				tx_itevuddvaelg.domElements.tabContainer.find("." + tx_itevuddvaelg.loadFilterType + "Tab > a[id^='filterLink_" + tx_itevuddvaelg.loadFilterType + "_" + tx_itevuddvaelg.loadFilterID + "_']").click();
			} else {
				// Get ready!
				tx_itevuddvaelg.updateSearchResults();
			}
			
			
			
			// Find out if we're in admin mode!
			tx_itevuddvaelg.determineAdminMode();
			
		}
		
		// Make sure no links can be opened in a new tab (or at least try)
		jQuery(".itev_uddvaelg_index a").click(function(e) {
			if (e.button == 1) {
				e.preventDefault();
			};
			return false;
		});
		
	}
	
}


jQuery( tx_itevuddvaelg.initialize );
