var req = null;
/**********************************/
var ie=document.all
var ns6=document.getElementById && !document.all
var selectedIndex=0;

function SuggestList(oTextbox) { 
    this.layer = null;
	this.textbox = oTextbox;
	this.init();
	}

function ietruebody(){
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function typeAheadListDisplay(myObj){	
		//==========================================
		// Width
		//==========================================
		typeAheadWidth 	= 260;
		typeAheadLeft 	= 100 //myObj.getLeft();
		
		typeAheadRight 	= 100 //typeAheadLeft + typeAheadWidth;
	
	
		//============================================================================================================
		
			
		//var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
		//var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
		var curX=100;
		var curY=100;
		
		//Find out how close the mouse is to the corner of the window
		var winwidth=ie&&!window.opera? ietruebody().clientWidth-16 : window.innerWidth-20
		var winheight=ie&&!window.opera? ietruebody().clientHeight-16 : window.innerHeight-20
		
		//var rightedge=ie&&!window.opera? winwidth-event.clientX : winwidth-e.clientX-offsetfromcursorX
		//var bottomedge=ie&&!window.opera? winheight-event.clientY : winheight-e.clientY-offsetfromcursorY
		var rightedge=100;
		var bottomedge=100;
		
		// calculate window scrolling
		var scrollLeft = (window.pageXOffset)?(window.pageXOffset):(document.body)?document.body.scrollLeft:document.documentElement.scrollLeft;
		typeAheadLeft = typeAheadLeft - scrollLeft
	//	alert (typeAheadRight)
		//==========================================
		// Positioning
		//==========================================
	
		myObj.selectList.style.width = typeAheadWidth;
		
		/*
		if (winwidth > typeAheadRight){
		    myObj.selectList.style.left = typeAheadLeft + "px";
		}else{	
			temp = winwidth - typeAheadWidth + scrollLeft;
		   myObj.selectList.style.left = temp + "px";
		}
	

		*/
		//myObj.selectList.style.top = (ns6)? "0px" : myObj.getTop()+myObj.textbox.offsetHeight + "px";
		 //   myObj.selectList.className="navigation";
		//============================================================================================================
	
		return myObj;
}

//	alert (oEvent.srcElement.name)


SuggestList.prototype.init = function() { 
	var oThis = this;
    
	EventUtils.addEventListener(this.textbox, "keyup", this.handleKeyUp);
	EventUtils.addEventListener(this.textbox, "blur", 	this.handleBlur);
	//EventUtils.addEventListener(this.textbox, "focus", 	this.handleFocus);
	this.selectList = document.createElement('div');
	this.selectList.id = "suggestionList";
	this.textbox.parentNode.appendChild(this.selectList);

	myObj = typeAheadListDisplay (this)		

	this.textbox.suggestList = myObj;
	this.selectList.suggestList = myObj;
}

SuggestList.prototype.hide = function() { 
	this.selectList.style.display = "none";
}
SuggestList.prototype.show = function() { 
	this.selectList.style.display = "block";
}

SuggestList.prototype.handleBlur = function(oEvent)	 {
   	var textBox = EventUtils.getTarget(oEvent);
   	var suggestList = textBox.suggestList;
	
	//suggestList.doSelection();

	if (doHideFlag ){
		suggestList.hide();
	}
}

SuggestList.prototype.handleFocus = function(oEvent)	 {
   	var textBox = EventUtils.getTarget(oEvent);
   	var suggestList = textBox.suggestList;
	
	if (document.getElementById("Text").value.length >= 3){
		suggestList.calculateSuggestions();
	}
}
	
SuggestList.prototype.handleKeyUp = function (oEvent) {
	
   	var textBox = EventUtils.getTarget(oEvent);
   	var suggestList = textBox.suggestList;
    var iKeyCode = oEvent.keyCode;
	

	 if ( document.getElementById("Text").value.length <= 0){
			suggestList.hide();		

	}else{
	     if (document.getElementById("Text").value.length < 3){
			suggestList.hide();		
		} else {
			
			// Backspace
			if ( iKeyCode == 8 ) { 
		    	suggestList.calculateSuggestions();
		
			// Space Bar
			} else if ( iKeyCode == 32 ) { 
		    	suggestList.calculateSuggestions();
				
		    // arrow down
			} else if ( iKeyCode == 40 ) { 
		    	suggestList.nextOption();
		
			// arrow up
		    } else if ( iKeyCode == 38 ) { 
		    	suggestList.previousOption();
		
			// enter
		    } else if ( iKeyCode == 13 ) { 
		    	suggestList.doSelection();
		    
			} else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
		       //ignore
		    } else {
		    	suggestList.calculateSuggestions();
			}
	    }
	}
};
SuggestList.prototype.nextOption = function() { //code changed by sriram as per requirement
    for (i=0;i<this.selectList.childNodes[0].childNodes[0].childNodes.length;i++)
    {
        if (selectedIndex==i)
        {
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.backgroundColor="#000080";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].className="typeahead1";
	    this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.color="#FFFFFF";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.color="#FFFFFF";
        }
        else
        {
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.backgroundColor="#ffffff";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].className="typeahead";
	    this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.color="#000080";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.color="#000080";
        }
    }
    selectedIndex++;
    if (selectedIndex>=this.selectList.childNodes[0].childNodes[0].childNodes.length)
    {
        selectedIndex=0;
    }
}

SuggestList.prototype.clearOption = function() { 

	if ( this.selectList.childNodes.length > 0 ) {
		
		if ( this.selectList.selectedIndex ) { 
			this.selectList.childNodes[this.selectList.selectedIndex - 1].className = "";
			this.selectList.selectedIndex = 0;
		} else { 
			this.selectList.selectedIndex = 1;
		}
		if ( ( this.selectList.selectedIndex ) > this.selectList.childNodes.length ) { 
			this.selectList.selectedIndex = 1;
		}
		//this.selectList.childNodes[this.selectList.selectedIndex - 1].className = "typeahead";
	}
}


SuggestList.prototype.previousOption = function() { //code changed by sriram as per requirement
    selectedIndex--;
    if (selectedIndex<0)
    {
        selectedIndex = this.selectList.childNodes[0].childNodes[0].childNodes.length-1;
    }
    for (i=0;i<this.selectList.childNodes[0].childNodes[0].childNodes.length;i++)
    {
        if (selectedIndex==i)
        {
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.backgroundColor="#000080";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].className="typeahead1";
	    this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.color="#FFFFFF";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.color="#FFFFFF";
        }
        else
        {
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.backgroundColor="#ffffff";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].className="typeahead";
	    this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.color="#000080";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.color="#000080";
        }
    }
}
SuggestList.prototype.doSelection = function() { 
	if ( this.selectList.selectedIndex ) { 
		document.location.href = this.selectList.childNodes[this.selectList.selectedIndex - 1].selectUrl;
		//alert("You selected " + this.selectList.childNodes[this.selectList.selectedIndex - 1].selectUrl);
	}
}
SuggestList.prototype.calculateSuggestions = function() { 
	var currentValue = this.textbox.value;

	var currentSuggestionsSize = this.selectList.childNodes.length;
	while ( this.selectList.childNodes.length > 0 ) { 
		this.selectList.removeChild(this.selectList.childNodes[0]);
	}

	if ( req ) { 
		req.abort();
	}
	// Original code is commented out - RK
	//var url = "/search/SuggestionsProvider.asp?wildcard=true&max=5&keywords=" + escape(currentValue);
	// Added the following Line for webservice url - RK
	var sRegion = readCookie("Region");//document.getElementById("hdnRegion").value;
	var sLocale = readCookie("LanguageCode");//document.getElementById("hdnLocale").value;
	var sLocationURL = "/Products/ProductOverviews/ProductSearch/index.htm";//document.getElementById("hdnLocationURL").value;
	var sControllerPage = "/Products/ProductOverviews/ProductSearch/index.htm";//document.getElementById("hdnControllerPage").value;
	//var url = "http://webapp1-dev:90/Panduit_WS16/pw_product.asmx/GetLookAhead?strRegion="+sRegion+"&strLocale="+sLocale+"&strLocationURL="+sLocationURL+"&strControllerPage="+sControllerPage+"&strKeywords=" +  escape(currentValue);

	if(!sRegion)
	{
		sRegion = "USA"
	}

	if(!sLocale)
	{
		sLocale = "EN"
	}

	var url = "/stellent/idcplg?IdcService=EXECUTE_PRODUCTSERVICE&webServiceMethodName=GetLookAhead&strRegion="+sRegion+"&strLocale="+sLocale+"&strLocationURL="+sLocationURL+"&strControllerPage="+sControllerPage+"&strKeywords=" +  escape(currentValue);
	// branch for native XMLHttpRequest object
	
	
	if (window.XMLHttpRequest && !window.ActiveXObject) {

			req = new XMLHttpRequest();
			req.open("GET", url, true);
			req.onreadystatechange = updateSuggestions;
			req.send(null);//alert("one");

			
	// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {

			req = new ActiveXObject("Microsoft.XMLHTTP");

			if (req) {
					req.open("GET", url, true);
					req.onreadystatechange = updateSuggestions;
					req.send(null);//alert("two");
			}
			else{
				req = new ActiveXObject("MSXML2.XMLHTTP");
					req.open("GET", url, true);
					req.onreadystatechange = updateSuggestions;
					req.send(null);//alert("two");
			}
	} 

}
function updateSuggestions(event) {
	try { 
			var suggestList = document.getElementById("Text").suggestList;
			var searchBox =  document.getElementById("Text");

		if (req.readyState == 4 && req.status == 200 && (document.getElementById("Text").value.length >= 3) && (document.getElementById("Text").value.length <= 15)) {
		    // code added by sriram
		   // var objSoapResponse = req.responseXML;
		    //var objXMLData = "";
		    //if (ie)
		    //{
		     //   var objSoapEnvelopNode = objSoapResponse.selectSingleNode("//pc_bl_ResponseEnvelope//ResponseHTML/text()");
			//    objXMLData = objSoapEnvelopNode.nodeValue;
		    //}
		    //else
		    //{
		      //  var response = objSoapResponse.documentElement;
			//    var objXMLData = response.getElementsByTagName("ResponseHTML")[0].childNodes[0].nodeValue;
			//}alert(objXMLData);
			//objXMLData = objXMLData.substring(objXMLData.indexOf("<div"));
		objXMLData = "testing";
		objXMLData = req.responseText;
		objXMLData = objXMLData.substring(objXMLData.indexOf("?>")+2);
		objXMLData = objXMLData.replace(/&amp;x28;/g,"(");
		objXMLData = objXMLData.replace(/&amp;x29;/g,")");
	        var option = document.createElement('div');
	        option.innerHTML = objXMLData;//alert(objXMLData);
	        suggestList.selectList.appendChild(option);
		    EventUtils.addEventListener(option, "mouseover", processOptionEvent);
		    EventUtils.addEventListener(option, "mouseout", processOptionEvent);
		    EventUtils.addEventListener(option, "click", processOptionEvent);if(objXMLData.length>100){
	        suggestList.show();} selectedIndex=0;
		for (i=0;i<this.selectList.childNodes[0].childNodes[0].childNodes.length;i++)
    {
        if (selectedIndex==i)
        {
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.backgroundColor="#000080";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].className="typeahead1";
	    this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.color="#FFFFFF";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.color="#FFFFFF";
        }
        else
        {
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.backgroundColor="#ffffff";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].className="typeahead";
	    this.selectList.childNodes[0].childNodes[0].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.color="#000080";
            this.selectList.childNodes[0].childNodes[0].childNodes[i].style.color="#000080";
        }
    }
		    //document.getElementById("divInfo").innerHTML = objXMLData;
		    //end code added by sriram
		   /* //code commented by sriram
		    var objSoapResponse = req.responseXML;
		    // Read the XML data from SOAP Envelop
			var objSoapEnvelopNode = objSoapResponse.selectSingleNode("//pc_bl_ResponseEnvelope//ResponseHTML/text()");
			var objXMLData = objSoapEnvelopNode.nodeValue;
			
			var objXml= new ActiveXObject("Microsoft.XmlDom");
			objXml.loadXML(objXMLData);
			var results =objXml.getElementsByTagName("result");
		//End of code added -RK
			for ( var i = 0; i < results.length; i++ ) { 
				var label = results.item(i).attributes.getNamedItem("label").value;
                
				var option = document.createElement('div');
				option.innerHTML = label;
				option.indexValue = ( i + 1 );
				option.selectUrl = results.item(i).attributes.getNamedItem("url").value;
				suggestList.selectList.appendChild(option);
				
				// Event Handlers
				EventUtils.addEventListener(option, "mouseover", processOptionEvent);
				EventUtils.addEventListener(option, "mouseout", processOptionEvent);
				EventUtils.addEventListener(option, "click", processOptionEvent);
	
			}
			if ( suggestList.selectList.childNodes.length > 0 ) { 
				suggestList.show();
			}
	    //end code commented by sriram*/
		req = null;
		}else {
			suggestList.hide();
		}
	} catch(exc) { 
		// Do nothing
	}
}
function processOptionEvent(e) { 
	var suggestList = document.getElementById("Text").suggestList;

	var option = EventUtils.getTarget(e);
	var optionIndex = option.indexValue;
	if (option.parentNode.selectedIndex){
		if ( e.type == "mouseover" ) { 
			option.parentNode.selectedIndex = optionIndex;
			option.className = "typeahead";
		} else if ( e.type == "mouseout" ) { 
			option.className = "";
			option.parentNode.selectedIndex = 0;		
		} else if ( e.type == "click" ) { 
			option.parentNode.selectedIndex = optionIndex;
			option.parentNode.suggestList.doSelection();
		}
	}
}

//==================================================
// Scott T code for positioning
//==================================================
SuggestList.prototype.getLeft = function () {

    var oNode = this.textbox;
    var iLeft = 0;
	
    
    while(oNode.tagName != "HTML")	{
        iLeft += oNode.offsetLeft;
        oNode = oNode.offsetParent; 
    }

    return iLeft;
};
SuggestList.prototype.getTop = function () {

    var oNode = this.textbox;
    var iTop = 0;
    iTop += oNode.offsetTop;
    
    /*while(oNode.tagName != "HTML") {
        iTop += oNode.offsetTop;
        alert(oNode.tagName + " : " + iTop);
	oNode = oNode.offsetParent; 
	
    }*/

    return iTop;
};
//==================================================
//==================================================


/** Functions to wrap event handling, to make it more easily cross-browser. **/

function EventUtils() {
	throw 'RuntimeException: EventUtils is a static utility class ' +
		' and may not be instantiated';
}

EventUtils.addEventListener = function (target,type,callback,captures) {
	if (target.addEventListener) {
		// EOMB
		target.addEventListener(type,callback,captures);
	} else if (target.attachEvent) {
		// IE
		target.attachEvent('on'+type,callback,captures);
	} else {
		// IE 5 Mac and some others
		target['on'+type] = callback;
	}
}

EventUtils.getTarget = function(e) { 
	var targ;
	if (e.target) 
		targ = e.target;
	else if (e.srcElement) 
		targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;			
	return targ;
}