/* configuration */
var POLLING_INTERVAL = 500;
var REQUEST_TIMEOUT = 2500;
var RESIZE_DURATION = 250;
var MIN_SEARCH_LEN = 1;


function doSearch() {
	if(canSubmit) {
		canSubmit = false;
		// unblock after 2.5 seconds (prevent blocking by slow requests)
		window.timeout = setTimeout(function(){ canSubmit = true; $('searchfield').erase('class') }, REQUEST_TIMEOUT);
		$('searchfield').set('class','busy');

		lastSearch = $('searchfield').value;
		window.searchRequest.post($('searchform'));
	}
}
function doResize(newheight, oncomplete) {
	var pos = $('searchfield').getCoordinates();
	$('searchcontainer').set('styles', {
		'left':		pos.left,
		'top':		pos.top + pos.height - 1
	});
	
	if(newheight != null && newheight != $('searchcontainer').clientHeight) {
		var myFx = new Fx.Tween($('searchcontainer'), {
			duration: RESIZE_DURATION /*+newheight/1*/,
			//transition: Fx.Transitions.Bounce.easeOut
			transition: Fx.Transitions.Cubic.easeOut
		});
		if(oncomplete != null) {
			myFx.addEvent('complete', oncomplete);
		}
		if(newheight > 0) {
			myFx.start('height',newheight);
			//(function(){ myFx.start('height',$('searchresult').offsetHeight); }).delay(250);
		} else {
			myFx.start('height',0);
		}
	}
}
// save last itrations search term
var lastSearch = "";
var interval = null;
var canSubmit = true;

function updateSearch() {
	var newSearch = $('searchfield').value;
	// update search result position
	var pos = $('searchfield').getCoordinates();
	$('searchcontainer').set('styles', {
		'left':		pos.left,
		'top':		pos.top + pos.height - 1
	});
	// check if search term has changed
	if(newSearch != lastSearch) {
		//lastSearch = newSearch;
		if(newSearch.length >= MIN_SEARCH_LEN)
			$('searchform').submit();
		else if(newSearch.length == 0)
			doResize(0);
	}
}

window.addEvent('domready', function() {
	
	/*$('searchresult').set('styles', {
		'position': 'absolute',
		'display':	'block',
		'z-index': 	199,
		'right':	$('searchfield').offsetLeft,
		'top':		$('searchfield').offsetTop+$('searchfield').offsetHeight+10
		//'bottom':	$$('html')[0].clientHeight - $('searchfield').offsetTop+10
	});*/
 	
	
	//$('searchform').set('action', $('searchform').action+'&type=849');
	$('searchfield').set('autocomplete', 'off');
	$('searchfield').set('value', 'suche');
	
	$('searchfield').addEvent('keyup', function(event) {
		event.stop();
		//clearTimeout(window.timeout);
		if(event.code == 27 /* ESC */) {
			this.blur();
		} /*else if(this.value.length >= 2) {
			window.timeout = setTimeout('$(\'searchform\').submit()', 100);
		} else {
			doResize(0);
			//doResize(0, function(){$('searchresult').empty();});
		}*/
	});

	$('searchfield').addEvent('focus', function(event) {
		event.stop();
		this.set('value','');
		var myFx = new Fx.Tween(this, {link: 'chain'});
		myFx.addEvent('complete', function() {
			var pos = $('searchfield').getCoordinates();
			$('searchcontainer').set('styles', {
				'display':	'block',
				'left':		pos.left,
				'top':		pos.top + pos.height - 1
			});
		});
		myFx.start('width',193).set('color','#00000');
		// set the polling handler
		window.interval = window.setInterval("updateSearch()", POLLING_INTERVAL);
	});
	
	$('searchfield').addEvent('blur', function(event) {
		event.stop();
		(function () {
			var myFx = new Fx.Tween($('searchcontainer'),{duration: RESIZE_DURATION});
			myFx.addEvent('complete', function() {
				$('searchcontainer').set('styles', {
					'display':	'none'
				});
				var myFx = new Fx.Tween($('searchfield')).set('color','#8E908F');
				myFx.start('width',82);
				$('searchfield').set('value', 'suche');
			});
			if($('searchcontainer').clientHeight) {
				myFx.start('height', 0);
			} else {
				myFx.fireEvent('complete');
			}
			// clear the polling handler
			window.clearInterval(window.interval);
		}).delay(100);
	});
	
	/*$('searchfield').addEvent('keyup', function(event) {
		event.stop();
		var myFx = new Fx.Tween($('searchcontainer'), {
			transition: Fx.Transitions.Quad.easeOut
		});
		if(this.value == 'test') {
			myFx.start('height',$('searchresult').offsetHeight);
			//(function(){ myFx.start('height',$('searchresult').offsetHeight); }).delay(250);
		} else {
			myFx.start('height',0);
		}
	});*/
	
	var searchContainer = new Element('div', {id: 'searchcontainer'});
	var searchResult = new Element('div', {id: 'searchresult'});
	searchResult.inject(searchContainer);
	document.body.appendChild(searchContainer);
	
	$('searchfield').set('class','busy'); // Preloading Hack
	(function(){$('searchfield').erase('class')}).delay(100);
	
	window.searchRequest = new Request.HTML({
		evalScripts: false,
		url: $('searchform').action+'&type=849',
		update: $('searchresult')
	});
	$('searchform').set('action', 'javascript:doSearch()');
	window.searchRequest.addEvent('complete', function(responseTree, responseElements, responseHTML, responseJavaScript) {
		clearTimeout(window.timeout);
		doResize($('searchresult').offsetHeight);
		//lastSearch = $('searchfield').value;
		canSubmit = true;
		(function(){ $('searchfield').erase('class') }).delay(250);
	});
	
	//addEvent('resize', function() {doResize()});
	
});
