function $_(n){
	return document.getElementById(n);
}

function get_event_id(evt)
{
    evt = (evt) ? evt : ((window.event) ? event : null);
    if(evt)
    {
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if(elem.nodeType == 3) elem = elem.parentNode;
        if(elem && elem.id) return elem.id;
        else return null;
    }
}

function is_msie()
{
    var ua = navigator.userAgent,
        m  = ua.match(/MSIE (\d+(\.\d+)?)/);
    if (ua.indexOf('Opera') == -1 && m) {
        return parseFloat(m[1]);
    } else {
        return 0;
    }
} 

var lookup_id = null;
var lookup_sid = 0;
var lookup_url = null;
var lookup_vals = null;
var req = null;
var in_action = false;
var last_req = "";
var old_value = "";
var inext = {0:0};
var iprev = {0:0};
var to = 0;
function lookup_timer()
{
	if (lookup_id)
	{
		var value = $_(lookup_id).value;
		if (value == old_value && !in_action && value.length>2) {
			do_lookup(value);
		}
		to = setTimeout("lookup_timer()", in_action ? 100 : 500);
		old_value = value;
		if(value.length<=2) {
			$_(lookup_id + '_popup').style.display = 'none';
		}
	}
	return true;
}

function do_lookup(value)
{
	if (value != last_req)
	{
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.responseJS.a) {
					lookup_vals= req.responseJS.a;
					var p = $_(lookup_id + '_popup');
					p.innerHTML = "";
					var pi=0;
					inext = {};
					iprev = {};
					var f = 0;
					var cnt = 0;
					for (i in lookup_vals) {
						if (!lookup_vals[i]) {
							break;
						}
						el = document.createElement('div');
						
						el.innerHTML = lookup_vals[i];
						el.id = lookup_id + '_popup_' + i;
						el.setAttribute('onclick', "apply_lookup('" + i + "');hide_lookup();");
						el.setAttribute('onmouseover', "this.className='active'; lookup_sid='" + i + "';");
						el.setAttribute('onmouseout',  "this.className='';");
						if (i == lookup_sid) {
							el.className = 'active';
							f = i;
						}
						p.appendChild(el);
						iprev[i] = pi;
						inext[pi] = i;
						pi=i;
						cnt++;
					}
					lookup_sid = f;
					inext[pi] = 0;
					iprev[0] = pi;
					p.innerHTML += '<!--[if lte IE 6.5]><iframe></iframe><![endif]--></div>';
					if (cnt == 1 && $_(lookup_id).value == lookup_vals[lookup_sid]) {
						p.style.display = 'none';
					} else {
						p.style.display = 'block';
						p.style.width = ($_(lookup_id).clientWidth + 2) + 'px';
					}
				}
				in_action = false;
			}
		}
		//req.open("GET", lookup_url + '&s=' + value, true);
		req.open("POST", lookup_url, true);
		req.send({s:value});
		last_req = value;
		in_action = true;
	}
}
function hide_lookup()
{
	if (lookup_sid) {
		apply_lookup(lookup_sid);
	}
	if (lookup_id) {
		var value = $_(lookup_id + '_popup').style.display = 'none';
	}
}
function apply_lookup(i)
{
	if (lookup_vals[i]) {
		$_(lookup_id).value = lookup_vals[i].replace(/<\/?[^>]+>/gi, '');
		old_value = $_(lookup_id).value; 
	}
	clearTimeout(to);
}
function lookup_key(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	var code = evt.keyCode;
	if (code == 40 || code == 38) {
		var ls = lookup_sid;
		lookup_sid = (code == 40) ? inext[lookup_sid] : iprev[lookup_sid];
		if (ls) {
			$_(lookup_id + '_popup_' + ls).className = '';
		}
		if (lookup_sid) {
			$_(lookup_id + '_popup_' + lookup_sid).className = 'active';
		}
		$_(lookup_id).focus();
		return false;
	}
	if (code == 13) {
		apply_lookup(lookup_sid);
		hide_lookup();
		return true;
	}
	lookup_focus();
}
function lookup_focus(id, url)
{
	if (id) {
		lookup_id = id;
		last_req = "";
	}
	if (url) {
		lookup_url = url;
	}

	if (!req) {
		req = new JsHttpRequest();
	}
	to = setTimeout("lookup_timer()",50);
}
function key_killer(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	var code = evt.keyCode;
	if (code == 13) {
		//return false;
		return code;
	}
}

