this.searchfield = function(){
	
	// CONFIG 
	
	// this is id of the search field you want to add this script to. 
	// You can use your own id just make sure that it matches the search field in your html file.
	var id = "tool";
	
	// Text you want to set as a default value of your search field.
	var defaultText = "Google search ...";	
	
	// set to either true or false
	// when set to true it will generate search suggestions list for search field based on content of variable below
	var suggestion = true;
	
	// static list of suggestion options, separated by comma
	// replace with your own
	var suggestionText = "amarok, amarok2, anjuta, alioth, addons, alsa, ati-driver, analytics, avatar, anti-alias, applet, autoresponder, big bang theory, bluetooth, blackbox, bind, backup, bandwidth, bitmap, blog, blogger, blogging, bookmark, broadband, browser, cache, convertor, currency, currency convertor, cached files, c, c++, c#, code, css, compiz, compiz debian, compiz lenny, compiz fusion, css, chatroom, chrome, client-side/server-side, cms, contextual menu, cookie, crawler, define: ,debian lenny, debian multimedia, debian forum, debian screenshots, debian vs ubuntu, debian download, debconf9, debconf, dolphin, dec to hex, default, deprecated, directory, div, dns, dns server, download, dynamic, etch, eclipse, exa, exa vs xaa, encryption, firmware, firefox, firefox 3.5, favicon.ico, ftp, ftp client, firewall, flow chart, fork, goodbye microsoft, gateway page, gnome, gnome 2.26 status, google, google adsense, google chrome, gnome vs kde, gimp, gcc, gtk+, howto, how to, hack, hackergotchi, hal, httpd, hex to decimal, hexadecimal colours, hits, host, hosting, html, it crowd, intel, iceweasel, iceweasel addons, inkscape, image map, include, iwl3945, iwl4965, ip address, ipv4, ipv6, java, javascript, jquery, jre, linux, lenny, live debian, live usb, live cd, lug, label, root, logfile analysis, lossless compression, lossy compression, module-init-tools, mono, mailing lists, mobile, mysql workbench, meta element, metadata, mp3, mysql, new maintainer guide, news debian, nvidia driver, open source, optimize, optimization, opt-in/opt-out, pidgin, postgres, proxy, postgresql, php, perl, postfix, python, phishing, pretty good privacy, pixel, plug-in, kde, kde alioth, kde 4, kde 4.3, kde vs gnome, kernel, kismet, konqueror, rsa, robot, robots file, robots.txt, rollover, disjointed rollover, reverse engineering, root, root directory, root link, scan, scanning, samba, scm, scp, server, sever-side/client-side, server-side include, sid, session, session tracking, shopping-cart, shortcut icon, ssitemap, sqlite, sqlite firefox, slashdot, sniffer, site: , spam, splash, splashy, screen, sticky, streaming, streaming media, structured query language, stylesheet, sitemaps, tags, tags/tagging, target, telnet, template, traffic, trackback, unix, unicode, uxa, uml, udev, user session, code standards, form input, virtualbox, vmware, validator, vim, vector, vector-based file, version control, virus,viri, visual, weather in , web, web 2.0, wordpress, wpa, web standards, webTV, wysiwyg, wireframe, w3 validator, wireless application protocol, wep, wep hacking, wallpapers, xaa, xaa vs exa, x300, xfce, xserver, xorg, xine, xml, xml schema, zend"; 
	
	// END CONFIG (do not edit below this line, well unless you really, really want to change something :) )

	var field = document.getElementById(id);	
	var classInactive = "sf_inactive";
	var classActive = "sf_active";
	var classText = "sf_text";
	var classSuggestion = "sf_suggestion";
	this.safari = ((parseInt(navigator.productSub)>=20020000)&&(navigator.vendor.indexOf("Apple Computer")!=-1));
	if(field && !safari){
		field.value = defaultText;
		field.c = field.className;		
		field.className = field.c + " " + classInactive;
		field.onfocus = function(){
			this.className = this.c + " "  + classActive;
			this.value = (this.value == "" || this.value == defaultText) ?  "" : this.value;
		};
		field.onblur = function(){
			this.className = (this.value != "" && this.value != defaultText) ? this.c + " " +  classText : this.c + " " +  classInactive;
			this.value = (this.value != "" && this.value != defaultText) ?  this.value : defaultText;
			clearList();
		};
		if (suggestion){
			
			var selectedIndex = 0;
						
			field.setAttribute("autocomplete", "off");
			var div = document.createElement("div");
			var list = document.createElement("ul");
			list.style.display = "none";
			div.className = classSuggestion;
			list.style.width = field.offsetWidth + "px";
			div.appendChild(list);
			field.parentNode.appendChild(div);	

			field.onkeypress = function(e){
				
				var key = getKeyCode(e);
		
				if(key == 13){ // enter
					selectList();
					selectedIndex = 0;
					return false;
				};	
			};
				
			field.onkeyup = function(e){
			
				var key = getKeyCode(e);
		
				switch(key){
				case 13:
					return false;
					break;			
				case 27:  // esc
					field.value = "";
					selectedIndex = 0;
					clearList();
					break;				
				case 38: // up
					navList("up");
					break;
				case 40: // down
					navList("down");		
					break;
				default:
					startList();			
					break;
				};
			};
			
			this.startList = function(){
				var arr = getListItems(field.value);
				if(field.value.length > 0){
					createList(arr);
				} else {
					clearList();
				};	
			};
			
			this.getListItems = function(value){
				var arr = new Array();
				var src = suggestionText;
				var src = src.replace(/, /g, ",");
				var arrSrc = src.split(",");
				for(i=0;i<arrSrc.length;i++){
					if(arrSrc[i].substring(0,value.length).toLowerCase() == value.toLowerCase()){
						arr.push(arrSrc[i]);
					};
				};				
				return arr;
			};
			
			this.createList = function(arr){				
				resetList();			
				if(arr.length > 0) {
					for(i=0;i<arr.length;i++){				
						li = document.createElement("li");
						a = document.createElement("a");
						a.href = "javascript:void(0);";
						a.i = i+1;
						a.innerHTML = arr[i];
						li.i = i+1;
						li.onmouseover = function(){
							navListItem(this.i);
						};
						a.onmousedown = function(){
							selectedIndex = this.i;
							selectList(this.i);		
							return false;
						};					
						li.appendChild(a);
						list.setAttribute("tabindex", "-1");
						list.appendChild(li);	
					};	
					list.style.display = "block";				
				} else {
					clearList();
				};
			};	
			
			this.resetList = function(){
				var li = list.getElementsByTagName("li");
				var len = li.length;
				for(var i=0;i<len;i++){
					list.removeChild(li[0]);
				};
			};
			
			this.navList = function(dir){			
				selectedIndex += (dir == "down") ? 1 : -1;
				li = list.getElementsByTagName("li");
				if (selectedIndex < 1) selectedIndex =  li.length;
				if (selectedIndex > li.length) selectedIndex =  1;
				navListItem(selectedIndex);
			};
			
			this.navListItem = function(index){	
				selectedIndex = index;
				li = list.getElementsByTagName("li");
				for(var i=0;i<li.length;i++){
					li[i].className = (i==(selectedIndex-1)) ? "selected" : "";
				};
			};
			
			this.selectList = function(){
				li = list.getElementsByTagName("li");	
				a = li[selectedIndex-1].getElementsByTagName("a")[0];
				field.value = a.innerHTML;
				clearList();
			};			
			
		};
	};
	
	this.clearList = function(){
		if(list){
			list.style.display = "none";
			selectedIndex = 0;
		};
	};		
	this.getKeyCode = function(e){
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		return code;
	};
	
};

// script initiates on page load. 

this.addEvent = function(obj,type,fn){
	if(obj.attachEvent){
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn](window.event );}
		obj.attachEvent('on'+type, obj[type+fn]);
	} else {
		obj.addEventListener(type,fn,false);
	};
};
addEvent(window,"load",searchfield);

