/* 

	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 = ". . . as in artist name, title, or keyword";	
	
	// 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 = "Values, News, Music, Street life, Performance, Disaster, Uncensored, Hollywood film, Mass Media, Memory, Authority, Gender, Ecofantasy, Freedom, Control, Self, Other, Playful, Serious, Systems, Chaos, Spirit, Body, Remix, Migratory, Rooted, Transgender, Somewhere, Nowhere, Real, Fake, Sound, Silence, Denial, Alarm, Activism, Narrative, Documentary, Animation, Hybrid Forms, Internet Art, Body Genre,Janice ABO Ganis,Florencia Acevedo,Danielle Adair,Akosua Adoma Owusu,Arenas Adriana,Miles Ake,Rahne Alexander,Brooke Alfaro,Can Altay,Stephen Anderson,Richard Ankrom,Fernando Arias,Matilda Aslizadeh,Said Atabekov,Nancy Atakan,Lou Auguste,Alinah Azadeh,Lior Bar,Perry Bard,Dario Bardic,David Barker,Eliza Barrios,Enid Baxter Blader,Tommy Becker,Laurel Beckman,Noel Belknap,Abdellatif Benfaidoul,Francisca Benitez,Caitlin Berrigan,Berry Bickle,Alan Bigelow,Janet Biggs,Beth Bird,Blu Blu,Göran Boardy,Aaron Bocanegra,Mark Boswell,Aaron Bourget,Jaco Bouwer,Robert Brecevic,Reginald Brooks,Sheldon Brown,Matthew Bryant,Yvonne Buchanan,BULLMILETIC BULLMILETIC,Andres Burbano,Kathrin Burmester,Xtine Burrough,Jeff Cain,Rachel Calder,Elkin Calderon,Claudio Caldini,Luis Campos,Inês Cardoso,Jose Carlos Teixeira,Blake Carrington,Bruno de Carvalho,Alex Cecchetti,Juan Cespedes,Lynne Chan,Millie Chen,The Chiapas Media Project,Wen-Yao Chuang,Claude Chuzel,Xiuwen Ciu,Jane Cottis,Steve Craig,Dorit Cypis,Peter d'Agostino,Paolo Davanzo,John Davis,Micheal Dee,Wilson Diaz,Bill Domonkos,Barbara Doser,Eva Drangsholt,George Drivas,Jeremy Drummond,James Duesing,Monica Duncan,Huberto Duque,Natalya Dyu,Santiago Echeverry,Nabawia El-Soudani,William Basinski & Elaine James,Marianna Ellenberg,Paul Emmanuel,Edgar Endress,Dario Escobar,,Kristina Faragher,Mike Faulkner D-Fuse,Trevor Fife,John Muse Finley,Jeanne C,Jim Finn,Allison Foust,Broderick Fox,Rafael Franca,Coop Free the Land,Juan Devis Freewaves TV Pilot,Gerard Freixes Ribera,Lauren Gabriele,Stuart Gaffney,Nina Galanternick,Corina Gamma,Bia Gayotto,Matthew Gebhardt,Janie Geiser,Ger Ger,Rajorshi Ghosh,Alla Girik,Harvey Goldman,Nan Gonzales,Martha Gorzycki,Todd Gray,Brenda Jean Grell,Zig Gron,Sabine Gruffat,Nathan Gulick,Vu Thu Ha,Jason Hagen,Jeronimo Hagerman,Terry Haines,Michelle Handelman,Kara Hearn,Alexander Heim,Jerry Henry,Simon Hernandez,Juan Fernando Herran,Mary Magsamen & Hillerbrand Stephan,Elyse Hochstadt,Edgar Honetschlager,Peter Horvath,Emre Huner,Su-Chen Hung,Xavi Hurtado,Dusan Ivanovic,Tyler Jacobsen,Roman Jaster,Zhi Jiang,Maria Rosa,Jijon Calderon,Margarita Jimeno,Carolyn Kane,Armen Kanian,Jared Katsiane,Melody Kellis,Kiyong Kim,Barbara Klutinis,Bryan Konefsky,Wago Kreider,Greg Kucera,Gil Kuno,Kelvin Kyung Kun Park,Robert Ladislas Derr,Carol LaFayette,Ryan Lamb,Kent Lambert,Luke Lamborn,Ane Lan,Annmarie Lanesey,Diego Lascano,Jessica Lawless,Margaret Lazarri,Felix Lazo,Jesse Lerner,Les Leveque,Ivan Limas,Carrie Lincourt,Lindsay Ljungkull,Laura Lo Forti,Yongfeng Ma,Brian MacDonald,Norman Magden,Mary Magsamen,Sabine Maier,Bonita Makuch,Zen Marie,Matilde Marin,Daniel Martinico,Sam Mascari,Miwa Matreyek,Magda Matwiejew,Aileen McCormack,Ted Fisher & McCulloh Doug,Dan Taulapapa McMullin,Monali Meher,Lucila Meirelles,Erbosyn Meldibekov,Cesar Meneghetti,Sherry Miller,Avi Mograbi,Marco Montiel-Soto,Patricia Moran,Melinda Morey,Lydia Moyer,Oscar Muñoz,Dorcas Evelyn Muller,Hillary Mushkin,Lisa Na Macias Red Bear,Kayo Nakamura,Tadashi Nakamura,Ricardo Nascimento,Mario Navarro,Agnes Nedregard,Neil Needleman,Neutral Neutral,NomIg NomIg,Danial Nord,Mark O'Connell,Micaela O'Herlihy,Chris Oakley,Tomas Ochoa,Nela Ochoa,Rika Ohara,Ann Oren,Suzanne Oshinsky,Szacsva y Pal,Hsin-Ping Pan,Irena Paskali,Kelly Pendergrast,Joseph Peragine,Sebastien Pesot,Calvin Phelps,Bundith Phunsombatlert,Tenzin Phuntsog,Roland Poet X,Jennifer Porter,Stuart Pound,Peter Prautzsch,Mikael Prey,Fetish 23,Luka Princic,Ruth Pringle,Seth Pringle,Zhijie Qiu,Peter Bo Rappmund,Jose Alejandro Restrepo,Mahmoud Reza Sani,Felipe Ribeiro,Sal Ricalde,John Richey,Macarena Rivas,Alex Rivera,Autumn Rooney,William Roper,Rachel Rosalen,Liz Rosenfeld,Nina Rota,Jethro Rothe-Kushel,Lynne Sachs,Alejandro Saenz,Machiko Saito,Eric Saks,Carlos Salazar,Jacqueline Salloum,Mike Salmond,Lorena Salome,Keith Sanborn,Eder Santos,Brooke Sauer,Adam Sauermilch,Kelly Sears,Ben Shaffer,Guli Silberstein,Susan Silton,Pascual Sisto,Eric Chi Man Siu,Karolina Sobecka,Jeff Spohn,Jenny Stark,Alex Stikich,Dmitry Dima Strakovsky,David Sukup,Dennis Summers,Ruth Szold Stern,Misato Tachibana,Pilvi Takala,Ann Taneko,Graciela Taquini,Paul Tarrago,Paul Tarrago,Jennet Thomas,Myriam Thyes,Moira Tierney,Shana Torok,Eileen Torpey,Tobias Tovera,Kerry Tribe,Carlos Trilnik,Andreas Troeger,Virginia Valdes,Aaron Valdez,Tereza Velikova,Lisa Vinebaum,Martins Virbulis,Sonja Vuk,Emily Wagner,Brian Walker,Mark Aerial Waller,Angie Waller,Gongxin Wang,Jianwei Wang,Liu Wei,Josh Weinstein,Miranda Whall,Brooke White,Angela Willcocks,Steven Wong,Simon Woolham,Frank Wu,Chie Yamayoshi,Bree Yenalavitch,Erika Yeomans,Jonathan Zalben,Jody Zellen,Aryn Zev,Yang Zhenzhong,Jason Zimmerman,Ellen Zweig,Violence"; 
	
	// 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);


