/* 

	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 = "Let og du skal finne...";	
	
	// 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, 4''' kammerlader, 45-70, Adobe Walls, Alexander Forsyth, Alexander Henry, Allin, aluminium, ammunisjon, anslagsenergi, antikk, Ardesa, Armi Sport, Army, Army Colt, artilleri, artillerikarabin, Atlanta Cutlery, avtrekk, bajonett, baklader, balg, Ballistol, Belgia, Berdan, Bertram, Billy Dixon, Birmingham, bivoks, Black Powder Gold, blackpowder express, blyforbud, blyhagl, blykule, bok, boltrifle, Bookout, bore butter, borgerkrig, Broad Arrow, Brown Bess, brunere, brunering, buckshot, Buffalo Arms, Burton, byggesett, C. Sharps, Carl Gustav, CCI, Charleville, Chassepot, Christian Sharps, Colt, comanche, Creedmoor, Death Wind, delfiafett, die-set, diesett, dioptersikte, dispensasjon, Dreyse, duellpistol, Remington & Sons, Enfield, Enfield-Martini, enkeltskudd, Erskine S. Allin, ervervstillatelse, fallblokk, Federal, fengkrutt, fengpanne, fettkake, fettlapp, FFFFg, FFFg, FFg, Fg, film, filtforladning, flammeherding, flint, forladning, framsikte, Friedrich von Martini, fuglelyder, fugleskyting, fyllstoff, Game Bore, grains, gram, granulering, Hagen, hagle, halvmeterskive, hane, hanehagle, Hanevik, Hans Larsen, Harald Sunde, Harpers Ferry, Hawken, Henry, herde, Hertzberg, hevarm, High Wall, hog rifle, Hornady, hubro, hullpipe, Husqvarna, hvalolje, hydroskopisk, hylselengde, hylsetrimmer, IAB, importtillatelse, infanteri, International Military Antiques, Isandlwana, Jacob Lund, jakt, jaktloven, Jarmann, jeger, jegerrifle, Jens Landmark, Jim Chambers, kaldpresse, kaliber, kalibrere, kalibreringspresse, kammerlader, kammerstykke, kanon, karabinpatron, Karl Egil Hanevik, kassepipe, kavaleri, Kentucky-pistol, Kentucky-rifle, kiowa, kjedeantenning, klikk, klikkpatron, klikningsstopper, kniv, kobberhylse, kolbekappe, komprimere, Kongsberg, korditt, korn, Krag, Krag-Petersson, krasser, krig, Krim-krigen, Krohnborg, Krupp, krutt, kruttflaske, kruttgass, krutthorn, kruttslam, kruttvekt, kuhorn, kulediameter, kulefett, kulestarter, kuletang, ladearm, ladedata, ladepresse, ladestokk, ladeutstyr, ladning, Landmark, langhold, langkule, langrifle, Large pistol, Large rifle, Lars Hansen Hagen, Larsen, Le Page, leddik, Lee Precision, Lefacheux, legering, Lehigh Valley Patch Lubricant, linjer, Little Big Horn, lokking, lommepistol, lommerevolver, London, lubrisizer, Lund, lunte, lyder, lydfiler, Lyman, Lyman 310 Tool, Lyman Old Style, magasin, magnumhetter, magnumtennhetter, Magtech, marine, marinekammerlader, Martini-Henry, matolje, Mauser, mekanisme, melkekartong, mellomladning, messing, messinghylse, metallpatron, mikrometer, mink, munning, munningspropp, munnlader, munnladningsrifle, muskedunder, musketthette, muskettskive, N.E.P, N.S., Nagant, Napoleon, Navy, Navy Colt, NEI Handtools, Nepal, nippel, NM, nominell, nominelt, norgesmesterskap, Norsk svartkruttunion, NSU, nuss, olivenolje, olje, oljeflaske, overdimensjonert, Ox Yoke, PPP, PPPP, pannedekkel, papirpatron, papirvikling, papphylse, Parker Hale, patch, patent, Paterson, patron, patronheis, patronrevolver, Paul Jones Creedmoor, Peabody, Peabody-Martini, Pedersoli, perkusjon, perkusjonsantenning, perkusjonsmuskett, perkusjonspistol, perkusjonsrevolver, perkusjonstennhette, Pietta, pin-fire, pipe, pipelengde, pistolgrep, pistolklubb, pistong, plast, plasthubro, plasthylse, presisjon, Pritchett, progressive depth rifling, pussefille, pussejag, pussestokk, pussing, Quigley, randtenning, randtent, ravn, RCBS, reim, reimfeste, rekyl, Remington, Remington New Army, repeterrifle, replika, restaurere, rev, RFG2, Richmond, rifledybde, riflemuskett, riflestigning, riflingsdiameter, Rogers, rolling block, Rorke's Drift, RSAF Enfield, Ruger Old Army, rundkule, rustbrunere, rustbrunering, RWS, rytterpistol, sabelbajonett, saltpeter, Samuel Colt, Scandinavian Western Shooters, semulegryn, senmiddelalderen, sentertenning, sentertent, Sharps,  Shiloh, shotmaker, sideligger, sikte, Siler, sioux, skarpskytter, skjefte, skuddavstand, skur, skyte, skyteforme, skyteforming, skytereim, skytestokk, skyting, skytterlag, skytterlagskammerlader, slark, slipepasta, slug, slugge, sluttstykke, smeltepunkt, snapp, snapphane, Snider, soldat, Southern Mountain-rifle, soyaolje, SPG, spisskule, Springfield, Springfield Trapdoor, Starline, starter, Steve Bookout, Steve Brooks, stokkolje, studdel, svansskrue, svartkrutt, svartkrutt, svartkruttpatron, svartkruttskyting, sveitser, sveitserkrutt, Sverige, svovel, SWS, sylinderboring, talg, Tamisiers prosjektil, tang, tangdiopter, tapprifle, tappstusser, telefonkatalog, Tennessee-rifle, tennhette, tennhull, tennstempelrifle, tennstift, Thompson Center, tinn, Toad Hall Rifleshop, tomhylse, Tong tool, Tower, Track of the Wolf, trangboring, trekull, trykkarm, Uberti, ugle, underdimensjonert, underhammer, US Sharpshooters, utdrager, utgangshastighet, vannbad, varhake, vinkellamell, vismut, Walker, Wano, White Lightning Touchole Liner, Winchester, Whitworth, Wredes, 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);

