var advisorresults = new Array();
var hinterresults = new Array();
var advisorquery = "";
var hinterquery = "";
var advisorloading = false;
var hinterloading = false;
var hinterposition = -1;

jQuery(document).ready(function()
{
	// setting autocomplete off
	jQuery('#searchadvisor input.textfield').attr('autocomplete', 'off');
	jQuery('#searchhinter input.textfield').attr('autocomplete', 'off');
	
	// on searchadvisor focus update search advisor
	jQuery('#searchadvisor input.textfield').bind('focus', function(event)
	{
		var query = jQuery(this).attr('value');
		
		setTimeout(function () { updateSearchAdvisor(query); }, 500);
	});
	
	// on searchhinter focus update search advisor
	jQuery('#searchhinter input.textfield').bind('focus', function(event)
	{
		if (jQuery(this).attr('value')=="Zadajte názov obce, regiónu, ...")
		{
			jQuery(this).attr('value', '');
		}
		
		setTimeout(function () { updateSearchHinter(hinterquery, true); }, 500);
	});
	
	// on searchadvisor blur restore search advisor
	jQuery('#searchadvisor input.textfield').bind('blur', function(event)
	{
		setTimeout(function () { restoreSearchAdvisor(); }, 500);
	});
	
	// keyboard functionality over searchadvisor
	jQuery('#searchadvisor input.textfield').bind('keyup', function(event)
	{
		if (event.keyCode==27) jQuery(this).blur();
	});
	
	// on searchhinter blur restore search advisor
	jQuery('#searchhinter input.textfield').bind('blur', function(event)
	{
		if (jQuery(this).attr('value')=="")
		{
			jQuery(this).attr('value', 'Zadajte názov obce, regiónu, ...');
		}
		
		setTimeout(function () { restoreSearchHinter(); }, 500);
	});
	
	// keyboard functionality over searchhinter
	jQuery('#searchhinter input.textfield').bind('keyup', function(event)
	{
		if (event.keyCode==27) jQuery(this).blur();
		
		if (event.keyCode==38 || event.keyCode==40)
		{
			hints = jQuery(hinterresults["@" + hinterquery]).find('hint');
			
			if (event.keyCode==38) { position = (hinterposition>-1) ? hinterposition-1 : hints.length-1; }
			if (event.keyCode==40) { position = (hinterposition<hints.length-1) ? hinterposition+1 : -1; }
			
			updateSearchForm(position);
		}
	});
	
	// disallow empty query submition
	jQuery('#searchadvisor form').bind('submit', function(event)
	{
		var query = jQuery(this).find('input.textfield').attr('value');
		
		if (!query.length) return false;
	});
	
	jQuery('#search form').bind('submit', function(event)
	{
		var query = jQuery(this).find('input.textfield').attr('value');
		
		if (query=="Zadajte názov obce, regiónu, ...")
		{
			jQuery(this).find('input.textfield').attr('value', '');
		}
	});
	
	// apply rounded corners on HTML elements with class corners
	jQuery('.corners').corners();
	
	// apply onchange event handler for all filter select boxes
	jQuery('#filter select').change(function()
	{
		jQuery(this).parents().filter('form').eq(0).submit();
	});
	
	// apply mouseover effect on projectmenu items
	jQuery('#projectmenu a').live('mouseover', function(event)
	{
		var classes = jQuery(this).attr('class').split(' ');
		
		var subnavigation = classes[0];
		
		jQuery(this).find('img').attr('src', './images/website/buttons/' + subnavigation + '-hover.gif');
	});
	
	// apply mouseout effect on projectmenu items
	jQuery('#projectmenu a').live('mouseout', function(event)
	{
		var classes = jQuery(this).attr('class').split(' ');
		
		var subnavigation = classes[0];
		
		jQuery(this).find('img').attr('src', './images/website/buttons/' + subnavigation + '.gif');
	});
	
	function loadSearchAdvisor(query)
	{
		advisorquery = query;
		advisorloading = true;
		
		if (advisorresults["@" + query])
		{
			updateSearchAdvisor(query);
			
			advisorloading = false;
			
			return;
		}

		jQuery.ajax({
			url: "advisor.php", async: true, cache: true, type: "GET", dataType: "xml", data: {query: query},
			success: function(data, status)
			{
				advisorresults["@" + query] = data;
				
				updateSearchAdvisor(query);
				
				advisorloading = false;
			},
			error: function(request, status, error)
			{
				advisorloading = false;
			}
		});
	}
	
	function loadSearchHinter(query, type)
	{
		hinterquery = query;
		hinterloading = true;
		
		if (hinterresults["@" + query] || query=="")
		{
			updateSearchHinter(query, false);
			
			hinterloading = false;
			
			return;
		}
		
		jQuery.ajax({
			url: "hinter.php", async: true, cache: true, type: "GET", dataType: "xml", data: {query: query, type: type},
			success: function(data, status)
			{
				hinterresults["@" + query] = data;
				
				updateSearchHinter(query, false);
				
				hinterloading = false;
			},
			error: function(request, status, error)
			{
				hinterloading = false;
			}
		});
	}
	
	function restoreSearchAdvisor()
	{
		jQuery('#advisor').remove();
		jQuery('#searchadvisor').css({'background': 'url("./images/website/images/search.gif") no-repeat'});
	}
	
	function restoreSearchHinter()
	{
		jQuery('#hinter').remove();
		jQuery('#searchhinter').css({'background': 'url("./images/website/images/search.gif") no-repeat'});
	}
	
	function updateSearchAdvisor(query)
	{
		restoreSearchAdvisor();
		
	  	var size = jQuery(advisorresults["@" + query]).find('project').size();
		var advisor = jQuery('<div id="advisor"></div>');
		
		if (size)
		{
			var body = jQuery('<div class="body"></div>');
			var corner = jQuery('<div class="corner"></div>');
			
			jQuery(advisorresults["@" + query]).find('project').each(function()
	  		{
	  			var project = jQuery('<div class="project"></div>');
	  			var anchor = jQuery('<a href="' + jQuery(this).attr("reference") + '" title="" target="' + jQuery(this).attr("target") + '"></a>');
	  			var image = jQuery('<img src="' + jQuery(this).attr("image") + '" width="40" height="27" border="0" alt="">');
	  			var name = jQuery('<h3>' + jQuery(this).attr("name") + '</h3>');
	  			var town = jQuery('<h4>' + jQuery(this).attr("town") + '</h4>');
	    		
	  			image.appendTo(anchor);
	  			name.appendTo(anchor);
	  			town.appendTo(anchor);
	  			
	    		anchor.appendTo(project);
	    		project.appendTo(body);
	  		});
	  		
			body.appendTo(advisor);
			corner.appendTo(advisor);
	  		
			jQuery('#searchadvisor').css({'background': 'url("./images/website/images/search-corner-top.gif") no-repeat'});
			
			advisor.appendTo('#searchadvisor');
		}
	}
	
	function updateSearchHinter(query, restore)
	{
		restoreSearchHinter();
		
	  	var size = jQuery(hinterresults["@" + query]).find('hint').size();
		var hinter = jQuery('<div id="hinter"></div>');
		
		if (size)
		{
			var body = jQuery('<div class="body"></div>');
			var corner = jQuery('<div class="corner"></div>');
			var hints = jQuery(hinterresults["@" + query]).find('hint');
			
			hints.each(function(index)
	  		{
	  			var hint = jQuery('<div class="hint"></div>');
	  			var anchor = jQuery('<a href="javascript:updateSearchForm(' + index + ')">' + jQuery(this).attr("value") + '</a>');
	    		
	    		anchor.appendTo(hint);
	    		hint.appendTo(body);
	  		});
	  		
			body.appendTo(hinter);
			corner.appendTo(hinter);
	  		
			hinter.appendTo('#searchhinter');
			
			if (hinter.height()>230)
			{
				jQuery('#hinter').css({"height": "230px"});
				jQuery('#hinter div.hint').css({"width": "540px"});
			}
			
			if (restore && hinterposition!=-1) updateSearchForm(hinterposition);
			else hinterposition = -1;
		}
	}
	
	// update search advisor if query changed
	
	setInterval(function()
	{
		var query = jQuery('#searchadvisor input.textfield').attr('value');
		
		if ((!advisorloading) && (advisorquery!=query))
		{
			if (document.activeElement==jQuery('#searchadvisor input.textfield').get(0))
			{
				loadSearchAdvisor(query);
			}
		}
	}, 333);
	
	// update search advisor if query changed
	
	setInterval(function()
	{
		var query = jQuery('#searchhinter input[name=query]').attr('value');
		var type = jQuery('#searchhinter input[name=type]').attr('value');
		var found = false;
		
		if ((!hinterloading) && (hinterquery!=query))
		{
			jQuery(hinterresults["@" + hinterquery]).find('hint').each(function()
			{
				if (jQuery(this).attr("value")==query) found = true;
			});
			
			if (found) return;
			
			if (document.activeElement==jQuery('#searchhinter input.textfield').get(0))
			{
				loadSearchHinter(query, type);
			}
		}
	}, 333);
});

function updateSearchForm(position)
{
	var hints = jQuery(hinterresults["@" + hinterquery]).find('hint');
	var input = jQuery('#searchhinter input.textfield').get(0);
	
	if (position<hints.length) hinterposition = position;
	
	if (hints.length)
	{
		if (position==-1)
		{
			input.value = hinterquery;
			jQuery('#hinter').scrollTop(0);
		}
		else
		{
			input.value = hints.eq(position).attr("value");
			
			if (hints.length>10)
			{
				jQuery('#hinter').scrollTop(23 * (position-4));
			}
		}
	}
	
	jQuery('#hinter div.hint').each(function(index)
	{
		if (index==position) jQuery(this).css({'background': '#EAEAEA'});
		else jQuery(this).css({'background': '#FFFFFF'});
	});
}
