var ajaxInProcess = false

XHR = function(method, url, updateId, params, fastShow) {	
	
	ajaxInProcess = true
	
	//document.getElementById(updateId).style.display="none";
	//$('#'+updateId).fadeOut("fast");
	xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	 try {
	  xmlhttp = new ActiveXObject("Msxml2.xmlhttp");
	 } catch (e) {
	  try {
	   xmlhttp = new ActiveXObject("Microsoft.xmlhttp");
	  } catch (E) {
	   xmlhttp = false;
	  }
	 }
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}
	if (!xmlhttp && window.createRequest) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}	
	//$('#'+updateId).fadeOut();			
	xmlhttp.open(method,url,true);	
	xmlhttp.onreadystatechange = function() {		
		if (xmlhttp.readyState==4) {	
			document.getElementById(updateId).style.display="none";
			//$('#'+updateId).fadeOut("fast");
			document.getElementById(updateId).innerHTML = xmlhttp.responseText;		
			if (fastShow) {
				if (document.getElementById(updateId).innerHTML)
					document.getElementById(updateId).style.display="block";
			}
			else
				$('#'+updateId).fadeIn("slow");	
			
			ajaxInProcess = false
		}
	}
	if (params!=='undefined') {
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-Length",url.length);
	}
	else
		params = 'null';
	xmlhttp.send(params);
	//$('#'+updateId).fadeIn("slow");	
	
}

// СТЕКОВЫЙ АЯКС
var xmlhttp = false;
// Пул аякс запросов
var ajaxPool = Array();

// Индикатор того, что запрос находится в роцессе обработки
var activeRequest = 0;

function getXMLHttpRequest() {
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	 try {
	  xmlhttp = new ActiveXObject("Msxml2.xmlhttp");
	 } catch (e) {
	  try {
	   xmlhttp = new ActiveXObject("Microsoft.xmlhttp");
	  } catch (E) {
	   xmlhttp = false;
	  }
	 }
	@end @*/
	
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}
	if (!xmlhttp && window.createRequest) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}

		
	return xmlhttp
}

function Ajax(method, url, callback, params) {	

	var requestParams = {
		'method':method, 
		'url':url,
		'params':params, 
		'callback':callback
		};

	// Добавляем данные запроса в пул	
	ajaxPool.push(requestParams)
		
	
	if (!activeRequest)
		AjaxSendRequest();		
			
	return false
	
} 

function AjaxSendRequest() {

	activeRequest = 1		
	
	poolLength = ajaxPool.length 

	if (ajaxPool.length == 0) {
		activeRequest = 0
		return;
	}

	var response = '';

	if (!xmlhttp) xmlhttp = getXMLHttpRequest();	

	currR = ajaxPool.shift()
	
	// Убираем запросы, с одинаковым коллбеком, и вызываем последний запрос
	for (i=0; i<poolLength-1; i++) {
		if (ajaxPool[i].callback == currR.callback) {
			currR = ajaxPool.shift()
			i--
			poolLength--
		}
	}
	
	xmlhttp.open(currR.method, currR.url, true);	
	
	if (currR.params!=='undefined') {
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	}
	else
		currR.params = 'null';
		
	xmlhttp.send(currR.params);		
	
	xmlhttp.onreadystatechange = function() {		
		if (xmlhttp.readyState==4) {	
			if(xmlhttp.status == 200) { 
				if (currR.callback) {
					var curr = '';
					
					curr = document.getElementById(currR.callback);
					curr.innerHTML = xmlhttp.responseText;
					if (xmlhttp.responseText) {
						curr.style.display = 'block';
					}
					else {
						curr.style.display = 'none';
					}
					//currR.callback(xmlhttp.responseText);				
				}
			}
		}
	}
	
	setTimeout(function() {
		AjaxSendRequest();
	}, 1000);
	
}
// СТЕКОВЫЙ АЯКС конец

function addEvent(object, eventType, functionCallback) {
	// Добавляем обработчик нажатия клавиш
	if (object.addEventListener) { 
		object.addEventListener(eventType, functionCallback, false);
	}
	else if (object.attachEvent) { 
		object.attachEvent('on'+eventType, functionCallback);
	}
}

var search_tooltips = function() {
	 
	var currItemNumber = -1;
	var isSelectingTtip = false;
	
	var ttip_block = '';
	var searchtext_block = '';

	
	
	
	return {
		
		init: function(search_tooltip_block, searchtext) {
			
			if (!search_tooltip_block) search_tooltip_block = 'search_tooltip_block';
			if (!searchtext) searchtext = 'searchtext';
			
			ttip_block = document.getElementById(search_tooltip_block);
			searchtext_block = document.getElementById(searchtext);
			
			addEvent(searchtext_block, 'keydown', this.onKeyDown);										
			addEvent(document, 'click', this.onClick);
			
		},
		
		getToolTip: function(search_text) {													
						
			if (isSelectingTtip) return false;
			
			currItemNumber = -1;							
						
			Ajax('POST', '/ajax_call.php', 'search_tooltip_block', 'module=search_tooltips&search_text='+search_text);														
						
		},
		
		onKeyDown: function(event) {						
						
			var tooltips = ttip_block.getElementsByTagName('LI');
		
			if (!tooltips) return false;
		
			for (var i=0; i<tooltips.length; i++) {
				tooltips[i].className = '';
			}						
			
			if (event.keyCode == 38) {		
				currItemNumber--;
				if (currItemNumber<0) currItemNumber = tooltips.length-1;							
				//alert(currItemNumber);
			}
			else if (event.keyCode == 40) {
				currItemNumber++;
				if (currItemNumber>=tooltips.length) currItemNumber = 0;				
				//alert(currItemNumber);
			}
			else {
				currItemNumber = -1;
				isSelectingTtip = false;
			}
			
			if (event.keyCode == 38 || event.keyCode == 40) {
				if (!tooltips[currItemNumber]) return false;				
				isSelectingTtip = true;
				tooltips[currItemNumber].className = 'bg';
				search_tooltips.pasteTooltip(tooltips[currItemNumber], true);
			}
			
			
			
		},
			
		onClick: function() {						
			ttip_block.style.display = 'none';
		},
			
		pasteTooltip: function(element, notCloseTtip) {								
			searchtext_block.value = element.innerHTML.replace(/<\/?[^>]+>/gi, '');
			searchtext_block.focus();
			
			if (!notCloseTtip)
				ttip_block.style.display = 'none';
			
		}
	}
	
}();

var search_tooltips2 = function() {
	 
	var currItemNumber = -1;
	var isSelectingTtip = false;
	
	var ttip_block = '';
	var searchtext_block = '';
	var quick_categories = '';
	var selectedItemId = '';
	
	
	
	return {
		
		init: function(search_tooltip_block, searchtext) {
			
			if (!search_tooltip_block) search_tooltip_block = 'search_tooltip_block';
			if (!searchtext) searchtext = 'searchtext';						
						
			
			ttip_block = document.getElementById(search_tooltip_block);
			searchtext_block = document.getElementById(searchtext);			
			quick_categories = document.getElementById('quick_categories_list');
			selectedItemId = document.getElementById('selectedItemId');
			
			addEvent(searchtext_block, 'keydown', this.onKeyDown);										
			addEvent(document, 'click', this.onClick);
			
		},
		
		getToolTip: function(search_text) {							
			
						
			
	
			if (isSelectingTtip) return false;
			
			currItemNumber = -1;							
						
			Ajax('POST', '/ajax_call.php', 'nav-info', 'module=search_tooltips&search_text='+search_text+'&sect_id='+quick_categories.value);														
						
		},
		
		onKeyDown: function(event) {						
						
			var tooltips = ttip_block.getElementsByTagName('LI');
		
			if (!tooltips) return false;
		
			for (var i=0; i<tooltips.length; i++) {
				tooltips[i].className = '';
			}						
			
			if (event.keyCode == 38) {		
				currItemNumber--;
				if (currItemNumber<0) currItemNumber = tooltips.length-1;							
				//alert(currItemNumber);
			}
			else if (event.keyCode == 40) {
				currItemNumber++;
				if (currItemNumber>=tooltips.length) currItemNumber = 0;				
				//alert(currItemNumber);
			}
			else {
				currItemNumber = -1;
				isSelectingTtip = false;
			}
			
			if (event.keyCode == 38 || event.keyCode == 40) {
				if (!tooltips[currItemNumber]) return false;				
				isSelectingTtip = true;
				tooltips[currItemNumber].className = 'bg';
				selectedItemId.value = tooltips[currItemNumber].id;
				search_tooltips2.pasteTooltip(tooltips[currItemNumber], true);
			}
			
			if (event.keyCode == 13) {
				goToItemDetailPage();
			}						
			
			
		},
			
		onClick: function() {						
			ttip_block.style.display = 'none';
		},
			
		pasteTooltip: function(element, notCloseTtip) {								
			searchtext_block.value = element.innerHTML.replace(/<\/?[^>]+>/gi, '');
			searchtext_block.focus();
			
			if (!notCloseTtip)
				ttip_block.style.display = 'none';
			
		},
			
		clearValues : function() {
			selectedItemId.value = '';
			searchtext_block.value = '';
		}
	}
	
}();