﻿
var suggestAjaxRequestOngoing = false;

$j(function() {
	
	var searchInput = $j('#mastheadSearch').find('input');
	
	if (searchInput.length>0){
	    new $j.Avaya.SuggestSeach({input:searchInput,dataSource:'PredictiveSearch.aspx',left:-20,top:10});
	}
	
});

function searchSuggest() {
	if (!suggestAjaxRequestOngoing) {
        var userQuery = $j("#keyword")[0].value;
        
		if (userQuery.length > 0) {
			suggestAjaxRequestOngoing = true;
			$j.ajax({
				type:'GET',
				url:'/' + WEBPATH + '/PredictiveSearch.aspx',
				data:'query='+userQuery,
				//data:'SITE='+ document.forms['base'].site.value + '&query='+userQuery,
				//dataType: 'json',
				success: function(response){
					var r = response;
					r = r.replace(/\t/g,'');
					r = r.replace(/\n/g,'');
					r = r.replace(/\r/g,'');
					r = r.replace(/\n\r/g,'');
					var myobj = JSON.parse(r); 
                    r = myobj[1];
//					var r = response.responseText.evalJSON();

					if (r) {
						updateSuggestDiv(r);
					}
				},
				error:function(){
					suggestAjaxRequestOngoing = false;
				},
				complete: function(){
					suggestAjaxRequestOngoing = false;
				}
			});
		} else {
			$j("#suggestResults")[0].innerHTML='';
			$j("#suggestResults")[0].style.display = 'none';
			$j("#suggestResults").css({left: -10000});
			$j("#suggestResults").html("");
		}
	}
}

function updateSuggestDiv(suggestions) {

	var ss = $j("#suggestResults")[0];	
	$j("#suggestResults")[0].innerHTML='';
	var siteParam = document.forms['base'].site.value;
	var siteurl = document.forms['base'].action.value;
	var client = document.forms['base'].client.value;
	var proxystylesheet = document.forms['base'].proxystylesheet.value;
	
	var suggest = '';

	if (suggestions.length > 0) {
		suggest += '<ul>'
		for(i=0; i < suggestions.length; i++) {
		    //Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			suggest += '<li><a href="http://searchext.avaya.com/search?q=' + suggestions[i] + '&site=' + siteParam + '&btnG=Search&access=p&client=' + client + '&output=xml_no_dtd&proxystylesheet=' + proxystylesheet + '&oe=UTF-8&ie=UTF-8&ud=1&sort=date%3AD%3AL%3Ad1&exclude_apps=1' +'">'+suggestions[i]+'</a></li>';
		}
        
		$j("#suggestResults")[0].innerHTML=suggest;
		$j("#suggestResults")[0].style.display = 'block';
		$j("#suggestResults").css({left: 25});
	}
}

$j.Avaya.SuggestSeach = function(options) {
	var settings = $j.extend({
		timeoutLen : 300,
		dataSource: "",
		qs: "",
		input: "",
		offsetLeft:0,
		id: "suggestResults"
	}, options);

	var currentHREF = "";
	var timeout = null;
	var noBlur = false;
	var $s = settings.input;
	// $s.before('<div class="suggestList" id="'+settings.id+'"><ul><li><a href="javascript:void(0);">asdf</a></li></ul></div>');
	var $suggestList = $j("#" + settings.id);		
	
	hide();
	
	$j("a", $suggestList).live("mouseover", function(e) {
		noBlur = true;
		
		var target = $j(e.target);
		if(e.target.nodeName.toLowerCase() == "strong") {
			target = $j(e.target).parents("a");
		}
		$suggestList.find("li.active").removeClass("active");
		//alert($suggestList.find("li.active"));
		
		// target.addClass("active");
	});
	
	$j("a", $suggestList).live("mouseout", function(e) {
		noBlur = false;
		$suggestList.find("li.a").removeClass("active");
		//alert($suggestList.find("li.a.active"));
	});
	
	$s.blur(function(e) {
		if(!noBlur) {
			hide();		
		}
	});
	
	$s.click(function() {
		hide();				 
	});
	
	var active = null;
	$s.keydown(function(e) {
		if(e.keyCode == 13) {
			hide();
			if(currentHREF != "") {
				e.preventDefault(e);
			}
		}		  
	});
	
	$s.keyup(function(e) {
		var inpt = this;
			
		if(e.keyCode == 13) {
			hide();
			if(currentHREF != "") {
				document.location = currentHREF;
			}
		} else if(e.keyCode == 38 || e.keyCode == 40) {
			if(e.keyCode == 40) {
				if(active == null) {
				$suggestList.find("li:first").addClass("active");
				} else if(active != null) {
					active.removeClass("active");	
					var next = active.next("li");
					if(next.get(0) != null) {
						next.addClass("active");
					} else {
						$suggestList.find("li:first").addClass("active");
					}
				} 
			} else if(e.keyCode == 38) {
				if(active == null) {
				$suggestList.find("li:last").addClass("active");
				} else if(active != null) {
					active.removeClass("active");	
					var prev = active.prev("li");
					if(prev.get(0) != null) {
						prev.addClass("active");
					} else {
						$suggestList.find("li:last").addClass("active");
					}
				}
			} 
			
			active = $suggestList.find("li.active");
			
			if(active.get(0) != null) {
				setValue(active.find("a"), inpt);
			} else {
				active = null;	
			}
			
		} else if($j(inpt).val() == ""){
			clearTimeout(timeout);
			hide();
			
		} else {
			searchSuggest();
			clearTimeout(timeout);
			timeout = setTimeout(function() {

					active = null;
					
/*
					var term = $j(inpt).val();

					var resultList = "<ul>";
					for(var i in PRODUCTLIST) {
						if(i.toLowerCase().search(new RegExp("^" + term.toLowerCase())) != -1) {
							resultList += '<li><a href="'+PRODUCTLIST[i].url+'">' + highlightQuery(term, i) + '</a></li>';							
						}
					}
					
					resultList += "</ul>";
					if(resultList != "<ul></ul>") {
						$suggestList.html(resultList);
						show();
					} else {
						$suggestList.html("");
						currentHREF = "";
						hide();
					}
					active = null;
					*/
									
			}, settings.timeoutLen);	
			
		}
	});
	
	function setValue(target, inpt) {
		//$s.val("");
		$j(inpt).val("");
		
		var val = target.html();
		val = val.replace(/(<strong>)|(<STRONG>)/, "");
		val = val.replace(/(<\/strong>)|(<\/STRONG>)/, "");
		
		currentHREF = target.attr("href");
		//$s.val(val);
		$j(inpt).val(val);
	}
	
	function hide() {
		$j("#suggestResults")[0].innerHTML='';
		$j("#suggestResults")[0].style.display = 'none';
		$j("#suggestResults").css({left: -10000});
		$j("#suggestResults").html("");
		$suggestList.css({left: -10000});
		$suggestList.html("");
	}
		
	function show() {
		$suggestList.css({left: 25});
	}
	
	// highlights the querystring text (qs) in a particular result (val)
	function highlightQuery(qs, val) {
		var strng = qs;

		var splitty = strng.split("");
		var regexStrng = "(";
		for(var i=0; i<splitty.length; i++) {
			regexStrng += "[" + splitty[i].toLowerCase() + "|" + splitty[i].toUpperCase() + "]{1}[\\s]*";
		}
		regexStrng += ")";
		
		var regex = new RegExp(regexStrng);
		var searchTerm = val;
		
		return searchTerm.replace(regex, "<strong>$1</strong>");
	}	
}


