var _SEARCH_RESULT_PHP="search_result.php";
var _SEARCH_DIV_OBJ=null;
var _SEARCH_FIELD_OBJ=null;
var _RESULT_COUNT=10;//число записей в слое результатов
var _SEARCH_INTERVAL_INT=100;
var _SEARCH_ZAPROS_NUM_INT=0;

var _SEARCH_DIV_PREFIX="search_div_";
var _SEARCH_WORD_PREFIX="search_word_";

var _NEED_DIV=true;//равно false, если выбрали "Закрыть окно"
var _SEARCH_INTERVAL_OBJ=null;
var _SEND_TEXT="";//строка, которая была отправлена предыдущим запросом
var _RESULT_COUNT=0;
var _CUR_RESULT_NUMBER=-1;
var _CUR_SEARCH_FIELD_TEXT="";//текс, который в текущий момент набран руками в текстовом поле
var _CHANGE_TEXT_INTERVAL=null;
var _CUR_SEARCH_RESULT_WORD='';
var _CUR_SEL_DIV_NUMBER=-1;

function set_search_obj(){
	_SEARCH_DIV_OBJ=document.getElementById("search_result_div");
	_SEARCH_FIELD_OBJ=document.getElementById("searchField");
	_SEARCH_DIV_OBJ.onmouseover=clear_textfield_blur;
	_SEARCH_DIV_OBJ.onmouseout=set_textfield_blur;
}

function clear_textfield_blur(){
	_SEARCH_FIELD_OBJ.onblur=null;
}
function set_textfield_blur(){
	_SEARCH_FIELD_OBJ.onblur=blur_was;
}

//событие получения фокуса
function focus_was_func(){
	if(_SEARCH_FIELD_OBJ.value==_SEARCH_STRING) _SEARCH_FIELD_OBJ.value='';
	
	if(_NEED_DIV){
		search_interval_func();
	}
}

//событие исчезновения фокуса
function blur_was(){
	if(_SEARCH_FIELD_OBJ!=null ? _SEARCH_FIELD_OBJ.value.length<1 : false) _SEARCH_FIELD_OBJ.value=_SEARCH_STRING;
	
	//скрываем поисковый слой
	hide_result_div();
}

//нажали "закрыть окно"
function hide_search_result(){
	hide_result_div();
	_NEED_DIV=false;
}

function hide_result_div(){
	_SEARCH_DIV_OBJ.style.visibility="hidden";
	document.onkeyup=null;
	clearTimeout(_SEARCH_INTERVAL_OBJ);
}

//запускаем эту функцию при начале ввода в поле поиска
function search_interval_func(){
	var new_val=_SEARCH_FIELD_OBJ.value.toString();
	
	if(new_val.length>1 && new_val!=_SEND_TEXT){
		//надо дернуть сервер
		send_search_response();
	}
	if(new_val.length<2) _SEARCH_DIV_OBJ.style.visibility="hidden";
	
	_SEARCH_INTERVAL_OBJ=setTimeout("search_interval_func()", _SEARCH_INTERVAL_INT);
}

function set_words(words_str){
	_SEARCH_FIELD_OBJ.value=words_str;
	send_search_request();
}
//****************************************************************************
//		Функции для обработки нажатия вверх-вниз
//****************************************************************************
//функция проверяет, изменился ли текст в текстовом поле?
function check_change_text(){
	if(_CUR_RESULT_NUMBER>-1 && (_CUR_SEARCH_RESULT_WORD!='' ? _SEARCH_FIELD_OBJ.value!=_CUR_SEARCH_RESULT_WORD : false)){
		document.onkeyup=null;
		_CUR_RESULT_NUMBER=-1;
		_CUR_SEARCH_RESULT_WORD='';
		clearTimeout(_CHANGE_TEXT_INTERVAL);
		search_interval_func();
	}else _CHANGE_TEXT_INTERVAL=setTimeout("check_change_text()", _SEARCH_INTERVAL_INT);
}

function on_key_up(event){
	if(event==null) event=window.event;
	
	if(event.keyCode==40){
		//вниз
		clearTimeout(_SEARCH_INTERVAL_OBJ);
		key_down();
	}else if(event.keyCode==38){
		//вверх
		clearTimeout(_SEARCH_INTERVAL_OBJ);
		key_up();
	}
}

function key_down(){
	if(_CUR_RESULT_NUMBER>-1){
		//снимаем предыдужее выделение
		change_div_style(document.getElementById(_SEARCH_DIV_PREFIX+_CUR_RESULT_NUMBER), false);
	}
	
	_CUR_RESULT_NUMBER++;
	if(_CUR_RESULT_NUMBER<_RESULT_COUNT){
		//подсвечиваем нужное слово
		change_div_style(document.getElementById(_SEARCH_DIV_PREFIX+_CUR_RESULT_NUMBER), true);
		//подставляем в поисковое поле значение
		_CUR_SEARCH_RESULT_WORD=document.getElementById(_SEARCH_WORD_PREFIX+_CUR_RESULT_NUMBER).childNodes[0].nodeValue.trim();
		_SEARCH_FIELD_OBJ.value=_CUR_SEARCH_RESULT_WORD;
	}else{
		//возвращаем в текстовое поле предыдущий текст
		_CUR_RESULT_NUMBER=-1;
		_SEARCH_FIELD_OBJ.value=_CUR_SEARCH_FIELD_TEXT;
		
		clearTimeout(_CHANGE_TEXT_INTERVAL);
		search_interval_func();
	}
}

function key_up(){
	if(_CUR_RESULT_NUMBER>-1){
		//снимаем предыдужее выделение
		change_div_style(document.getElementById(_SEARCH_DIV_PREFIX+_CUR_RESULT_NUMBER), false);
	}
	
	_CUR_RESULT_NUMBER--;
	if(_CUR_RESULT_NUMBER>-1){
		//подсвечиваем нужное слово
		change_div_style(document.getElementById(_SEARCH_DIV_PREFIX+_CUR_RESULT_NUMBER), true);
		//подставляем в поисковое поле значение
		_CUR_SEARCH_RESULT_WORD=document.getElementById(_SEARCH_WORD_PREFIX+_CUR_RESULT_NUMBER).childNodes[0].nodeValue.trim();
		_SEARCH_FIELD_OBJ.value=_CUR_SEARCH_RESULT_WORD;
	}else{
		//возвращаем в текстовое поле предыдущий текст
		_CUR_RESULT_NUMBER=-1;
		_SEARCH_FIELD_OBJ.value=_CUR_SEARCH_FIELD_TEXT;
		
		clearTimeout(_CHANGE_TEXT_INTERVAL);
		search_interval_func();
	}
}

//****************************************************************************
//		Функция для отображения ссылок-слов
//****************************************************************************
function div_mouse_over(){
	if(_CUR_RESULT_NUMBER>-1){
		change_div_style(document.getElementById(_SEARCH_DIV_PREFIX+_CUR_RESULT_NUMBER), false);
		_CUR_RESULT_NUMBER=-1;
	}
	change_div_style(this, true);
	_CUR_SEARCH_RESULT_WORD='';
}

function div_mouse_out(){
	change_div_style(this, false);
}

function change_div_style(div_obj, blnIsSel){
	if(div_obj==null) return 0;
	var ref_ovj=document.getElementById(_SEARCH_WORD_PREFIX+get_order_num(div_obj.id));
	if(blnIsSel){
		_CUR_RESULT_NUMBER=get_order_num(div_obj.id);
		div_obj.style.backgroundColor="#266daf";
		ref_ovj.style.color="#ffffff";
	}else{
		div_obj.style.backgroundColor="#ffffff";
		ref_ovj.style.color="#47443f";
	}
}

//из имени слоя хватает порядковое значение
function get_order_num(div_id_str){
	return div_id_str.substr(_SEARCH_DIV_PREFIX.length);
}

function show_result_on_div(result_array){
	var brNode=document.createElement("br");
	
	_SEARCH_DIV_OBJ.innerHTML='';
	for(var i=0; i<result_array.length; i++){
		var curDiv=document.createElement("div");
		curDiv.id="search_div_"+i;
		curDiv.onmouseover=div_mouse_over;
		curDiv.onmouseout=div_mouse_out;
		curDiv.className="search_word";
		
		var curRef=document.createElement("a");
		curRef.id="search_word_"+i;
		curRef.className="search_word";
		var text_node=document.createTextNode(result_array[i]);
		curRef.appendChild(text_node);
		var refString="javascript: set_words('"+result_array[i].trim()+"');";
		curRef.setAttribute("href", refString);
		
		curDiv.appendChild(curRef);
		_SEARCH_DIV_OBJ.appendChild(curDiv);
		//_SEARCH_DIV_OBJ.appendChild(brNode.cloneNode(true));
	}
	
	//надо добавить ссылку "закрыть"
	var closeRef=document.createElement("a");
	closeRef.appendChild(document.createTextNode(SEARCH_CLOSE));
	var refString="javascript: hide_search_result();";
	closeRef.setAttribute("href", refString);
	
	var ref_div=document.createElement("div");
	ref_div.className="search_word";
	ref_div.align="right";
	ref_div.appendChild(closeRef);
	
	//_SEARCH_DIV_OBJ.appendChild(closeRef);
	_SEARCH_DIV_OBJ.appendChild(ref_div);
	
	if(result_array.length>0){
		var pos_obj=getElementPosition("searchField");
		_SEARCH_DIV_OBJ.style.visibility="visible";
		_SEARCH_DIV_OBJ.style.left=pos_obj.left+1;
		_SEARCH_DIV_OBJ.style.top=pos_obj.top+pos_obj.height;
		
		document.onkeyup=on_key_up;
		check_change_text();
	}else{
		_SEARCH_DIV_OBJ.style.visibility="hidden";
		document.onkeyup=null;
	}
}

//****************************************************************************
//		Код для соединения с сервером
//****************************************************************************
var objSearchServerConnect = new Object() ;

//request to server
objSearchServerConnect.connectToServer=function(url_str, param_object, getter_func){
	var time_value=new Date().getTime();
	
	JsHttpRequest.query(
            url_str+"&time="+time_value, // backend
			param_object,
			getter_func,
            true //disable caching
        );
}

function send_search_response(){
	_SEARCH_ZAPROS_NUM_INT++;
	
	var paramObject=new Object();
	_SEND_TEXT=_SEARCH_FIELD_OBJ.value;
	paramObject.search_text=_SEND_TEXT;
	paramObject.search_zapros_num=_SEARCH_ZAPROS_NUM_INT;
	
	objSearchServerConnect.connectToServer(_SEARCH_RESULT_PHP+"?search=jkjk", paramObject, do_search_reponse);
}

function do_search_reponse(result, errors){
	_RESULT_COUNT=0;
	if(errors.length>0){
		alert(errors);
		return 0;
	}
	if(result["error"]!=null ? result["error"].length>0 : false){ alert("Ошибка сервера: "+result["error"]);
	}else{
		//надо поменять содержимое
		_CUR_SEARCH_FIELD_TEXT=_SEARCH_FIELD_OBJ.value;
		_RESULT_COUNT=result["words"].length;
		show_result_on_div(result["words"]);
	}
}
