_addEventListener(window, 'load', init_search, false);

function init_search() {
	var form = document.getElementById('soekf');
	var inputs = form.getElementsByTagName('input');
	var query_input = null;
	var query_filter = null;
	
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == 'q') {
			query_input = inputs[i];
		} else if (inputs[i].name == 'filter') {
			query_filter = inputs[i];
		}
	}
	
	query_input.onfocus = function() {
		if (this.value == 'SØK') {
			if (!this._value) this._value = 'SØK';
			this.value = '';
		} else if (this.value == 'SEARCH') {
			if (!this._value) this._value = 'SEARCH';
			this.value = '';
		}
	};
	query_input.onblur = function() {
		if (this.value == '' && this._value) this.value = this._value;
		else if (this.value == '') this.value = 'SØK';
	};
	
	query_input.onkeyup = function() {
		if (this.timerID) {
			clearTimeout(this.timerID);
		}
		
		if (this.value.length >= 2) {
			this.timerID = setTimeout(exec_search.bind(this), 500);
		} else if (this.value.length == 0) {
			clear_search_results();
		}
	};
	
	if (query_filter != null) {
		query_input.filter = query_filter;
		query_filter.onchange = query_input.onkeyup.bind(query_input);
	}
}

function exec_search() {
	this.className += ' in_progress';
	clearTimeout(this.timerID);
	
	var request_data = 'q='+escape(this.value);
	if (this.filter && this.filter.checked) request_data += '&filter=' + this.filter.value;
	
	if (this.search_request) this.search_request.abort();
	this.search_request = null;
	if (window.XMLHttpRequest) {
		this.search_request = new XMLHttpRequest();
		this.search_request.onreadystatechange = display_search_result.bind(this);
		this.search_request.open("GET", '/includes/search.inc.php?xml&'+request_data, true);
		if (this.search_request.setRequestHeader) { // Opera does not support this yet
			this.search_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
		}
		this.search_request.send(null);
	} else if (window.ActiveXObject) {
		this.search_request = new ActiveXObject("Microsoft.XMLHTTP");
		if (this.search_request) {
			this.search_request.onreadystatechange = display_search_result.bind(this);
			this.search_request.open("GET", '/includes/search.inc.php?xml&'+request_data, true);
			this.search_request.send();
		}
	}
}

function display_search_result() {
	if (this.search_request.readyState == 4 && this.search_request.status == 200) {
		var xml = this.search_request.responseXML;
		var result_list = document.getElementById('soek_resultat');
		clear_search_results();
		this.className = this.className.replace(/ ?in_progress/, '');
		
		var result = xml.getElementsByTagName('result').item(0);
		var matches = result.getElementsByTagName('match');
		for (var mi = 0; mi < matches.length; mi++) {
			var list_item = document.createElement('li');
			var item_link = document.createElement('a');
			item_link.href = matches[mi].getAttribute('href');
			item_link.appendChild(document.createTextNode(matches[mi].firstChild.nodeValue));
			list_item.appendChild(item_link);
			list_item.style.opacity = '0';
			
			list_item.fadeTimer = setTimeout(fadeIn.bind(list_item), 80 * mi);
			
			result_list.appendChild(list_item);
		}
		
		if (matches.length == 0) {
			var list_item = document.createElement('li');
			list_item.appendChild(document.createTextNode('Beklager, ingen treff.'));

			list_item.style.opacity = 0;					
			list_item.fadeTimer = setTimeout(fadeIn.bind(list_item), 80);
			
			result_list.appendChild(list_item);
		} else if (result.getAttribute('href') && result.getAttribute('totalhits')) {
			var list_item = document.createElement('li');
			var item_link = document.createElement('a');
			item_link.href = result.getAttribute('href');
			item_link.appendChild(document.createTextNode("Flere treff ("+result.getAttribute('totalhits')+") \u2192"));
			list_item.appendChild(item_link);

			list_item.className += ' flere_treff';
			list_item.style.opacity = 0;					
			list_item.fadeTimer = setTimeout(fadeIn.bind(list_item), 80 * matches.length);
			
			result_list.appendChild(list_item);
		}
	}
}

function clear_search_results() {
	var result_list = document.getElementById('soek_resultat');
	
	var r = null;
	while (r = result_list.firstChild) {
		if (r.nodeType == 1) result_list.removeChild(r);
	}
}

function fadeIn() {
	if (this.style.display == 'none') this.style.display = 'block';
	
	clearTimeout(this.fadeTimer);
	var op = 0;
	if (parseFloat(this.style.opacity) >= 0.9) {
		op = 0.9999; // work-around for Firefox 'flash on complete'
	} else {
		op = parseFloat(this.style.opacity) + 0.1;
	}
	this.style.opacity = op;
	this.style.filter = "alpha(opacity:"+op*100+")";
	
	if (parseFloat(this.style.opacity) < 0.9999) {
		this.fadeTimer = setTimeout(fadeIn.bind(this), 50);
	}
}
