$(function() {
	// default ajax loader icon
	$('#ajax').ajaxStart(function() {
		$(this).fadeIn('fast');
	});
	$('#ajax').ajaxComplete(function() {
		$(this).fadeOut('fast');
	});
	$('#btnLogout, .btnLogout').click(function() {
		document.location.href = 'index.php?section=login&action=logout';
	});
	$('#btnAdmin').click(function() {
		document.location.href = 'index.php';
	});
	$('#btnBack, .btnBack').click(function() {
		history.go(-1);
	})
	var searchTimeout;
	var focusPosition = -1;
	$('#keywords').keyup(function(e) {
		clearTimeout(searchTimeout);
		if(e.which != 27) {
			searchTimeout = setTimeout(submitSearch, 350);
		}
	});
	
	$('button.btnSearch').click(function() {
		submitSearch();
		return false;
	});
	
	$('#quick-search>form').submit(function(){return false;});
	
	function submitSearch()
	{
		hideResults();
		keywords = $('#keywords').val();
		if(keywords != '') {
			$.ajax({
				url: 'index.php?section=report&action=search&keywords='+keywords,
				dataType: 'json',
				success: function(results) {
					// render the results
					renderResults(results);
				}
			});
		}
	}
	
	function renderResults(results)
	{
		var limit = 10;
		var ele = '';
		
		limit = results.length < limit ? results.length : limit;
		for(var i = 0; i < limit; i++) {
			r = results[i];
			label = (r.name.length > 35) ? r.name.substr(0, 35) : r.name;
			ele += '<li><a href="chart/'+r.hkey+'" title="'+r.name+'">'+label+'<span>'+r.hkey+'</span></a></li>';
		}
		$('#quick-search>div.results').append('<ul>'+ele+'</ul>').slideDown('slow', function() {
			focusResultsUp();
		});
		
	}
	
	function hideResults()
	{
		$('#quick-search>div.results').empty().hide();
		focusPosition = -1;
	}
	
	function isResultsDisplayed()
	{
		return ($('#quick-search>div.results:visible').length == 1);
	}
	
	function resultCount()
	{
		return $('#quick-search>div.results a').length;
	}
	
	
	function focusResultsUp()
	{
		if(focusPosition == -1) {
			total = resultCount() - 1;
			focusResultPosition(total);
			focusPosition = total;
		} else {
			// get current focus pos
			total = resultCount();
			focusPosition--;
			if(focusPosition < 0) {
				focusPosition = total - 1;
			}
			focusResultPosition(focusPosition);
		}
	}
	
	function focusResultPosition(pos)
	{
		$('#quick-search>div.results a:eq('+pos+')').focus();
	}
	
	function focusResultsDown() 
	{
		if (focusPosition == -1) { 
			focusResultPosition(0);
			focusPosition = 0;
		} else {
			total = resultCount();
			focusPosition++;
			if(focusPosition >= total) {
				focusPosition = 0;
			}
			focusResultPosition(focusPosition);
		}
	}
	
	$(document).keydown(function(e) {
		if(e.which == 27) {
			hideResults();
		}
		if(isResultsDisplayed()) {
			if(e.which == 38) { // up
				focusResultsUp();
				return false;
			} else if(e.which == 40) { // down
				focusResultsDown();
				return false;
			} else if(e.which == 13) { // enter
				document.location.href = $('#quick-search>div.results a:eq('+focusPosition+')').attr('href');
				return false;
			} else {
				$('#keywords').focus();
			}
			
		}
	});

});