// функции для обработки полей с автозаполнением
var AF_on = true;

function AF_init(){
	// инициация схемы
	var list = document.getElementsByTagName('INPUT');
	for(var i = 0, l = list.length; i < l; i++)
		if(list[i].type == 'text' && list[i].id.substr(0, 3) == 'AF_'){
			var inp = list[i];

			// создаём ДИВ перед нужным инпутом
			var d = document.createElement('div');
            d.style.position = 'relative';
            inp.parentNode.insertBefore(d, inp);

			// заменяем ID инпута
            var id = inp.id; inp.id = 'AF_DELETE';

			// создаём textarea, которая заменит инпут
            var inp2 = document.createElement('textarea');
            // копируем свойсва
            inp2.id = id; inp2.name = inp.name; inp2.value = inp.value; inp2.className = 'af_field';
            d.appendChild(inp2);

			// создаём блок для показа вариантов
			var block = document.createElement('div');
			block.id = id + '_variants'; block.className = 'autofill';
			block.style.width = inp2.offsetWidth + 'px';
			d.appendChild(block);

			// прописываем события для текстового поля
			inp2.onblur = function(){AF_hide_delay(this)};
			inp2[is_opera() ? 'onkeypress' : 'onkeydown'] = function(e){return AF_keycheck(this, e)};
		}

	for(var i = 0, l = list.length; i < l; i++)
		if(list[i].type == 'text' && list[i].id == 'AF_DELETE'){
			remove_node(list[i]);
			l--; i--;
		}
}

// реакция на нажатие клавиши
function AF_keycheck(inp, e){
    if(!e) e = window.event;
	// e.keyCode: 38 - UP, 40 - DOWN, 13 - ENTER

	// если эта клавиша - не стрелка вверх/вниз и не Enter, значит это буква
	// пропускаем её и делаем запрос на список вариантов
    if(e.keyCode != 38 && e.keyCode != 40 && e.keyCode != 13){
    	setTimeout(function(){AF_lookup(inp)}, 200);
    	return true;
    }

	// получаем блок для вариантов
	var block = $(inp.id + '_variants');

	// если блок сейчас скрыт!!!
	if(block.style.display != 'block'){
		if(e.keyCode == 13){
			var frm = inp.parentNode;
			while(frm.tagName != 'FORM' && frm.tagName != 'BODY') frm = frm.parentNode;
			if(frm.tagName == 'FORM') frm.submit();
		}
		return false;
	}

	// определяем, выделен ли сейчас какой-либо вариант
    var selected = -1;
    var links = block.getElementsByTagName('A');
	for(var i = 0, l = links.length; i < l; i++) if(links[i].className == 's') selected = i;

    if(e.keyCode == 13){
		// нажатие Enter
		if(selected != -1){
			// один из вариантов выделен - вставляем его в само поле
			for(var i = 0, l = links.length; i < l; i++)
				if(i == selected) AF_set_val(links[i]);
		}else{
			// ни один из вариантов не выделен - пробуем сабмитить форму
			var frm = inp.parentNode;
			while(frm.tagName != 'FORM' && frm.tagName != 'BODY') frm = frm.parentNode;
			if(frm.tagName == 'FORM') frm.submit();
		}
	}else{
		// нажатие стрелки вверх/книз
		var next = selected + (e.keyCode == 38 ? -1 : 1);
		if(next == links.length) next = 0; if(next < 0) next = links.length - 1;

		for(var i = 0, l = links.length; i < l; i++) links[i].className = i == next ? 's' : '';
	}

	return false;
}

function AF_hide_delay(inp){
	setTimeout(function(){AF_hide(inp)}, 200);
}

function AF_hide(inp){
	$(inp.id + '_variants').style.display = 'none';
}

function AF_lookup(inp){
	// на всякий случай: заменяем переносы строки на пробелы
	if(inp.value.search("\r\n") != -1) inp.value = inp.value.replace(/\r\n/g, ' ');

	var val = inp.value;
	//var list_id = inp.id.split('_', 2); list_id = list_id[1];
	var list_num = inp.id.split('_', 2); list_num = list_num[1];

	if(val){
		//ajax_lookup('/PROG/AF_ajax.php?val=' + encodeURIComponent(val) + '&id=' + list_id, function(res){AF_show(inp, res)});
		ajax_lookup('/PROG/AF_ajax.php?val=' + escape(val) + '&list=' + list_num, function(res){AF_show(inp, res)});
	}else AF_hide(inp);
}

function AF_show(inp, res){
	var block = $(inp.id + '_variants');
	if(res){
		block.style.display = 'block';
		block.innerHTML = '<div>' + res + '</div><iframe id="' + block.id + '_ifr" scrolling="no"></iframe>';
		$(block.id + '_ifr').style.width = block.offsetWidth + 'px';
		$(block.id + '_ifr').style.height = block.offsetHeight + 'px';

		var links = block.getElementsByTagName('A');
		for(var i = 0, l = links.length; i < l; i++){
			links[i].onmouseover = function(){AF_lnk_over(this)};
			links[i].onmouseout = function(){AF_lnk_out(this)};
		}

	}else AF_hide(inp);

}

function AF_set_val(link){
	var inp = $(link.parentNode.parentNode.id.replace('_variants', ''));

    inp.value = link.innerHTML;
	inp.focus();
	AF_hide(inp);
}

function AF_lnk_over(link){
    var links = link.parentNode.getElementsByTagName('A');
	for(var i = 0, l = links.length; i < l; i++) links[i].className = '';
	link.className = 's';
}

function AF_lnk_out(link){
    var links = link.parentNode.getElementsByTagName('A');
	for(var i = 0, l = links.length; i < l; i++) links[i].className = '';
}
