/*
	autocompleter for search fields. non-AJAX version
	Dmitriy Abragamov 08.2008
*/
function Autocompleter(args){
		this.obj = document.getElementById(args.objId);
		if(args.suggestDivId){
				this.suggestDiv = document.getElementById(args.suggestDivId);
				this.suggestList = this.suggestDiv.getElementsByTagName('ul');
				this.suggestList = this.suggestList[0];
			}else{
					var d = document.createElement('div');
					d.id = "autosuggest";
					var ul = document.createElement('ul');
					d.appendChild(ul);
					this.suggestDiv = d;
					this.suggestList = ul;
				}
		
		this.getFrom = args.getFrom;
		
		this.minChars = args.minChars || 1;
		this.timeDelay = args.timeDelay || 400;
		
		this.suggestions = new Array();
		
		this.open = false;
		this.old = "";
		this.focusOn = -1;
		this.init();
	}

Autocompleter.prototype = {
		addEvent: function(obj, evnt, funcRef, captureBool){
				if(document.attachEvent){
						obj.attachEvent('on'+evnt, funcRef);
					}else{
							obj.addEventListener(evnt, funcRef, captureBool);
						}
			},
		createBind: function(obj, method, arg){
				return function(){
							var ar = arg || arguments;
								return method.call(obj, ar);
							}
			},
		init: function(){
				this.addEvent(this.obj, 'keydown', this.createBind(this, this.catchFunctionalKeys), true);
				this.addEvent(this.obj, 'keyup', this.createBind(this, this.keyAction), false);
				
				//this.addEvent(this.obj, 'blur', this.createBind(this, function(){this.hide();}), false);
				this.addEvent(this.obj, 'blur', this.createBind(this, function(){window.setTimeout("this.hide", 40)}), false);
				
				var newDiv = document.createElement('div');
				newDiv.style.position = "relative";
				newDiv.style.cssFloat = "left";
					/*IE specific*/
					newDiv.style.styleFloat = "left";
				
				this.obj.parentNode.insertBefore(newDiv, this.obj);
				
				newDiv.appendChild(this.obj);
				newDiv.appendChild(this.suggestDiv);
				
				/*this.suggestDiv.parentNode.style.position = "relative";
				this.suggestDiv.parentNode.style.cssFloat = "left";
				this.suggestDiv.parentNode.style.styleFloat = "left";
				*/
				this.suggestDiv.style.top = this.obj.offsetTop + this.obj.offsetHeight + "px";
				this.suggestDiv.style.left = this.obj.offsetLeft + "px";

				this.keywords = ['rosa parks','black history','barack obama','jackie robinson','oprah winfrey','will smith','chris brown','bill gates','albert einstein','harriet tubman','midsomer murders','martin luther king','Rosa Parks','tiger woods','maya angelou','babe ruth','george washington','michael jordan','obama','walt disney','johnny depp','hillary clinton','bill','martin luther king jr','sacagawea','abraham lincoln','Barack Obama','Jackie Robinson','beyonce','helen keller','miley cyrus','madonna','george washington carver','Oprah Winfrey','thomas edison','bob marley','princess diana','Harriet Tubman','Albert Einstein','elvis presley','christopher columbus','henry ford','hitler','bruce lee','benjamin franklin','oprah','pocahontas','anne frank','George Washington','john wayne','lil wayne','martin luther king jr.','leonardo da vinci','bill cosby','michael jackson','amelia earhart','serial killers','marilyn monroe','Martin Luther King Jr.','Walt Disney','thomas jefferson','Abraham Lincoln','tyra banks','african american','muhammad ali','brad pitt','malcolm x','Babe Ruth','black history month','Maya Angelou','Bill Gates','john lennon','frank lucas','william shakespeare','adolf hitler','billie holiday','gandhi','inventors','50 cent','selena','actors','Helen Keller','john mccain','Benjamin Franklin','Anne Frank','Amelia Earhart','malcom x','nelson mandela','poirot','langston hughes','George Washington Carver','britney spears','elvis','Tiger Woods','Michael Jordan','james brown','jennifer lopez','african americans','cleopatra','al capone','Thomas Edison','Midsomer Murders','angelina jolie','louis armstrong','frederick douglass','black inventors','edgar allen poe','jim morrison','tina turner','mobsters','Will Smith','tupac','Anne Sullivan','jesse owens','micheal jordan','einstein','hank aaron','Elvis Presley','John F. Kennedy','ray charles','john f kennedy','Martin Luther King','Princess Diana','edgar allan poe','paris hilton','thurgood marshall','women','Thomas Jefferson','hilary clinton','Miley Cyrus','presidents','Famous',' Adam Sandler',' Saturday Night Live',' Airheads',' Comedian',' SNL',' Drew Barrymore','Johnny Depp','eminem','johnny cash','Sacagawea','Hillary Clinton','shakespeare','ronald reagan','bill clinton','jimi hendrix','halle berry','john adams','jessica alba','denzel washington','dolphins','beethoven','michelle obama','shakira','hannah montana','doris day','Search Our TV Listings','Henry Ford','lucille ball','fidel castro','bob dylan','neil armstrong','lebron james','music','Christopher Columbus','chuck norris','adam sandler','mother teresa','winston churchill','bessie coleman','Chris Brown','jesse jackson','leaders','jfk','mark twain','george michael','ruby bridges','Famous',' Adam Sandler',' Saturday Night Live',' Airheads',' Comedian',' SNL',' Drew Barrymore','tom cruise','Malcolm X','john cena','hugh laurie','John McCain','pele','sojourner truth','alexander graham bell','micheal jackson','Bill','Langston Hughes','kurt cobain','Ruby Bridges','notorious','george bush','singers','bono','biography','colin powell','mozart','fredrick douglas','lance armstrong','frank sinatra','William Shakespeare','george clooney','usher','bon jovi'];
				
				//this.keywords = ['frank sinatra','frank lucas','franky something','frau miller'];
			},
		show: function(){
				this.suggestDiv.style.visibility = "visible";
				this.open = true;
			},
		hide: function(){
				this.suggestDiv.style.visibility = "hidden";
				this.open = false;
				this.focusOn = -1;
			},
		catchFunctionalKeys: function(e){
				if(!e) var e = window.event;
				if(e[0].keyCode == 9 || e[0].keyCode == 13){
						this.hide();
					}
			},
		keyAction: function(e){
				if (!e) var e = window.event;
				switch(e[0].keyCode){
						case 38: this.shiftUp(); break;/*up*/
						case 40: this.shiftDown(); break;/*down*/
						case 27: this.hide(); break;
						case 18: this.hide(); break;
						default: this.searchSuggestions(); break;
					}
			},
		shiftUp: function(){
				var allLi = this.suggestList.childNodes;
				var sel = 0;
				if(this.focusOn <= 0){
						sel = allLi.length-1;
					}else{
							sel = this.focusOn-1;
						}
				if(this.focusOn >= 0 && this.focusOn < allLi.length)
					allLi[this.focusOn].className = "";
				allLi[sel].className = "focus";
				this.obj.value = this.suggestions[sel];
				this.focusOn = sel;
			},
		shiftDown: function(){
				var allLi = this.suggestList.childNodes;
				var sel;
				if(this.focusOn == allLi.length-1 || this.focusOn < 0){
						sel = 0;
					}else{
							sel = this.focusOn+1;
						}
				if(this.focusOn >= 0 && this.focusOn < allLi.length)
					allLi[this.focusOn].className = "";
				allLi[sel].className = "focus";
				this.obj.value = this.suggestions[sel];
				this.focusOn = sel;
			},
		searchSuggestions: function(){
				this.checkExisting();
				if(this.obj.value.length >= this.minChars){
						if(this.obj.value !== null && this.obj.value != this.old)
						{
							for(var i=0; i< this.keywords.length; i++){
								if(this.matchInput(this.keywords[i])){
												if((this.suggestions.toString()).toLowerCase().indexOf(this.keywords[i].toLowerCase()) == -1)
													this.suggestions.push(this.keywords[i]);
								}
							}
						}
					}
					this.old = this.obj.value;
					this.updateSuggestions();
			},
			matchInput: function(text){
					if(this.obj.value.length < this.minChars)
						return false;
					return ((text.substr(0, this.obj.value.length)).toLowerCase() == (this.obj.value).toLowerCase());
				},
			checkExisting: function(){
					for(var delta = 0; delta < this.suggestions.length; delta++){
							if(!this.matchInput(this.suggestions[delta]))
								this.suggestions.splice(delta--, 1);
						}
				},
		updateSuggestions: function(){
			
			if(this.suggestions.length>0){
				this.show();
			}else{
					this.hide();
				}
			
				var leng = this.suggestList.childNodes.length;
				for(var i = 0; i< leng; i++)
					this.suggestList.removeChild(this.suggestList.childNodes[0]);
					
				for(var delta = 0; delta < this.suggestions.length; delta++){
					var li = document.createElement('li');
					
					var where = this.suggestions[delta].toLowerCase();
					var what = this.obj.value.toLowerCase();
					var strFormated = where.substr(0, where.indexOf(what));
					strFormated += "<em>" + where.substr(where.indexOf(what), what.length);
					strFormated += "</em>" + where.substr(where.indexOf(what) + what.length, where.length);
					
					li.innerHTML = strFormated;
					
					this.addEvent(li, 'click', this.createBind(this, this.selectSuggestion, delta.toString()), true);

					this.suggestList.appendChild(li);
				}
			},
			selectSuggestion: function(d){
					this.obj.value = this.suggestions[d];
					this.hide();
				}
	}