var WORD_LIST_URL = "/rlsIndexer/words.jsp?q=";

var dsWordlist = new Spry.Data.XMLDataSet( WORD_LIST_URL, "/words/w" );
var new_word_start_index = 0, prev_text = "";
var wordInputFieldFocused = false, wordListFocused = false;

function getWordInputField()  {  return document.getElementById( "inputFieldID" );   }
function getPopup()           {  return document.getElementById( "taheadPopupID" );  }
function getWordList()        {  return document.getElementById( "word_list" );  }

function queryWord( current_text )  {
	var laenge = prev_text.length < current_text.length ? current_text.length : prev_text.length;
	var wortcount = 1, newword = "";
	var diff_word_start_index = 0;

	for( var i=0; i < laenge; ++i ) {
		if( prev_text.charAt( i ) != current_text.charAt( i ) )  {
			  var neuewoerter = current_text.split( " " );
			newword = neuewoerter[wortcount-1];
			new_word_start_index = diff_word_start_index;
			break;
		}

		if( current_text.charAt( i ) == " " )  {
			++wortcount;
			diff_word_start_index = i + 1;
		}
	}

	if( newword.length > 0 ) {
		dsWordlist.setURL( WORD_LIST_URL + newword );
		dsWordlist.loadData();

		prev_text = current_text;
		showPopup();
	}
}

function try_to_switch_word_list( evt )  {
	var KEY_CODE_DOWN = 40;

	evt = (evt) ? evt : (window.event) ? window.event : "";

//				trace( evt.keyCode );
	if( evt.keyCode == KEY_CODE_DOWN )  {
//					trace( "DOWN!" );
		var wordList = getWordList();
		if( wordList.length > 0 )  {
			trace( "len:"+wordList.length );
			showPopup();
			wordListFocused = true;
			wordList.focus(); // https://bugzilla.mozilla.org/show_bug.cgi?id=236791 , fixed in FF 1.8
/* FF bug: here FF throws the exception: Error: [Exception... "'Permission denied to set property XULElement.selectedIndex' when calling method: ... */
			if( wordList.selectedIndex < 0 )
				wordList.selectedIndex = 0;

			set_word( wordList.value );
			return true;
		}
	}
	return false;
}

var origInputString;

function onWordListKeyUp(evt)  {
	var KEY_CODE_ENTER = 13, KEY_CODE_ESCAPE = 27, KEY_CODE_SPACE = 32;

	evt = (evt) ? evt : (window.event) ? window.event : "";

	if( evt.keyCode == KEY_CODE_ENTER || evt.keyCode == KEY_CODE_SPACE )
		getWordInputField().focus();

	if( evt.keyCode == KEY_CODE_ESCAPE )  {
		getWordInputField().value = origInputString;
		getWordInputField().focus();
	}
	trace( evt.keyCode );
}

function set_word( word )  {
	trace( " set_word('"+word+"')" );
	var inputBox = getWordInputField(), text = inputBox.value;

	for( var word_end_index = new_word_start_index; word_end_index < text.length && text.charAt( word_end_index ) != " "; )
		++word_end_index;

	inputBox.value = text.substr( 0, new_word_start_index ) + word + text.substr( word_end_index );
}

function showPopup() {
	var popup = getPopup();
	var text_field = getWordInputField();
	var word_list = getWordList();

	popup.style.left = text_field.offsetLeft+'px';
	popup.style.top  = (text_field.offsetTop+text_field.clientHeight+13)+'px';

//	popup.style.position   = "absolute";
	popup.style.display    = "block";
	popup.style.visibility = "visible";
}

function hidePopup() {
	var popup = getPopup();
	popup.style.visibility = "hidden";
	popup.style.display    = "none";
}

function onFocusTextField( field ) {
	wordInputFieldFocused = true;
	if( field.value.length > 0 )  showPopup();
}

function onBlurTextField( field ) {
	wordInputFieldFocused = false;
	if( !wordListFocused )  hidePopup();
}

function onFocusWordList()  {
	wordListFocused = true;
	origInputString = getWordInputField().value;
}

function onBlurWordList() {
	wordListFocused = false;
	if( !wordInputFieldFocused )  hidePopup();
}

function onMDownWordList() {
	if( !wordListFocused )
		onFocusWordList();
}

function trace( text ) {
//				var DEBUG = document.getElementById( "debug_trace" );
//				DEBUG.innerHTML += " " + text;
}





