/* Copyright (c) 1995-2008 Choice Hotels International, Inc. All Rights Reserved. */
var Suggestions=$Class.create({_ctor:function(href,filters,states,countries){this.MIN_TYPED_CHARS=4;this.filters=filters;this.states=states;this.countries=countries;this.ajax=new RPC(href,{onSuccess:this.ajaxResponse.bind(this)});this.ctrl=null;this.values=[];this.rqval=null},addItemDOM:function(parent,item){var span=document.createElement("span");span.className="placename";span.appendChild(document.createTextNode(item.getPlaceName()));parent.appendChild(span);parent.appendChild(document.createTextNode(", "));if(item.getState()!=""){span=document.createElement("span");span.className="sugstate";span.appendChild(document.createTextNode(item.getState()));parent.appendChild(span);parent.appendChild(document.createTextNode(", "))}span=document.createElement("span");span.className="sugcountry";span.appendChild(document.createTextNode(item.getCountry()));parent.appendChild(span)},selectItem:function(item){if(this.states){this.states.selectedIndex=0;if(item.getState()!=""){var code=item.getState()+item.getCountry();for(var i=0;i<this.states.options.length;i++){if(this.states.options[i].value==code){this.states.selectedIndex=i;break}}}}if(this.countries){this.countries.selectedIndex=0;for(var i=0;i<this.countries.options.length;i++){if(this.countries.options[i].value==item.getCountry()){this.countries.selectedIndex=i;break}}}return item.getPlaceName()},getItemText:function(item){return item.getPlaceName()},requestSuggestions:function(ctrl,typeahead){var val=ctrl.textbox.value;this.ctrl=ctrl;if((val==null)||(val.length<this.MIN_TYPED_CHARS)){this.values=[];this.rqval=null;this.ctrl.autosuggest([],typeahead)}else {val=val.toLowerCase();if((this.rqval!=null)&&(val.indexOf(this.rqval)==0)){this.ctrl.autosuggest((this.rqval==val)?this.values:this.filterValues(val),typeahead)}else if((this.rqval!=null)&&(this.rqval.indexOf(val)==0))this.ctrl.autosuggest([],typeahead);else {this.values=[];this.rqval=val;this.ajax.invoke("PlaceSuggest",val,[],this.filters)}}},ajaxResponse:function(result){if((result!=null)&&(result.length>0)){this.values=this.filterResponse(result);this.ctrl.autosuggest(this.values,null)}else {this.rqval=null;this.values=[]}},filterResponse:function(result){return result},filterValues:function(val){if(this.values!=null){val=this.collationKey(val);var start=0;for(start=0;start<this.values.length;start++){if(this.collationKey(this.values[start].getLookupName())>=val)break}var endval=val+"zzz";var end;for(end=start;end<this.values.length;end++){if(this.collationKey(this.values[end].getLookupName())>endval)break}if(end>start)return this.values.slice(start,end)}return []},collationKey:function(str){var buffer=null;for(var i=0;i<str.length;i++){var code=str.charCodeAt(i);if(code>128){if(buffer==null)buffer=new StringBuffer(str.substring(0,i));if((code>=0xC0)&&(code<=0x17F)){var c=this.collationMap[(code-0xC0)>>4].charAt(code&0xF);if(c=='.'){switch(code){case 0xC6:;buffer.append("AE");break;case 0xDF:;buffer.append("ss");break;case 0xE6:;buffer.append("ae");break;case 0x132:;buffer.append("IJ");break;case 0x133:;buffer.append("ij");break;case 0x152:;buffer.append("OE");break;case 0x153:;buffer.append("oe");break;default: ;buffer.append(String.fromCharCode(code));break}}else buffer.append(c)}else {var pair=null;switch(code){case 0x1C4:;pair="DZ";break;case 0x1C5:;pair="Dz";break;case 0x1C6:;pair="dz";break;case 0x1C7:;pair="LJ";break;case 0x1C8:;pair="Lj";break;case 0x1C9:;pair="lj";break;case 0x1CA:;pair="NJ";break;case 0x1CB:;pair="Nj";break;case 0x1CC:;pair="nj";break;case 0x1E2:;pair="AE";break;case 0x1E3:;pair="ae";break;case 0x1F1:;pair="DZ";break;case 0x1F2:;pair="Dz";break;case 0x1F3:;pair="dz";break;case 0x1FC:;pair="AE";break;case 0x1FD:;pair="ae";break}if(pair!=null)buffer.append(pair);else buffer.append(String.fromCharCode(code))}}else if((code<=47)||((code<=64)&&(code>=58))){if(buffer==null)buffer=new StringBuffer(str.substring(0,i))}else if(buffer!=null)buffer.append(String.fromCharCode(code))}if(buffer!=null)str=buffer.toString();return str.toLowerCase()},collationMap:["AAAAAA.CEEEEIIII","DNOOOOO\u00D7OUUUUYT.","aaaaaa.ceeeeiiii","dnooooo\u00F7ouuuuyty","AaAaAaCcCcCcCcDd","DdEeEeEeEeEeGgGg","GgGgHhHhIiIiIiIi","Ii..JjKkKLlLlLlL","lLlNnNnNnnNnOoOo","Oo..RrRrRrSsSsSs","SsTtTtTtUuUuUuUu","UuUuWwYyYZzZzZzf"]});var Suggestion=$Class.create({_ctor:function(){},init:function(name,country,state,latitude,longitude,areatype,areaid,srchradius){this.placename=name;this.country=country;this.state=state;this.latitude=latitude;this.longitude=longitude;this.areatype=areatype;this.areaid=areaid;this.srchradius=srchradius},getPlaceName:function(){return this.placename},getLookupName:function(){return this.mispelling?this.mispelling:this.placename},getCountry:function(){return this.country},getState:function(){return this.state},getLatitude:function(){return this.latitude},getLongitude:function(){return this.longitude},getAreaType:function(){return this.areatype},getAreaId:function(){return this.areaid},getSearchRadius:function(){return this.srchradius},toString:function(){return "[placename="+this.placename+",country="+this.country+",state="+this.state+",latitude="+this.latitude+",longitude="+this.longitude+",areatype="+this.areatype+",areaid="+this.areaid+",srchradius="+this.srchradius+"]"}});RPC.registerClass(Suggestion,"Suggestion");