


/** Функция получения кода нажатой клавиши */
function kc(event) {
	
	button = event.which || event.keyCode;
	
	eid = Event.element(event).id;
	rid = 'res_' + eid;
	
	if(((button >= 46) && (button <= 222)) || (button == 8) || (button == 32)) {
		// Это у нас нормальные кнопки, поэтому мы делаем обработку запроса на сервер
		ch(eid);
	} else {
		mv_list(button,eid,rid);
	}
	
	if((cntSub(eid) > 0) && ($('extcity'))) {
		if($F(eid) != '') {
			$('extcity').hide();
			clearExtCity('extcity');
		} else {
			$('extcity').show();
		}
	}
}

/** Функция получения списка городов по начальному вводу */
function ch(elem) {
	
	inurl='city.ajax.php';
	
	data = 'type=ct&inp=' + $F(elem);
	
	window.clearTimeout(tId);
	
	tId = window.setTimeout("send('" + inurl + "','" + data + "', false , 'res_" + elem + "', " + ldcity + ")", 200);

}

/**
	Обработчик загрузки данных о городах
	Его задача переработать полученные данные в соотвесттвующий вид после загрузки.
*/
function ldcity (data,rid) {

	// Отключаем возможность отправки данных
	submitReady = false;
	
	eid = gpe(rid);
	
	list = $$('#' + rid + ' li');
	
	list.each(function(s) {
		
		// Реакция на наведение мыши
		$(s).observe('mouseover', function(event){
			desel(rid);
			$(s).addClassName('select');
		});
		
		// Реакция на клик мыши
		$(s).observe('click', function(event){
			$(eid).value = s.innerHTML;
			$(rid).hide();
			window.clearTimeout(tId);
			tId = window.setTimeout("addlist('" + eid + "')", 500);
		});
	});
}

/** Добавляет значение в список городов */
function addlist(eid,setval) {
	
	if(setval == undefined) {
		setval = $F(eid);
	}
	
	if((setval != '') && ($('citylist_' + eid))) {
		val = '<li>' + setval + '<img onclick="dellist(\'' + eid + '\',\'' + setval + '\')" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=0.1" src="' + urlHome + 'assets/templates/spros/images/tmbupload.gif" class="citydelete"></li>';
		
		if(addSub(eid,setval) == true) {
			if((cntSub(eid) > 1) && ($('extcity'))) {
				$('extcity').hide();
				clearExtCity('extcity');
			}
			Insertion.Bottom('citylist_' + eid,val);
		}
		
		submitReady = true;
		
		$(eid).value = '';
	}
}

/** Удаляет значение из списка городов */
function dellist(eid,val) {
	
	list = $$('#citylist_' + eid + ' li');
	
	list.each(function(s) {
		spl = s.innerHTML.indexOf(val);
		if(spl > -1) {
			s.remove();
		}
	});
	
	delSub(eid,val);
	if(cntSub(eid) <= 1) {
		$('extcity').show();
	}
}

/** Функция потери фокуса полем */
function hrc(evt) {
	
	eid = Event.element(evt).id;
	rid = 'res_' + eid;
	
	// Если потеря фокуса была произведена нажитием Enter, то надо вернуть фокус в поле
	// Привет IE!
	if(submitReady == false) {
		$(eid).focus();
	}
	
	submitReady = true;
	
	window.clearTimeout(tId);
	tId = window.setTimeout("$(rid).hide()", 700);
}

/** Обработчик событий возникающих в поле выбора городов */
function rc(event) {
	button = event.which || event.keyCode;
	
	eid = Event.element(event).id;
	rid = 'res_' + eid;
	
	if((button == 13) && ($F(eid) != '')) {
		window.setTimeout("addlist('" + eid + "')", 500);
		$(rid).hide();
	}
}

/** Обработчик вызова в поле выбора одного города */
function rcs(event) {
	button = event.which || event.keyCode;
	
	eid = Event.element(event).id;
	rid = 'res_' + eid;
	
	if((button == 13) && ($F(eid) != '')) {
		$(rid).hide();
	}
}

/** функция перемещения по списку результатов, полученных по Ajax */
function mv_list(button, eid, rid) {
	
	if ((button == 38) || (button == 40) || (button == 13)) {
		// Это управляющие кнопки, которые будут показывать список
		// Если в блоке результата есть значения
		if($(rid).innerHTML != '') {
			// можно применять управление
			list = $$('#' + rid + ' li');
			
			selList = $$('#' + rid + ' li.select');
			
			// Проверяем есть ли выделенный элемент
			if(selList != '') {
				
				// Выделенный элемент есть
				switch (button) {
					case 40:
						// Отрабатываем нажатие кнопки вниз
						selList.each(function(s) {
							if(s.next() != null) {
								s.removeClassName('select');
								s.next().addClassName('select');
								$(eid).value = s.next().innerHTML;
							} else {
								s.removeClassName('select');
								$(eid).value = tmpCity;
							}
						});
						break;
					case 38:
						// Отрабатываем нажатие кнопки вверх
						selList.each(function(s) {
							if(s.previous() != null) {
								s.removeClassName('select');
								s.previous().addClassName('select');
								$(eid).value = s.previous().innerHTML;
							} else {
								s.removeClassName('select');
								$(eid).value = tmpCity;
							}
						});
						break;
				}
			} else {
				
				// Выделенного элемента нет
				switch (button) {
					case 40:
						tmpCity = $F(eid);
						list.first().addClassName('select');
						$(eid).value = list.first().innerHTML;
						break;
					case 38:
						tmpCity = $F(eid);
						list.last().addClassName('select');
						$(eid).value = list.last().innerHTML;
						break;
				}
			}
		}
	}
	
}

/** Получение списка районов города */
function k_ds(event) {
	
	// определяем какая кнопка была нажата
	button = event.which || event.keyCode;
	
	// id основного поля
	eid = Event.element(event).id;
	// id поля с вариантами
	rid = 'res_' + eid;
	
	if(((button >= 46) && (button <= 222)) || (button == 8) || (button == 32)) {
		// Это у нас нормальные кнопки, поэтому мы делаем обработку запроса на сервер
		g_ds(eid);
	} else {
		mv_list(button,eid,rid);
	}
}

/** Получение списка районов по начальному вводу и заданному городу */
function g_ds(eid) {
	
	// id основного элемента
	pid = gn(eid);
	
	// Получаем список городов в служебном поле
	cityArr = getSub(pid + '_ct');
	cityInp = $F(pid + '_ct');
	
	// проверяем основные элементы
	if(!cityArr || (cityArr.size() != 1)) {
		if(cityInp != '') {
			city = cityInp;
		} else {
			return false;
		}
	} else {
		// получаем первый элемент - единственное название города
		city = cityArr[0];
	}
	
	inurl='city.ajax.php';
	
	data = 'type=ds&inp=' + $F(eid) + '&dt=' + city;
	
	window.clearTimeout(tId);
	
	tId = window.setTimeout("send('" + inurl + "','" + data + "', false , 'res_" + eid + "', " + ldcity + ")", 200);

	
}

/** Получение списка районов города */
function k_st(event) {
	
	// определяем какая кнопка была нажата
	button = event.which || event.keyCode;
	
	// id основного поля
	eid = Event.element(event).id;
	// id поля с вариантами
	rid = 'res_' + eid;
	
	if(((button >= 46) && (button <= 222)) || (button == 8) || (button == 32)) {
		// Это у нас нормальные кнопки, поэтому мы делаем обработку запроса на сервер
		g_st(eid);
	} else {
		mv_list(button,eid,rid);
	}
}

function g_st(eid) {
	
	// id основного элемента
	pid = gn(eid);
	
	// Получаем список городов в служебном поле
	cityArr = getSub(pid + '_ct');
	cityInp = $F(pid + '_ct');
	
	// проверяем основные элементы
	if(!cityArr || (cityArr.size() != 1)) {
		if(cityInp != '') {
			city = cityInp;
		} else {
			return false;
		}
	} else {
		// получаем первый элемент - единственное название города
		city = cityArr[0];
	}
	
	inurl='city.ajax.php';
	
	data = 'type=st&inp=' + $F(eid) + '&dt=' + city;
	
	window.clearTimeout(tId);
	
	tId = window.setTimeout("send('" + inurl + "','" + data + "', false , 'res_" + eid + "', " + ldcity + ")", 200);

	
}

function clearExtCity(elem) {
	
	list = $(elem).adjacent('#' + elem + ' input');
	
	list.each(function(s) {
		
		$(s).value = '';
		
	});
	
}
