var TXS_search_box_obj = false;
var TXS_search_div = false;
var TXS_ss = 0;
var XD_allow_hide_suggest_box= true;
var XD_keyword = "";
var XD_suggestions;
var TXS_is_searching = false;

function LTrim( value ) {
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}

function RTrim( value ) {
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}

function TXS_trim( value ) {
	return LTrim(RTrim(value));
}

function TXS_funcAddEvent(obj, event, func) {
	if (obj.addEventListener) {
		obj.addEventListener(event, func, false);
	} else if (obj.attachEvent) {
		obj.attachEvent("on"+event, func);
	}
}

function XD_funcObjectPosition(obj) {
	var curleft = 0;
	var curtop = 0;
	var height = obj.offsetHeight;
		
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop+height];
}

function TXS_funcShowLoadingIcon() {

	//TXS_search_box_obj.setAttribute('style', "background-image:url('"+txs_skin_dir+"/modules/Predictive_Search/search-loader.gif'); background-repeat:no-repeat; background-position:right top;");
	TXS_is_searching = true;
	 
}

function TXS_funcHideLoadingIcon() {
		
	
	TXS_is_searching = false;
}


function XD_funcSuggestSearch(e) {
	var xd_data = new Array();
	var keyword = "";
	
	
	xd_data['xd_type'] = "ajax";
	xd_data['xd_keyword'] = TXS_search_box_obj.value;
	keyword = TXS_trim(xd_data['xd_keyword']);

	
	if (keyword == "") {
		XD_allow_hide_suggest_box = true;
		XD_funcHideSuggestBox(e);
		XD_keyword = "";
		
		return false;
	}
	
	if (XD_keyword == keyword) {
		return false;
	}
	
	XD_keyword = TXS_trim(TXS_search_box_obj.value);
	TXS_funcShowLoadingIcon();
	
	JsHttpRequest.query(
		'txs_ajax_ps.php',
		xd_data,
		function (result, error) {
				
			TXS_ss = 0;
			TXS_search_div.style.display = "none";
			TXS_search_div.innerHTML = "";
			
			XD_suggestions = result['s'];
			var TXS_keyword = result['keyword'];
			var txs_already_hovered = false;
									
			if (XD_suggestions.length) {
								
				var s_ul  = document.createElement("ul");
								
				s_ul.setAttribute('class','XD_predictive_search');
				s_ul.className = "XD_predictive_search";
				
				for (var i = 0; i < XD_suggestions.length; i++) {
					var s_li = document.createElement("li");
					s_li.innerHTML = XD_suggestions[i]['html_keyword'];
					
					TXS_funcAddEvent(s_li, "mouseover", XD_funcHoverItem);
					TXS_funcAddEvent(s_li, "click", XD_funcSubmitKeyword);
					s_li.setAttribute('id', 'sli_'+(i+1));
					s_li.id = 'sli_'+(i+1);
					
					if (TXS_keyword == XD_suggestions[i]['keyword'] && !txs_already_hovered) {
						s_li.className = "XD_ps_hovered";
						TXS_ss = i+1;
						txs_already_hovered = true;
					}
					
					s_ul.appendChild(s_li);
				}
				
				var txs_box_title = document.createElement("div");
				
				txs_box_title.className = "TXS_predictive_search_title";
				txs_box_title.innerHTML = "Search suggestions";
				TXS_search_div.appendChild(txs_box_title);
				
				TXS_search_div.appendChild(s_ul);
				
				var position = XD_funcObjectPosition(TXS_search_box_obj);
		
				TXS_funcHideLoadingIcon();
				
				TXS_search_div.style.display = "";
				
				TXS_search_div.style.top = position[1]+"px";
				TXS_search_div.style.left = position[0]+"px";
							
				TXS_search_div.style.width = "auto";	
				
				if (TXS_search_div.offsetWidth < TXS_search_box_obj.offsetWidth) {
					TXS_search_div.style.width = (TXS_search_box_obj.offsetWidth - 1)+"px";
				}
			
			} else {
				TXS_funcHideLoadingIcon();
			}
		}
	);	
}

function XD_funcHoverItem(e) {
	var id_str;
		
	if (!e) e = window.event;
	
	var element = false;
	do {
		if (!element) {
			e.target? element = e.target : element = e.srcElement; 
		}
		
		id_str = element.id;
		element = element.parentNode;
	} while (id_str == "");
	
	//e.target? id_str = e.target.id : id_str = e.srcElement.id;
	//alert(e.target.parentNode.tagName);
	
	if (id_str) {
		var id = id_str.match(/sli_(\d+)/)[1];
	
		if (TXS_ss > 0) {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','');
			document.getElementById("sli_"+TXS_ss).className = "";
		}
		
		document.getElementById("sli_"+id).setAttribute('class','XD_ps_hovered');
		document.getElementById("sli_"+id).className = "XD_ps_hovered";
		TXS_ss = parseInt(id);
	}
}

function XD_funcSubmitKeyword(e) {
	var id_str;
	
	if (!e) e = window.event;
	
	var element = false;
	do {
		if (!element) {
			e.target? element = e.target : element = e.srcElement; 
		}
		
		id_str = element.id;
		element = element.parentNode;
	} while (id_str == "");
		
	var id = id_str.match(/sli_(\d+)/)[1];
	
	TXS_search_box_obj.value = XD_suggestions[id - 1]['keyword'];
	
	if (TXS_funcSubmitForm()) {
		document.productsearchform.submit();
	}
}

function XD_funcInitSuggestions(e) {
	var evt = e || window.event;
	var key = evt.keyCode;
		
	if (key == 40 && XD_suggestions) {
		TXS_search_div.style.display = "";
		if (TXS_ss) {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','');
			document.getElementById("sli_"+TXS_ss).className = "";
		}
		TXS_ss++;
		if (TXS_ss > XD_suggestions.length) {
			TXS_ss--;
		}
		
		if (document.getElementById("sli_"+TXS_ss)) {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','XD_ps_hovered');
			document.getElementById("sli_"+TXS_ss).className = "XD_ps_hovered";
			TXS_search_box_obj.value = XD_suggestions[TXS_ss - 1]['keyword'];
		}
		
	} else if (key == 38  && XD_suggestions) {
		if (TXS_ss) {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','');
			document.getElementById("sli_"+TXS_ss).className = "";
		}
		TXS_ss--;
		if (TXS_ss < 1) {
			TXS_search_box_obj.value = XD_keyword;
			TXS_ss = 0;
			TXS_search_div.style.display = "none";
		} else {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','XD_ps_hovered');
			document.getElementById("sli_"+TXS_ss).className = "XD_ps_hovered";
			TXS_search_box_obj.value = XD_suggestions[TXS_ss - 1]['keyword'];
		}
	} else if (key == 13 && XD_suggestions) {
		//document.productsearchform.submit();
	} else if (key == 27 && XD_suggestions) {
		if (TXS_ss) {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','');
			document.getElementById("sli_"+TXS_ss).className = "";
		}
		TXS_search_box_obj.value = XD_keyword;
		TXS_ss = 0;
		//XD_suggestions = false;
		TXS_search_div.style.display = "none";
		window.setTimeout("XD_funcSearchFocus()", 100);
	} else {
		window.setTimeout("XD_funcSuggestSearch()", 100);
	}
}

function XD_funcSearchFocus() {
	TXS_search_box_obj.focus();
}

function XD_funcHideSuggestBox(e) {
	if (TXS_search_div.style.display == "" && XD_allow_hide_suggest_box) {
		TXS_search_div.style.display = "none";
		XD_allow_hide_suggest_box = false;
		XD_suggestions = false;
		
		if (TXS_ss) {
			document.getElementById("sli_"+TXS_ss).setAttribute('class','');
			document.getElementById("sli_"+TXS_ss).className = "";
		}
		TXS_ss = 0;
	}
}

function XD_funcOnSuggestBox(e) {
	XD_allow_hide_suggest_box = false;	
}

function XD_funcOutSuggestBox(e) {
	XD_allow_hide_suggest_box = true;
}


function TXS_funcSubmitForm() {
	if (!TXS_is_searching) {
		if (XD_suggestions && XD_suggestions[TXS_ss - 1]) {
			if (XD_suggestions[TXS_ss - 1]['type'] == "U") {
				document.location = "txs_ajax_ps.php?mode=popularity&id="+XD_suggestions[TXS_ss - 1]['id']+"&type="+XD_suggestions[TXS_ss - 1]['s_type']+"&keyword="+XD_suggestions[TXS_ss - 1]['url_keyword'];
				
				return false;
			}
		}
			
		return true;
	} else {
		return false;
	}
}

function TXS_funcInitPredictiveSearch() {
	TXS_search_box_obj = document.getElementById('TXS_PS_search');
		
	if (TXS_search_box_obj) {
		TXS_search_div  = document.createElement("div");
				
		var ps_input  = document.createElement("input");
		ps_input.setAttribute('type','hidden');
		ps_input.setAttribute('name','txs_ps_mode');
		ps_input.setAttribute('value','Y');
				
		
		TXS_search_div.className = "XD_predictive_search_box";
		TXS_search_div.setAttribute('style','display:none;');
		
		TXS_funcAddEvent(TXS_search_box_obj, 'keydown', XD_funcInitSuggestions);
			
		TXS_funcAddEvent(TXS_search_div, 'mouseout', XD_funcOutSuggestBox);
		TXS_funcAddEvent(TXS_search_div, 'mouseover', XD_funcOnSuggestBox);
		
		TXS_funcAddEvent(TXS_search_box_obj, 'mouseout', XD_funcOutSuggestBox);
		TXS_funcAddEvent(TXS_search_box_obj, 'mouseover', XD_funcOnSuggestBox);
		
		document.body.appendChild(TXS_search_div);
		document.onclick = XD_funcHideSuggestBox;
	}
}


function addTXSLoadEvent(func) {

  var oldonload = window.onload;

  if (typeof window.onload != 'function') {

    window.onload = func;

  } else {

    window.onload = function() {

      oldonload();

      func();

    }

  }

}
addTXSLoadEvent(TXS_funcInitPredictiveSearch);
