if(typeof(bsn)=="undefined")
	_b=bsn={};
if(typeof(_b.Autosuggest)=="undefined")
	_b.Autosuggest={};
else alert("Autosuggest is already set!");

_b.AutoSuggest=function(b,c){
	if(!document.getElementById)
		return 0;
	this.fld=_b.DOM.gE(b);
	if(!this.fld)
		return 0;this.sInp="";
		this.nInpC=0;
		this.aSug=[];
		this.iHigh=0;
		this.oP=c?c:{};
		var k,def={minchars:1,meth:"get",varname:"input",className:"autosuggest",timeout:7000,delay:50,offsety:-5,shownoresults:true,
		  noresults:"No results!",maxheight:250,cache:true,maxentries:25};
		for(k in def){
			if(typeof(this.oP[k])!=typeof(def[k]))
				this.oP[k]=def[k]
		}
		var p=this;
		this.fld.onkeypress=function(a){
			return p.onKeyPress(a)};
			this.fld.onkeyup=function(a){
				return p.onKeyUp(a)};
				this.fld.setAttribute("autocomplete","off")
			};
			_b.AutoSuggest.prototype.onKeyPress=function(a){
				var b=(window.event)?window.event.keyCode:a.keyCode;
				var c=13;var d=9;var e=27;
				var f=1;
				switch(b){
					case c:this.setHighlightedValue();f=0;break;
					case e:this.clearSuggestions();break
				}
			return f
		};
		_b.AutoSuggest.prototype.onKeyUp=function(a){
			var b=(window.event)?window.event.keyCode:a.keyCode;
			var c=38;
			var d=40;
			var e=1;
			switch(b){
				case c:this.changeHighlight(b);e=0;this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;break;
				case d:this.changeHighlight(b);e=0;this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;break;
				default:this.getSuggestions(this.fld.value)
			}
			return e
		};
		_b.AutoSuggest.prototype.getSuggestions=function(a){
			if(a==this.sInp)
				return 0;
			_b.DOM.remE(this.idAs);
			this.sInp=a;
			if(a.length<this.oP.minchars){
				this.aSug=[];this.nInpC=a.length;return 0
			}
			var b=this.nInpC;
			this.nInpC=a.length?a.length:0;
			var l=this.aSug.length;
			if(this.nInpC>b&&l&&l<this.oP.maxentries&&this.oP.cache){
				var c=[];
				for(var i=0;i<l;i++){
					if(this.aSug[i].value.substr(0,a.length).toLowerCase()==a.toLowerCase())
						c.push(this.aSug[i])
				}
				this.aSug=c;
				this.createList(this.aSug);
				return false
			}else{
				var d=this;
				var e=this.sInp;
				clearTimeout(this.ajID);
				this.ajID=setTimeout(function(){
					d.doAjaxRequest(e)
				},this.oP.delay)
			}
			return false
		};
		_b.AutoSuggest.prototype.doAjaxRequest=function(b){
			if(b!=this.fld.value)
				return false;
			var c=this;
			if(typeof(this.oP.script)=="function")
				var d=this.oP.script(encodeURIComponent(this.sInp));
			else var d=this.oP.script+this.oP.varname+"="+encodeURIComponent(this.sInp);
			if(!d)
				return false;
			var e=this.oP.meth;
			var b=this.sInp;
			var f=function(a){
				c.setSuggestions(a,b)
			};
			var g=function(a){/*alert("AJAX error: "+a)*/};
				var h=new _b.Ajax();
				h.makeRequest(d,e,f,g)
			};
			_b.AutoSuggest.prototype.setSuggestions=function(a,b){
				if(b!=this.fld.value)
					return false;this.aSug=[];
				if(this.oP.json){
					//alert(a.responseText);
					var c=eval('('+a.responseText+')');
					for(var i=0;i<c.results.length;i++){
						this.aSug.push({
							'id':c.results[i].id,
							'value':c.results[i].value,
							'info':c.results[i].info, 
							'job_id':c.results[i].job_id,
							'job_usage_sites':c.results[i].job_usage_sites,
							'job_career_level':c.results[i].job_career_level,
							'job_contract_type':c.results[i].job_contract_type,
							'job_region':c.results[i].job_region,
							'job_educational_level':c.results[i].job_educational_level
						})
					}
				}else{
					var d=a.responseXML;
					var e=d.getElementsByTagName('results')[0].childNodes;
					for(var i=0;i<e.length;i++){if(e[i].hasChildNodes())
						this.aSug.push({
							'id':e[i].getAttribute('id'),
							'value':e[i].childNodes[0].nodeValue,
							'info':e[i].getAttribute('info'),
							'job_id':e[i].getAttribute('job_id'),
							'job_usage_sites':e[i].getAttribute('job_usage_sites'),
							'job_career_level':e[i].getAttribute('job_career_level'),
							'job_contract_type':e[i].getAttribute('job_contract_type'),
							'job_region':e[i].getAttribute('job_region'),
							'job_educational_level':e[i].getAttribute('job_educational_level'),
							'job_occ_field':e[i].getAttribute('job_occ_field'),
							'job_occ_field_group':e[i].getAttribute('job_occ_field_group'),
							'company_id':e[i].getAttribute('company_id'),
						})
				}
			}
			this.idAs="as_"+this.fld.id;
			this.createList(this.aSug)
		};
		_b.AutoSuggest.prototype.createList=function(b){
			var c=this;
			_b.DOM.remE(this.idAs);
			this.killTimeout();
			if(b.length==0&&!this.oP.shownoresults)
				return false;
			var d=_b.DOM.cE("div",{id:this.idAs,className:this.oP.className});
			var e=_b.DOM.cE("div",{className:"as_corner"});
			var f=_b.DOM.cE("div",{className:"as_bar"});
			var g=_b.DOM.cE("div",{className:"as_header"});
			g.appendChild(e);g.appendChild(f);d.appendChild(g);
			var h=_b.DOM.cE("ul",{id:"as_ul"});
			for(var i=0;i<b.length;i++){
				var j=b[i].value;var k=j.toLowerCase().indexOf(this.sInp.toLowerCase());
				var l=j.substring(0,k)+"<em>"+j.substring(k,k+this.sInp.length)+"</em>"+j.substring(k+this.sInp.length);
				var m=_b.DOM.cE("span",{},l,true);
				if(b[i].info!=""){
					var n=_b.DOM.cE("br",{});m.appendChild(n);
					var o=_b.DOM.cE("small",{},b[i].info);m.appendChild(o)}
					var a=_b.DOM.cE("a",{href:"#"});
					var p=_b.DOM.cE("span",{className:"tl"}," ");
					var q=_b.DOM.cE("span",{className:"tr"}," ");
					a.appendChild(p);
					a.appendChild(q);
					a.appendChild(m);
					a.name=i+1;
					a.onclick=function(){
						c.setHighlightedValue();
						return false
					};
					a.onmouseover=function(){
						c.setHighlight(this.name)
					};
					var r=_b.DOM.cE("li",{},a);
					h.appendChild(r)
				}
			if(b.length==0&&this.oP.shownoresults){
				var r=_b.DOM.cE("li",{className:"as_warning"},this.oP.noresults);h.appendChild(r)
			}
			d.appendChild(h);
			var s=_b.DOM.cE("div",{className:"as_corner"});
			var t=_b.DOM.cE("div",{className:"as_bar"});
			var u=_b.DOM.cE("div",{className:"as_footer"});u.appendChild(s);u.appendChild(t);d.appendChild(u);
			var v=_b.DOM.getPos(this.fld);
			d.style.left=v.x+"px";
			d.style.top=(v.y+this.fld.offsetHeight+this.oP.offsety)+"px";
			d.style.width=this.fld.offsetWidth+"px";
			d.onmouseover=function(){
				c.killTimeout()
			};
			d.onmouseout=function(){
				c.resetTimeout()
			};
			document.getElementsByTagName("body")[0].appendChild(d);
			this.iHigh=0;
			var c=this;
			this.toID=setTimeout(function(){
			c.clearSuggestions()},this.oP.timeout)
		};
		_b.AutoSuggest.prototype.changeHighlight=function(a){
			var b=_b.DOM.gE("as_ul");
			if(!b)return false;var n;
			if(a==40)n=this.iHigh+1;
			else if(a==38)n=this.iHigh-1;
			if(n>b.childNodes.length)
				n=b.childNodes.length;
			if(n<1)
				n=1;this.setHighlight(n)
		};
		_b.AutoSuggest.prototype.setHighlight=function(n){
			var a=_b.DOM.gE("as_ul");
			if(!a)return false;
			if(this.iHigh>0)
				this.clearHighlight();
			this.iHigh=Number(n);
			a.childNodes[this.iHigh-1].className="as_highlight";
			this.killTimeout()
		};
		_b.AutoSuggest.prototype.clearHighlight=function(){
			var a=_b.DOM.gE("as_ul");
			if(!a)return false;
			if(this.iHigh>0){
				a.childNodes[this.iHigh-1].className="";this.iHigh=0
			}
		};
		_b.AutoSuggest.prototype.setHighlightedValue=function(){
			if(this.iHigh){
				this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;
				this.fld.focus();
				if(this.fld.selectionStart)
					this.fld.setSelectionRange(this.sInp.length,this.sInp.length);
				this.clearSuggestions();
				if(typeof(this.oP.callback)=="function") {
					this.oP.callback(this.aSug[this.iHigh-1])
				}
			}
		};
		_b.AutoSuggest.prototype.killTimeout=function(){
						clearTimeout(this.toID)
					};
					_b.AutoSuggest.prototype.resetTimeout=function(){
						clearTimeout(this.toID);
						var a=this;
						this.toID=setTimeout(function(){
							a.clearSuggestions()
						},1000)
					};
					_b.AutoSuggest.prototype.clearSuggestions=function(){
						this.killTimeout();
						var a=_b.DOM.gE(this.idAs);
						var b=this;
						if(a){
							var c=new _b.Fader(a,1,0,250,function(){
								_b.DOM.remE(b.idAs)})
							}
						};
						if(typeof(_b.Ajax)=="undefined")
							_b.Ajax={};
						_b.Ajax=function(){
							this.req={};
							this.isIE=false
						};
						_b.Ajax.prototype.makeRequest=function(a,b,c,d){
							if(b!="POST")b="GET";
							this.onComplete=c;
							this.onError=d;
							var e=this;
							if(window.XMLHttpRequest){
								this.req=new XMLHttpRequest();
								this.req.onreadystatechange=function(){
									e.processReqChange()
								};
								this.req.open("GET",a,true);
								this.req.send(null)
							}
							else if(window.ActiveXObject){
								this.req=new ActiveXObject("Microsoft.XMLHTTP");
								if(this.req){
									this.req.onreadystatechange=function(){
										e.processReqChange()
										};
									this.req.open(b,a,true);
									this.req.send()
								}
							}
						};
						_b.Ajax.prototype.processReqChange=function(){
							if(this.req.readyState==4){
								if(this.req.status==200){
									this.onComplete(this.req)
								}else{
									this.onError(this.req.status)
								}
							}
						};
						if(typeof(_b.DOM)=="undefined")
							_b.DOM={};
						_b.DOM.cE=function(b,c,d,e){
							var f=document.createElement(b);
							if(!f)return 0;
							for(var a in c)
								f[a]=c[a];
							var t=typeof(d);
							if(t=="string"&&!e)
								f.appendChild(document.createTextNode(d));
							else if(t=="string"&&e)f.innerHTML=d;
							else if(t=="object")f.appendChild(d);
							return f
						};
						_b.DOM.gE=function(e){
							var t=typeof(e);
							if(t=="undefined")
								return 0;
							else if(t=="string"){
								var a=document.getElementById(e);
							if(!a)
								return 0;
							else if(typeof(a.appendChild)!="undefined")
								return a;
							else 
								return 0
						}
						else if(typeof(e.appendChild)!="undefined")
							return e;
						else 
							return 0
					};
					_b.DOM.remE=function(a){
						var e=this.gE(a);
						if(!e)
							return 0;
						else if(e.parentNode.removeChild(e))
							return true;
						else 
							return 0
					};
					_b.DOM.getPos=function(e){
						var e=this.gE(e);
						var a=e;
						var b=0;
						if(a.offsetParent){
							while(a.offsetParent){
								b+=a.offsetLeft;a=a.offsetParent
							}
						}
						else if(a.x)
							b+=a.x;
						var a=e;
						var c=0;
						if(a.offsetParent){
							while(a.offsetParent){
								c+=a.offsetTop;a=a.offsetParent
							}
						} 
						else if(a.y)
							c+=a.y;
						return{x:b,y:c}
					};
					if(typeof(_b.Fader)=="undefined")
						_b.Fader={};
					_b.Fader=function(a,b,c,d,e){
						if(!a)
							return 0;
						this.e=a;
						this.from=b;
						this.to=c;
						this.cb=e;
						this.nDur=d;
						this.nInt=50;
						this.nTime=0;
						var p=this;
						this.nID=setInterval(function(){
							p._fade()},this.nInt)
						};
						_b.Fader.prototype._fade=function(){
							this.nTime+=this.nInt;
							var a=Math.round(this._tween(this.nTime,this.from,this.to,this.nDur)*100);
							var b=a/100;
							if(this.e.filters){
								try{
									this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity=a
								}catch(e){
									this.e.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity='+a+')'
								}
							}else{
								this.e.style.opacity=b
							}
							if(this.nTime==this.nDur){
								clearInterval(this.nID);
								if(this.cb!=undefined)
									this.cb()
							}
						};
						_b.Fader.prototype._tween=function(t,b,c,d){
							return b+((c-b)*(t/d))
					};
