// ---- funktioner för input_word ----

var input_word_timer=[];
var input_word_click=[];

function input_word_activate(id,url){
	// sätter upp textfält id+"input" till input-word-kontroll
		
	var input=document.getElementById(id+'input');
	var word_input=document.getElementById(id+"word");

	// registrerar tangentbord
	add_listener(input,'focus',function(){
		focus_history_add(this);
		keyboard_focus(input);
	},false)
	add_listener(input,'blur',function(){keyboard_blur(input)});
	keyboard_onedit_register(input,function(){
		input_word_timer[id]=window.setTimeout(function(){
			input_word_menu(id,url,input);
	 	},100);
	});

	// förhindrar annan dropdown
	input.setAttribute("autocomplete","off"); 

	// registrera funktioner för tangenttryckningar
	input.onkeypress=function(event){
		// prova om knappen hör till meny
		if(input_common_menu_key(this,id,event)) return 0;
	};
	input.onkeyup=function(event){
		if(input_common_menu_keyup(this,id,event)) return 0;

		// avbryter i alla lokala fall pågående menybegäran
		input_word_cancel_xhrs(id);

		// vid escape
		if(event.keyCode == 27){
			input_word_menu_delete(id);
			return 0;
		};

		// text ändrad - associera inget ord
		word_input.value='';
		input_word_flag(id);

		// gör meny
		input_word_timer[id]=window.setTimeout(function(){
			input_word_menu(id,url,input);
		},100);
	};

	// registrera callback för menybläddring
	input_common_onclick_register(id,function(a){
		input_word_update(id,a.firstChild.nodeValue,a.getAttribute("name"),false);
	});

	// registrera funktion vid avfokusering
	input.onblur=function(){input_word_blur(input,id)};

	// flagga om ord hittat
	input_word_flag(id);
};

function input_word_cancel_xhrs(id){
	// effekt: avbryter pågående timers och xhr-begäran för id

	// avbryter eventuell timer
	if(input_word_timer[id]){
		window.clearTimeout(input_word_timer[id]);
	};

	// avbryter xhr som håller på att ta fram förslag
	cancel_id(id);
};

function input_word_blur(input,id){
	// hanterar blur-händelse

	// stäng inte om meny håller på att klickas på
	if(input_word_click[id]) return;

	// stäng senare (vid mus-upp) om något annat klickas på
	if(mouse_down()){
		// registrera funktion som kör en gång, sen avregistrerar sig
		add_listener(document,'mouseup',function(){
			input_word_menu_delete(id);
			remove_listener(document,'mouseup',arguments.callee);
		});
		return;
	};

	input_word_menu_delete(id);

};

function input_word_menu(id,url,input){
	// effekt: gör meny (placerad i div med id+"base") som uppdaterar
	//	   input id+"input", från värden i url+input.value

	// skickar med ord-parameter till ajax-anrop
	url=url+encodeURIComponent(','+encodeURIComponent(input.value));

	// tar bort meny om värdet är tomt
	if(!input.value){
		return input_word_menu_delete(id);
	};

	// om fältet inte längre finns, återgå
	var base=document.getElementById(id+"base");
	if(!base) return;

	var xhr=runXHR(url,function(text){if(input_word_menu_place) input_word_menu_place(id,base,text)});
	// registrera xhr
	register_id(id,xhr);
};

function input_word_menu_place(id,base,text){
	// effekt: gör klickbar meny i element base, uppdaterande id+"input", från text

	var input=document.getElementById(id+"input");

	base.innerHTML='<div class="tyda_dropdown" style="position:absolute;width:'+input.clientWidth+'px;left:0;top:5px">'+text+'</div>';
	eval_script(base);

	// sätter onclick för varje länk i menyn
	var matches=base.getElementsByTagName('a');
	for(var i=0;i < matches.length;i++){
		matches[i].onmousedown=function(){
			input_word_click[id]=1;
		};
		matches[i].onmouseup=function(){
			delete(input_word_click[id]);
		};
		matches[i].onblur=function(){
			delete(input_word_click[id]);
		};
		matches[i].onclick=function(){
			input_word_update(id,this.firstChild.nodeValue,this.getAttribute("name"),true);
			return false;
		};
	};
};

function input_word_menu_delete(id){
	// effekt: tar bort meny för input id+"input" (finns i id+"base")

	var base=document.getElementById(id+"base");
	base.innerHTML='';

	// tömmer innehåll om inget ord är valt
	var input=document.getElementById(id+"input");
	input_word=document.getElementById(id+"word");
	if(!input_word.value){
		input.value="";
	};

	// avbryter pågående menybegäran
	input_word_cancel_xhrs(id);
};

function input_word_update(id,string,word,menu_close){
	// effekt: uppdaterar input med id+"input" till string och word

	// sätt värde
	var input=document.getElementById(id+"input");
	input.value=string;

	var word_input=document.getElementById(id+"word");
	word_input.value=word;

	// flagga att ord hittat
	input_word_flag(id);

	// stäng meny
	if(menu_close){
		input_word_menu_delete(id);
	};
};

function input_word_flag(id){
	// effekt: sätter utseende på input beroende på om ord hittat

	var input=document.getElementById(id+"input");
	var word_input=document.getElementById(id+"word");

	if(word_input.value){
		input.className="tyda_input_found";
	}
	else{
		input.className="tyda_input_none";
	};
};
