/* 

	SearchField 
	written by Alen Grakalic, provided by Css Globe (cssglobe.com)
	please visit http://cssglobe.com/post/1202/style-your-websites-search-field-with-jscss/ for more info
	
*/

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 = "searchfield";
	
	// Text you want to set as a default value of your search field.
	var defaultText = "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 = ".45 Colt, .45-110, .45-70 Government, .45-90, .50-70, 12 mm Remington, 12x42, 12x44, 1861 Springfield, 4''' kammerlader, 45-70, accuracy, action, Adobe Walls, Alexander Forsyth, Alexander Henry, Allin, alloy, aluminium, American longrifle, ammunition, antique, aqua fortis, Ardesa, Armi Sport, Army, Army Colt, artillery, artillery carbine, Atlanta Cutlery, Baker, ball diameter, Ballistol, barrel, barrel length, bayonet, beaver-tail tang, beeswax, Belgium, Berdan, Bertram, Billy Dixon, bird sounds, Birmingham, bismuth, black powder, black powder cartridge, black powder express, Black Powder Gold, black powder shooting, blade, blunderbuss, bolt action rifle, book, Bookout, bore, bore butter, bore diameter, brass, brass case, breech plug, breech-loader, breech-loading, Broad Arrow, broad arrow marking, brown, Brown Bess, browning, Brunswick, buckshot, Buffalo Arms, bullet diameter, bullet lube, bullet mould, Burton, butt plate, calibre, calling, cannon, carbine cartridge, cartouche, cartridge, cartridge revolver, case hardening, case trimmer, cavalry, centrefire, chainfire, chamber piece, charcoal, chevron style nose cap, civil war, cleaning, cleaning patch, cleaning rod, click, cock, coconut, compress, conical bullet, copper case, cordite, cow horn, Crimean war, cross stick, cylinder bore, Davis double set triggers, Death Wind, die set, distance, double boiler, dragoon pistol, Dreyse, duelling pistol, dull flints, eagle owl, Enfield, Enfield-Martini, Erskine S. Allin, extractor, falling block, Federal, felt wad, FFFFg, FFFg, FFg, Fg, filler, fireform, firing pin, flake, flash hole, flint, flintlock, forge, fouling, fox, French military, Friedrich von Martini, front sight, Game Bore, grains, gram, granulation, grease cookie, grease hole, grinding compound, groove, Hagen, hammer, hammer swage, Hanevik, Hans Larsen, Harald Sunde, harden, Harpers Ferry, Hawken, Henry, Hertzberg, High Wall, hog rifle, horizontal drift, Hornady, hunt, Husqvarna, IAB, infantry, inletting, International Military Antiques, Isandlwana, Jacob Lund, jaeger, jaeger rifle, jag, Jarmann, Jens Landmark, Jim Chambers, kammerlader, Karl Egil Hanevik, kassepipe, Kentucky pistol, Kentucky rifle, kinetic energy, Kiowa, knap, knife, Kongsberg, Krag, Krag-Petersson, Krohnborg, Krupp, Landmark, Large pistol, Large rifle, Lars Hansen Hagen, Larsen, late medieval ages, law, Le Page, lead ban, lead bullet, lead shot, Lee Precision, Lefacheux, Lehigh Valley Patch Lubricant, lever, linjer, linseed oil, Little Big Horn, load, loading data, loading lever, lock, London, long range, long rifle, lubricant, lubrisizer, Lund, Lyman, Lyman 310 Tool, Lyman Old Style, magazine, magnum primer, Magtech, maple, Martini-Henry, match, matchlock, Mauser, mechanism, melting point, metallic cartridge, micrometer, milk carton wad, mink, MLAIC, movie, multiple discharge, musket, musket cap, musketoon, muzzle, muzzle stopper, muzzleloader, muzzleloading rifle, N.E.P, N.S., Nagant, Napoleon, naval rifle, Navy, Navy, Navy Colt, NEI Handtools, Nepal, nipple, nominal, Nordic Championship, Norwegian Blackpowder Union, Norwegian championships, Norwegian Championships, nose cap, NSU, oil, oil bottle, olive oil, owl, Ox Yoke, P-1853, P-1856, P-1858, pan, pan cover, paper cartridge, paper hull, paper patch, Parker Hale, patch, patch, patch box, patent, Paterson, Paul Jones Creedmoor, Peabody, Peabody-Martini, Pedersoli, Pedersoli Mauser, peep sight, percussion, percussion cap, percussion musket, percussion pistol, percussion revolver, permit, phone book, Pietta, pillar breech rifle, pin-fire, pioneer, pistol grip, piston, plastic, plastic hull, plastic owl, pocket pistol, pocket revolver, powder, powder flask, powder gas, powder granule, powder residue, powder scale, PPP, PPPP, primer, priming powder, Pritchett, progressive depth rifling, Quigley, ramrod, raven, RCBS, RCBS/Hodgdon, recoil, reloading equipment, reloading press, Remington, Remington & Sons, Remington New Army, repeating rifle, replica, restore, RFG2, Richmond, rifled musket, rifle musket, rifling bench, rifling depth, rifling diameter, rifling twist, rimfire, Rogers, rolling block, Rorke's Drift, roundball, RSAF Enfield, Ruger Old Army, rust brown, RWS, sabre bayonet, safety catch, saltpetre, Samuel Colt, scabbard, Scandinavian Western Shooters, semolina, Sergeant's Rifle, Sharps, sharpshooter, Shiloh, shoot, shooting society, shotgun, shotmaker, side-by-side, sight, Siler, single shot, Sioux, size, sling, sling swivel, slug, smoothbore, snap cap, snaphaunce, Snider, soldier, sound files, Southern Mountain rifle, soybean oil, spent case, sperm oil, SPG, Springfield, Springfield Trapdoor, Starline, starter, starter, Steve Bookout, Steve Brooks, stock, stock oil, sulphur, swage, Sweden, Swiss, Swiss powder, SWS, T/C Bore Butter, tallow, Tamisier's projectile, tang, tang sight, tang sight, target sling, Tennessee rifle, tennstempelrifle, Thomas Turner, Thompson Center, tin, Toad Hall Rifleshop, Tong tool, Tower, Track of the Wolf, trigger, Uberti, UIT 50, underhammer, US Sharpshooters, velocity, wad, wadcutter, Walker, Wano, war, whale oil, White Lightning Touchole Liner, Whitworth, Winchester, Wredes, yataghan, Zouave, zulu"; 
	
	// END CONFIG (do not edit below this line, well unless you really, really want to change something :) )
	
	// Peace, 
	// Alen

	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);

