new XmSearchEngine;

function XmSearchEngine() {

	var searchLang; 

	$(document).ready(function() {
		init();
	});

	function init() {
	        searchLang = $('#searchform input[name=lang]').val();
		if (searchLang == null || searchLang == "") {
			searchLang = "de";
		} else if ( searchLang == "ger" ) {
			searchLang = "de";
		} else if ( searchLang == "eng") {
			searchLang = "en";
		}
		
		$("#searchform").submit(function() {
			submitSearchForm();
			return false;
		});
		
		$("input#schlagworte").autocomplete({
			delay: 1000,
			minLength: 3,
		    	search: function(event, ui) { 
				submitSearchForm();	
				return false; 
			}
		});
		
		$('#searchResultContainer').click(function(event) {
			event.stopPropagation();
		});
		
		$('body').click(function() {
			$("#searchResultContainer").fadeOut();
		});
		
		$(document).ajaxStart(function (){
			$('#ajaxBusy').show();
		});
		
		$(document).ajaxStop(function (){
			$('#ajaxBusy').hide();
		});
	}
	
	function submitSearchForm() {
		var query = $("#schlagworte").val();
		if (query == "") {
			alert('Bitte geben Sie einen Suchbegriff ein.');
			return false;
		} else if (query.length < 3) {
			alert('Bitte geben Sie einen Suchbegriff ein, der mindestens drei Buchstaben enthält.');
			return false;
		}
				
		// Clean results
		$('#fulltextResultPanel').html('');
				
		// Show result panel
		$("#searchResultContainer").fadeIn();
		
		// Search full text
		$.getJSON("/xms/search.json?lang=" + searchLang + "&fuzzy=false&startIndex=0&batchSize=25&collection=tuev-kids&q=" + 
				query , function(data){
			 handleFulltextSearchResults(data);
		});
		
	}
	
	// Fulltext results
	function handleFulltextSearchResults(data) {		
		if (data == null || data.hits == null || data.hits.length == null || data.hits.length == 0) {
			$('#fulltextResultPanel').html('');
			$('<div id="fulltextResultLabel" class="resultLabel"></div>').appendTo('#fulltextResultPanel');
			$('<div id="fulltextResultHitPanel" class="resultHitPanel"></div>').appendTo('#fulltextResultPanel');
			$('#fulltextResultHitPanel').html('Es gibt leider keine passenden Ergebnisse zu Ihrer Suche.');
			return;
		}
		
		// Add label and hit panel
		var langString = "Volltext";
		var langSringMoreResults = "Weitere Treffer zeigen";
                if (searchLang == "en") {
                        langString = "Full text TÜV Hessen";
			langSringMoreResults = "Show more hits";
                }
		$('#fulltextResultPanel').html('');
		$('<div id="fulltextResultLabel" class="resultLabel">' + langString + '</div>').appendTo('#fulltextResultPanel');
		$('<div id="fulltextResultHitPanel" class="resultHitPanel"></div>').appendTo('#fulltextResultPanel');
				
		var targetEl = '#fulltextResultHitPanel';
		for (var i=0; i<data.hits.length; i++) {
			var hit = data.hits[i];
			
			// If more hits than 10, push them to a hidden div
			if (i == 9) {
				$('<div id="ftMoreResultHitLabel" class="moreResultHitLabel"><a href="#" id="ftAdditionalResultHitPanelTrigger">' + langSringMoreResults + '</a></div>').appendTo('#fulltextResultHitPanel');
				$('<div id="ftAdditionalResultHitPanel" class="additionalResultHitPanel"></div>').appendTo('#fulltextResultHitPanel');
				$('#ftAdditionalResultHitPanelTrigger').click(function(event) {
					event.stopPropagation();
					$("#ftAdditionalResultHitPanel").show();
					$("#ftMoreResultHitLabel").hide();
					return false;
				});
				targetEl = '#ftAdditionalResultHitPanel';
			}
			
			var hitPanel = '<div class="resultHit clerasil">\n';
			hitPanel+= '<div class="resultHitLabel resultHitDescriptionTriggerFt" name="ft' + i + '">';
			hitPanel+= '<a id="resultHitTitleft' + i + '" class="resultHitTitle" href="' + hit.dcIdentifier + '">' + '<img border="0" src="/xms/icons/mime_type.' + (hit.dcFormat != null?hit.dcFormat.replace('/','_'):'') + '.gif" />' +  hit.dcTitle + '</a>';
			hitPanel+= '<div id="resultHitDescriptionft' + i + '" class="resultHitDescription">' + hit.fragment + '</div>';
			hitPanel+= '</div>\n';
			hitPanel+= "</div>\n";
			
			$(hitPanel).appendTo(targetEl);
		}
		
		var hoverConfig = {
                     over: function(event) {
                        var elId = $(this).attr("name");
                        $("#resultHitDescription" + elId).slideToggle(700);
			$("#resultHitTitle" + elId).addClass("hover");
                        },
                     timeout: 300, // number = milliseconds delay before onMouseOut    
                     out : function(event) {
                        var elId = $(this).attr("name");
                        $("#resultHitDescription" + elId).slideToggle(700);
			$("#resultHitTitle" + elId).removeClass("hover");
                        },
                     interval : 400
                };

                $('.resultHitDescriptionTriggerFt').hoverIntent(hoverConfig);
	}
}

