/* Copyright (c) 1995-2008 Choice Hotels International, Inc. All Rights Reserved. */
function $A(args,start,end){if(!start)start=0;if(end==null)end=args.length;var result=new Array(end-start);var index=0;for(var i=start;i<end;i++)result[index++ ]=args[i];return result};Function.prototype.bind=function(inst){var method=this,args=$A(arguments,1);return function(){return method.apply(inst,args.concat($A(arguments)))}};var $Class={create:function(proto){var ctor=function(){if(this._ctor&&((arguments.length!=1)||(arguments[0]!==$Class.__noctor__))){return this._ctor.apply(this,arguments)||this}};ctor.prototype=proto;ctor.extend=function(proto){return $Class.extend(this,proto)};return ctor},extend:function(superclass,proto){var base=superclass.extend?new superclass($Class.__noctor__):new superclass();$Class.overrideAll(base,proto);return $Class.create(base)},add:function(dest,src){for(var name in src)dest[name]=src[name];return dest},clone:function(obj){return obj?this.add({},obj):null},override:function(original,newmethod){return (((typeof original)=="function")&&((typeof newmethod)=="function")&&(original!=newmethod))?function(){var prev=this.$super;this.$super=original;var result=newmethod.apply(this,arguments);this.$super=prev;return result}:newmethod},overrideAll:function(base,proto){if(proto){for(prop in proto){base[prop]=$Class.override(base[prop],proto[prop])}}},convert:function(obj,cls,args){if(obj instanceof cls)return obj;var out=cls.prototype._ctor?new cls($Class.__noctor__):new cls($A(arguments,2));for(var key in obj){if(!cls.prototype[key])out[key]=obj[key]}if(out._ctor)out._ctor.apply(out,$A(arguments,2));return out},pureVirtual:function(){throw new Error("Pure virtual function call.")},__noctor__:new Object};function $emptyFunction(){return null};function $globals(){return this};var $pageLoaded=false;$(document).ready(function(){$pageLoaded=true});var CallbackChain=$Class.create({_ctor:function(endcond){this.callbacks=[];this.endcond=endcond},dispose:function(){this.callbacks.clear()},add:function(cb){for(var i=0;i<arguments.length;i++){if(arguments[i])this.callbacks.push(arguments[i])}},remove:function(cb){for(var i=0;i<arguments.length;i++){for(var j=this.callbacks.length-1;j>=0;j--){if(this.callbacks[j]===arguments[i]){this.callbacks.splice(j,1);break}}}},size:function(){return this.callbacks.length},head:function(){return this.callback.bind(this)},callback:function(){return this.applyCallback(arguments)},applyCallback:function(args){if(this.endcond){for(var i=0;i<this.callbacks.length;i++){try{if(this.endcond==this.callbacks[i].apply(null,args))return true}catch(error){}}}else {for(var i=0;i<this.callbacks.length;i++){try{this.callbacks[i].apply(null,args)}catch(error){}}}return false}});var EventListeners=$Class.create({_ctor:function(endcond){this.chains={};this.endcond=endcond},dispose:function(){for(var prop in this.chains)this._disposeList(prop);this.chains=null},_disposeList:function(name){var chain=this.chains[prop];if(chain&&(chain instanceof CallbackChain)){chain.dispose();this.chains[prop]=null}},add:function(name,func){var callbacks=this.chains[name];if(callbacks==null){callbacks=new CallbackChain(this.endcond);this.chains[name]=callbacks}callbacks.add(func)},remove:function(name,func){var callbacks=this.chains[name];if(callbacks!=null)callbacks.remove(func)},clear:function(name){if(!name){this.dispose();this.chains={}}else this._disposeList(name)},has:function(name){var chain=this.chains[name];return chain&&(chain.size()>0)},fireEvent:function(name,args){var chain=this.chains[name];return chain?chain.applyCallback($A(arguments,1)):false}});var Event={addEventHandler:function(obj,name,handler,capture){if(obj.addEventListener)obj.addEventListener(name,handler,capture);else {name="on"+name;if(obj.attachEvent)obj.attachEvent(name,handler);else obj[name]=handler}return handler},removeEventHandler:function(obj,name,handler,capture){if(obj.removeEventListener)obj.removeEventListener(name,handler,capture);else {name="on"+name;if(obj.detachEvent)obj.detachEvent(name,handler);else obj[name]=function(){}}},handler:function(handler){return Event.handlerWrapper.bind(null,handler)},handlerWrapper:function(handler,event){event=event||window.event;return handler(event,event.target||event.srcElement)},cancelBubble:function(event){if(event.stopPropagation)event.stopPropagation();else if(event.cancelBubble!=null)event.cancelBubble=true},preventDefault:function(event){if(event.preventDefault)event.preventDefault();else if(event.returnValue)event.returnValue=false},get:function(event){return event||window.event},target:function(event){var ev=Event.get(event);return ev.target||ev.srcElement}};function $iterate(obj,func,start,end){var reverse=(start>end);if(reverse){var tmp=start;start=end;end=tmp}if(end==null)end=obj.length;if(start==null)start=0;while(start<end){var idx=reverse?end-1:start;if(func(idx,obj[idx])==false)break;if(reverse)--end;else ++start}return start==end};Array.prototype.binarySearch=function(value,func,start,end){if(!func){func=(typeof value=="string")?function(obj1,obj2){return obj1.localeCompare(obj2)}:function(obj1,obj2){if(obj1>obj2)return 1;else if(obj1<obj2)return -1;return 0}}var low=start?start:0;var high=(end!=null)?Math.min(end,this.length):this.length;while(low<high){var mid=(high+low)>>1;var test=func(value,this[mid]);if(test==0)return mid;if(test>0)low=mid+1;else high=mid}return -(low+1)};Array.prototype.iterate=function(func,start,end){return $iterate(this,func,start,end)};Array.prototype.clear=function(){$iterate(this,function(index,value){this[index]=null})};var StringBuffer=$Class.create({_ctor:function(initial){this.strings=new Array;if(initial)this.strings.push(initial)},append:function(obj){if(obj!=null)this.strings.push(obj.toString());return this},toString:function(){return this.strings.join("")}});String.prototype.trim=function(){return this.replace(/^\s*(.*?)\s*$/,"$1")};String.prototype.startsWith=function(str){return (this.length>=str.length)&&(this.substring(0,str.length)==str)};String.prototype.endsWith=function(str){return (this.length>=str.length)&&(this.slice(-str.length)==str)};