
Homescape.fn.geo={};Homescape.fn.geo.stateAbbrByName=function(needle,inverse){if(inverse===undefined){inverse=false;}
var states={"Alaska":"AK","Alabama":"AL","Arkansas":"AR","Arizona":"AZ","California":"CA","Colorado":"CO","Connecticut":"CT","D.C.":"DC","District of Columbia":"DC","Delaware":"DE","Florida":"FL","Georgia":"GA","Guam":"GU","Hawaii":"HI","Iowa":"IA","Idaho":"ID","Illinois":"IL","Indiana":"IN","Kansas":"KS","Kentucky":"KY","Louisiana":"LA","Massachusetts":"MA","Maryland":"MD","Maine":"ME","Michigan":"MI","Minnesota":"MN","Missouri":"MO","Mississippi":"MS","Montana":"MT","North Carolina":"NC","North Dakota":"ND","Nebraska":"NE","New Hampshire":"NH","New Jersey":"NJ","New Mexico":"NM","Nevada":"NV","New York":"NY","Ohio":"OH","Oklahoma":"OK","Oregon":"OR","Pennsylvania":"PA","Rhode Island":"RI","South Carolina":"SC","South Dakota":"SD","Tennessee":"TN","Texas":"TX","Utah":"UT","Virginia":"VA","Vermont":"VT","Washington":"WA","Wisconsin":"WI","West Virginia":"WV","Wyoming":"WY"};var converted="";jQuery.each(states,function(stateName,stateCode){if(needle.toUpperCase()==stateName.toUpperCase()){converted=stateCode;}else if(inverse&&needle.toUpperCase()==stateCode.toUpperCase()){converted=stateName;}});return converted;};Homescape.fn.geo.isZipcode=function(val){return val.match(/\d{5}/);};Homescape.fn.geo.isNumeric=function(val){return val.match(/^\d+$/);};Homescape.fn.geo.parseAreaText=function(areaName){jQuery.log('Parsing Area Text');var parsedArea={areaName:'',stateName:'',stateCode:'',zipCode:''};if(areaName===undefined||areaName===''){jQuery.log("geoParseAreaText: areaName parameter was empty.");return parsedArea;}
areaName=jQuery.trim(areaName);if(areaName.length==5&&Homescape.fn.geo.isZipcode(areaName)){parsedArea.zipCode=areaName;}else{var results=Homescape.Regex.cityState_US.exec(areaName);if(results&&results!==undefined&&results.constructor===Array){if(DEBUG){jQuery.each(results,function(i,n){jQuery.log('regex_cityState result['+i+'] = '+n);});}
if(results[1]!==undefined){parsedArea.areaName=jQuery.trim(results[1]);}
if(results[2]!==undefined){parsedArea.stateName=jQuery.trim(results[2]);if(parsedArea.stateName.length==2){parsedArea.stateCode=parsedArea.stateName;parsedArea.stateName=Homescape.fn.geo.stateAbbrByName(parsedArea.stateCode,true);}else{parsedArea.stateCode=Homescape.fn.geo.stateAbbrByName(parsedArea.stateName);}
parsedArea.stateCode=parsedArea.stateCode.toUpperCase();}}else{parsedArea.areaName=areaName;}}
jQuery.log('areaName = '+parsedArea.areaName+" : stateName = "+parsedArea.stateName+" : stateCode = "+parsedArea.stateCode+" : zipCode = "+parsedArea.zipCode);return parsedArea;};Homescape.fn.geo.lookupMarket=function(location,onSuccess,onError){var criteria={area:'',state:''};if(onSuccess===undefined||onSuccess.constructor!==Function){onSuccess=function(){alert('success');return false;};}
if(onError===undefined||onError.constructor!==Function){onError=function(errorMessage){alert(errorMessage);return false;};}
if(location.areaName===''){if(location.zipCode!==''){criteria.area=location.zipCode;}}else if(location.stateCode!==''){criteria.area=location.areaName;criteria.state=location.stateCode;}
if(criteria.area===''){onError('Please enter city and state or zip');return false;}else{jQuery.ajax({dataType:'jsonp',url:Homescape.scriptBase+"ajax/json/marketLookup",data:criteria,success:onSuccess,error:onError});}
return true;};Homescape.fn.geo.lookupSuggestedAreas=function(location,onSuccess,onError){if(onSuccess===undefined||onSuccess.constructor!==Function){onSuccess=function(){alert('success');return false;};}
if(onError===undefined||onError.constructor!==Function){onError=function(errorMessage){alert(errorMessage);return false;};}
jQuery.ajax({dataType:'jsonp',url:Homescape.scriptBase+'ajax/json/didYouMean',data:{city:location.areaName,state:location.stateCode},success:onSuccess,error:onError});};Homescape.fn.geo.didYouMean=function(location,onSuccess,onError,onSuggestedAreaClick){if(onSuccess===undefined||onSuccess.constructor!==Function){onSuccess=function(){alert('success');return false;};}
if(onError===undefined||onError.constructor!==Function){onError=function(errorMessage){alert(errorMessage);return false;};}
if(onSuggestedAreaClick===undefined||onSuggestedAreaClick.constructor!==Function){onSuggestedAreaClick=function(area,geoAreaId){alert('"'+area+'" ('+geoAreaId+') area clicked');return false;};}
Homescape.fn.geo.lookupSuggestedAreas(location,function(json){var originalArea='';if(location.stateCode!==''){originalArea=location.areaName+', '+location.stateCode;}else{originalArea=location.zipCode;}
if(json===undefined||json.constructor!==Array){var eErrorMessage=jQuery('<div class="invalidArea"><p class="error"><span class="hsred">Sorry!</span> We couldn\'t find a location for <span class="hsred">\"'+originalArea+'\"</span></p></div>');var eHelpBullets=jQuery('<p class="errorBullets error"></p>');eHelpBullets.append('&bull; Include State when searching for a City, like "Chicago, IL"<br/>').append('&bull; Make sure all your words are spelled correctly.<br/>').append('&bull; Make sure your ZIP Code is correct when searching by ZIP Code only.<br/>');eErrorMessage.append(eHelpBullets);onError(eErrorMessage);return false;}else if(json.length==1&&json[0].area!==undefined){onSuggestedAreaClick(json[0].area+', '+json[0].state,json[0].geoAreaId);return false;}else{var eHolder=jQuery('<div></div>').append('<p class="error">Did you mean...</p>');var eCityList=jQuery('<p class="suggestedAreas error"></p>');var areaMatches=0;var areaMatched='';jQuery.each(json,function(i,n){if(n.area.toLowerCase()==location.areaName.toLowerCase()){areaMatches++;areaMatched=n;}
var areaStateCombo=n.area;if(n.state!==''){areaStateCombo+=', '+n.state;}
if(location.stateCode===''&&originalArea.toUpperCase()==areaStateCombo.toUpperCase()){onSuggestedAreaClick(areaStateCombo,n.geoAreaId);return false;}
jQuery('<p class="area" rel="'+n.geoAreaId+'"><a href="'+Homescape.Conf.appRoot+n.resultsUrl+'">'+areaStateCombo+'</a>?</p>').click(function(){onSuggestedAreaClick(jQuery(this).text().replace('?',''),jQuery(this).attr('rel'));return false;}).appendTo(eCityList);});if(areaMatches==1){onSuggestedAreaClick(areaMatched.area+', '+areaMatched.state,areaMatched.geoAreaId);return false;}else{eHolder.append(eCityList);onError(eHolder);}}},onError);};jQuery.geoAutocomplete=function(input,options){var me=this;var _input=jQuery(input);_input.attr("autocomplete","off");if(options.inputClass){_input.addClass(options.inputClass);}
var results=document.createElement("div");var _results=jQuery('<div></div>');function findPos(obj){var curleft=obj.offsetLeft||0;var curtop=obj.offsetTop||0;while((obj=obj.offsetParent)){curleft+=obj.offsetLeft;curtop+=obj.offsetTop;}
return{x:curleft,y:curtop};}
var pos=findPos(input);_results.hide().addClass(options.resultsClass).css({position:"absolute",top:(pos.y+input.offsetHeight)+"px",left:pos.x+"px"});jQuery("body").append(_results);input.autocompleter=me;input.lastSelected=_input.val();var timeout=null;var prev="";var active=-1;var cache={};var keyb=false;_input.keydown(function(e){try{switch(e.keyCode){case 38:e.preventDefault();moveSelect(-1);return false;break;case 40:e.preventDefault();moveSelect(1);return false;break;case 9:case 13:if(selectCurrent()){e.preventDefault();}else{hideResultsNow();}
break;default:active=-1;if(timeout){clearTimeout(timeout);}
timeout=setTimeout(onChange,options.delay);break;}}catch(_e){jQuery.log(_e);}}).blur(function(){hideResults();});function hideResultsNow(){if(timeout){clearTimeout(timeout);}
_input.removeClass(options.loadingClass);if(_results.is(":visible")){_results.hide();}
if(options.mustMatch){var v=_input.val();if(v!=input.lastSelected){selectItem(null);}}
if(jQuery.browser.msie&&jQuery.browser.version=='6.0'){jQuery('select').show();}}
hideResultsNow();function onChange(){var v=_input.val();if(v==prev){return;}
prev=v;if(v.length>=options.minChars){_input.addClass(options.loadingClass);requestData(v);}else{_input.removeClass(options.loadingClass);hideResultsNow();}}
function moveSelect(step){var lis=jQuery("li",_results);if(!lis){return;}
active+=step;if(active<0){active=lis.size()-1;}else if(active>=lis.size()){active=0;}
lis.removeClass("over");jQuery(lis[active]).addClass("over");}
function selectCurrent(){var li=jQuery("li.over",_results)[0];if(!li){var _li=jQuery("li",_results);if(options.selectOnly){if(_li.length==1){li=_li[0];}}else if(options.selectFirst){li=_li[0];}}
if(li){selectItem(li);return true;}else{return false;}}
function selectItem(li){if(!li){jQuery('<li/>');}else{li=jQuery(li);}
var v=jQuery.trim(li.text()!==''?li.text():_input.val());input.lastSelected=v;prev=v;_results.empty();_input.val(v);hideResultsNow();if(options.onItemSelect){setTimeout(function(){options.onItemSelect(li);},1);}}
function hideResults(){if(timeout){clearTimeout(timeout);}
timeout=setTimeout(hideResultsNow,200);}
function receiveData(q,data){if(data&&data.length>0){_input.removeClass(options.loadingClass);_results.empty();_results.append(dataToDom(data));pos=findPos(input);_results.css({position:"absolute",top:(pos.y+input.offsetHeight)+"px",left:pos.x+"px"});_results.show();if(jQuery.browser.msie&&jQuery.browser.version=='6.0'){jQuery('select').hide();}}else{hideResultsNow();}}
function dataToDom(data){var ul=jQuery('<ul/>');jQuery.each(data,function(i,n){var item=jQuery('<li/>');if(options.formatItem!==undefined&&options.formatItem.constructor===Function){item.html(options.formatItem(n));}else{if(n.state==''){item.text(n.areaName);}else{item.text(n.areaName+", "+n.state);}}
item.hover(function(){jQuery("li",ul).removeClass("over");jQuery(this).addClass("over");},function(){jQuery(this).removeClass("over");}).click(function(e){e.preventDefault();e.stopPropagation();selectItem(this);});ul.append(item);});return ul;}
function requestData(q){q=jQuery.trim(q);if(!options.matchCase){q=q.toLowerCase();}
var data=false;jQuery.ajax({dataType:'jsonp',url:options.url,data:{q:q},success:function(data){receiveData(q,data);}});}
this.setExtraParams=function(p){options.extraParams=p;};};jQuery.fn.geoAutocomplete=function(url,options){options=options||{};options.url=url;options.inputClass=options.inputClass||"ac_input";options.resultsClass=options.resultsClass||"ac_results";options.lineSeparator=options.lineSeparator||"\n";options.cellSeparator=options.cellSeparator||"|";options.minChars=options.minChars||1;options.delay=options.delay||400;options.matchCase=options.matchCase||0;options.matchContains=options.matchContains||0;options.mustMatch=options.mustMatch||0;options.extraParams=options.extraParams||{};options.loadingClass=options.loadingClass||"ac_loading";options.selectFirst=options.selectFirst||false;options.selectOnly=options.selectOnly||false;this.each(function(){var input=this;var i=new jQuery.geoAutocomplete(input,options);});return this;};jQuery.fn.homeSearchWidget=function(settings){settings=jQuery.extend({autoFocus:true},settings);var eFormElements={inputArea:jQuery("input[name='area']",this).length>0?jQuery("input[name='area']",this):jQuery("input[name='areaText']",this),submitButton:jQuery("input[type='submit']",this).length>0?jQuery("input[type='submit']",this):jQuery("button[type='submit']",this)};var areaUserEntered='';var parsedArea;var eSearchForm=this;var defaultErrorMessage='Please enter an area & state or zip.';var eErrorHolder=jQuery('<p class="errorHolder"></p>');var inputPosition=eFormElements.inputArea.offset();eErrorHolder.css({'top':inputPosition.top+'px','left':inputPosition.left+'px'});jQuery('body').append(eErrorHolder);var displayError=function(eErrors){var eCloseError=jQuery('<span class="closeX"><img src="'+Homescape.Conf.mwImageBaseUrl+'f/fe/Error_x_close.gif" alt="Close Error Message" /></span>').click(function(){hideError();});if(jQuery.browser.msie&&jQuery.browser.version=='6.0'){jQuery('select').hide();}
eErrorHolder.empty().append(eCloseError).append(eErrors).append(jQuery('<p class="contact">Still having problems? <a href="'+Homescape.Page.baseUri+'company/feedback">Let us know</a>.</p>')).show();};var hideError=function(){eErrorHolder.empty().hide();if(jQuery.browser.msie&&jQuery.browser.version=='6.0'){jQuery('select').show();}};var didYouMeanOnError=function(errorMessage){if(errorMessage===undefined||errorMessage===null){errorMessage=jQuery('<div><p class="error">An unexpected error occurred<br/>Please try again.</p></div>');}else if(errorMessage.constructor===String){errorMessage=jQuery('<p class="error">'+errorMessage+'</p>');}else{var eStartOver=jQuery('<p class="startOver">Want to <a href="javascript:;">START OVER</a>?</p>').click(function(){hideError();eFormElements.inputArea.val('');});errorMessage.append(eStartOver);}
displayError(errorMessage);};var didYouMeanAreaSelected=function(area,geoAreaId){eFormElements.inputArea.val(area);eSearchForm.prepend('<input type="hidden" name="geo_area_id" value="'+geoAreaId+'"/>');eSearchForm.submit();};var updateSearchAreaForm=function(state){if(state!==undefined&&state.constructor===String&&state!==''){eFormElements.inputArea.val(areaUserEntered+', '+state);eSearchForm.submit();}else{Homescape.fn.geo.didYouMean(Homescape.fn.geo.parseAreaText(areaUserEntered),function(){},didYouMeanOnError,didYouMeanAreaSelected);}
return false;};var aCompleteSelectItem=function(li){try{jQuery.log('Completing the selection of an auto-completer item.');eObjects.eArea.val(li.text());}catch(e){jQuery.log("Exception in 'aCompleteSelectItem':"+e);}
return false;};var aCompleteFormatItem=function(row){jQuery.log('Formatting auto-completer item. (areaName = '+row.areaName+', state = '+row.state+')');var f=row.areaName.replace(/_/g,' ');if(row.state!==undefined&&row.state!==''){f+=", "+row.state;}
return f;};eFormElements.inputArea.geoAutocomplete(Homescape.scriptBase+"ajax/geoAreaLookup",{delay:400,minChars:1,matchSubset:0,matchContains:0,cacheLength:0,onItemSelect:aCompleteSelectItem,formatItem:aCompleteFormatItem});this.submit(function(){hideError();if(jQuery("input[name='geo_area_id']",eSearchForm).length>0){var result=eSearchForm.triggerHandler('didYouMeanSuccess');if(result!==false){return true;}else{return false;}}
areaUserEntered=jQuery.trim(eFormElements.inputArea.val());if(areaUserEntered!==''){parsedArea=Homescape.fn.geo.parseAreaText(areaUserEntered);if(parsedArea.zipCode===''&&parsedArea.areaName!==''&&parsedArea.stateCode===''){Homescape.fn.Session.get("lastSearchState",updateSearchAreaForm);return false;}
Homescape.fn.geo.lookupMarket(parsedArea,function(json){if(json===undefined||json.constructor!==Object||json.geoArea===undefined||json.geoArea.id<0){Homescape.fn.geo.didYouMean(parsedArea,function(){},didYouMeanOnError,didYouMeanAreaSelected);return false;}
eFormElements.inputArea.val(json.geoArea.name);eSearchForm.prepend('<input type="hidden" name="geo_area_id" value="'+json.geoArea.id+'"/>');eSearchForm.submit();},function(errorMessage){displayError(errorMessage);});}else{displayError(defaultErrorMessage);}
return false;});return this;};jQuery(document).ready(function(){jQuery('#searchform').homeSearchWidget({autoFocus:false});});