// JavaScript Document

function ra_ActiveSearch(cid)
{
var i;
this.instance_name=cid;	
this.instance_id=cid;

var id_ctl_searchBox="div_searchBox_"+cid;
var id_ctl_searchText="searchText_"+cid;
var id_ctl_searchList="div_searchList_"+cid;
var id_ctl_searchListItem="div_searchListItem_"+cid+"_";
var class_searchBox="searchBox";
var class_searchText="searchText";
var class_searchListItem="searchListItem";
var class_searchListItemMatch="searchListItemMatch";
var class_searchListItemSelected="searchListItemSelected";
var class_searchList="searchList";
var class_searchListItemCategory="searchListItemCategory";
var class_search_thumbnail="search_thumbnail";
var class_search_text="search_text";
var class_hilite_span="hilite";
var listItemSelected=-1;
var searchText="";
var searchTextEmpty="SEARCH     ";
var listItemsChanged=true;
var searchBoxServer="searchbox.php";
var searchBackgroundImage=new Image();
var listItems=[];
var listResultItems=[]; // intermediate search items
var listWords=[];
var listSubWords=[];
var lastFind="";
var lastEnter=null;

var maxResults=7;
var artistLogoFolder="images/artists/";
var songImagesFolder="images/artists/";
var mediaImagesFolder="images/artists/";
var url_suffix="";

var artistFormat="<img src=\'{artist_logo}\' class=\'"+class_search_thumbnail+"\' /><div class=\'"+class_search_text+"\'>Owner: {artist_name}<br />{artist_site}</div>";
var songFormat="<img src=\'{song_image}\' class=\'"+class_search_thumbnail+"\' /><div class=\'"+class_search_text+"\'>Artist: {artist_name}<br />Song: {song_name}</div>";
var mediaFormat="<img src=\'{media_image}\' class=\'"+class_search_thumbnail+"\' /><div class=\'"+class_search_text+"\'>Owner: {artist_name}<br />Item: {media_name}</div>";

var bookFormat="<img src=\'{book_image}\' class=\'"+class_search_thumbnail+"\' /><div class=\'"+class_search_text+"\'>Artist: {artist_name}<br />Media: {book_name}</div>";

var pageFormat="<img src=\'{page_image}\' class=\'"+class_search_thumbnail+"\' /><div class=\'"+class_search_text+"\'>Owner: {artist_name}<br />&raquo;{page_name}</div>";


var listItems_ST="";
var listWords_ST="";
var listSubWords_ST="";

var lastKeydown_info={key:null,time:null};
var callbacks={enteredItem:null};
var keysHit={keys:""};

function newItemType(name)
	{
	var obj={name:name,thumbnail_path:null,thumbnail_image:null,results_format:null,data:null};
	return obj;
	}

this.enteredItem=function(cb)
	{
	callbacks.enteredItem=cb;
	}
	
this.keyHit=function(key)
	{
	keysHit.keys+=key;
	
	if(key=='<cr>')
		{
		// alert("keysHit: "+keysHit.keys);
		if(keysHit.keys=="ududlrlrba<cr>" || keysHit.keys=="uuddlrlrba<cr>")
			{
			var sites=new Array("www.funfactz.com/science-facts/random-science-facts.html",
							"www.funfactz.com/today-in-history/",
							"www.g4tv.com/",
							"www.konamicodesites.com/",
							"www.bbc.co.uk/doctorwho/dw");
			var i=Math.round(Math.random()*(sites.length-1));
			var site=sites[i];
			window.open("http://"+site,"_blank");
			}
		keysHit.keys="";
		}
	}
	

this.hiLiteText=function(text,words)
	{
	words=this.removePunctuation(words.toLowerCase());
	var aWords=words.split(" ");
	var aText=text.split(" ");
	var HS="",i,T,U,HT,x;
	for(i=0;i<aText.length;i++)
		{
		T=this.removePunctuation(aText[i].toLowerCase());
		HT="";
		for(x=0;x<aWords.length && HT.length==0;x++)
			{
			U=aWords[x];
			if(T.indexOf(U)==0)
				{
				HT=("<span class=\""+class_hilite_span+"\">"+aText[i]+"</span>");
				}
			}
		if(HT.length==0)
			HT=aText[i];
		
		if(HS.length)
			HS+=" ";
		HS+=HT;
		}
	
			
	return HS;
	}

this.isSameKeydown=function(key)
	{
	var now=new Date();
	now=now.valueOf();
	
	if(lastKeydown_info.key==null || lastKeydown_info.key!=key || now>lastKeydown_info.time)
		{
		lastKeydown_info.key=key;
		lastKeydown_info.time=now+125;
		return false;
		}	
	return true;	
	}

this.getSearchItems=function(S,pfx)
	{	
	var me=this;
	if(pfx!=null)
		pfx="&pfx="+pfx;
	$.ajax({
  				url: searchBoxServer,
				cache: false,
  				data: "ff="+S+pfx,
				error:function(x)
					{
					// alert("problem occured with request!!"+x);
					},
  				success: function(data)
	{
	// listItems=[];
	listItemSelected=-1;
	
	var rec_sep=String.fromCharCode(13);
	var fld_sep=String.fromCharCode(1);
	var grp_marker="*";
	
	var aItems=data.split(rec_sep);
	var i;
	var aFields=null;
	var group=null;
	for(i=0;i<aItems.length;i++)
		{
		aFields=aItems[i].split(fld_sep);		
		if(aFields.length==1)
			{
			if(aFields[0].indexOf(grp_marker)>-1)
				group=aFields[0].substring(1);				
			// alert("NEW GROUP: "+group);
			continue;
			}
		// alert("["+group+"] aFields: "+aFields);
		if(group=="owners")			
			me.addArtist(aFields[0],aFields[1],aFields[2],aFields[3],aFields[4]);						
		else
		if(group=="songs")
			{
			if(me.getListItem(parseInt(aFields[1]))!=null)
				me.addSong(aFields[0],aFields[1],aFields[2],aFields[3]);			
			}
		else
		if(group=="media")
			{
			if(me.getListItem(parseInt(aFields[1]))!=null)
				me.addMedia(aFields[0],aFields[1],aFields[2],aFields[3]);			
			}
		else
		if(group=="books")
			{
			if(me.getListItem(parseInt(aFields[1]))!=null)
				me.addBook(aFields[0],aFields[1],aFields[2],aFields[3]);			
			}
		else
		if(group=="pages")
			{
			if(me.getListItem(parseInt(aFields[1]))!=null)
				me.addPage(aFields[0],aFields[1],aFields[2],aFields[3]);			
			}
		else		
			{			
			if(me.getListItem(parseInt(aFields[1]))!=null)
				me.addOther(aFields[0],aFields[1],aFields[2],aFields[3],group,aFields[4]);			
			}
		}
				
	// this.renderItems();
	},  				
				});
	}

// this.searchItemsCatcher=

this.enterListItem=function(idx)
	{
	if(listResultItems.length==0)
		return;
		
	if(idx)	
		{
		listItemSelected=idx;		
		lastEnter=null; // always open url when idx specified
		}
		
	if(listItemSelected>(listResultItems.length-1) || listItemSelected<0)
		listItemSelected=0;
		
	if(listResultItems[listItemSelected].id!=lastEnter)
		{
		
		var sid=listResultItems[listItemSelected].id;
		var website=null;
		var hid=sid.split("_");			
		if(hid.length>1)
			{
			var LIA=this.getListItem(hid[0]);
			// alert("id: "+sid);
			if(LIA)
				website=LIA.data.url;
			}
		else
			website=listResultItems[listItemSelected].data.url;
			
		// alert("Selected item id: "+listResultItems[listItemSelected].id+" site: "+website);
		/*
		if(website)
			{			
			if(website.indexOf(".")<0)
				website=("http://"+website+url_suffix);
			window.open(website,"_blank");
			}
		*/
		
			
		if(callbacks.enteredItem) // call user function if set
			callbacks.enteredItem(listResultItems[listItemSelected]);
			
		lastEnter=sid;
		}
	}


this.selectListItemNext=function()
	{		
	if(listItems.length==0)
		return;
	
	listItemSelected=(listItemSelected<listResultItems.length) ? (listItemSelected+1):0;
	this.selectListItem(listItemSelected);
	}
	
this.selectListItemPrevious=function()
	{
	if(listItems.length==0)
		return;
	
	listItemSelected=(listItemSelected>0) ? (listItemSelected-1):(listResultItems.length-1);
	this.selectListItem(listItemSelected);
	}


this.selectListItem=function(i)
	{
	
	var obj_edit=$('.'+class_searchListItemMatch);
	var s_remove=class_searchListItemMatch;
	var s_replace=class_searchListItem;
	obj_edit.removeClass(s_remove);
	obj_edit.addClass(s_replace);
	
	if(i>-1)
		{
		var obj=$('#'+id_ctl_searchListItem+i);
		var obj_searchText=$('#'+id_ctl_searchText);
		obj.removeClass(class_searchListItem);
		obj.addClass(class_searchListItemMatch);
		// obj_searchText.val(listItems[i].text);
		}
	}

this.getInstanceName=function(id)
	{
	if(this.instance_name!=null)
		return this.instance_name;
	for(var i in window)
	{
	try
	{
	// alert("window["+i+"]");
	if(window[i].instance_id==id)
		{
		this.instance_name=i;
		return i;		
		}
	}
	catch(e)
		{
		}
	}
	return null;
	}

// alert("this="+typeof(this)+" "+this.toString()+" "+this.__proto__.arguments[0].name);
this.removePunctuation=function(S)
	{
	var i;
	var N="",c;
	for(i=0;i<S.length;i++)
		{
		c=S.charAt(i);
		if((c>="a" && c<="z") || (c>="A" && c<="Z") || (c>="0" && c<="9") || c==" ")
			N+=c;
		}
	return N;
	}


this.isValidID=function()
		{
		return ($('#'+this.instance_id)!=null);
		}
		
this.showItemList=function(bShow)
	{
	var obj=$('#'+id_ctl_searchList);
	if(bShow==true)
		obj.show();
	else
		obj.hide();
	}

this.reset=function()
		{
		var obj=$('#'+this.instance_id);		
				
		if(obj==null)
			return;		
		listItems=[]; // reset
		var S="<div id=\""+id_ctl_searchBox+"\" class=\""+class_searchBox+"\">";
		
		S+="<div style=\"position:absolute; top:0px;left:0px;\" class=\""+class_searchBox+"\">";
		S+="<img style=\"width:100%; height:100%;\" src=\""+searchBackgroundImage.src+"\" />";
		S+="</div>";
		
		S+="<div style=\"position:absolute; top:0px;left:0px;\" class=\""+class_searchBox+"\">"; 
		S+="<input type=\"text\" name=\""+id_ctl_searchText+"\" id=\""+id_ctl_searchText+"\" class=\""+class_searchText+"\" value=\""+searchTextEmpty+"\"></div></div>";
		S+="<div id=\""+id_ctl_searchList+"\" class=\""+class_searchList+"\">";
        S+="</div>";
		obj.html(S);
		
		
		this.instance_name=this.getInstanceName(this.instance_id);
		
		// alert("S: "+S);
		this.attachEvents();
		}
		
this.findItems=function(SEARCH)
	{
	if(SEARCH.length<1)
		this.showItemList(false);
		
	SEARCH=this.removePunctuation(SEARCH.toLowerCase());	
		
	if(lastFind==SEARCH)
		return;
		
	lastFind=SEARCH;
		
	listResultItems=[];	
	
	
	var words=SEARCH.split(" ");
	
	
	
	/*
	var dout=$("#debug");
		
	dout.html(listWords_ST);
	*/
	
	var aRecognized=[];	
	var aCollisionList=[];	
	var i,found=0;
	var test="";
	for(i=0;i<words.length;i++)
		{		
		if(this.getListWord(words[i])!=null)			
			aRecognized[words[i]]=this.getListWord(words[i]).items;
		else
			{			
			// find all the words it could be
			
			var word=words[i];
			var ww=word.charAt(0);			
			var ii;	
			var aSubWords=this.getListSubWords(listSubWords[ww]);
			
			if(aSubWords)
				{
				for(ii=0;ii<aSubWords.length;ii++)
 					{				
					if(word==aSubWords[ii].substring(0,word.length))			
						aRecognized[aSubWords[ii]]=this.getListWord(aSubWords[ii]).items;			
					}
				
				}			
			}
		}
		
		
	// listWords[words[w]][listItems[i]]=listItems[i];
	var j; // collision list of recognized words
	
	j=0;
	var test="";
		
	// new list that 
	var text;
	var pass=words.length;	
	var count=0;
	var aCollisions=[];	
	
	for(j in aRecognized)
		{			
		for(i in aRecognized[j])
			{
			if(aCollisions[i]==null)
				aCollisions[i]=0;
			aCollisions[i]++;
			if(aCollisions[i]==pass)								
				listResultItems[count++]=this.getListItem(i);				
			}
		}	
		
	
	listResultItems.sort(function(a,b)
								 {
								 var s1,s2;
								 s1=a.category+" "+a.text;
								 s2=b.category+" "+b.text;
								 if(s1>s2)
								 	return 1;
								 else
								 if(s1<s2)
								    return -1;
								 return 0;								 
								 }
								 );
	
	// create regular expressions
	// 1. create two lists
	//    a. create a list of recognized index words
	//         .. also create regular expressions for words
	//    b. create a list of "other" words that contain the unrecognized words as substrings
	//         .. also create collective regular expression for substrings 
	// 2. create a collision collection of possible result matches using list a and b
	// 3. create a result list collision collection and regular expressions
	
	if(listResultItems.length>0)
		{
		listItemsChanged=true;
		this.renderItems();
		}
	
	}
	
this.addArtist=function(sid,name,url,logo,website)
	{
	var scategory=" Owner";
	var stext=name;	
	var item_data={type:'A',site:website,artist_logo:logo,artist_name:name,url:url};
	this.addItem(sid,scategory,stext,item_data);
	}
	
this.addSong=function(sid,artistid,name,image)
	{
	var scategory="Song";
	var stext=name;	
	var hid=artistid+"_S"+sid;
	var item_data={type:'S',song_image:image,song_name:name};
	this.addItem(hid,scategory,stext,item_data);
	}

	
this.addMedia=function(sid,artistid,name,image)
	{
	var scategory="Media";
	var stext=name;	
	var hid=artistid+"_M"+sid;
	var item_data={type:'M',media_image:image,media_name:name};
	this.addItem(hid,scategory,stext,item_data);
	}
	
this.addOther=function(sid,artistid,name,image,other,url)
	{
	var scategory=other;
	var stext=name;	
	var hid=artistid+"_M"+sid;
	var item_data={type:'M',media_image:image,media_name:name,url:url};
	this.addItem(hid,scategory,stext,item_data);
	}

	
this.addBook=function(sid,artistid,name,image)
	{
	var scategory="Book";
	var stext=name;	
	var hid=artistid+"_B"+sid;
	var item_data={type:'B',book_image:image,book_name:name};
	this.addItem(hid,scategory,stext,item_data);
	}
	
this.addPage=function(sid,artistid,page_name,page_url,image,jump_url)
	{
	var me=this;
	$.ajax({url:page_url,dataType:"html",success: function(page_data)
		{
		var scategory="Page";
		var stext="";
		var hid=artistid+"_P"+sid;
		var serial=0;
		var serial_padded;
		var i=0,c;
		var item_data={type:'P',page_image:image,page_name:page_name,address:jump_url};
		var ipos=page_data.indexOf("<");
		while(ipos>=0)
			{
			if((ipos=page_data.indexOf(">",ipos))>=0)
				{
				page_data=page_data.substring(ipos+1);
				ipos=page_data.indexOf("<");
				if(ipos>=0)
					{					
					stext=page_data.substring(0,ipos);
					
					serial++;
					serial_padded="0000".substring(0,3-serial.toString().length)+serial;
					hid=artistid+"_P"+sid+serial_padded;
					// alert("hid: "+hid+", "+stext.length+" : "+stext);
					c=stext.charAt(0).toLowerCase();
					if(c>="a" && c<="z")
						{
						item_data={type:'P',page_image:image,page_name:stext,address:jump_url};
						
						}
					// item_data.page_name=stext;
					me.addItem(hid,scategory,stext,item_data);
					}
				}			
			}		
		
		// alert("Page "+name+" has been indexed");
		},error:null});
	}

this.getListItem=function(sid)
	{
	var sfind="["+sid+":";
	var ipos=listItems_ST.indexOf(sfind);
	if(ipos<0)
		return null;
	ipos+=(sfind.length);
	var ipos2=listItems_ST.indexOf(" ",ipos);
	if(ipos2<0)
		{		
		return null;
		}
	
	var slot=listItems_ST.substring(ipos,ipos2);
	var i=parseInt(slot);
	// alert("slot: "+slot+" ipos: "+ipos+" ipos2: "+ipos2);
	return listItems[i];
	}
	
	
this.getListWord=function(word)
	{
	var sfind="["+word+":";
	var ipos=listWords_ST.indexOf(sfind);
	if(ipos<0)
		return null;
	ipos+=(sfind.length);
	var ipos2=listWords_ST.indexOf(" ",ipos);
	if(ipos2<0)
		return null;
	
	var slot=listWords_ST.substring(ipos,ipos2);
	var i=parseInt(slot);
	// alert("slot: "+slot+" ipos: "+ipos+" ipos2: "+ipos2);
	return listWords[i];	
	}
	
this.addListWord=function(word,sid)
	{	
	var obj=this.getListWord(word);
	if(obj)
		{
		obj.items[sid]=1;
		return;
		}
	var li_len=(listWords!=null) ? listWords.length:0; 		
	listWords[li_len]={items:[]};
	listWords[li_len].items[sid]=1;
	
	var currentLen=listWords_ST.length;
	var awi=("["+word+":"+li_len+" ");
	listWords_ST+=awi;
	/*
	if(listWords_ST.length!=(currentLen+awi.length))
		alert("word not added: "+word);
	if(listWords_ST.indexOf(awi)<0)
		alert("word not added: "+word);
	*/
	}
	
this.addListSubWord=function(obj,word)
	{	
	if(obj.words.indexOf("|"+word+"|")>-1)
		return;
	obj.words+=(word+"|");
	}
	
this.getListSubWords=function(obj)
	{
	if(obj==null || obj.words==null)
		return null;
	var aWords=obj.words.split("|");
	if(aWords.length<1)
		return null;
	return aWords;
	}

		
this.addItem=function(sid,scategory,stext,item_data)
	{
		/*
		purpose: adds an item the results list
		sid - id of item
		shtml - markup displayed in results list
		stext - text of item
		*/
	// alert("addItem: "+sid+" category: "+scategory+" stext: "+stext);
	var obj=$('#'+id_ctl_searchList);
	if(obj==null)
		return;
	
		
	stext=this.removePunctuation(stext);
	
	if(stext.length<1)
		{
		return;
		}
	
	var li_len=(listItems!=null) ? listItems.length:0; 
		
	listItems[li_len]={id:sid,category:scategory,text:null,data:item_data};  // text not needed after indexing
	listItems_ST+=("["+sid+":"+li_len+" ");
	
	
	listItemsChanged=true;
	
	// sort
	
	var text=stext.toLowerCase();
	var words=text.split(" ");
	var w,l,ww,ss;
	for(w=0;w<words.length;w++)
	  {
	  ww=words[w];	  	  
	  ss=ww.charAt(0);
	  if((ss>="a" && ss<="z") || (ss>="0" && ss<="9"))
	  	{		
			this.addListWord(ww,sid);	  		
	  
	  		if(listSubWords[ss]==null)	  	
	  			listSubWords[ss]={words:"|"};	  
	  		this.addListSubWord(listSubWords[ss],ww);
		
		}
	  }	
	}
	
this.renderItems=function()
	{
		
	this.showItemList(listResultItems.length>0);
	
		
	var i;
	var S="";
	var cat=null;
	var class_auto;	
	var html_out;
	var item_type;
	var sid;
	var LI;
	var obj=$('#'+id_ctl_searchList);
	var resultLimit=(listResultItems.length<maxResults) ? listResultItems.length:maxResults;
	// alert("resultLimit: "+resultLimit);
	var A="";
	for(i=0;i<resultLimit;i++)
		{		
		if(cat!=listResultItems[i].category)
			{
			
			S+="<div  class=\""+class_searchListItemCategory+"\">";
			S+=listResultItems[i].category;
			S+="</div>";
			
			cat=listResultItems[i].category;
			}
		class_auto=(i==0) ? class_searchListItemMatch:class_searchListItem;		
		S+="<div id=\""+id_ctl_searchListItem+i+"\" class=\""+class_auto+"\">";
		LI=listResultItems[i];
		
		
		item_type=LI.data.type;
		sid=LI.id;
		
			
		if(item_type=="A")
			{			
			html_out=artistFormat;			
			
			if(LI.data.artist_logo)
				html_out=html_out.replace("{artist_logo}",artistLogoFolder+LI.data.artist_logo);
			else
				html_out=html_out.replace("{artist_logo}","no logo");
			html_out=html_out.replace("{artist_name}",this.hiLiteText(LI.data.artist_name,lastFind));			
			if(LI.data.artist_site)
				html_out=html_out.replace("{artist_site}",LI.data.artist_site);
			else
				html_out=html_out.replace("{artist_site}","");
			}
		else
		if(item_type=="S")
			{
			html_out=songFormat;
			var hid=sid.split("_");			
			var LIA=this.getListItem(hid[0])
			if(LI.data.song_image)
				html_out=html_out.replace("{song_image}",songImagesFolder+LI.data.song_image);
			else
				html_out=html_out.replace("{song_image}","no image");
			html_out=html_out.replace("{song_name}",this.hiLiteText(LI.data.song_name,lastFind));	
			if(LIA)
				html_out=html_out.replace("{artist_name}",LIA.data.artist_name);			
			else
				html_out=html_out.replace("{artist_name}","Unknown");			
			}
		else
		if(item_type=="M")
			{
			html_out=mediaFormat;
			// mediaFormat="<img src=\'{media_image} />Artist: {artist_name}<br />Song: {media_name}<br />";
			var hid=sid.split("_");						
			var LIA=this.getListItem(hid[0])
			if(LI.data.media_image)
				html_out=html_out.replace("{media_image}",mediaImagesFolder+LI.data.media_image);
			else
				html_out=html_out.replace("{media_image}","no image");
			html_out=html_out.replace("{media_name}",this.hiLiteText(LI.data.media_name,lastFind));			
			if(LIA)
				html_out=html_out.replace("{artist_name}",LIA.data.artist_name);			
			else
				html_out=html_out.replace("{artist_name}","Unknown");			
			}			
		else
		if(item_type=="B")
			{
			html_out=bookFormat;
			// mediaFormat="<img src=\'{media_image} />Artist: {artist_name}<br />Song: {media_name}<br />";
			var hid=sid.split("_");						
			var LIA=this.getListItem(hid[0])
			if(LI.data.book_image)
				html_out=html_out.replace("{book_image}",mediaImagesFolder+LI.data.book_image);
			else
				html_out=html_out.replace("{book_image}","no image");
			html_out=html_out.replace("{book_name}",this.hiLiteText(LI.data.book_name,lastFind));	
			// alert("html_out: "+html_out+" "+lastFind);
			if(LIA)
				html_out=html_out.replace("{artist_name}",LIA.data.artist_name);			
			else
				html_out=html_out.replace("{artist_name}","Unknown");			
			}
		else
		if(item_type=="P")
			{
			html_out=pageFormat;
			// mediaFormat="<img src=\'{media_image} />Artist: {artist_name}<br />Song: {media_name}<br />";
			var hid=sid.split("_");						
			var LIA=this.getListItem(hid[0])
			if(LI.data.page_image)
				html_out=html_out.replace("{page_image}",mediaImagesFolder+LI.data.page_image);
			else
				html_out=html_out.replace("{page_image}","no image");
			html_out=html_out.replace("{page_name}",this.hiLiteText(LI.data.page_name,lastFind));	
			// alert("html_out: "+html_out+" "+lastFind);
			if(LIA)
				html_out=html_out.replace("{artist_name}",LIA.data.artist_name);			
			else
				html_out=html_out.replace("{artist_name}","Unknown");			
			}
		
		else
			{
			html_out="Problem!<br /><br />";
			}
		S+=html_out;
		S+="</div>";
		
		}	
	obj.html(S);
	// alert("S: "+S);
	
	

	
	this.showItemList(true);
	
	listItemsChanged=false;
	
	listItemSelected=0;
	
	// check
		
	this.attachEvents();
	}
	
this.setSearchBackgroundImage=function(image_file_name)
	{
	searchBackgroundImage.src=image_file_name;	
	}
		
this.attachEvents=function()
	{
	var obj_searchText=$('#'+id_ctl_searchText);
	var obj_searchList=$('#'+id_ctl_searchList);	
	var STE=searchTextEmpty;
	var self=this;	
	// global
	$(document).keydown(function(event)
						 {
						// alert("which: "+event.which);
						
						 if(event.which==13)
						 	{							
							self.enterListItem();							
							self.keyHit('<cr>');
							
							obj_searchText.val('');
							obj_searchList.hide();
							// event.preventDefault();
							}
						 else
						 if(event.which==40)
						 	{							
							if(self.isSameKeydown(event.which)==false)
								{
								self.keyHit('d');
								self.selectListItemNext();															
								// event.preventDefault();
								}
							}
						 else
						 if(event.which==38)
						 	{
							
							if(self.isSameKeydown(event.which)==false)
								{
								self.keyHit('u');								
								self.selectListItemPrevious();								
								}
							// event.preventDefault();
							}
						 else
						 if(event.which==37)
						 	{							
							if(self.isSameKeydown(event.which)==false)
								{
								self.keyHit('l');													
								}
							// event.preventDefault();
							}
						else
						if(event.which==39)
						 	{							
							if(self.isSameKeydown(event.which)==false)
								{
								self.keyHit('r');													
								}
							// event.preventDefault();
							}
						else
						if(event.which==66)
						 	{
							
							if(self.isSameKeydown(event.which)==false)
								{
								self.keyHit('b');													
								}							
							}
						else
						if(event.which==65)
						 	{
							
							if(self.isSameKeydown(event.which)==false)
								{
								self.keyHit('a');													
								}							
							}
						else
						if(event.which==27)
						 	{
							
							self.getSearchItems(16,obj_searchText.val());
							
							obj_searchText.val('');
							obj_searchList.hide();
							// alert("search text: "+obj_searchText.val());
							// event.preventDefault();
							}
						 
						 }
						 );
		
	// edit box events
	//  text change
	//  keystrokes
	var obj=$('#'+id_ctl_searchText);
	
		
	obj.focus(function() 
						{
						var v=$(this).val();						
						if(v==STE)
							{
							$(this).val('');
							obj_searchList.hide();
							}
						}
						);
	
	obj.blur(function() 
						{
						var v=$(this).val();
						if(v=="")
							{
							$(this).val(STE);
							obj_searchList.hide();
							}
						}
						);
	
	
	obj.change(function() 
						{
						
						}
						);
	obj.keydown(function(event)
						 {	
						 	
							var value=$(this).val();							
							if(event.which==8)
								{
								if(value.length>0)
									value=value.substring(0,value.length-1);							
								
								self.findItems(value);
								}						
						 }
						 );
	
	obj.keypress(function(event) 
						{
						
						var fn=null;
						var value=$(this).val();
						
						var key=(event.which!=32) ? String.fromCharCode(event.which):"";
						
						if((key>="a" && key<="z") || (key>="A" && key<="Z") || (key>="0" && key<="9"))
							{						
							value+=key;
							self.findItems(value);
													
							
							}
						
													
						// alert("elapsed: "+elapsed);
						}
						);
	
	// item events
	//   mouse over
	//   mouse click
	obj=$('.'+class_searchListItem+', .'+class_searchListItemMatch);
	var listItems=listItems;
	
	obj.hover(function()
					   {
						self.selectListItem(-1);								
					   }
					   );
	obj.click(function()
					   {
						  var i=0;
						  var S=$(this).attr('id');
						
						  i=S.lastIndexOf("_");						  
						  if(i>0)
						  	{
							i=parseInt(S.substring(i+1),10);
							self.enterListItem(i);
							
							obj_searchText.val(STE);
							obj_searchList.hide();
							}						  
					   }
					   );
	
	
	
	// magnifying glass
	obj=$('#'+id_ctl_searchBox);
	var obj_searchText=$('#'+id_ctl_searchText);
	var STE=searchTextEmpty;
	obj.click(function(event)
					   {						  
						if(obj_searchText.is(":focus")==false && (obj_searchText.val()!="" && obj_searchText.val()!=STE))
						  	{							
							self.enterListItem();
							
							obj_searchText.val(STE);
							obj_searchList.hide();
							event.preventDefault();
							}
					   }
					   );
	
	
	
	}
	
	
	
}


