

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 = "Введите слово для поиска";	
	
	// 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 = "Deonna, Glanvill, Simmel, Strzygowski, Абрагам, Абрамов, Абрамова, Абрамович, Августин, Августин Калмет, Аврелий Антонин, Аггеев, Агеев, Адрианова, Айвазов, Айналов, Айхенвальд, Аксаков, Александров, Алексеев, Алексий Виноградов, Алисов, Алмазов, Альбов, Амвросий, Амендола, Андреев, Анисимов, Анненский, Антоний, Аполлонская, Ардашев, Архангельский, Аскольдов, Астафьев, Бёмер, Бабынин, Балталон, Банзаров, Бантыш-Каменский, Барсков, Барсов, Бартольд, Батюшков, Бачинский, Баязитов, Беглери, Безобразов, Безобразова, Бейлин, Бекштрем, Белкин, Белый, Бельский, Белявский, Беляев, Бердников, Бердяев, Беркут, Бернштейн, Бертло, Бецольд, Билимович, Бильбасов, Бирюков, Бицилли, Благовидов, Блонский, Боборыкин, Бобров, Бобровский, Богданов, Богомолов, Богословский, Бодянский, Боковнев, Болдырев, Болотов, Болсуновский, Болтунов, Бонч-Бруевич, Борецкий-Бергфельд, Борисов, Борисович, Боровой, Бороздин, Боцяновский, Брандес, Брентано, Бронштейн, Брэдло, Брюллова-Шаскольская, Будде, Будрин, Бузескул, Булгаков, Булич, Бунин, Буслаев, Бутру, Буцинский, Буцке, Быков, Быстрекин, Вагнер, Вайцсеккер, Вальдгауер, Вальденберг, Вариско, Варлаам, Васильев, Васильевский, Васнецов, Введенский, Вебер, Вегеле, Венгеров, Вентцель, Вернадский, Верховской, Веселовский, Ветринский, Ветухов, Викторов, Викторова, Виллари, Вилькинс, Вильямс, Виндельбанд, Виноградов, Виппер, Висковатый, Витберг, Вишняков, Владиславлев, Волжский, Волошин, Вольтман, Воробьев, Воронов, Воронцова, Воскресенский, Востоков, Вульфиус, Высоцкий, Вышеславцев, Вяземский, Вязигин, Габрилович, Гавриил, Галич, Гальперин-Каминский, Гальтон, Гарнак, Гартман, Гассе, Гаусрат, Гейгер, Гене, Георгиевский, Гермоген, Герцберг, Герцль, Гершензон, Герье, Гессен, Геттэ, Геффдинг, Гехт, Гец, Гешин, Гиацинтов, Гиляров, Гиляров-Платонов, Гинцбург, Гиппиус, Гиргас, Глаголев, Гладкий, Глазунов, Глубоковский, Годлевский, Головкин, Голубев, Голубинский, Гольцапфель, Гольцев, Гомер, Гопиус, Гордлевский, Городенский, Городон, Городцев, Горохов, Грабарь, Гревс, Григорий Богослов, Григорий Двоеслов, Григорий Нисский, Григорьев, Гризингер, Гринберг, Гринейзен, Грифцов, Гроссман, Грот, Грузенберг, Грунский, Губер, Гуревич, Гурлянд, Гусев, Гуссерль, Гюйон, Дармакирти, Дебольский, Дейссен, Делекторский, Деннерт, Джавахов, Дживелегов, Джонстон, Диесперов, Диль, Диминский, Димитрий, Димитрий Ростовский, Дионисиев, Добиаш-Рождественская, Довнар-Запольский, Дружинин, Дубнов, Дубровин, Дьяконов, Евсевий Памфил, Езерский, Епифаний Кипрский, Ершов, Есипов, Ефименко, Жаботинский, Жданов, Жебар, Жебелев, Жирмунский, Житецкий, Зайцев, Зарин, Захаров, Зверев, Зеленогорский, Зелинский, Зеньковский, Зиммель, Змиев, Знаменский, Зосимовский, Зубарев, Иванов, Иванов Вяч, Иванов-Разумник, Ивановский, Иванцов, Иванцов-Платонов, Изгоев, Измайлович, Ильин, Ильинский, Иноевс, Иоанн, Иоанн Васильев, Иоанн Дамаскин, Иост, Иоэль, Исаак Сирин, Исаков, Ист, Истрин, Каблешков, Кавос-Дехтерева, Кагаров, Каленков, Каленов, Калугин, Калужский, Камаровский, Кант, Канторович, Каптерев, Кареев, Каренин, Каринский, Карнеев, Каро, Карпов, Карсавин, Карягин, Кауфман, Качановский, Квачала, Кедров, Кейль, Келлог, Кечекьян, Кибардин, Кизеветтер, Киреевский, Кирилл, Кириллов, Кирпичников, Кистяковский, Ключевский, Книжник, Кобеко, Ковалевский, Коган, Кодис, Кожевников, Козлов, Колосов, Колубовский, Комаровский, Коменский, Кон, Кондаков, Кони, Конисси, Конисский, Конради, Коральник, Корелин, Корнилов, Корсунский, Котляревский, Краинский, Красин, Краснов, Крашенинников, Кривощеков, Кронер, Кроче, Кубицкий, Кудрявцев, Кудрявцев-Платонов, Кузнецов, Кузьмин-Караваев, Кулаковский, Кулишер, Курганов, Куртц, Кустодиев, Кэрд, Лавелей, Лавров, Лавров-Платонов, Лавровский, Лаврский, Лазарев, Лакордер, Ландау, Ланц, Лапшин, Ласкин Гавр, Латышев, Лебедев, Левитов, Леже, Лесевич, Линицкий, Линник Гр, Лихачев, Лозинский, Локс, Лопарев, Лопарев Хр, Лопатин, Лопухин, Лосский, Лукач, Лукьянов, Луначарский, Луппов, Лурье, Лютардт, Лютославский, Лютостанский, Майков, Макарий, Маклаков, Маковельский, Максим Грек, Максимов, Малицкий, Мандельштам, Мансикка, Мансуров, Мануилов, Марголин, Марков, Марковников, Мартенсен, Мах, Машанов, Мейер, Мелиоранский, Мелис, Мельгунов, Мельников, Менделеев, Мензбир, Меньшиков, Мережковский, Метерлинк, Метнер, Миллер, Милль, Милюков, Минский, Митрофанов, Михайлов, Михайловский, Мишеев, Мищенко, Модестов, Мордухай-Болтовский, Морошкин, Мочульский, Мсерианц, Муравьев, Муратов, Муретов, Мюллер, Набоков, Навиль, Назарьевский, Наторп, Некрасов, Неплюев, Нечаев, Никольский, Новгородцев, Новицкий, Нуцубидзе, Оболенский, Огнев, Одинцов, Ольденбург, Ориген, Орлов, Орловский, Оршанский, Оствальд, Острогорский, Павел Алеппский, Павлов, Палецкий, Палладий, Панов, Панченко, Пападопуло-Керамевс, Параника, Первов, Перович, Петерсон, Петр Дамаскин, Петрово-Солово, Петровский, Пирсон, Писаревский, Погодин, Погорелов, Покровский, Поливанов, Политис, Половцева, Померанцев, Пономарев, Попов, Попруженко, Порфирьев, Посошков, Потемкин, Преображенский, Пришвин, Прокопович, Протопопов, Пругавин, Прыжов, Псевдо-Августин, Пузино, Пыпин, Радлов, Рамсден, Ранке, Рапопорт, Рачинский, Редин, Рескин, Ресницын, Риккерт, Рождественский, Рожков, Розанов, Романова, Ропшин, Рочко, Рубинштейн, Румер, Рычин, Рычков, Саблуков, Савваитов, Савин, Савич, Саводник, Самарин, Самуил, Сапир, Сапожников, Сахаров, Свенцицкий, Светлов, Святский, Сеземан, Селивачев, Селищев, Семека, Сербский, Сергий, Серебреников, Серебренников, Сеченов, Сильвестр, Симсон, Скабаланович, Скворцов, Слонимский, Смирнов, Смоленский, Соболев, Соболевский, Соколов, Соловейчик, Соловьев, Софронов, Спасович, Спасский, Спекторский, Сперанский, Срезневский, Стасов, Степпун, Стефани, Странден, Страхов, Струве, Студничка, Суворов, Сулержицкий, Суханов, Сухотин, Сырку, Сырцов, Тареев, Тарле, Тарханов, Теплов, Терешенков, Тертуллиан, Тибо, Тимирязев, Титлинов, Тихомиров, Токарский, Топинар, Трельч, Троицкий, Трубецкой, Туган-Барановский, Тумбюльт, Тураев, Уваров, Уманец, Умов, Успенский, Устрялов, Фаррар, Филарет, Философов, Фламмарион, Фортунатов, Фосслер, Фохт, Франк, Франс, Фриче, Хаджидакис, Харитонов, Харламов, Харлампович, Хвольсон, Хвостов, Хвостова, Хитрово, Хмелевский, Ходасевич, Холопов, Холчев, Хорошко, Хусид Эм, Цветаев, Церетели, Цертелев, Цольшан, Чамберлэн, Чебан, Челпанов, Чельцов, Чернов, Чиж, Чистович, Чичерин, Шайкевич, Шварц, Шеппинг, Шершеневич, Шестаков, Шестов, Шимкевич, Шишкин, Шкапский, Шляпкин, Шпет, Шпетт, Штанге, Штейнберг, Штрауберг, Шуази, Шульц, Щеглова, Щекотова, Щепкин, Щербатский, Щербина, Эдершейм, Эдинг, Эйгес, Энгельмейер, Энман, Эрн, Эртель, Эфрусси, Юзов, Юнгеров, Юрьев, Ягодинский, Яковенко, Янышев, Ярмерштедт, Яроцкий, Яхонтов"; 
	
	// 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);

