var suggest;
var shown=false;
var suggest_clicked_v = false;
var nn=(document.layers)?true:false;
var ie=(document.all)?true:false;

var suggest_archive_value=null;
var panw_katw_index=0;
var panw_katw_element=null;
var panw_katw=false;

function generate(w)
{
	suggest = document.createElement("div");
        suggest.id = "yourse_suggest";
        suggest.setAttribute("align","center");
        suggest.style.margin = "0px auto";
        suggest.className ="";
        suggest.innerHTML = "";
	suggest.style.display = "none";
	suggest.style.position = "absolute";
	suggest.style.width = w;
	suggest.onclick = function ()
	{
		suggest_clicked_v = true;
	}
        document.body.appendChild(suggest);
}

var getOffset = function (obj) {
    var left, top;
    left = top = 0;
    if (obj.offsetParent) {
        do {
            left += obj.offsetLeft;
            top  += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return {
        x : left,
        y : top
    };
};

function suggest_on_mouseover()
{
	var ch = suggest.getElementsByTagName('span');
	for (var i=0; i<ch.length;i++)
	{
		if (ch[i]!=this) ch[i].style.background='#fff';
		else
		{
			panw_katw_index = i;
		}
	}
	this.style.background = "#ddd";
}

function suggest_on_click()
{
	panw_katw_element.value = this.innerHTML;
	panw_katw_element.focus();
	hide_suggest();
}

function FillSuggest(txt)
{
	suggest.innerHTML = txt;
	var ch = suggest.getElementsByTagName('span');
	for (var i=0; i<ch.length;i++)
	{
		ch[i].onmouseover = suggest_on_mouseover;
		ch[i].onclick = suggest_on_click;
	}
}

function show_suggest_box_to_element(_element)
{
	var dim = getOffset(_element);
	showsuggest(dim.x,dim.y);
	//suggest_clicked_v=true;
	_element.onkeydown = suggest_keypress;
	reset_suggest_panw_katw(_element);
	panw_katw_element = _element;
}

function showsuggest(x,y)
{
	if (shown) return;
	suggest.style.top = y + 31 + 'px';
	suggest.style.left = x + 'px';
	suggest.style.display = "block";
	shown = true;
}

function suggest_keypress(e)
{
	var key = null;
	var evt=(e)?e:(window.event)?window.event:null;
	if(evt)
	{
		key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
	}
	if (!shown)
	{
		panw_katw = false;
		return;
	}
	switch (key)
	{
		case 9:
		case 39:
			hide_suggest();
			break;
		case 40:
			panw_katw = true;
			suggest_katw();
			break;
		case 38:
			panw_katw = true;
			suggest_panw();
			break;
		default:
			panw_katw = false;
	}
}

function reset_suggest_panw_katw(el)
{
	suggest_archive_value = el.value;
	panw_katw_index = -1;
}

function suggest_katw()
{
	var ch = suggest.getElementsByTagName('span');
	if (panw_katw_index==ch.length-1)
	{
		panw_katw_index = -1;
		panw_katw_element.value = suggest_archive_value;
		for (var i=0; i<ch.length;i++)
		{
			if (ch[i].style.background!='#fff') ch[i].style.background='#fff';
		}
		return;
	}
	for (var i=0; i<ch.length;i++)
	{
		if (i>panw_katw_index)
		{
			panw_katw_element.value = ch[i].innerHTML;
			ch[i].style.background = "#ddd";
			if (i>0)
				ch[i-1].style.background = "#fff";
			panw_katw_index = i;
			break;
		}
	}
}

function suggest_panw()
{
	var ch = suggest.getElementsByTagName('span');
	if (panw_katw_index==-1)
	{
		panw_katw_index = ch.length-1;
		panw_katw_element.value = ch[ch.length-1].innerHTML;
		ch[ch.length-1].style.background = "#ddd";
		return;
	}
	if (panw_katw_index==0)
	{
		panw_katw_index = -1;
		panw_katw_element.value = suggest_archive_value;
		for (i in ch)
		{
			if (typeof(ch[i])!='object') continue;
			if (ch[i].style.background!='#fff') ch[i].style.background='#fff';
		}
	}
	for (i in ch)
	{
		if (typeof(ch[i])!='object') continue;
		if (i==panw_katw_index-1)
		{
			panw_katw_element.value = ch[i].innerHTML;
			ch[i].style.background = "#ddd";
			ch[(i-0)+1].style.background = "#fff";
			panw_katw_index = i;
			break;
		}
	}
}

function suggest_this()
{
	var ch = suggest.getElementsByTagName('span');
	//for (i in ch)
}

function hide_suggest()
{
	suggest.style.display = "none";
	shown = false;
	panw_katw = false;
}

document.onclick = function ()
{
	if (suggest_clicked_v)
	{
		suggest_clicked_v=false;
		return;
	}
	if (shown) hide_suggest();
}

function browsing_suggestions() { return panw_katw; }
function suggestions_shown() { return shown; }

//useful functions
function move_el_to_el(el1,el2,p)
{
	var dim = getOffset(el2);
	if (!p)
	{
		el1.style.top = dim.y + 'px';
		el1.style.left = dim.x + 'px';
	}
	else
	{
		el1.style.top = dim.y + p.y + 'px';
		el1.style.left = dim.x + p.x + 'px';
	}
}

