var CAddressHandlerBase=Class.create({initialize:function(E,D,G,F,C){this.inputElement=$(E);this.displayElement=$(D);this.addrType=G;this.Validate=F;this.addressDiv=$("AddressDiv");this.selIndex=-1;this.serverIndex=-1;this.maxIndex=0;this.elArray=[];this.active=false;this.firstTime=false;this.firstPrem=false;this.inputValue="";this.requestPending=false;this.ajaxLoader=null;this.premiseElement=null;this.premiseString=C;this.premiseValue="";this.premiseDirty=false;this.bareAddress="";this.fOnFocus=this.OnFocus.bindAsEventListener(this);this.fOnBlur=this.OnBlur.bindAsEventListener(this);this.fOnKeyDown=this.OnKeyDown.bindAsEventListener(this);this.fOnKeyUp=this.OnKeyUp.bindAsEventListener(this);this.inputElement.observe("focus",this.fOnFocus);this.inputElement.observe("blur",this.fOnBlur);this.inputElement.observe("keydown",this.fOnKeyDown);this.inputElement.observe("keyup",this.fOnKeyUp);this.inputElement.show();var B=this.inputElement.adjacent("img");if(B.length>0){this.ajaxLoader=$(B[0]);
this.ajaxLoader.style.left=this.inputElement.cumulativeOffset().left+this.inputElement.getWidth()+8+"px"}var A=this.inputElement.adjacent("input");if((C)&&(A.length>0)){this.premiseElement=$(A[0]);this.premiseElement.style.left=this.inputElement.cumulativeOffset().left+this.inputElement.getWidth()+50+"px";this.premiseElement.show();this.fOnPremFocus=this.OnPremFocus.bindAsEventListener(this);this.fOnPremBlur=this.OnPremBlur.bindAsEventListener(this);this.fOnPremKeyUp=this.OnPremKeyUp.bindAsEventListener(this);this.premiseElement.observe("focus",this.fOnPremFocus);this.premiseElement.observe("blur",this.fOnPremBlur);this.premiseElement.observe("keyup",this.fOnPremKeyUp)}},destruct:function(){this.inputElement.stopObserving("focus",this.fOnFocus);this.inputElement.stopObserving("blur",this.fOnBlur);this.inputElement.stopObserving("keydown",this.fOnKeyDown);this.inputElement.stopObserving("keyup",this.fOnKeyUp);if(this.ajaxLoader){this.ajaxLoader.hide()}if(this.premiseElement){this.premiseElement.hide();
this.premiseElement.stopObserving("focus",this.fOnPremFocus);this.premiseElement.stopObserving("blur",this.fOnPremBlur);this.premiseElement.stopObserving("keyup",this.fOnPremKeyUp)}},MAX_ROWS:20,Prompt:function(A){if(A){this.firstTime=true;this.inputElement.setStyle({fontStyle:"italic"});this.inputElement.value=A+"    ";if((this.premiseString)&&(this.premiseElement)){this.firstPrem=true;this.premiseElement.setStyle({fontStyle:"italic"});this.premiseElement.value=this.premiseString+"    "}}},OnBlur:function(A){this.Hide();CAddressHandlerBase.ActiveHandler=null},OnKeyDown:function(A){if(this.active){switch(A.keyCode){case Event.KEY_ESC:this.Hide();break;case Event.KEY_UP:this.MoveHighlight(-1);break;case Event.KEY_DOWN:this.MoveHighlight(1);break;case Event.KEY_RETURN:this.Select();break}}},OnKeyUp:function(A){if((A.keyCode==Event.KEY_ESC)||(A.keyCode==Event.KEY_RETURN)){this.inputElement.value=this.inputValue}else{this.OnFocus()}},OnFocus:function(){CAddressHandlerBase.ActiveHandler=this;
if(this.firstTime){this.firstTime=false;this.inputElement.value="";this.inputValue="";this.inputElement.setStyle({fontStyle:"normal"})}var A=this.inputElement.value;A=A.replace(/^\s+/,"");A=A.replace(/\s+$/,"");return A},OnPremFocus:function(){CAddressHandlerBase.ActiveHandler=this;if(this.firstPrem){this.firstPrem=false;this.premiseElement.value="";this.premiseElement.setStyle({fontStyle:"normal"})}},OnPremKeyUp:function(){if(this.premiseValue!=this.premiseElement.value){this.premiseValue=this.premiseElement.value;this.premiseDirty=true;if(this.bareAddress){var A=(this.premiseValue)?(this.premiseValue+", "):"";this.displayElement.innerHTML=A+this.bareAddress}}},OnPremBlur:function(){this.OnPremKeyUp();if((this.bareAddress)&&(this.premiseDirty)){new Ajax.Request("MAjax.asp",{parameters:{A:this.addrType,Premise:(this.premiseValue)?(this.premiseValue+", "):""}})}},Hide:function(){Shadower.deshadow(this.addressDiv);document.getElementById("FloatDiv").style.visibility="hidden";document.getElementById("AddressDiv").style.visibility="hidden";
hideListOnClick=true;this.active=false},Show:function(B){CAddressHandlerBase.ActiveHandler=this;this.addressDiv.innerHTML=B;var A=$("FloatDiv");A.style.left=this.inputElement.offsetLeft-5+"px";A.style.top=this.inputElement.offsetTop+this.inputElement.offsetHeight-2+"px";this.selIndex=-1;this.addressDiv.style.visibility="visible";A.style.visibility="visible";Shadower.shadow(this.addressDiv,shadowOptions);hideListOnClick=true;this.active=true;this.elArray=this.addressDiv.descendants()},Highlight:function(A){if((A>=0)&&(A<this.elArray.length)&&(A<this.MAX_ROWS)&&(A!=this.selIndex)){if((this.selIndex>=0)&&(this.selIndex<this.elArray.length)){this.elArray[this.selIndex].className="Background"}this.selIndex=A;this.elArray[this.selIndex].className="Highlight"}},MoveHighlight:function(A){this.Highlight(this.selIndex+A)},Lookup:function(A){if(A){this.requestPending=true;this.serverIndex=-1;this.premiseDirty=false;if(this.ajaxLoader){this.ajaxLoader.show()}var B=(this.premiseValue)?(this.premiseValue+", "):"";
new Ajax.Request("MAjax.asp",{onSuccess:this.OnSuccess.bind(this),onComplete:this.OnComplete.bind(this),parameters:{A:this.addrType,S:A,P:B}})}},OnComplete:function(A){this.requestPending=false;if(this.ajaxLoader){this.ajaxLoader.hide()}},OnSuccess:function(C){var A=C.responseText;var B=A.substr(0,1);A=A.substr(1);if(B=="E"){this.SelectAddress(A,-1)}else{if(B=="S"){this.SelectAddress(A,0)}else{if(B=="N"){this.SelectAddress("",-1)}else{this.ShowAddrList(A)}}}},SelectAddress:function(C,B){this.Hide();this.serverIndex=B;var A=((B>=0)&&(this.premiseValue))?(this.premiseValue+", "):"";this.displayElement.innerHTML=A+C;this.bareAddress=(B>=0)?C:"";this.Validate(B>=0)},ShowAddrList:function(){}});CAddressHandlerBase.ActiveHandler=null;var CAddressHandlerSearch=Class.create(CAddressHandlerBase,{initialize:function($super,C,B,E,D,A){$super(C,B,E,D,"Extra Information");this.searchValue="";this.timer=null;this.fAddressChange=this.AddressChange.bind(this);this.nationwide=A},Prompt:function($super){$super((this.nationwide?"Nationwide":"Local")+" Address Search")
},OnFocus:function($super){var E=$super();if(E==this.inputValue){return }this.inputValue=E;this.displayElement.innerHTML="&nbsp;";if(this.timer){clearTimeout(this.timer);this.timer=null}var C=0;var B=0;var A=E.match(/^[\s\d]*/);if(A){C=A[0].length}for(var D=C;D<E.length;D++){if(E.charAt(D)!=" "){B++}}if(B>1){var F=(B<3)?1000:(B<4)?900:(B<6)?700:500;this.timer=setTimeout(this.fAddressChange,F)}},AddressChange:function(){this.timer=null;if(this.inputValue!=this.searchValue){if(this.requestPending){this.timer=setTimeout(this.fAddressChange,300)}else{this.searchValue=this.inputValue;this.Lookup(this.searchValue+(this.nationwide?"*":""))}}},ShowAddrList:function(A){this.Show(A)},Select:function(){this.Hide();if((this.selIndex>=0)&&(this.selIndex<this.MAX_ROWS)&&(this.selIndex<this.elArray.length)){var A=this.elArray[this.selIndex].innerHTML;this.SelectAddress(A.replace(/&nbsp;/g,""),this.selIndex)}}});var CAddressHandlerShortcuts=Class.create(CAddressHandlerBase,{initialize:function($super,C,B,E,D,A){$super(C,B,E,D,(typeof A.premise=="undefined")?"":A.premise);
this.shortcuts=A;this.pattern=null;this.ajaxLoader=null},Prompt:function($super){$super(this.shortcuts.group)},OnFocus:function($super){var F=$super();if(((this.active)||(F!=""))&&(F==this.inputValue)){return }this.inputValue=F;this.pattern=null;if(F){var D=F.split(/\s+/);var G="\\b"+D[0];for(var C=1;C<D.length;C++){G+=".*?\\b"+D[C]}this.pattern=new RegExp(G,"i")}var B="";var E=this.shortcuts.shortcuts;var A=0;for(var C=0;C<E.length;C++){if((this.pattern)&&(!this.pattern.test(E[C][1]))){continue}if(A<this.MAX_ROWS){B+="<div class='Background' onmouseover='CAddressHandlerBase.ActiveHandler.Highlight("+A+")'>";B+="&nbsp;"+String(E[C][1])+"&nbsp;</div>"}A++}if(A==0){this.Hide();this.selIndex=-1;this.SelectAddress("<span class='Error'>No Match</span>",-1)}else{if(A==1){this.selIndex=0;this.Select()}else{if(A>this.MAX_ROWS){B+="<div class='Background' style='font-weight: bold; text-align: right;'>. . .</div>"}this.Show(B)}}},Select:function(){this.Hide();if((this.selIndex>=0)&&(this.selIndex<this.shortcuts.shortcuts.length)){var E=this.inputValue.toLowerCase();
var B=this.selIndex;if(this.pattern){var D=this.shortcuts.shortcuts;var A=0;for(var C=0;C<D.length;C++){if(this.pattern.test(D[C][1])){if(A==B){B=C;break}A++}}}this.Lookup(this.shortcuts.shortcuts[B][0]+"/")}}});