var WWW_ROOT="http://buildingsuppliesdirect.co.uk/";

function register_onload(f) {
var oldOnload = window.onload;
window.onload = function () {
if (typeof oldOnload == 'function') {
oldOnload();
}
f();
}
}

/*
register_onload(function CreateDebugDiv()
{
   var div = document.createElement('div');
   div.setAttribute('id', 'debugDiv');
   div.setAttribute('style', 'position:absolute;left:0;top:0;width:200px;border:1px red solid;background:#000;color:#fff;z-index:10000;');
   document.documentElement.appendChild(div);
});

function WD(str)
{
    document.getElementById('debugDiv').innerHTML += str + "<br />";
}
*/
function SuggestCache(suggest)
{
   this.obj=suggest;
   this.GetSuggest=GetSuggest;
   function GetSuggest()
   {
		return this.obj;
	}
}
function Suggest(inputElement,targetElement,serverSource,formToSubmit)
{
	this.objInput=null;
	this.automaticallySearch=true;
	this.objTarget=null;
	this.data=null;
	this.lastWord=null;
	this.inputElement=inputElement;
	this.targetElement=targetElement;
	this.serverSource=serverSource;
	this.formToSubmit=formToSubmit;
	this.ProcessInput=ProcessInput;
	this.ProcessKeyDown=ProcessKeyDown;
	this.SelectRow=SelectRow;
	this.GetEl=GetEl;
	this.KeyCode=KeyCode;
	this.init=init;
	this.cache=new SuggestCache(this);
	this.Highlight=Highlight;
	this.Hide=Hide;
	this.lastSelected=-1;
	this.lastWord = '';
	this.prev=-1;
	this.writing = false;
	this.init();
	
	function ProcessKeyDown(ev)
	{		
    var unicode=KeyCode(ev);    
		switch(unicode)
		{
			case 40:
				if(this.lastSelected<0)
				{
					this.Highlight('sgt_0');
					this.lastSelected=0;
				} else {
					this.prev=this.lastSelected;
					this.lastSelected+=1;
					this.Highlight('sgt_'+this.lastSelected);
				}
			break;
			case 38:
				if(this.lastSelected<0)
				{
					this.Highlight('sgt_0');
					this.lastSelected=0;
				} else {
					this.prev=this.lastSelected;
					this.lastSelected-=1;
					this.Highlight('sgt_'+this.lastSelected);
				}
			break;
			case 13:
				this.objInput.value=(window.ActiveXObject)
					? document.getElementById('sgt_'+this.lastSelected).innerText
					: document.getElementById('sgt_'+this.lastSelected).textContent;
			break;
			case 27:
				this.objTarget.style.display='none';
				this.lastSelected=-1;
			break;
		}
	}
	
	function Hide()
	{
		this.objTarget.style.display='none';
	}
	function Highlight(id)
	{
		var prev=document.getElementById('sgt_'+this.prev);
		if(prev)
			prev.setAttribute("class","xxx");
		var obj=document.getElementById(id);
		if(obj)
			obj.setAttribute("class","xxx selected");
		else
		{
			document.getElementById('sgt_0').setAttribute("class","xxx selected");
			this.lastSelected=0;
		}
	}
	function ProcessInput(ev)
	{
		var code=KeyCode(ev);
		var str=this.objInput.value;
		if(code==38||code==40||str==this.lasWord)
			return;
		
		this.lastSelected=-1;
		this.objTarget.style.display='none';
		
		if(str.length<=2)
		{
			this.objTarget.style.display='none';
			return;
		}
		
		//this.writing = true; 
		
		setTimeout('SetData()',1000)
	}

	function KeyCode(e)
	{
		if(e)
		{
			return e.charCode ? e.charCode : e.keyCode;
		} else {
			return window.event.charCode ? window.event.charCode : window.event.keyCode;
		}
	}
	function GetEl(id)
	{
		var el=document.getElementById(id);
		if(!el)
			alert("Element "+id+"does not exists");
		return el;
	}
	function init()
	{
		this.objInput=this.GetEl(this.inputElement);
		this.objTarget=this.GetEl(this.targetElement);
		this.objTarget.onmousedown=this.SelectRow;
		this.data=new GetData();
		this.formToSubmit=this.GetEl(formToSubmit);
	}
}

	function SetData()
	{		
    var s=cache.GetSuggest();
    
    if(s.objInput.value.length<=2)
       return;
       
    if (s.lastWord != '' && s.lastWord == s.objInput.value)
       return;       
    
    //WD("Trying to find " + s.objInput.value);
    
    //s.writing = true;
    var data = new GetData();
		var str = s.objInput.value;
    var result = data.GetDataAsString(WWW_ROOT+s.serverSource,"&main_search="+str);
		if(result!="")
		{		
  		s.objTarget.innerHTML=null;
  		s.objTarget.innerHTML=result;
  		s.objTarget.style.display='block';
		}
 
    s.lastWord =  s.objInput.value;
  }

function SelectRow(e)
{
	var s=cache.GetSuggest();
	var ie= (e==null);
	e = (e) ? e:window.event;
	var tg = (e.target) ? e.target : e.srcElement;
	if(tg)
		s.objInput.value= ie ? tg.innerText : tg.textContent;
	if (s.automaticallySearch)
		s.formToSubmit.submit();
}

function GetData()
{
	this.xmlControl=false;
	this.GetDataAsString=GetDataAsString;
	this.name="getDataObject";
	this.showLoad=false;
	this.loadElement="";
	this.status="";
	this.init();
	function GetDataAsString(url,urlVal)
	{
		try
		{
			if(!this.xmlControl)
			{alert("Sorry, you web browser does not support AJAX technology.");return;}

			if (this.xmlControl.readyState != 0) this.xmlControl.abort();
			
			this.xmlControl.open("POST",url,false);
			this.xmlControl.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			this.xmlControl.setRequestHeader('charset','utf-8');
			this.xmlControl.send(urlVal);
			this.status=this.xmlControl.status;
			
			if(this.status=="200")
			{
				var values=this.xmlControl.responseText;
				return values;
			} else {
				throw"Server error "+this.status;
			}
		}
		catch(e)
		{
			alert("Error while retrieving data:\n"+url+"\n"+e.toString()+"\n"+e.lineNumber+"\n"+e.message);
		}
	}
}
GetData.prototype.init=function()
{try
{this.xmlControl=new ActiveXObject("MSXML2.XMLHTTP");}
catch(exce)
{objectAlert(exce,this);}
if(!this.xmlControl)
{try
{this.xmlControl=new XMLHttpRequest();}
catch(exce)
{objectAlert(exce,this);}}}
function objectAlert(exce,object)
{return("Error in object \""+object.name+"\"\n"+exce.toString()+"\nline:"+exce.lineNumber);}
