/* Ajax Request */
var searchBoxContent = new Array();
var searchBoxTimeout = 0;
var searchBoxSuggestSocket = new Array();
var searchLastInput = new Array();
var searchSuggestRequestSend = 0;
document.searchSuggestRequestSend = searchSuggestRequestSend;
var test = 0;

function _debug(sock, text, start) {
	var d = document.getElementById("suggest_debug");
	if(!d) return;
	if(start == 1) d.value += "\n";
	d.value += (sock + ': ' + text + '\n');
}
function fillSuggestBox(input, element1Id, element2Id) {
	if(document.searchSuggestRequestSend) return;
	var input = document.getElementById(element1Id);
	var word = input.value;
	var internSocket = ++test;
	_debug(internSocket, 'start (' + word + '):', 1);
	
	// Wenn sich nichts am Inhalt geaendert hat: nichts machen
	_debug(internSocket, word);
	if(word == searchLastInput[ element1Id + '#' + element2Id ]) {
		_debug(internSocket, 'word doesnt changed:' + word + '==' + searchLastInput[ element1Id + '#' + element2Id ]);
		return;
	}
	if(searchBoxTimeout) clearTimeout(searchBoxTimeout);
	searchLastInput[ element1Id + '#' + element2Id ] = word;
	if(word == '') {
		_debug(internSocket, 'no word defined: close');
		closeSuggestBox(element2Id);
		return;
	// Bereits eingegebene Woerter
	} else if(searchBoxContent[word]) {
		searchBoxTimeout = setTimeout("_fillSearchBox('" + word + "', '" + element1Id + "', '" + element2Id + "', '-1', '" + internSocket + "')", 200);
		_debug(internSocket, 'get existing word(length: ' + word + '):' + searchBoxContent[word].length);
		return;
	}
	if(!searchBoxSuggestSocket[ element1Id + '#' + element2Id ]) searchBoxSuggestSocket[ element1Id + '#' + element2Id ] = 0;
	searchBoxSuggestSocket[ element1Id + '#' + element2Id ]++;
	var socket = searchBoxSuggestSocket[ element1Id + '#' + element2Id ];
	_debug(internSocket, 'start ajax request');
	searchBoxTimeout = setTimeout("_startFillSuggestBox('" + element1Id + "', '" + element2Id + "', '" + socket + "', '" + internSocket + "')", 200);
	return;
}
function _startFillSuggestBox(element1Id, element2Id, socketNumber, internSocket) {
	if(document.searchSuggestRequestSend) return;
	var resultHandler = new AjaxResultHander();
	_debug(internSocket, 'start request');
	if(searchBoxSuggestSocket[ element1Id + '#' + element2Id ] != socketNumber && socketNumber != -1) {
		_debug(internSocket, 'old socket:' + searchBoxSuggestSocket[ element1Id + '#' + element2Id ] + '!=' + socketNumber);
		return;
	}
	resultHandler.handleResponse = function(response) {
		var result = response.getResponse();
		var word = result[0].actual_word;
		// bisherige Elemente cachen
		searchBoxContent[word] = result;
		_debug(internSocket, 'response given');
		_fillSearchBox(word, element1Id, element2Id, socketNumber, internSocket);
		return true;
	}
	var input = document.getElementById(element1Id);
	if(!input) return;
	_debug('wait for response');
	var ajax = new Ajax('/ajax/search_autocomplete', 'box', [input.value], resultHandler);
	if(!ajax.sendRequest()) {
		_debug('handle request error');
		resultHandler.handleError(ajax.getResponse());
	}
}
function _fillSearchBox(word, element1Id, element2Id, socketNumber, internSocket) {
	if(document.searchSuggestRequestSend) return;
	_debug(internSocket, 'fill box');
	var result = searchBoxContent[word];
	var output = document.getElementById(element2Id);
	if(!output) {
		_debug(internSocket, 'no output defined');
		return;
	}
	if(searchBoxSuggestSocket[ element1Id + '#' + element2Id ] != socketNumber && socketNumber != -1) {
		_debug(internSocket, 'old socket:' + searchBoxSuggestSocket[ element1Id + '#' + element2Id ] + '!=' + socketNumber);
		return;
	}
	output.innerHTML = '';
	var countUndef = 0;
	var content = '';
	for (var i = 1; i < result.length; i++) {
		if(result[i].word == null) countUndef++;
		content += '<li><a href="#" class="floatbox" onclick="insertSearchword(\'' + result[i].word + '\', \'' + element1Id + '\');return false;" title="' + result[i].word + '"><span class="hitname">' + result[i].word + "</span><span class=\"hits\"><small>(Treffer: " + result[i].hits + ")</small></span></a></li>";
	}
	if(countUndef > 10) {
		_debug(internSocket, 'too many "undefined" elements:' + countUndef);
		return;
	}
	_debug('handle content(undef, ' + word + '):' + result.length);
	output.innerHTML = content;
	if(output.innerHTML != '') {
		_debug(internSocket, 'show box');
		output.style.visibility = 'visible';
		output.style.display = 'block';
	} else {
		_debug(internSocket, 'close box');
		closeSuggestBox(element2Id);
	}
	_debug(internSocket, 'ready :)');
	return;
}
function insertSearchword(word, elementId) {
	if(document.searchSuggestRequestSend) return;
	var input = document.getElementById(elementId);
	if(!input) return;
	input.value = word;
	_debug(0, 'close by click');
	closeSuggestBox();
	if(document.forms['results']) {
		document.forms['results'].submit();
	} else if(document.forms['search']) {
		document.forms['search'].submit();
	}
	return;
}
function closeSuggestBox(elementId) {
	var output = document.getElementById(elementId);
	if(!output) return;
	output.style.visibility = 'hidden';
	output.style.display = 'none';
	return;
}
function switchElement(name, dontclose) {
	var e = document.getElementById(name + '_field');
	var b = document.getElementById(name + '_button');
	var b2 = document.getElementById(name + '_button2');
	var input = document.forms['results'][name];
	if(!b2 || !b || !e || !input) return false;
	
	
	if(input.value == 'yes' && !dontclose) {
		input.value = 'no';
		e.style.display = 'none';
		b.style.display = 'inline'
		b2.style.display = 'none';
	} else {
		input.value = 'yes';
		e.style.display = 'block';
		b.style.display = 'none'
		b2.style.display = 'inline';
	}
	
	return false;
}
