var _enableAjaxSearch = true; // Put this to true to enable ajax search
var _ajaxSearchInProgress = false;
var _oriContent;
var _sessionId; // Every refresh should give a unique session ID
var _RenewSessionId_interval = 3600000;

function GenerateSessionId()
{
	_sessionId = encodeURIComponent($time());
}

function CancelSearch()
{
	$('lblSearchStatus').empty();
	$('txtKeywords').className = '';
	$('debunote-ajax').innerHTML = _oriContent;
}

function PerformSearch(keywords)
{
	if (_ajaxSearchInProgress == true)
		return;
	else
	{
		var len = keywords.length;
		if (len == 0)
			CancelSearch();
		else
		{
			$('lblSearchStatus').setHTML('Searching...');

			_ajaxSearchInProgress = true;
			$('txtKeywords').className = 'loading-state';

			var ajaxConn = new Ajax('search.php?func=search&keywords=' + keywords + '&b=' + _sessionId,
			{
				method: 'get',
				onComplete: function(response){
					_ajaxSearchInProgress = false;
					if( len == $('txtKeywords').value.length ) {
						$('debunote-ajax').setHTML(response);

						var itemsReturned = $('debunote-ajax').getElementsByTagName('dt');

						if (!itemsReturned.length) {
							CancelSearch();
							$('txtKeywords').className = 'error-state';
							$('lblSearchStatus').setHTML('Sorry, phrase not found.');
						}
						else {
							$('lblSearchStatus').empty();
							$('txtKeywords').className = '';
						}
					}
					else 
						PerformSearch($('txtKeywords').value);
				}
			}).request();
		}
	}
}

function IgnoreKeys(e)
{
	if(!e)
		var e = window.event;

	var code = (e.keyCode) ? e.keyCode : e.which;

	if (code == 13)
		return false;
}

function StopEvent(e)
{
	if (!e)
		e = window.event;
	if (e.preventDefault)
		e.preventDefault();
	else
		e.returnValue = false;
}

window.addEvent('domready', function()
{
	if (_enableAjaxSearch)
	{
		initialize_search()

		GenerateSessionId();
		
		 // Caches the original content, so that if the user cancel an ajax search,
		 // the system could bring it back to the original content before the ajax
		 // search is initiated.
		_oriContent = $('debunote-ajax').innerHTML;

		$('debunote-search').setStyle('visibility','visible');
		$('txtKeywords').value = ''; // Ff retains text box value even if u refresh ur browser

		$('txtKeywords').addEvent('keyup', function(e){
			if(!e)
				var e = window.event;

			var code = (e.keyCode) ? e.keyCode : e.which;

			/* ignore the following keys
			if (code == 3 || code == 9 || code == 16 || code == 17 || code == 18 || code == 19 || code == 20 || code == 44 || code == 93 || code == 95 || code == 115 || code == 144 || code == 145 || code == 32) // break, tab, shift, ctrl, alt, pause, caps lock, sys req, right click button, sleep, change screen mode button, num lock, scroll, spacebar
				return;

			if (code == 37 || code == 38 || code == 39 || code == 40) // left button, up button, right button, down button
				return;
*/
			if ((code == 9) || // tab, enter
				(code == 16) || (code == 17) || // shift, ctl
				(code >= 18 && code <= 20) || // alt,pause/break,caps lock
				(code == 27) || // esc
				(code >= 32 && code <= 35) || // spacebar, page up,page down,end
				(code >= 36 && code <= 40) || // home,left,up,right,down
				(code >= 44 && code <= 45)) // print screen,insert
				return;

			if (!this.value.toString().length) CancelSearch();
			else PerformSearch(this.value);
		});

		GenerateSessionId.periodical(_RenewSessionId_interval); // renew session id
	}
});

function initialize_search(){
	$('ctSearchLink').innerHTML = ' - <a href="javascript:void(0)" id="debunote-search-link">Search Entries</a>';
	$('debunote-search').innerHTML = '<input type="text" id="txtKeywords" autocomplete="off" onkeydown="return IgnoreKeys(event)" /> <span id="lblSearchStatus"></span> <a href="javascript:void(0)" id="search-close-button"></a>';

	var searchlabel_effect = $('debunote-search').effect('height', {duration: 200});
	var searchinput_effect = new Fx.Style('txtKeywords', 'background-color', {duration: 1000});

	$('debunote-search-link').addEvent('click', function(){
		if($('debunote-search').getStyle('height').toInt() == 0)
		{
			searchlabel_effect.start(26);
			(function(){$('txtKeywords').focus()}).delay(150);
		}else
			$('txtKeywords').focus();
	});

	$('search-close-button').addEvent('click', function(){
		searchlabel_effect.start(0);
		$('txtKeywords').blur();
		$('txtKeywords').value = '';
		CancelSearch();
	});

	$('txtKeywords').addEvent('focus', function(){
		searchinput_effect.fromColor('ff6');
	});
}