
//*************************************
var ajax_search_id_input = '';
var ajax_search_id_container_status_deactive = '';
var ajax_search_id_container_status_active = '';
var ajax_search_id_container_result = '';
//*************************************

//*************************************
var ajax_search_url_server_script = '';
var ajax_search_url_server_page = '';
//*************************************

//*************************************
var ajax_search_timer_between_changes_input = 0;
var ajax_search_interval_between_changes_input = '';
//*************************************


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

function AjaxSearch_ClearTimerBetweenChangesInput()
{
	if( ajax_search_timer_between_changes_input != 0 )
	clearInterval(ajax_search_timer_between_changes_input);
	ajax_search_timer_between_changes_input = 0;
	return true;
}

function AjaxSearch_SetTimerBetweenChangesInput()
{
	ajax_search_timer_between_changes_input = setInterval( function(){
		clearInterval(ajax_search_timer_between_changes_input);
		AjaxSearch_Request();
	} , ajax_search_interval_between_changes_input );
	return true;
}

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

function AjaxSearch_GetInputValue()
{
	value = $(ajax_search_id_input).value;
	return value;
}

function AjaxSearch_SetInputValue( value )
{
	$(ajax_search_id_input).value = value;
	return true;
}
//##################################################################################################

function AjaxSearch_GetResults()
{
	return $(ajax_search_id_container_result).innerHTML;
}
function AjaxSearch_SetResults( results )
{
	$(ajax_search_id_container_result).innerHTML = results;
	return true;
}

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

function AjaxSearch_LockInput()
{
	$(ajax_search_id_input).readonly = true;
	return true;
}

function AjaxSearch_UnLockInput()
{
	$(ajax_search_id_input).readonly = false;
	return true;
}

//*************************************

function AjaxSearch_VisibleBlockStatus()
{
	$(ajax_search_id_container_status_active).style.display = 'block';
	$(ajax_search_id_container_status_deactive).style.display = 'none';
	return true;
}

function AjaxSearch_HiddenBlockStatus()
{
	$(ajax_search_id_container_status_active).style.display = 'none';
	$(ajax_search_id_container_status_deactive).style.display = 'block';
	return true;
}

//*************************************

function AjaxSearch_VisibleBlockResults()
{
	//$(ajax_search_id_container_result).style.display = 'block';
	$j('#'+ajax_search_id_container_result).slideDown(400);
	return true;
}

function AjaxSearch_HiddenBlockResults()
{
	//$(ajax_search_id_container_result).style.display = 'none';
	//AjaxSearch_SetResults('');
	$j('#'+ajax_search_id_container_result).slideUp(400,function(){
		AjaxSearch_SetResults('');
	});
	return true;
}

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

function AjaxSearch_StartRequest()
{
	//AjaxSearch_LockInput();
	AjaxSearch_VisibleBlockStatus();
	if( AjaxSearch_GetResults() == '' )
	AjaxSearch_HiddenBlockResults();
	return true;
}

function AjaxSearch_EndRequest()
{
	//AjaxSearch_UnLockInput();
	AjaxSearch_HiddenBlockStatus();
	AjaxSearch_VisibleBlockResults();
	return true;
}

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

function AjaxSearch_Request()
{
	search_string = AjaxSearch_GetInputValue();
	
	//***************************
	if( search_string == '' )
	{
		//AjaxSearch_UnLockInput();
		AjaxSearch_SetInputValue('');
		AjaxSearch_HiddenBlockStatus();
		AjaxSearch_HiddenBlockResults();
		AjaxSearch_ClearTimerBetweenChangesInput();
		
		return false;
	}
	//***************************
	
	//***************************
	AjaxSearch_StartRequest();
	//***************************

	//***************************
	new Ajax.Request( ajax_search_url_server_script + '&search=' + encodeURI(search_string) ,
	{
		method:'get',
		onSuccess: function(transport)
		{
			var temp_search_string = AjaxSearch_GetInputValue();
			if( temp_search_string != search_string )
			{
				AjaxSearch_Request();
			}
			else
			{
				AjaxSearch_SetResults( transport.responseText );
				AjaxSearch_EndRequest();
			}
		},
		onFailure: function()
		{
			AjaxSearch_SetResults( 'ошибка поиска' );
			AjaxSearch_EndRequest();
		}
	}
	);
	//***************************

	return true;
}

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

function AjaxSearch_OnChangeInput()
{
	AjaxSearch_ClearTimerBetweenChangesInput();
	AjaxSearch_SetTimerBetweenChangesInput();
	
	return true;
}

function AjaxSearch_OnFocusInput()
{
	//AjaxSearch_UnLockInput();
	AjaxSearch_HiddenBlockStatus();
	AjaxSearch_HiddenBlockResults();
	AjaxSearch_ClearTimerBetweenChangesInput();

	if( AjaxSearch_GetInputValue() != '' )
	AjaxSearch_Request( AjaxSearch_GetInputValue() );

	return true;
}

function AjaxSearch_OnBlurInput()
{
	var timer = setInterval( function(){

		clearInterval(timer);
	
		//AjaxSearch_UnLockInput();
		AjaxSearch_HiddenBlockStatus();
		AjaxSearch_HiddenBlockResults();
		AjaxSearch_ClearTimerBetweenChangesInput();
		
	} , 200 );
	
	return true;
}

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

function AjaxSearch_Initialize( id_input , 
								id_container_status_deactive , 
								id_container_status_active , 
								id_container_result , 
								url_server_script , 
								url_server_page , 
								interval_between_changes_input )
{
	//***************************
	ajax_search_id_input = id_input;
	ajax_search_id_container_status_deactive = id_container_status_deactive;
	ajax_search_id_container_status_active = id_container_status_active;
	ajax_search_id_container_result = id_container_result;
	//***************************

	//***************************
	ajax_search_url_server_script = url_server_script;
	ajax_search_url_server_page = url_server_page;
	//***************************

	//***************************
	ajax_search_interval_between_changes_input = interval_between_changes_input;
	//***************************
	
	//***************************
	//AjaxSearch_UnLockInput();
	AjaxSearch_HiddenBlockStatus();
	AjaxSearch_HiddenBlockResults();
	//***************************

	return true;
}

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

//-----------------------------------
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;
}
//-----------------------------------

// KEYBOARD BUTTON PRESS
//####################################################
function AjaxSearch_OnKeyboardButtonPress(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( AjaxSearch_GetResults() == '' )
		return false;
		//------------

		var obj_unselected = getElementsByClass( 'ajax_search_item' , $('ajax_search_container_result_center') , 'div' );
		var obj_selected = getElementsByClass( 'ajax_search_item_over' , $('ajax_search_container_result_center') , '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_container_result_center').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( AjaxSearch_GetResults() == '' )
		return false;
		//------------
		
		//------------
		var obj_unselected = getElementsByClass( 'ajax_search_item' , $('ajax_search_container_result_center') , 'div' );
		var obj_selected = getElementsByClass( 'ajax_search_item_over' , $('ajax_search_container_result_center') , '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_container_result_center').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_container_result).innerHTML == '' )
		{
			//------------
			if( $(ajax_search_id_input).value != '' )
			{
				top.location = ajax_search_url_server_page + '&search=' + $(ajax_search_id_input).value;
				return true;
			}
			//------------
		}
		else
		{
			//------------
			var items = $('ajax_search_container_result_center').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 != '' )
			{
				top.location = ajax_search_url_server_page + '&search=' + $(ajax_search_id_input).value;
				return true;
			}
			//------------
		}

		break;

	default:
		AjaxSearch_OnChangeInput();
		break;
	}
	//------------

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


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

function AjaxSearch_OnMouseOverResultItem( obj )
{
	if( AjaxSearch_GetResults() == '' )
	return false;
	
	//------------
	var items = $('ajax_search_container_result_center').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;
}

function AjaxSearch_OnMouseOutResultItem( obj )
{
	if( AjaxSearch_GetResults() == '' )
	return false;
	
	//------------
	var items = $('ajax_search_container_result_center').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;
}

function AjaxSearch_OnMouseClickResultItem( obj , link )
{
	if( AjaxSearch_GetResults() == '' )
	return false;

	top.location = link;
	return true;
}

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

function AjaxSearch_OnMouseClickButtonSearch()
{
	if( AjaxSearch_GetInputValue() != '' )
	{
		top.location = ajax_search_url_server_page + '&search=' + AjaxSearch_GetInputValue();
		return true;
	}
	return true;
}

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