/* 

	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 = "Recherche";	
	
	// 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 = "Abeilhan, Adissan, Agde, Agel, Agonès, Aigne, Aigues-Vives, Les Aires, Alignan-du-Vent, Aniane, Arboras, Argelliers, Aspiran, Assas, Assignan, Aumelas, Aumes, Autignac, Avène, Azillanet, Babeau-Bouldoux, Baillargues, Balaruc-les-Bains, Balaruc-le-Vieux, Bassan, Beaufort, Beaulieu, Bédarieux, Bélarga, Berlou, Bessan, Béziers, Boisseron, Boisset, La Boissière, Le Bosc, Boujan-sur-Libron, Le Bousquet-d’Orb, Bouzigues, Brenas, Brignac, Brissac, Buzignargues, Cabrerolles, Cabrières, Cambon-et-Salvergues, Campagnan, Campagne, Camplong, Candillargues, Canet, Capestang, Carlencas-et-Levas, Cassagnoles, Castanet-le-Haut, Castelnau-de-Guers, Castelnau-le-Lez, Castries, La Caunette, Causse-de-la-Selle, Causses-et-Veyran, Caussiniojouls, Caux, Le Caylar, Cazedarnes, Cazevieille, Cazilhac, Cazouls-Hérault, Cazouls-les-Béziers, Cébazan, Ceilhes-et-Rocozels, Celles, Cers, Cessenon-sur-Orb, Cesseras, Ceyras, Clapiers, Claret, Colombières-sur-Orb, Colombiers, Combaillaux, Combes, Corneilhan, Coulobres, Courniou, Cournonsec, Cournonterral, Creissan, Le Crès, Le Cros, Cruzy, Dio-et-Valquières, Espondeilhan, Fabrègues, Faugères, Félines-Minervois, Ferrals-les-Montagnes, Ferrières-les-Verreries, Ferrières-Poussarou, Florensac, Fontanès, Fontès, Fos, Fouzilhon, Fozières, Fraisse-sur-Agout, Frontignan, Gabian, Galargues, Ganges, Garrigues, Gigean, Gignac, Gorniès, Grabels, Graissessac, La Grande-Motte, Guzargues, Hérépian, Jacou, Joncels, Jonquières, Juvignac, Lacoste, Lagamas, Lamalou-les-Bains, Lansargues, Laroque, Lattes, Laurens, Lauret, Lauroux, Lavalette, Lavérune, Lespignan, Lézignan-la-Cèbe, Liausson, Lieuran-Cabrières, Lieuran-les-Béziers, Lignan-sur-Orb, La Livinière, Lodève, Loupian, Lunas, Lunel, Lunel-Viel, Magalas, Maraussan, Margon, Marseillan, Marsillargues, Mas-de-Londres, Les Matelles, Mauguio, Maureilhan, Mérifons, Mèze, Minerve, Mireval, Mons, Montady, Montagnac, Montarnaud, Montaud, Montbazin, Montblanc, Montels, Montesquieu, Montferrier-sur-Lez, Montouliers, Montoulieu, Montpellier, Montpeyroux, Moulès-et-Baucels, Mourèze, Mudaison, Murles, Murviel-lès-Béziers, Murviel-lès-Montpellier, Nébian, Neffiès, Nézignan-l’Evêque, Nissan-lez-Enserune, Nizas, Notre-Dame-de-Londres, Octon, Olargues, Olmet-et-Villecun, Olonzac, Oupia, Pailhès, Palavas-les-Flots, Pardailhan, Paulhan, Pégairolles-de-Buèges, Pégairolles-de-l’Escalette, Péret, Pérols, Pézenas, Pézènes-les-Mines, Pierrerue, Pignan, Pinet, Plaissan, Les Plans, Poilhes, Pomérols, Popian, Portiragnes, Le Pouget, Poujols, Le Poujol-sur-Orb, Poussan, Pouzolles, Pouzols, Le Pradal, Prades-le-Lez, Prades-sur-Vernazobre, Prémian, Le Puech, Puéchabon, Puilacher, Puimisson, Puissalicon, Puisserguier, Quarante, Restinclières, Rieussec, Riols, Les Rives, Romiguières, Roquebrun, Roqueredonde, Roquessels, Rosis, Rouet, Roujan, Saint-André-de-Buèges, Saint-André-de-Sangonis, Saint-Aunès, Saint-Bauzille-de-la-Sylve, Saint-Bauzille-de-Montmel, Saint-Bauzille-de-Putois, Saint-Brès, Saint-Chinian, Saint-Christol, Saint-Clément-de-Rivière, Saint-Drézéry, Sainte-Croix-de-Quintillargues, Saint-Etienne-d’Albagnan, Saint-Etienne-de-Gourgas, Saint-Etienne-d’Estréchoux, Saint-Félix-de-l-Héras, Saint-Félix-de-Lodez, Saint-Gély-du-Fesc, Saint-Geniès-de-Fontedit, Saint-Geniès-des-Mourgues, Saint-Geniès-de-Varensal, Saint-Georges-d’Orques, Saint-Gervais-sur-Mare, Saint-Guilhem-le-Désert, Saint-Guiraud, Saint-Hilaire-de-Beauvoir, Saint-Jean-de-Buèges, Saint-Jean-de-Corniès, Saint-Jean-de-Cuculles, Saint-Jean-de-Fos, Saint-Jean-de-la-Blaquière, Saint-Jean-de-Minervois, Saint-Jean-de-Védas, Saint-Julien-Olargues, Saint-Just, Saint-Martin-de-l-Arçon, Saint-Martin-de-Londres, Saint-Mathieu-de-Tréviers, Saint-Maurice-de-Navacelles, Saint-Michel, Saint-Nazaire-de-Ladarez, Saint-Nazaire-de-Pézan, Saint-Pargoire, Saint-Paul-et-Valmalle, Saint-Pierre-de-la-Fage, Saint-Pons-de-Mauchiens, Saint-Pons-de-Thomières, Saint-Privat, Saint-Saturnin-de-Lucian, Saint-Sériès, Saint-Thibéry, Saint-Vincent-de-Barbeyrargues, Saint-Vincent-Olargues, Salasc, La Salvetat-sur-Agout, Saturargues, Saussan, Saussines, Sauteyrargues, Sauvian, Sérignan, Servian, Sète, Siran, Sorbs, Soubès, Le Soulié, Soumont, Sussargues, Taussac-la-Billière, Teyran, Thézan-lès-Béziers, Tourbes, La Tour-sur-Orb, Tressan, Le Triadou, Usclas-d’Hérault, Usclas-du-Bosc, La Vacquerie-et-Saint-Martin-de-Castries, Vacquières, Vailhan, Vailhauquès, Valergues, Valflaunès, Valmascle, Valras-Plage, Valros, Vélieux, Vendargues, Vendémian, Vendres, Vérargues, Verreries-de-Moussans, Vias, Vic-la-Gardiole, Vieussan, Villemagne-Argentière, Villeneuve-lès-Béziers, Villeneuve-lès-Maguelone, Villeneuvette, Villespassans, Villetelle, Villeveyrac, Viols-en-Laval, Viols-le-Fort, Clermont-Herault, Plages, Eglises Romanes, Centres Urbains, Canal du Midi, Cathédrales, Ponts Romans, Parc Naturel Haut-Languedoc, Autour du Salagou, Abbayes, Châteaux Médiévaux, Oppidums, Autour du Pic Saint-Loup, Eglises Wisigothiques, Séranne et Buèges, Via Domitia, Eglises Gothiques"; 
	
	// 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);

