/* 

	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 = "livesearch_single";
	
	// Text you want to set as a default value of your search field.
	var defaultText = "Blogsuche...";	
	
	// 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 = "Abmahnung, Abmahnungsmissbrauch, Abmahnwelle, Blog, Gegenabmahnung, Massenabmahnung, Anbieterkennzeichnung, Impressum, Telefonnummer, AGB, Allgemeine Geschäftsbedingungen, Vertragsschluss, Lieferpflicht, Anfechtung, Datenschutz, Datensicherheit, Scoring, Bonitätsprüfung, Cookies, IP-Adresse, E-Mail, Spam, Werbung, Europa, Politik, Informationspflichten, Fernabsatz, Pflichtangaben, Lieferzeit, Lieferung, Liefervorbehalt, Leistungsvorbehalt, Hinsendekosten, Rücksendekosten, Interview, Jugendschutz, Alterskontrolle, AVS, FSK, Markenrecht, Kennzeichenrecht, Urheberrecht, Marketing, Preis, Preisangabe, Preisirrtum, Preisanfechtung, Mehrwertsteuer, Netto, Zoll, Versandkosten, Rücksendung, Strafporto, Zahlung, Zahlungsart, Produktkennzeichnung, Energiekennzeichnung, Textilkennzeichnung, Verpackungsverordnung, Software, Shopsoftware, Sicherheit, Termine, Umfrage, Studie, Usability, Suchmaschine, Wettbewerbsrecht, Widerruf, Widerrufsbelehrung, Muster-Widerrufsbelehrung, Muster, Nichtbestehen, Erlöschen, Ausschluss, Widerrufsfrist, BMJ, Originalverpackung, Rückgabe, Rückgabebelehrung, Muster-Rückgabebelehrung, e-tail, e-tail GmbH, e-Bug, Christian Böhme, Newsletter, Gütesiegel, Zertifizierung, Audit, Download, Praxishandbuch, RSS, Optimierung, Grundlagenwissen, Angriffsszenarien, Angriffe, Cross-Site Scripting, CSS, Termin, Long Tail, Kreditkarte, B2B, B2C, Google, eBay, Auktion, ecommerce-forum, D21, Mail Order World, OMD, CeBIT, Messe, Internet World, Amtsgericht, EuGH, BGH, OLG Dresden, OLG Naumburg, OLG Thüringen, Brandenburgisches OLG, OLG Rostock, OLG Hamburg, OLG Bremen, Schleswig-Holsteinisches Oberlandesgericht, OLG Oldenburg, OLG Celle, OLG Braunschweig, OLG Düsseldorf, OLG Köln, OLG Koblenz, OLG Hamm, OLG Frankfurt a. M., Saarländisches Oberlandesgericht, Pfälzisches OLG, OLG Stuttgart, OLG Karlsruhe, Bayerisches Oberstes Landesgericht, OLG München, OLG Nürnberg, OLG Bamberg, Landgericht Dresden, Landgericht Halle, Landgericht Bautzen, Landgericht Görlitz, Landgericht Cottbus, Landgericht Leipzig, Landgericht Dessau, Landgericht Gera, Landgericht Zwickau, Landgericht Chemnitz, Landgericht Berlin, Kammergericht Berlin, Landgericht Potsdam, Landgericht Frankfurt/Oder, Landgericht Neuruppin, Landgericht Neubrandenburg, Landgericht Rostock, Landgericht Stralsund, Landgericht Schwerin, Landgericht Hamburg, Landgericht Lüneburg, Landgericht Stade, Landgericht Lübeck, Landgericht Kiel, Landgericht Flensburg, Landgericht Itzehoe, Landgericht Oldenburg, Landgericht Aurich, Landgericht Verden, Landgericht Bremen, Landgericht Hannover, Landgericht Hildesheim, Landgericht Bückeburg, Landgericht Detmold, Landgericht Paderborn, Landgericht Bielefeld, Landgericht Kassel, Landgericht Marburg, Landgericht Gießen, Landgericht Fulda, Landgericht Göttingen, Landgericht Braunschweig, Landgericht Magdeburg, Landgericht Stendal, Landgericht Düsseldorf, Landgericht Mönchengladbach, Landgericht Wuppertal, Landgericht Dortmund, Landgericht Bochum, Landgericht Essen, Landgericht Duisburg, Landgericht Kleve, Landgericht Krefeld, Landgericht Münster, Landgericht Osnabrück, Landgericht Köln, Landgericht Aachen, Landgericht Bonn, Landgericht Trier, Landgericht Mainz, Landgericht Kreuznach, Landgericht Bad Kreuznach, Landgericht Koblenz, Landgericht Siegen, Landgericht Hagen, Landgericht Arnsberg, Landgericht Frankfurt am Main, Landgericht Hanau, Landgericht Aschaffenburg, Landgericht Darmstadt, Landgericht Wiesbaden, Landgericht Limburg, Landgericht Saarbrücken, Landgericht Zweibrücken, Landgericht Frankenthal, Landgericht Kaiserslautern, Landgericht Mannheim, Landgericht Heidelberg, Landgericht Stuttgart, Landgericht Hechingen, Landgericht Ellwangen, Landgericht Heilbronn, Landgericht Mosbach, Landgericht Karlsruhe, Landgericht Baden-Baden, Landgericht Landau, Landgericht Offenburg, Landgericht Konstanz, Landgericht Rottweil, Landgericht Freiburg, Landgericht Waldshut-Tiengen, Landgericht München I, Landgericht München II, Landgericht Traunstein, Landgericht Landshut, Landgericht Ingolstadt, Landgericht Augsburg, Landgericht Kempten, Landgericht Memmingen, Landgericht Ravensburg, Landgericht Ulm, Landgericht Nürnberg-Fürth, Landgericht Ansbach, Landgericht Amberg, Landgericht Weiden, Landgericht Regensburg, Landgericht Passau, Landgericht Deggendorf, Landgericht Hof, Landgericht Bayreuth, Landgericht Bamberg, Landgericht Coburg, Landgericht Würzburg, Landgericht Schweinfurt, Landgericht Meiningen, Landgericht Erfurt, Landgericht Mühlhausen, amazon, Produktvideo, Produktvideos, Video, Videos, Web 2.0, Wikipedia, Shop, Händler, Online-Shop, Live-Shopping, Woot.com, Presse, Neue Muster-Widerrufsbelehrung, SEO, SMO, Online-Fair-Trade, iPhone, SEM, AdWords, Magento, Oxid, Strato, ePages, Zertifikat, Web Controlling, etracker, Widerrufsmuster, xt:commerce, Verpackung, VerpackV"; 
	
	// 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);


