//-----------------------------------
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
	node = document;
	if ( tag == null )
	tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;

	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
//-----------------------------------

// Globals id blocks
//*************************************
var ajax_search_id_input = '';
var ajax_search_id_conteiner_input = '';
var ajax_search_id_conteiner_status = '';
var ajax_search_id_conteiner_result = '';
//*************************************

// Url server script
//*************************************
var ajax_search_url_server_ajax_script = '';
var ajax_search_url_server_full_script = '';
//*************************************

// Interval before search
//*************************************
var ajax_search_interval_before_search = '';
//*************************************

// Temp variables
//*************************************
var ajax_search_flag_request_in_action = 0;
var ajax_search_flag_change_input = 0;
var ajax_search_value_change_input = '';
var ajax_search_timer_temp_interval = 0;
//*************************************

//-----------------------------------
function AjaxSearch_StartRequest()
{
	ajax_search_flag_request_in_action = 1;

	$(ajax_search_id_conteiner_status).innerHTML = '<img src="/images/ajax-search-status-loading.gif" />';

	return true;
}
function AjaxSearch_EndRequest()
{
	ajax_search_flag_request_in_action = 0;

	$(ajax_search_id_conteiner_status).innerHTML = '<img src="/images/ajax-search-status-default.gif" />';

	return true;
}
//-----------------------------------

//-----------------------------------
function AjaxSearch_PrintResult( result )
{
	$(ajax_search_id_conteiner_result).innerHTML = result;

	return true;
}
//-----------------------------------

// Function start request to server
//####################################################
function AjaxSearch_Request( string )
{
	//***************************
	if( ajax_search_flag_request_in_action == 1 )
	{
		return false;
	}
	if( string == '' )
	{
		AjaxSearch_PrintResult('');
		return true;
	}
	//***************************

	//***************************
	AjaxSearch_StartRequest();
	//***************************

	//***************************
	new Ajax.Request( ajax_search_url_server_ajax_script + '?search=' + encodeURI(string) ,
	{
		method:'get',
		onSuccess: function(transport)
		{
			AjaxSearch_EndRequest();

			if( ajax_search_flag_change_input == 1 )
			{
				var new_string = ajax_search_value_change_input;

				ajax_search_flag_change_input = 0;
				ajax_search_value_change_input = '';

				AjaxSearch_Request( new_string );
			}
			else
			{
				AjaxSearch_PrintResult( transport.responseText );
			}
		},
		onFailure: function()
		{
			AjaxSearch_EndRequest();

			AjaxSearch_PrintResult( 'ошибка поиска' );
		}
	}
	);
	//***************************

	return true;
}
//####################################################


// Function when user change search string
//####################################################
function AjaxSearch_UserChangeInputValue( element , value )
{
	//***************************
	if( ajax_search_flag_request_in_action == 1 )
	{
		ajax_search_flag_change_input = 1;
		ajax_search_value_change_input = value;

		return false;
	}
	else
	{
		ajax_search_flag_change_input = 0;
		ajax_search_value_change_input = '';
	}
	//***************************

	//***************************
	if( ajax_search_timer_temp_interval != 0 )
	{
		clearInterval(ajax_search_timer_temp_interval);
		ajax_search_timer_temp_interval = 0;
	}
	//***************************

	//***************************
	ajax_search_timer_temp_interval = setInterval( function(){

		clearInterval(ajax_search_timer_temp_interval);
		AjaxSearch_Request( value );

	} , ajax_search_interval_before_search );
	//***************************

	return true;
}
//####################################################


// INITIALIZE MECHANIZM AJAX SEARCH
//####################################################
function AjaxSearch_Initialize( id_input , id_conteiner_input , id_conteiner_status , id_conteiner_result , url_server_ajax_script , url_server_full_script , interval_before_search )
{
	//***************************
	ajax_search_id_input = id_input;
	ajax_search_id_conteiner_input = id_conteiner_input;
	ajax_search_id_conteiner_status = id_conteiner_status;
	ajax_search_id_conteiner_result = id_conteiner_result;
	//***************************

	//***************************
	ajax_search_url_server_ajax_script = url_server_ajax_script;
	ajax_search_url_server_full_script = url_server_full_script;
	//***************************

	//***************************
	ajax_search_interval_before_search = interval_before_search;
	//***************************

	//***************************
	//new Form.Element.Observer( ajax_search_id_input , 0 , AjaxSearch_UserChangeInputValue );
	//***************************

	return true;
}

//####################################################


// When blur and focus input
//####################################################
function AjaxSearch_OnFocusInput()
{
	$(ajax_search_id_conteiner_status).innerHTML = '<img src="/images/ajax-search-status-default.gif" />';
	$(ajax_search_id_conteiner_status).style.display = "block";
	$(ajax_search_id_conteiner_result).innerHTML = '';
	$(ajax_search_id_conteiner_result).style.display = "block";

	if( ajax_search_timer_temp_interval != 0 )
	{
		clearInterval(ajax_search_timer_temp_interval);
		ajax_search_timer_temp_interval = 0;
	}

	ajax_search_flag_request_in_action = 0;
	ajax_search_flag_change_input = 0;
	ajax_search_value_change_input = '';
	ajax_search_timer_temp_interval = 0;

	if( $(ajax_search_id_input).value != '' )
	AjaxSearch_Request( $(ajax_search_id_input).value );

	return true;
}
function AjaxSearch_OnBlurInput()
{
	var timer_interval_close = setInterval( function(){

		clearInterval(timer_interval_close);

		$(ajax_search_id_conteiner_status).innerHTML = '<img src="/images/ajax-search-status-default.gif" />';
		$(ajax_search_id_conteiner_status).style.display = "block";
		$(ajax_search_id_conteiner_result).innerHTML = '';
		$(ajax_search_id_conteiner_result).style.display = "none";

		if( ajax_search_timer_temp_interval != 0 )
		{
			clearInterval(ajax_search_timer_temp_interval);
			ajax_search_timer_temp_interval = 0;
		}

		ajax_search_flag_request_in_action = 0;
		ajax_search_flag_change_input = 0;
		ajax_search_value_change_input = '';
		ajax_search_timer_temp_interval = 0;

		return true;

	} , 500 );
}
//####################################################


// KEYBOARD BUTTON PRESS
//####################################################
function EventOnKeyboardButtonPress(event)
{
	//------------
	var keynum;
	if(window.event) // IE
	keynum = event.keyCode;
	else if(event.which) // Netscape/Firefox/Opera
	keynum = event.which;
	//------------
	switch( keynum )
	{
		case 38: // Up

		//------------
		if( $(ajax_search_id_conteiner_result).innerHTML == '' )
		return false;
		//------------

		var obj_unselected = getElementsByClass( 'ajax_search_item' , $(ajax_search_id_conteiner_result) , 'div' );
		var obj_selected = getElementsByClass( 'ajax_search_item_over' , $(ajax_search_id_conteiner_result) , 'div' );

		if( obj_unselected.length == 0 )
		{
			if( obj_selected.length != 0 )
			{
				obj_selected[0].className = 'ajax_search_item';
				return true;
			}

			return false;
		}

		if( obj_selected.length == 0 )
		{
			obj_unselected[obj_unselected.length-1].className = 'ajax_search_item_over';
			return true;
		}

		var items = $(ajax_search_id_conteiner_result).childNodes;
		for(i=0; i<items.length; i++)
		{
			if( ( items[i] == undefined ) ||
			( items[i].tagName == undefined || (items[i].tagName).toUpperCase() != 'DIV') ||
			( items[i].className != 'ajax_search_item' && items[i].className != 'ajax_search_item_over') )
			continue;

			if( items[i].className == 'ajax_search_item_over' )
			{
				var preview_item = 0;
				for(j=i-1; j>0; j--)
				{
					if( ( items[j] == undefined ) ||
					( items[j].tagName == undefined || (items[j].tagName).toUpperCase() != 'DIV') ||
					( items[j].className != 'ajax_search_item' && items[j].className != 'ajax_search_item_over') )
					continue;

					if( items[j].className == 'ajax_search_item' )
					{
						preview_item = items[j];
						break;
					}
				}

				if( preview_item != 0 )
				{
					items[i].className = 'ajax_search_item';
					preview_item.className = 'ajax_search_item_over';
				}
				else
				{
					items[i].className = 'ajax_search_item';
				}

				return true;
			}

		}

		break;

		case 40: // Down

		//------------
		if( $(ajax_search_id_conteiner_result).innerHTML == '' )
		return false;
		//------------
		var obj_unselected = getElementsByClass( 'ajax_search_item' , $(ajax_search_id_conteiner_result) , 'div' );
		var obj_selected = getElementsByClass( 'ajax_search_item_over' , $(ajax_search_id_conteiner_result) , 'div' );

		if( obj_unselected.length == 0 )
		{
			if( obj_selected.length != 0 )
			{
				obj_selected[0].className = 'ajax_search_item';
				return true;
			}

			return false;
		}

		if( obj_selected.length == 0 )
		{
			obj_unselected[0].className = 'ajax_search_item_over';
			return true;
		}

		var items = $(ajax_search_id_conteiner_result).childNodes;
		for(i=0; i<items.length; i++)
		{
			if( ( items[i] == undefined ) ||
			( items[i].tagName == undefined || (items[i].tagName).toUpperCase() != 'DIV') ||
			( items[i].className != 'ajax_search_item' && items[i].className != 'ajax_search_item_over') )
			continue;

			if( items[i].className == 'ajax_search_item_over' )
			{
				var next_item = 0;
				for(j=i+1; j<items.length; j++)
				{
					if( ( items[j] == undefined ) ||
					( items[j].tagName == undefined || (items[j].tagName).toUpperCase() != 'DIV') ||
					( items[j].className != 'ajax_search_item' && items[j].className != 'ajax_search_item_over') )
					continue;

					if( items[j].className == 'ajax_search_item' )
					{
						next_item = items[j];
						break;
					}
				}

				if( next_item != 0 )
				{
					items[i].className = 'ajax_search_item';
					next_item.className = 'ajax_search_item_over';
				}
				else
				{
					items[i].className = 'ajax_search_item';
				}

				return true;
			}
		}

		break;

		case 13: // Enter

		if( $(ajax_search_id_conteiner_result).innerHTML == '' )
		{
			//------------
			if( $(ajax_search_id_input).value != '' )
			{
				window.location = ajax_search_url_server_full_script + '?search=' + $(ajax_search_id_input).value;
				return true;
			}
			//------------
		}
		else
		{
			//------------
			var items = $(ajax_search_id_conteiner_result).childNodes;
			for(i=0; i<items.length; i++)
			{
				if( ( items[i].tagName == undefined || (items[i].tagName).toUpperCase() != 'DIV') ||
				( items[i].className != 'ajax_search_item' && items[i].className != 'ajax_search_item_over') )
				continue;

				if( items[i].className == 'ajax_search_item_over' )
				{
					items[i].onclick();
					return true;
				}
			}
			//------------
			if( $(ajax_search_id_input).value != '' )
			{
				window.location = ajax_search_url_server_full_script + '?search=' + $(ajax_search_id_input).value;
				return true;
			}
			//------------
		}

		break;

	default:
		AjaxSearch_UserChangeInputValue( document.getElementById('ajax_search_input') , (document.getElementById('ajax_search_input')).value )
		break;
	}
	//------------

	return true;
}
//####################################################


// Mouse Over Result Item
//####################################################
function EventOnMouseOverResultItem( obj )
{
	//------------
	if( $(ajax_search_id_conteiner_result).innerHTML == '' )
	return false;
	//------------
	var items = $(ajax_search_id_conteiner_result).childNodes;
	for(i=0; i<items.length; i++)
	{
		if( ( items[i].tagName == undefined || (items[i].tagName).toUpperCase() != 'DIV') ||
		( items[i].className != 'ajax_search_item' && items[i].className != 'ajax_search_item_over') )
		continue;

		items[i].className = 'ajax_search_item';
	}
	//------------
	obj.className = 'ajax_search_item_over';
	//------------

	return true;
}
//####################################################


// Mouse Out Result Item
//####################################################
function EventOnMouseOutResultItem( obj )
{
	//------------
	if( $(ajax_search_id_conteiner_result).innerHTML == '' )
	return false;
	//------------
	var items = $(ajax_search_id_conteiner_result).childNodes;
	for(i=0; i<items.length; i++)
	{
		if( ( items[i].tagName == undefined || (items[i].tagName).toUpperCase() != 'DIV') ||
		( items[i].className != 'ajax_search_item' && items[i].className != 'ajax_search_item_over') )
		continue;

		items[i].className = 'ajax_search_item';
	}
	//------------

	return true;
}
//####################################################


// Click Result Item
//####################################################
function EventOnMouseClickResultItem( obj , link )
{
	//------------
	if( $(ajax_search_id_conteiner_result).innerHTML == '' )
	return false;
	//------------
	window.location = link;
	//------------

	return true;
}
//####################################################
