/*
	AJAX search for Navigo
	(c)2007 Verkkojulkaisut Oy
	
	- This script uses Prototype framework. Get Prototype from http://www.prototypejs.org/
*/

// Settings
//var currentLocale = "fi_FI";  If you want to localize the search results, set this value dynamically in the JSP
var searchUrl = "/wihuri!/ajax_search/"; // Path to the AJAX search results page (usually /ajax_search/)
var searchFormId = "searchForm"; // Form id (used to get the correct search results page for "more results" link)
var resultEmtId = "searchResults"; // Id of the search results wrapper
var triggerDelay = 1000; // Search trigger delay in milliseconds
var resultXOffset = -27; // Result wrapper x offset
var resultYOffset = 20; // Result wrapper y offset
var maxResults = 10; // Max search results to be displayed before the "more results" link appears

// Localized link titles
var titleNoResults = "Ei hakutuloksia";
var titleMoreResults = "Lis&auml;&auml; hakutuloksia...";

// Loading animation (get animations from http://www.ajaxload.info)
var loadAnimContent = "Ladataan hakutuloksia...<br /><img src=\"/stc/wihurifi/images/ajax-loader.gif\" width=\"200\" />";
// If an actual animated image is used it should be preloaded
var preloadedImage = new Image();
preloadedImage.src = "/stc/wihurifi/images/ajax-loader.gif";



// Other locales (to localize, move line 9 to JSP and set locale dynamically)
if(currentLocale == 'en_GB'){
	titleNoResults = "No search results";
	titleMoreResults = "More search results...";
	loadAnimContent = "Loading search results...<br /><img src=\"/stc/wihurifi/images/ajax-loader.gif\" width=\"200\" />";
	preloadedImage.src = "/stc/wihurifi/images/ajax-loader.gif";
}









// Uninitialized globals (DON'T TOUCH!)

var t; // Timer, search trigger delay
var searchField; // Element, search field
var triggerEvent; // Event, triggering event

// Initialized globals (DON'T TOUCH!)
var currentResults = 0; // Initial search result count
var displayMoreLink = false; // Should the "more results" link be visible

// Trigger delay
function searchDelay(emt, evt){
	clearTimeout(t);
	searchField = emt;
	triggerEvent = evt;
	t = setTimeout("commitSearch('" + searchField.value + "')", triggerDelay);
}

// Send search request and reset globals for new results
function commitSearch(searchQuery){
	currentResults = 0;
	displayMoreLink = false;
	
	document.getElementById(resultEmtId).innerHTML = "<div class=\"ajaxLoadAnim\">" + loadAnimContent + "</div>";
	positionSearchResults(searchField, resultXOffset, resultYOffset);
	document.getElementById(resultEmtId).style.display = "block";
	
	var searchTerm = searchQuery;
	
	if(searchTerm != ""){
		var ajaxRequest = new Ajax.Request(searchUrl + "?u4.search.for=" + searchTerm, {method: 'get', onComplete: parseSearchResults});
	}
	else{
		hideSearchResults();
	}
}

// Parse and display search results
function parseSearchResults(originalRequest){
	var responseText = originalRequest.responseText;
	var resultHtml = "";
	
	var resultCategories = responseText.split(/\<p class="navigo-search-type"\>/g);
	
	if(resultCategories.length > 1){
		for(var cat = 1; cat < resultCategories.length; cat++){
			if(currentResults < maxResults){
				var typeName = resultCategories[cat].split(/\<\/p\>/g);
				resultHtml += "<h2>" + typeName[0] + "</h2>";
				
				var resultPages = resultCategories[cat].split(/\<p class="navigo-search-title"\>/g);
				if(resultPages.length > 1){
					resultHtml += "<ul>";
					for(var i = 1; i < resultPages.length; i++){
						if(currentResults < maxResults){
							var contents = resultPages[i].split(/\<\/p\>/g);
							resultHtml += "<li>" + contents[0] + "</li>";
							currentResults++;
						}
						else{
							displayMoreLink = true;
						}
					}
					resultHtml += "</ul>";
				}
			}
		}
		
		if(displayMoreLink == true){
			resultHtml += "<a href=\"" + document.getElementById(searchFormId).action + "?u4.search.for=" + searchField.value + "\" class=\"morelink\">" + titleMoreResults + "</a>";
		}

	}
	else{
		resultHtml = "<em>" + titleNoResults + "</em>";
	}
	
	positionSearchResults(searchField, resultXOffset, resultYOffset);
	document.getElementById(resultEmtId).innerHTML = resultHtml;
}

// Set result list wrapper position
function positionSearchResults(emt, xOffset, yOffset){
	var posArr = findPos(emt);
	var posLeft = posArr[0] + xOffset;
	var posTop = posArr[1] + yOffset;
	
	document.getElementById(resultEmtId).style.left = posLeft + "px";
	document.getElementById(resultEmtId).style.top = posTop + "px";
	document.getElementById(resultEmtId).style.display = "block";
}

// Find element position
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

// Hide result list wrapper
function hideSearchResults(){
	document.getElementById(resultEmtId).style.display = "none";
}

