// $Id: listChoose.js,v 1.12 2006/10/16 12:47:10 xjtm0101 Exp $
function lcGetDiv(input)
{
	return document.getElementById(input.id+"-div"); 
}
function lcGetSelect(input)
{
	return document.getElementById(input.id+"-select"); 
}
function lcHideElement(elem)
{
	if (elem.lcIsShown)
	{
		elem.style.visibility="hidden";
		elem.style.display="none";
		elem.lcIsShown=false;
	}
}
function lcShowElement(elem)
{
	if (!elem.lcIsShown)
	{
		elem.style.visibility="visible";
		elem.style.display="block";
		elem.lcIsShown=true;
	}
}

function lcShowListChooser(input)
{
	antalFundet = lcFilterSelect(input);
	if (antalFundet > 0) {
		lcShowElement(lcGetDiv(input));
		lcUpdateList(input);
	}
}

function lcHideListChooser(input)
{
	lcHideElement(lcGetDiv(input));
}

function lcOnFocusList(list)
{
	lcShowElement(list.parentNode);
}
function lcLostFocusList(list)
{
	lcHideElement(list.parentNode);
}

function lcTestControlKeys(evt,elem)
{
		var listChooser=lcGetSelect(elem);
		if (evt.keyCode==38) //arrow up
		{
			if (listChooser.selectedIndex>0)
				listChooser.selectedIndex--;
			return false;			
		}
		else if (evt.keyCode==40) //arrow down
		{
			if (listChooser.selectedIndex<listChooser.length-1)
				listChooser.selectedIndex++;
			return false;
		}
		else if (evt.keyCode==13) //enter
		{
			if (lcGetDiv(elem).lcIsShown && listChooser.selectedIndex!=-1)
			{
				elem.value=listChooser.options[listChooser.selectedIndex].text;
				elem.lcTextBefore=elem.value.toLowerCase();
				elem.focus(); 
				lcHideListChooser(elem);
				evt.cancelBubble=true;
				return false;	
			}
		}		
		return true;
}

function lcKeyDown(evt)
{
	evt=(evt) ? evt : ((event) ? event : null);
	if (evt)
	{
		var elem= (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		
		if (document.all)
		{
			if (!lcTestControlKeys(evt,elem))
				return false;
		}
		
		if (evt.keyCode==9) //tab
		{
			lcHideElement(lcGetDiv(elem));
		}
		
	}
	return true;
}

function lcKeyPress(evt)
{
	evt=(evt) ? evt : ((event) ? event : null);
	if (evt)
	{
		var elem= (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		elem.lcTextBefore=elem.value.toLowerCase();
		
		if (!document.all)
		{
			if (!lcTestControlKeys(evt,elem))
				return false;
		}
	}
	return true;
}

function lcUpdateList(input)
{
		var listChooser=lcGetSelect(input);
		var i=0;
		var text=input.value.toLowerCase();
		while (i<listChooser.length-1 && listChooser.options[i].text.toLowerCase()<text)
				i++;
		listChooser.selectedIndex=i;	
		input.lcTextBefore=input.value.toLowerCase();
}

function lcInputKey(evt)
{
	evt=(evt) ? evt : ((event) ? event : null);
	if (evt) 
	{ 
		var elem= (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		if (elem.lcTextBefore!=elem.value.toLowerCase())
		{
			antalFundet = lcFilterSelect(elem);
			if (antalFundet>0) {
				lcShowListChooser(elem); // we make sure the list is shown, if elem altered
			} else {
				lcHideListChooser(elem);
			}
		}
	}
}

function lcOnClickList(list)
{
	var elem=document.getElementById(list.id.split('-')[0]);
	elem.value=list.options[list.selectedIndex].text;
	elem.lcTextBefore=elem.value.toLowerCase();
	//elem.focus(); //virker ikke i IE, da det bevirker at listen blinker og vises igen herefter
				// en måde at gøre det på, er at indføre en elem.lcIgnoreFocus, der sættes til sand her
				// inden elem.focus(). I lcShowListChooser() checkes på denne attribut. Hvis sand sættes den til falsk
				// og der foretages ikke visning af listen...
	lcHideListChooser(elem);
}

function lcOnFocus() {
	lcShowListChooser(this);
}

/* Sætter mulige options i javascript-array
 */
function lcSetOptions(input, newOptions) {
	input.lcSelectOptions = newOptions;
}

/* Henter mulige options
 */
function lcGetOptions(input) {
	if (input.lcSelectOptions) {
		return input.lcSelectOptions;
	}
	return null;
}

/* Indsætter en option i den angivne select
 *	
 * @param	targetSelectObject Select hvor option skal indsættes
 * @param	value	Value som tilknyttes den nye option
 * @param	content	Tekst som vises i i select'en
 */
function lcInsertOption(targetSelectObject, value, content) {
	newOption = document.createElement("option");
	newOption.setAttribute("value", value)
	newTextNode = document.createTextNode(content);
	newOption.appendChild(newTextNode);
	targetSelectObject.appendChild(newOption);
}

/* Fjerner alle options fra den angivne select
 *
 * @param	Element som får fjernet alle børn
 */
function lcRemoveOptions(targetSelectObject) {
	while (targetSelectObject.hasChildNodes()) {
		targetSelectObject.removeChild(targetSelectObject.firstChild);
	}
}

/* Henter den værdi i input
 *
 * @param	targetInputObject	Input som der skal læses fra
 */
function lcGetUserInput(targetInputObject) {
	return targetInputObject.value;
}

/* Fjerner alle options og indsætter derefter dem, som
 * begynder med det, der er tastet i input.
 *
 * @param	targetSelectObject	Select som skal filtreres
 * @param	targetInputObject	Input som indeholder filter-tekst
 */
function lcFilterSelect(targetInputObject) {
	if (targetInputObject == null) {
		return null;
	}
	
	var targetSelectObject = lcGetSelect(targetInputObject);
	if (targetSelectObject == null) {
		return null;
	}

	var options = lcGetOptions(targetInputObject);
	if (options == null) {
		return targetSelectObject.length;
	}
		
	lcRemoveOptions(targetSelectObject);
	
	var userInput = lcGetUserInput(targetInputObject);
	userInput = userInput.toLowerCase();
	var userInputLength = userInput.length;
	
	var antalIndsat = 0;
	for (i = 0; i < options.length; i++) {
		if (userInput == options[i].substr(0, userInputLength).toLowerCase() || userInputLength == 0) {
			antalIndsat++;
			lcInsertOption(targetSelectObject, options[i], options[i]);
		}
	}
	return antalIndsat;
}

// Åben et Tip en Ven dialog.
function openTipEnVen() {
   window.open("/servlet/ContentServer?pagename=Millenium%2FTipEnVen%2FTipEnVenForm","storpopup","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=380,height=520");
}
