/***************************************************************************/
/* Автоподсказки ***********************************************************/
/***************************************************************************/
var idTab = 1;

var acSetup = {
	timerAC: null,
	hotkey: false,
	maskSearch: "",
	isac: true,
	arrAcEmpty: [],
	searchInput: document.getElementById("searchStr"),
	searchButton: document.getElementById("buttSearch")
};

function getMiliSeconds(){
	return SG.getMiliSeconds();
}

// навешиваем обработку на изменение строки поиска
$(document).ready(function(){
	$("#searchStr").bind("keyup", function(e){
		autocompleteSearch(e,idTab);
	});
	
});


// для совместимости с Системой КОПИРУЕМ ВЕСЬ КОД ВНИЗУ из main.js
// ТОЛЬКО ЗАМЕНЯЕМ DivSet[getTabIndexByPubDivID(idTab)] на acSetup

// закрыть окно автоподсказки
function closeAC(idTab){
	$("#ac"+idTab).hide();
	clearTimeout(acSetup.timerAC);
	acSetup.timerAC = null;
	//acSetup.isac = false;
}

// поискать пример из подсказок
function setValueFromAC(idTab,acStr){
	acSetup.searchInput.value = acStr;
	acSetup.searchButton.click();
	$("#ac"+idTab).hide();
}

// обработчик нажатия клавиши в строке поиска
function autocompleteSearch(e,idTab){
	//alert(e.keyCode);
	var tab = acSetup;
	var srchInput = acSetup.searchInput;
	var KEY = {UP: 38, DOWN: 40, ENTER: 13};
	
	// если включен автозаполнение
	if(acSetup.isac){

		var isActiveTr = $("#ac"+idTab+ " table tr").hasClass("selectExample");
		var activeTr = $("#ac"+idTab+ " table tr.selectExample");
		
		// навигируем по подсказкам, по умолчания подгружаем подсказки
		switch(e.keyCode){
			case KEY.UP:
				clearTimeout(acSetup.timerAC);
				acSetup.timerAC = null;
				acSetup.hotkey =  true;
				// 2-й - n-й раз вверх
				if($("#ac"+idTab).is(":visible")){
					if(isActiveTr){
						activeTr.prev().addClass("selectExample");
						activeTr.removeClass("selectExample");
						
						if($("#ac"+idTab+ " table tr").hasClass("selectExample")){
							srchInput.value = $("#ac"+idTab+" table tr.selectExample td:eq(0)  .forSrchInput").text();
						}
						else{
							srchInput.value = acSetup.maskSearch;
						}
						
					}
				}
				break;
				
			case KEY.DOWN:
				clearTimeout(acSetup.timerAC);
				acSetup.timerAC = null;
				acSetup.hotkey =  true;
				// 2-й - n-й раз вниз
				if($("#ac"+idTab).is(":visible")){
					if(isActiveTr){
						activeTr.next().not(".tracclosing").addClass("selectExample");
						activeTr.removeClass("selectExample");
						if($("#ac"+idTab+ " table tr").hasClass("selectExample")){
							srchInput.value = $("#ac"+idTab+" table tr.selectExample td:eq(0)  .forSrchInput").text();
						}
						else{
							srchInput.value = acSetup.maskSearch;
						}
					}
					// 1-й раз вниз
					else{
						$("#ac"+idTab+" table tr:eq(0)").addClass("selectExample");
						srchInput.value = $("#ac"+idTab+" table tr:eq(0) td:eq(0)  .forSrchInput").text();
					}
				}
				break;
				
			case KEY.ENTER:
				acSetup.hotkey =  true;
				clearTimeout(acSetup.timerAC);
				acSetup.timerAC = null;
				break;
				
			default:
				acSetup.hotkey =  false;
				if(acSetup.timerAC == null){
					setTimerCheckAC(idTab);
				}
				break;
				
		}// конец switch

	}// конец if
	
}

// установка таймера на изменение поисковой строки
function setTimerCheckAC(idTab){
	clearTimeout(acSetup.timerAC);
	acSetup.timerAC = setTimeout("checkAC("+idTab+")",400);

	
}

// проверка поисковой строки: ничего не делаем, прячем подсказки, делаем запрос
function checkAC(idTab){
	//alert('проверка');
	var srchInput = acSetup.searchInput;
	var mask = $.trim(srchInput.value);
	//alert("mask = "+mask);
	if(acSetup.maskSearch != mask && !acSetup.hotkey){
		acSetup.maskSearch = mask;
		if(mask != ""){
			ajaxAc(idTab,mask);
		}
		else{
			var acCont = document.getElementById("ac"+idTab);
			acCont.style.display = "none";
			setTimerCheckAC(idTab);
		}
	}
	else{
		setTimerCheckAC(idTab);
	}
}

// запрашиваем подсказки
function ajaxAc(idTab,mask){
	// нужно ли искать дальше - может уже было 0 найденных
	var isSearch = true;
	for(var i=0;i<acSetup.arrAcEmpty.length;i++){
		if(mask.indexOf(acSetup.arrAcEmpty[i]) == 0){
			isSearch = false;
			break;
		}
	}
	var acCont = document.getElementById("ac"+idTab);

	if(isSearch){
		var reqAc = new AJAXInteraction('/ss-locator-html.aspx?pubdivid='+idTab+'&mask='+encodeURIComponent(mask)+'&x='+getMiliSeconds(), function() {
			
			var htmlexamples = arguments[0];
			//alert(htmlexamples);
			var idTab = arguments[1];
			if(htmlexamples == ""){
				acCont.style.display = "none";
				acSetup.arrAcEmpty[acSetup.arrAcEmpty.length] = mask;
			}
			else{
				acCont.style.display = "block";
				acCont.innerHTML = "<table><tbody>"+htmlexamples+"<tr class=\"tracclosing\"><td colspan=\"2\"><div class=\"ac-closing\"><span onclick=\"closeAC('"+idTab+"');\">закрыть</span></div></td></tr></tbody></table>";
			
			}
			$('.withLink span a').removeAttr('onclick');
			$('.withLink span a').bind('click', function(event){pbPorotocolRequest(event)});
			setTimerCheckAC(idTab);
		},idTab);
		reqAc.doGet();
	}
	// 0 найденных
	else{
		acCont.style.display = "none";
		setTimerCheckAC(idTab);
	}
}

	function pbPorotocolRequest(event)
	{
		var el = event.currentTarget || event.srcElement;
		var linkparams = $(el).attr('id').replace(/\_/gi, ";");
		//if ($.browser.msie) {
		var patt = /mod=([0-9]+);id=([0-9]+);anc=([a-zA-Z0-9]*)/g;
		var result=patt.exec(linkparams);
		window.location.assign('/nb.aspx#' + result[1] +',' + result[2] +',' + result[3]);
		//}
		//else {
		//window.location.assign('/nb.aspx#custom,application,' + linkparams +',pbPr,sgwin=top');
		//}
	}

// ajax-запрос для подсказок
function AJAXInteraction(url,callback,tabId) {
	var reqajax = initajax();
	reqajax.onreadystatechange = processRequest;

	function initajax() {
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
			} else if (window.ActiveXObject) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	function processRequest() {
		if (reqajax.readyState == 4) {
		if (reqajax.status == 200) {
		if (callback) callback(reqajax.responseText,tabId);
		}
		}
	}

	this.doGet = function() {
		reqajax.open("GET", url, true);
		reqajax.send(null);
	}

	this.doPost = function(body) {
		reqajax.open("POST", url, true);
		reqajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqajax.send(body);
	}
}

