	var last_request_id = 0;
	
	/**
	*
	*  Javascript trim, ltrim, rtrim
	*  http://www.webtoolkit.info/
	*
	**/
	 
	function trim(str, chars) 
	{
		return ltrim(rtrim(str, chars), chars);
	}
	 
	function ltrim(str, chars) 
	{
		chars = chars || "\\s";
		return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	}
	 
	function rtrim(str, chars) 
	{
		chars = chars || "\\s";
		return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
	}
	
	function checkSubmit(event)
	{
		if(event.keyCode == 13)			
		{
			getResults();
		}
		return true;
	}	
	
	function inputKeyUp(input_name, static, typein,event)
	{	
		if(event.keyCode != 38 && event.keyCode != 40)
		{
			process(input_name, static, typein,event.keyCode);
		}
	}
	
	function inputKeyDown(input_name, static, typein,event)
	{	
		if(event.keyCode==38||event.keyCode==40)
		{
			var input_full_name = input_name+(typein?'_input':'_select');			
			clearTimeout(document.getElementById(input_full_name).key_timer);
			document.getElementById(input_full_name).onkeypress = null;
			process(input_name, static, typein,event.keyCode);
			document.getElementById(input_full_name).key_timer = setTimeout("document.getElementById('"+input_full_name+"').onkeypress = 'inputKeyPress(\""+input_name+"\","+static+","+typein+",event);';",100);			
		}
	}
	
	function inputKeyPress(input_name, static, typein,event)
	{
		if(event.keyCode==38||event.keyCode==40)
		{
			process(input_name, static, typein,event.keyCode);						
		}		
	}
	 
	
	function process(input_name,static,typein,keynum)
	{  					
		var input_element_value = document.getElementById(input_name+'_input').value;
		
		var suffix = typein?'_input':'_select';
		var input_element = document.getElementById(input_name+suffix);
		var input_solutions = document.getElementById(input_name+'_solutions');
		switch(keynum)
		{			
		 	case 27:
		 		input_element.value = input_element.userInput; 			
		 		blur_selects();	 	
				return true;
				break;
			case 13:	
				var fl = input_solutions.style.visibility;  
				blur_selects();
				if(fl == 'hidden')	
				{
					getResults();
				}
				return true;
				break;
			case 38: //вверх
				if(input_solutions.style.visibility == 'visible')
				{
					var tIndex = input_element.solution-1;
					if(tIndex < -1)
					{
						tIndex = input_element.solutionCount-1;
					}
					if(tIndex > -1)
					{
						input_element.value = input_solutions.firstChild.firstChild.childNodes[tIndex].firstChild.innerHTML;						
					}
					else
					{
						input_element.value = input_element.userInput;
					}
					highlightSolution(input_solutions.firstChild.firstChild,input_name+suffix,tIndex);
				}
				break;				
			case 40: //вниз
				if(input_solutions.style.visibility == 'visible')
				{
					var tIndex = input_element.solution+1;
					if(tIndex == input_element.solutionCount)
					{
						tIndex = -1;
					}
					if(tIndex > -1)
					{
						input_element.value = input_solutions.firstChild.firstChild.childNodes[tIndex].firstChild.innerHTML;						
					}
					else
					{
						input_element.value = input_element.userInput;
					}
					highlightSolution(input_solutions.firstChild.firstChild,input_name+suffix,tIndex);
				}
				break;
			default:
				blur_selects();
				if(static)
				{
					last_request_id++;
					var my_request_id = last_request_id;
					
					var all_solutions = global_solutions[input_name];
					var solutions = [];			
					var tester = RegExp("^"+input_element_value,"i");	
					for(var i = 0; i < all_solutions.length; i++)
					{
						if(tester.test(all_solutions[i]))
						{
							solutions[solutions.length] = all_solutions[i];
						}
					}
					if(my_request_id == last_request_id)
					{
						place_solutions(input_name, solutions, typein);
					}
				}
				else
				{
					getSolutions(input_name,input_element_value,typein);
				}										
		}
		return true;
	}
	
	function highlightSolution(input_solutions,input_fullname,index)
	{
		var input_element = document.getElementById(input_fullname);
		
		if(input_element.solution != -1)
		{
			input_solutions.childNodes[document.getElementById(input_fullname).solution].style.backgroundColor = 'white';
		}
		if(index != -1)
		{
			input_solutions.childNodes[index].style.backgroundColor = '#B0D9F2';
			if(input_solutions.parentNode.parentNode.scrollTop > input_solutions.childNodes[index].offsetTop)
			{
				input_solutions.parentNode.parentNode.scrollTop = input_solutions.childNodes[index].offsetTop;
			}
			else if((input_solutions.parentNode.parentNode.scrollTop + input_solutions.parentNode.parentNode.clientHeight) < (input_solutions.childNodes[index].offsetTop + input_solutions.childNodes[index].offsetHeight))
			{
				input_solutions.parentNode.parentNode.scrollTop = input_solutions.childNodes[index].offsetTop + input_solutions.childNodes[index].offsetHeight - input_solutions.parentNode.parentNode.clientHeight; 
			}
		}
		input_element.solution = index;		
	}
	
	function place_solutions(input_name, solutions, typein)
	{
		var sol_table_HTML = '<table>';
		var form_control = (typein)?'_input':'_select';
		var input_element = document.getElementById(input_name+form_control);
		var input_solutions = document.getElementById(input_name+'_solutions');
		
		input_element.solution = -1;
		input_element.solutionCount = solutions.length;
		input_element.userInput = input_element.value;
		
		for(i = 0; i < solutions.length; i++)
		{		
			sol_table_HTML += '<tr onmouseover="highlightSolution(this.parentNode,\''+input_name+form_control+'\',this.rowIndex);return false;"><td onclick="document.getElementById(\''+input_name+form_control+'\').value = \''+solutions[i]+'\'; document.getElementById(\''+input_name+'_solutions\').style.visibility = \'hidden\';document.getElementById(\''+input_name+form_control+'\').focus();StopBubble(event);">'+solutions[i]+'</td></tr>';
			//onmouseout="this.style.backgroundColor = \'white\' ;return false;"
		}
		
		sol_table_HTML += '</table>';

		var ua = navigator.userAgent.toLowerCase();
		// Ii?aaaeei Internet Explorer
		var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1);
		
		if(isIE)
		{		
			input_solutions.style.width = document.getElementById(input_name+form_control).clientWidth+4;		
		}
		else
		{
			input_solutions.style.width = document.getElementById(input_name+form_control).clientWidth+2;
		}
		//input_solutions.style.width = '50px';
		input_solutions.innerHTML = sol_table_HTML;
		input_solutions.style.visibility = 'visible';
	}	
	
	function getSolutions(input_name, current_value, typein)
	{	
		last_request_id++;
		var my_request_id = last_request_id;		
		var target = [input_name, current_value];
		var basis = [];
		switch (input_name)
		{			
			case 'field5':
			case 'field4':
			case 'field3':
				if(document.getElementById('field2_input').value != '')
				{
					basis[basis.length] = ['field2',document.getElementById('field2_input').value];
				}
			case 'field2':
				if(document.getElementById('field1_input').value != '')
				{
					basis[basis.length] = ['field1',document.getElementById('field1_input').value];
				}
			default:
				JsHttpRequest.query('http://parts.japantrek.ru/backend.php', {action: 'getSolutions', params: {targetData: target, basisData: basis}},
			 	function(result, debugMessages) {
				 	if(my_request_id == last_request_id)
					{	
				  		if (result.status)
				  		{		 									
				  			place_solutions(input_name,result.solutions,typein);
						}
						else
						{
							alert(debugMessages);
						}
					}
				}, true
				)
				break			
		}
		return true;
	}
	
	function getResults(p)
	{	
		document.getElementById("results").innerHTML = '<center><img src="http://parts.japantrek.ru/images/loading.gif"></center>';
		
		var tmode = mode||'simple';
		last_request_id++;
		var my_request_id = last_request_id;
		p = p||1;
		var form_input = document.getElementsByTagName('input');
		var params = [];
		for(var i = 0; i< form_input.length; i++)
		{
			if(form_input[i].name != '')
			{
				var tester = /_input$|_select$/;
				if(tester.test(form_input[i].id)&&(form_input[i].value != ''))
				{
					params[params.length] = [form_input[i].name,form_input[i].value];
				}
			}
		}
		
		JsHttpRequest.query('http://parts.japantrek.ru/backend.php', {action: 'getResults', params: params, p: p, mode: tmode},
	 	function(result, debugMessages) {
	 		if(my_request_id == last_request_id)
			{
		  		if (result.status)
		  		{		 					
			  		document.getElementById("results").innerHTML = debugMessages;
				}
				else
				{
					document.getElementById("results").innerHTML = '';
					alert(debugMessages);
				}
			}
		}, true
		)
	}
	
	function showPhotos(lot_id, lot_location)
	{
		var img_div = document.getElementById('images_'+lot_id+'_'+lot_location);
		if(img_div.innerHTML != '')
		{
			img_div.style.display = (img_div.style.display == 'none')?'block':'none';
		}
		else
		{			
			JsHttpRequest.query('http://parts.japantrek.ru/backend.php', {action: 'getImages', barcode: lot_id, location: lot_location},
		 	function(result, debugMessages) {
		  		if (result.status)
		  		{		 					
			  		img_div.innerHTML = debugMessages;
			  		img_div.style.display = 'block';
				}
				else
				{
					alert(debugMessages);
				}
			}, true
			)
		}		
	}
	
	function blur_selects()
	{
		var solutions_divs = document.getElementsByTagName('div');
		for(var i = 0; i < solutions_divs.length; i++)
		{
			if(solutions_divs[i].className == 'dropdown_table')
			{
				solutions_divs[i].style.visibility = 'hidden';
			}
		}
	}
	
	function StopBubble(e)
	{
	    /* http://www.quirksmode.org/js/events_order.html */
	    if (!e)
	        e = window.event;
	
	    e.cancelBubble = true; /* Microsoft */
	    if (e.stopPropagation)
	        e.stopPropagation(); /* W3C */
	}	
	
	function PreSetSearch(preset)
	{
		document.getElementById('category_name_input').value = preset;
		document.getElementById('submit_button').click();
	}
	
	function ResetAll()
	{
		var inp_array = document.getElementsByTagName('input');
		for(var i = 0; i < inp_array.length; i++)
		{
			if(default_values[inp_array[i].id] !== undefined)
			{
				inp_array[i].value=default_values[inp_array[i].id];
			}
		}
	}
