var list, txt;
var selected = null;
var last_timeuid = null;
var last_term = '';

function InitSuggest(txt_id, div_id)
{
	list = $(div_id);
	txt = $(txt_id);
	list.style.left = (findPos(txt)[0] - 5) + 'px';
	list.style.top = (findPos(txt)[1] + 23) + 'px';
	
	ClearList();
}

function findPos(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent)
	{
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent)
		{
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function EnterSuggest(e)
{
	if(e.keyCode==13)
	{
		e.cancelBubble=true;
		e.returnValue=false;
		e.cancel=true;
		return Find(txt);
	}
}

function EnterLogin(e, idevent, IdTxtUserName, IdTxtPassword, Idchk)
{
    if(e.keyCode==13)
	{
	    e.cancelBubble=true;
	    e.returnValue=false;
		e.cancel=true;
		DoLogin(idevent, IdTxtUserName, IdTxtPassword, Idchk);
	}
}


function EnterSuggestDoIt(e)
{
	e.cancelBubble=true;
	e.returnValue=false;
	e.cancel=true;
	return Find(txt);
}

function Find()
{
    if (txt.value.length >= 3)
    {
        window.location = './searchlist.aspx?t=' + txt.value;
    }
	return false;
}

function SuggestList(e)
{
	switch(e.keyCode)
	{
		case 27:
			//ESC
			ClearList();
			break;
		case 40:
			//Flecha abajo
			SelectList(true, txt);
			break;
		case 38:
			//Flecha arriba
			SelectList(false, txt);
			break;
		case 13:
			//Enter
			Find(txt)
			break;
		default:
			if(txt && txt.value && txt.value.length > 0)
			{
				last_timeuid = GetDateTimeUid();
				last_term = txt.value;
				SuggestModule.Find(txt.value, last_timeuid, SuggestTest_callback);
			}
			else
			{
				ClearList();
			}
			break;
	}
}

function GetDateTimeUid()
{
	var now = new Date();
	return Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
}

function SuggestTest_callback(r)
{
	if(r.error == null)
	{
		var data = r.value;
		if(data.length > 0 && data[0][1] == last_timeuid)
		{
			if(data.length && data.length > 1)
			{
				var datastr = new Array();
				for(var i = 1; i < data.length; i++)
				{
					datastr.push('<div class="option" onmouseover="over(this);" index="' + (i - 1).toString() + '" onclick="clicked();"><span>&nbsp;' + data[i][0].replace(new RegExp('('+last_term+')', 'i'), '<b>$1</b>') + '</span></div>');
				}
				//datastr.push('<div class="sugg_foot"><span><img src="images/header/close-small.gif" height="13" width="13" onclick="ClearList();"></span></div>');
				MakeList(datastr.join(''));
			}
			else
			{
				ClearList();
			}
		}
	}
	else
	{
		alert(r.error);
	}
}

function MakeList(innerHTML)
{
	list.innerHTML = innerHTML;
	list.className = 'shown';
	//
	//alto de fila estándar: 13
	//alto de footer estándar: 14
	//ancho default: 125
	//
	var i = 0;
	do
	{
		list.style.width = 447 + i * 10;
		i++;
	}while(list.scrollHeight > (list.childNodes.length - 1) * 13 + 14 && parseInt(list.style.width, 10) < 200)
	selected = null;
	if(txt.value.length < 3)
	{
	    ClearList();
	}
	else
	{
	}
}

function ClearList()
{
	if(list)
	{
		list.innerHTML = '';
		list.className = '';
		selected = null;
	}
}

function SelectList(down, txt)
{
	if(list.childNodes && list.childNodes.length >= 0)
	{
		if(down)
		{
			if(selected != list.childNodes.length - 1)
			{
				if(selected == null)
					selected = 0;
				else
					selected++;
				list.childNodes[selected].className = 'selected';
				if(selected != 0)
					list.childNodes[selected - 1].className = 'option';
			}
		}
		else
		{
			if(selected != null && selected != 0)
			{
				selected--;
				list.childNodes[selected].className = 'selected';
				list.childNodes[selected + 1].className = 'option';
			}
		}
		if(selected != null)
		{
			SetSelectedText();
		}
	}
}

function SetSelectedText()
{
	txt.value = list.childNodes[selected].childNodes[0].innerHTML.substring(6).replace(/<b>/i, '').replace(/<\/b>/i, '');
}

function over(e)
{
	if(selected != null)
		list.childNodes[selected].className = 'option';
	selected = parseInt(e.getAttribute('index'), 10);
	list.childNodes[selected].className = 'selected';
}

function clicked()
{
    if(txt.length > 3)
    {
	    SetSelectedText();
	    Find();
	}
}

function HandleExplText(txt, click)
{
	if(click)
	{
		if(txt.originalText == null)
		{
			txt.originalText = txt.value;
		}
		if(txt.value == txt.originalText)
		{
			txt.value = '';
		}
	}
	else if(txt.value == '')
	{
		txt.value = txt.originalText;
	}
}
