
CMPod=function(){function render(pageT,id){var podT=$T(g_mcPodBox);var title=eval(id+'Title');var body=eval(id+'Body');podT.replaceToken('id',id);podT.replaceToken('title',$T(title).compose());podT.replaceToken('body',$T(body).compose());pageT.replaceToken(id,podT.compose());}
return{'render':render};}();CMLocation=Class.create();CMLocation.getPathComponents=function(path){return path.substring(1).split('/');}
CMLocation.getPrettyPathNames=function(path){return path.substring(1).replace(/\+/g,' ').split('/');}
CMLocation.getPrettyLeafPathName=function(path){var prettyPathNames=CMLocation.getPrettyPathNames(path);return prettyPathNames[prettyPathNames.length-1];};CMBreadCrumb=function(){function render(template,tokenOrId,location){var crumbT=$T(g_mcBreadCrumb);if(!location){wak.log.error('breadcrumb: property has no location');return;}
var pathComponents=CMLocation.getPathComponents(location.path);var pathNames=CMLocation.getPrettyPathNames(location.path);var lastIndex=pathComponents.length-1;var pathPrefix='';pathComponents.each(function(locPath,index){locPath=pathPrefix+locPath;var baseBrowseUrl=mira.URL.Browse+'/'+locPath;var urlSuffix=(index==lastIndex)?'/sr':'';var url=baseBrowseUrl+urlSuffix
crumbT.replaceToken('name',pathNames[index]);crumbT.replaceToken('locationPageUrl',url);if(index==lastIndex){crumbT.removeBlock('SeparatorBlock');if(location.cityHost!=null){var cityHostIconT=$T(g_mcBreadCrumbCityHostIcon);cityHostIconT.replaceToken('cityHost',mira.URL[location.cityHost]);cityHostIconT.replaceToken('cityHostDisplayName',location.cityHostDisplayName);var cityHostIconHTML=cityHostIconT.compose()
crumbT.replaceToken('cityHostIcon',cityHostIconHTML);}}
crumbT.next();pathPrefix=locPath+'/';});var html=crumbT.compose();if(template){template.replaceToken(tokenOrId,html);}else if(tokenOrId){wak.html.setContent(tokenOrId,html);}
return html;}
return{'render':render};}();CMAutoComplete=Class.create();CMAutoComplete.prototype={_lastData:null,_widget:null,_div:null,_fieldId:null,_buttonId:null,onselect:null,onenter:null,ctor:function(tmpl,textFieldId,buttonId){if(!$('mcAutoComplete')){var div=document.createElement('DIV');div.id=div.className='mcAutoComplete';document.body.appendChild(div);}
this._fieldId=textFieldId||'searchTerm';this._buttonId=buttonId||'searchButton';var w=wak.autocomplete.create(this._fieldId,this._buttonId,'mcAutoComplete',tmpl||g_mcAutoCompleteRow);w.selectClassName='select';w.onFetch=this._fetchMatches.bind(this);w.onSelect=this._onSelect.bind(this);w.onEnter=this._onEnter.bind(this);this._widget=w;this.onSelect=wak.emptyFunction;this.onEnter=wak.emptyFunction;},_fetchMatches:function(locationStr){SearchService.instance.autoCompleteLocation(locationStr,this._renderMatches.bind(this));},_renderMatches:function(res){if(!res.ok)return;var data=res.data;var dataByName={};var dups=[];res.data.each(function(loc){if(dataByName[loc.name]){dups.push(dataByName[loc.name]);dups.push(loc);}else{dataByName[loc.name]=loc;}
loc.__keywords=loc.name;});dups.each(function(loc){if(loc.__uniqued)return;var origName=loc.name;var parentPath=loc.path.substring(1,loc.path.lastIndexOf('/'));parentPath=parentPath.replace(/\//g,' - ');parentPath=parentPath.replace(/\+/g,' ');loc.name=origName+' ('+parentPath+')';loc.__keywords=(origName+' '+parentPath).replace(' - ',' ');loc.__uniqued=true;});this._lastData=data;this._widget.render(data);},_onSelect:function(data){this.onSelect(data);},_onEnter:function(sterm){this.onEnter(sterm);}};CMSearchBox=Class.create();CMSearchBox.prototype={_ac:null,_submitButton:null,_datePicker:null,_actOnDateSelection:false,init:function(focusLocation,up,actOnDateSelection){this._actOnDateSelection=actOnDateSelection;this._submitButton=new CMButton('cmSBSearchButton','findDisabledButton');this._ac=new CMAutoComplete();this._ac.onSelect=function(data){$('searchTerm').value=data.__keywords;}.bind(this);this._ac.onEnter=function(){this.onSearch(true);}.bind(this);this._datePicker=new CMDatePicker(null,null,null,up);this._datePicker.eventDelegate=this;var searchBoxInfo=mira.getSearchBoxCookie();if(searchBoxInfo){$('searchTerm').value=searchBoxInfo['q.keywords']||'';if(searchBoxInfo['q.fromDate'])$('fromCalDate').value=searchBoxInfo['q.fromDate'];if(searchBoxInfo['q.toDate'])$('toCalDate').value=searchBoxInfo['q.toDate'];$('bedrooms').value=searchBoxInfo['q.bedrooms']||'';}else{if(focusLocation)$(this._ac._fieldId).focus();}},onDatePickerComplete:function(fromInputIdParam,fromDateParam,fromDefaultTextParam,toInputIdParam,toDateParam,toDefaultTextParam){if(this._actOnDateSelection){this.onSearch();}},onDatePickerCleared:function(){if(this._actOnDateSelection){this.onSearch();}},onSearch:function(explicitKeywordSearch){var params={};var onSearchResultsPage=(mira.pageId=="SearchResults");var onFavoritesPage=(mira.pageId=="MyFavorites");var gotoPage=null;var searchBoxCookie=mira.getSearchBoxCookie();var searchTermSaved=searchBoxCookie?searchBoxCookie['q.keywords']:"";var searchTerm=$F('searchTerm');var searchTermIsActionable=(searchTerm&&!searchTerm.isEmpty()&&(searchTerm==searchTermSaved));if(!explicitKeywordSearch&&!searchTermIsActionable){searchTerm=searchTermSaved;searchTermIsActionable=true;$('searchTerm').value=searchTerm;}
var honorSearchTerm=(explicitKeywordSearch||searchTermIsActionable)?true:false;if(!searchTerm)searchTerm="";if(honorSearchTerm)params['q.keywords']=searchTerm;var originalFromDateObject=mira.getSearchBoxCookieStartDate();var fromDateObject=this._datePicker.getFromDate();var fromDateServerString=this._datePicker.getFromDate(true);var fromDateClientString=$F(this._datePicker.fromInputId)
var originalToDateObject=mira.getSearchBoxCookieEndDate();var toDateObject=this._datePicker.getToDate();var toDateServerString=this._datePicker.getToDate(true);var toDateClientString=$F(this._datePicker.toInputId);var datesHaveChanged=(!Date.equals(fromDateObject,originalFromDateObject)||!Date.equals(toDateObject,originalToDateObject));var initialDateEntry=((!originalFromDateObject&&fromDateObject)&&(!originalToDateObject&&toDateObject));if(fromDateServerString)params['q.fromDate']=fromDateServerString;if(toDateServerString)params['q.toDate']=toDateServerString;var bedrooms=$F('bedrooms');if(bedrooms)params['q.bedrooms']=bedrooms;var cookieParams={};if(honorSearchTerm)cookieParams['q.keywords']=searchTerm;cookieParams['q.fromDate']=fromDateClientString;cookieParams['q.toDate']=toDateClientString;if(bedrooms)cookieParams['q.bedrooms']=bedrooms;mira.setSearchBoxCookie(cookieParams);var honorLocation=((onSearchResultsPage&&((mira.pageData&&mira.pageData.location)||wak.isDefined(mira.params['q.lat1'])))?true:false);if(honorSearchTerm){if(explicitKeywordSearch){if(searchTerm.isEmpty()){params=null;gotoPage='Browse';}else{gotoPage='SearchResults';}}else if(datesHaveChanged){if(onFavoritesPage){if(confirm("Changing dates will not effect your 'Saved/Viewed' property view, but you can choose to search again based on these new dates.\n\nSelect 'Ok' if you would like to search on these new dates, or 'Cancel' to stay here in the 'Saved/Viewed' view.")){if(searchTerm.isEmpty()){params=null;gotoPage='Browse';}else{gotoPage='SearchResults';}}}else if(!fromDateObject||!toDateObject){window.location.href=window.location.href;}else{SearchResults.instance.refineSearch(fromDateObject,toDateObject,initialDateEntry);}}}else if(honorLocation&&datesHaveChanged){if(!fromDateObject||!toDateObject){window.location.href=window.location.href;}else{SearchResults.instance.refineSearch(fromDateObject,toDateObject,initialDateEntry);}}
if(gotoPage)mira.gotoPage.id(gotoPage,params);},resetKeywords:function(keywords){var sbCookie=mira.getSearchBoxCookie();if(!sbCookie)sbCookie={};sbCookie['q.keywords']=keywords;mira.setSearchBoxCookie(sbCookie);var searchTerm=$('searchTerm');if(searchTerm)searchTerm.value=keywords;},resetDates:function(startDate,endDate){mira.resetSearchBoxCookieDates(startDate,endDate);this._datePicker.setFromDate(startDate);this._datePicker.setToDate(endDate);}};CMSearchBox.instance=new CMSearchBox();CMAvailability=Class.create();CMAvailability.prototype={_prop:null,_startDate:null,_endDate:null,_divId:null,calendar:null,spans:null,ctor:function(prop,divId,isInteractive,startDate){if(!wak.isDefined(isInteractive))isInteractive=false;this._prop=prop;this._divId=divId||'availCal';this._startDate=Date.removeHMS(new Date());this._endDate=this._startDate.add('M',12).monthEnd();var config={up:12,showToday:false,defaultDayClass:'unavail',defaultDayTitle:'Not Available',showNav:false,interactive:isInteractive,maxNavDate:this._endDate};if(startDate)config.startDate=startDate;this.calendar=new WakCalendar(this._divId,config);},loadAndRender:function(){this._load();},render:function(calSpans){this.spans=calSpans;if(this.spans.length>0){this.calendar.addAvailabilityData(this.spans,true,true);}else{var span={startDate:new Date(),endDate:this.calendar.config.maxNavDate.monthEnd()};this.calendar.addAvailabilityData([span],true,true);}
this.calendar.render();},onCollectParams:function(addlParams){addlParams.calStartDate=this._startDate;addlParams.calEndDate=this._endDate;addlParams.availSpans=this.calendar.getSpans('unavail');},_load:function(){var onresponse=function(res){if(!res.ok)return;if(res&&res.data){this.render(res.data);}}.bind(this);if(this._prop)AvailabilityService.instance.get(this._prop.id,this._startDate,this._endDate,onresponse);}};CMDatePicker=Class.create();CMDatePicker.prototype={fromInputId:null,toInputId:null,fromPopup:null,toPopup:null,eventDelegate:null,dateSpans:null,minDate:null,maxDate:null,isYearRound:false,validator:null,ctor:function(fromInputId,toInputId,defaultText,up,dateSpans){this._createDivs();this.fromInputId=fromInputId||'fromCalDate';this.toInputId=toInputId||'toCalDate';this.dateSpans=dateSpans;this.validator=new Validator('lmFieldError',null,null);if(this.dateSpans){this.minDate=new Date(2100,1,1,0,0,0,0);this.maxDate=new Date(2000,1,1,0,0,0,0);this.dateSpans.each(function(span){if(span.startDate<this.minDate)this.minDate=span.startDate;if(span.endDate>this.maxDate)this.maxDate=span.endDate;}.bind(this));}
var upNum=up?up:1;var defaultDayClass=dateSpans&&dateSpans.length>0?'unavail unselectable':'avail';var defaultDayTitle=dateSpans&&dateSpans.length>0?'Not Available':'Available';var config={up:upNum,defaultDayClass:defaultDayClass,defaultDayTitle:defaultDayTitle};this.fromPopup=new WakCalendarPopup('lmFromCal',this.fromInputId,config,defaultText);this.fromPopup.onopen=function(date,dateStr){this.toPopup.close();var fromCal=this.fromPopup.calendar;var fromDate=this.getFromDate();var toDate=this.getToDate();fromCal.resetDateRanges();if(this.dateSpans){fromCal.addAvailabilityData(this.dateSpans,true,false);}
var fromDate=Date.parseSimpleDate($F(this.fromInputId));var toDate=Date.parseSimpleDate($F(this.toInputId));var fromDateIsGood=fromDate&&!isNaN(fromDate.valueOf())&&this.isDateAvailable(fromDate,true);var toDateIsGood=toDate&&!isNaN(toDate.valueOf())&&this.isDateAvailable(toDate,false);if(fromDateIsGood&&toDateIsGood){fromCal.appendDateRange(fromDate,toDate,'selectedDate','Travel Date');}
if(fromDateIsGood){fromCal.appendDateRange(fromDate,fromDate,'fromDate','Travel Start Date');}
if(toDateIsGood){fromCal.appendDateRange(toDate,toDate,'toDate','Travel End Date');}
var startDate=fromDateIsGood?fromDate:new Date();if(this.fromPopup.__adjustStart&&fromDate)startDate=startDate.subtract('M',1);fromCal.startDate=startDate;fromCal.render(true);if(this.eventDelegate&&this.eventDelegate.onDatePickerOpen){this.eventDelegate.onDatePickerOpen(this.fromInputId);}}.bind(this);this.fromPopup.onselect=function(date,dateStr,td,clickedOnFirstCal){$(this.fromInputId).value=this.onFormatDate(date,dateStr);var toDate=Date.parseSimpleDate($F(this.toInputId));if(toDate&&(date>=toDate)){this.toPopup.resetField();}
if(toDate&&this.dateSpans){var found=false;this.dateSpans.each(function(span){if(span.startDate<=date&&toDate<=span.endDate){found=true;}});if(!found){this.toPopup.resetField();}}
this.fromPopup.__adjustStart=!clickedOnFirstCal;return true;}.bind(this);this.fromPopup.onclose=function(){var fromDate=this.getFromDate();var fromInputElem=$(this.fromInputId);var errMsg=null;var result=true;if(fromDate&&!isNaN(fromDate.valueOf())){var today=Date.removeHMS(new Date());if(fromDate<today)fromDate=fromDate.add(wak.date.YEAR,1);fromInputElem.value=fromDate.format('%n/%e/%Y');if(this.isDateAvailable(fromDate,true)){toDate=this.getToDate();if(toDate&&toDate<=fromDate){this.toPopup.resetField();}
if(this.eventDelegate&&this.eventDelegate.onDatePickerClose){this.eventDelegate.onDatePickerClose(this.fromInputId,this.getFromDate(),this.fromPopup.defaultText);}}else{var dateString=fromDate.format('%n/%e/%Y');errMsg=dateString+" is not available for check-in, please enter another date.";}}else{errMsg="Please enter a date using the format: mm/dd/yyyy";}
if(errMsg){var value=$F(this.fromInputId);if(!wak.string.isEmpty(value)&&value!=this.fromPopup.defaultText){this.validator.showFep(this.fromInputId,errMsg);$(this.fromInputId).blur();result=false;}}
this.onDatePickerComplete(this.fromInputId,this.getFromDate(),this.fromPopup.defaultText,this.toInputId,this.getToDate(),this.toPopup.defaultText);return result;}.bind(this);this.toPopup=new WakCalendarPopup('lmToCal',this.toInputId,config,defaultText);this.toPopup.onopen=function(date,dateStr){this.fromPopup.close();var toCal=this.toPopup.calendar;var fromDate=this.getFromDate();var toDate=this.getToDate();var today=Date.removeHMS(new Date());var fromDateIsGood=fromDate&&!isNaN(fromDate.valueOf())&&this.isDateAvailable(fromDate,true);var toDateIsGood=toDate&&!isNaN(toDate.valueOf())&&this.isDateAvailable(toDate,false);toCal.resetDateRanges();if(this.dateSpans){var availSpan=this.dateSpans.pick(function(span){return span.startDate<=fromDate&&span.endDate>=fromDate;});toCal.addAvailabilityData(this.dateSpans,false,true,availSpan,fromDate);}else{if(fromDateIsGood){toCal.addDateRange(today,fromDate.subtract('D',1),'past',true,'Past');toCal.appendDateRange(fromDate,fromDate,'unselectable','Travel Start Date');}}
if(fromDateIsGood&&toDateIsGood){toCal.appendDateRange(fromDate,toDate,'selectedDate','Travel Date');}
if(fromDateIsGood){toCal.appendDateRange(fromDate,fromDate,'fromDate','Travel Start Date');}
if(toDateIsGood&&toDate!=fromDate){toCal.appendDateRange(toDate,toDate,'toDate','Travel End Date');}
toCal.startDate=toDateIsGood?toDate:(fromDateIsGood?fromDate:new Date());if(this.toPopup.__adjustStart&&toDate){toCal.startDate=toCal.startDate.subtract('M',1);}
toCal.render(true);if(this.eventDelegate&&this.eventDelegate.onDatePickerOpen){this.eventDelegate.onDatePickerOpen(this.toInputId);}}.bind(this);this.toPopup.onselect=function(date,dateStr,td,clickedOnFirstCal){$(this.toInputId).value=this.onFormatDate(date,dateStr);var fromDate=Date.parseSimpleDate($F(this.fromInputId));if(fromDate&&(fromDate>=date)){this.fromPopup.resetField();}
this.toPopup.__adjustStart=!clickedOnFirstCal;return true;}.bind(this);this.toPopup.onclose=function(){var toDate=this.getToDate();var errMsg=null;var result=true;if(toDate&&!isNaN(toDate.valueOf())){var today=Date.removeHMS(new Date());if(toDate<=today)toDate=toDate.add(wak.date.YEAR,1);var fromDate=this.getFromDate();if(fromDate&&fromDate>toDate){newToDate=toDate.add(wak.date.YEAR,1);if(newToDate<this.toPopup.calendar.config.maxNavDate&&newToDate>fromDate){toDate=newToDate;}else{this.fromPopup.resetField();}}
$(this.toInputId).value=toDate.format('%n/%e/%Y');if(this.isDateAvailable(toDate,false)){if(this.eventDelegate&&this.eventDelegate.onDatePickerClose){this.eventDelegate.onDatePickerClose(this.toInputId,this.getToDate(),this.toPopup.defaultText);}}else{var dateString=toDate.format('%n/%e/%Y');errMsg=dateString+" is not available for check-out, please enter another date.";}}else{errMsg="Please enter a date using the format: mm/dd/yyyy";}
if(errMsg){var value=$F(this.toInputId);if(!wak.string.isEmpty(value)&&value!=this.fromPopup.defaultText){this.validator.showFep(this.toInputId,errMsg);$(this.toInputId).blur();result=false;}}
this.onDatePickerComplete(this.fromInputId,this.getFromDate(),this.fromPopup.defaultText,this.toInputId,this.getToDate(),this.toPopup.defaultText);return result;}.bind(this);$(this.fromInputId).onkeypress=function(event){var e=event||window.event;var code=e.charCode||e.keyCode;if(code==wak.event.KEY_TAB){return this.fromPopup.close();}
var wakEvent=wak.event.create(e);if(wakEvent.target.getAttribute("keyFilter")){return Validator.keystrokeMonitor(event);}}.bind(this);$(this.toInputId).onkeypress=function(event){var e=event||window.event;var code=e.charCode||e.keyCode;if(code==wak.event.KEY_TAB){return this.toPopup.close();}
var wakEvent=wak.event.create(e);if(wakEvent.target.getAttribute("keyFilter")){return Validator.keystrokeMonitor(event);}}.bind(this);},isDateAvailable:function(date,isFromDate){var result=true;var fromDate=null;if(!isFromDate)fromDate=this.getFromDate();if(this.dateSpans&&this.dateSpans.length>0){result=this.dateSpans.pick(function(span){if(isFromDate){return date>=span.startDate&&date<=span.endDate;}else{return fromDate>=span.startDate&&date>fromDate&&date<=span.endDate.add(wak.date.DAY,1);}});}
return result;},getFromDate:function(asString){return Date.parseSimpleDate($F(this.fromInputId),asString);},setFromDate:function(fromDate){if(fromDate)$(this.fromInputId).value=fromDate.getSimpleDateString();},getToDate:function(asString){var toDate=Date.parseSimpleDate($F(this.toInputId),asString);if(toDate&&toDate.value==NaN)toDate=null;if(toDate&&this.isYearRound){var fromDate=this.getFromDate();if(fromDate!=null&&toDate<fromDate){toDate=toDate.add('Y',1);}}
return toDate;},setToDate:function(toDate){if(toDate)$(this.toInputId).value=toDate.getSimpleDateString();},onFormatDate:function(date,dateStr){return dateStr;},onDatePickerComplete:function(fromInputIdParam,fromDateParam,fromDefaultTextParam,toInputIdParam,toDateParam,toDefaultTextParam){if(fromDateParam&&toDateParam&&this.eventDelegate&&this.eventDelegate.onDatePickerComplete){this.eventDelegate.onDatePickerComplete(fromInputIdParam,fromDateParam,fromDefaultTextParam,toInputIdParam,toDateParam,toDefaultTextParam);}else if(!fromDateParam&&!toDateParam&&this.eventDelegate&&this.eventDelegate.onDatePickerCleared){this.eventDelegate.onDatePickerCleared();}},_createDivs:function(){if($('lmFromCal'))return;var div=document.createElement('DIV');div.id='lmFromCal';document.body.appendChild(div);div=document.createElement('DIV');div.id='lmToCal';document.body.appendChild(div);}}
CMTable=Class.create();CMTable.all={};CMTable.genUniqueRowName=function(model,data){var nameHash={};var res=data.name+'A';model.each(function(rate){nameHash[rate.name]=true;});var start=model.length+1;for(var i=start;i<300;i++){var newName=data.name+i;if(!nameHash[newName]){res=newName;break;}}
return res;};CMTable.prototype={_editBlock:null,_viewBlock:null,_tmpl:null,_divId:null,_addDivId:null,_rowIdPrefix:null,_id:null,_rowValidator:null,confirmOnDelete:false,ctor:function(tmpl,divId,rowIdPrefix,addDivId,rowValidator){this._tmpl=tmpl;this._divId=divId;this._addDivId=addDivId;this._rowIdPrefix=rowIdPrefix;this._id='cmtable'+wak.idGenerator++;this._rowValidator=rowValidator;this.onTableReplaceRowTokens=null;this.onTableGetDefaultRowData=null;this.onTableUpdateDataModel=null;this.onTableIsSaveWorthy=null;this.onTableDataModelChangedEvent=wak.emptyFunction;this.onTableEditRowEvent=wak.emptyFunction;CMTable.all[this._id]=this;},render:function(dataModel){var t=wak.template.create(this._tmpl,this._divId);t.replaceToken('tid',this._id);this._editBlock=t.getBlock('EditBlock');this._viewBlock=t.getBlock('ViewBlock');this.dataModel=dataModel;var editId=null;if(this.dataModel.length==0){var obj=this.onTableGetDefaultRowData(this.dataModel.length);obj.__isFresh=true;this.dataModel.push(obj);editId=obj.__id;}
this.dataModel.each(function(data,index){this._renderRow(data,false,index);}.bind(this));t.removeBlock('EditBlock');t.compose();if(editId)this.onEditRow(editId);},onAddRow:function(evt){if(this._editingId){if(this.onUpdateCancelRow(this._editingId,'update'))return;}
var data=this.onTableGetDefaultRowData(this.dataModel.length);data.__isFresh=true;this._renderRow(data,false,this.dataModel.length,true,true);this.dataModel.push(data);this.onEditRow(data.__id);},onDeleteRow:function(id,skipConfim){var dataInfo=this._getDataById(id);var data=dataInfo.data,dataIndex=dataInfo.index;if(!skipConfim&&this.confirmOnDelete){var yes=confirm('Are you sure you want to delete "'+data.name+'"');if(!yes)return;}
this.dataModel.removeAt(dataIndex);var div=$(this._rowIdPrefix+id);div.parentNode.removeChild(div);this.onTableDataModelChangedEvent(this.dataModel);Validator.clearFep();},onEditRow:function(id){if(this._editingId){if(this.onUpdateCancelRow(this._editingId,'update'))return;}
var dataInfo=this._getDataById(id);var data=dataInfo.data,dataIndex=dataInfo.index;this._renderRow(data,true,dataIndex,true,false);this._editingId=id;if(this._rowValidator&&this._rowValidator.setRowSuffix){this._rowValidator.setRowSuffix(id);}
this.onTableEditRowEvent(id,dataIndex);},onUpdateCancelRow:function(id,mode,isAdding,strictMode,isModifiedCheck){var dataInfo=this._getDataById(id);var data=dataInfo.data,dataIndex=dataInfo.index;if(!wak.isDefined(strictMode))strictMode=true;if(!wak.isDefined(isModifiedCheck))isModifiedCheck=false;if(mode=="update"&&this._rowValidator&&this._rowValidator.validateAllFields&&this._rowValidator.validateAllFields(isModifiedCheck,strictMode)){return true;}
if(mode=='update'){this.onTableUpdateDataModel(data,dataIndex);this.onTableDataModelChangedEvent(this.dataModel);}
if(!strictMode&&!this.onTableIsSaveWorthy(data)){return;}
if(mode=='cancel'&&data.__isFresh){this.onDeleteRow(id,true);Validator.clearFep();}else{if(mode=='cancel')Validator.clearFep();this._renderRow(data,false,dataIndex,true,false);data.__isFresh=false;}
this._editingId=null;return false;},commitOpenEdit:function(isModifiedCheck){var retval={invalid:false,dataModel:this.dataModel};if(!this._editingId)return retval;var origModel,clonedModel;if(isModifiedCheck){origModel=this.dataModel;this.dataModel=origModel.clone();}
retval.isInvalid=this.onUpdateCancelRow(this._editingId,'update',true,false,isModifiedCheck);if(isModifiedCheck){retval.dataModel=this.dataModel;this.dataModel=origModel;}
return retval;},_renderRow:function(data,isEdit,index,compose,append){var block=isEdit?this._editBlock:this._viewBlock;block.replaceToken('data',data);block.replaceToken('tid',this._id);if(isEdit){if(index==0&&data.__isFresh)block.replaceToken('hideCancel','hidden');}else if(index==0){block.replaceToken('hideDelete','hidden');}
this.onTableReplaceRowTokens(block,data,isEdit,index);if(wak.isDefined(compose)){if(append){var addDiv=$(this._addDivId);var someRowId=this._rowIdPrefix+this.dataModel[0].__id;var n=$(someRowId);var par=n.parentNode;block.composeAndAppend(par);}else{block.composeAndReplace($(this._rowIdPrefix+data.__id));}}else{block.next();}},_getDataById:function(id){var data,dataIndex;this.dataModel.each(function(d,index){if(d.__id==id){data=d;dataIndex=index;}});return{index:dataIndex,data:data}}};CMButton=Class.create();CMButton.prototype={onclick:null,id:null,_isAnchor:false,enabled:true,disabledClass:'disabledButton',ctor:function(id,disabledClassName){this.id=id;if($(id).tagName=='A')this._isAnchor=true;if(disabledClassName)this.disabledClass=disabledClassName;},disable:function(){if(!this.enabled){wak.log.error('disabled called twice on button: '+this.id);return;}
this.enabled=false;if(this._isAnchor){var anc=$(this.id);anc.__oldOnClick=anc.onclick;anc.onclick=function(){return false;};wak.css.addClass(anc,this.disabledClass);}else{var btn=$(this.id);btn.__origValue=btn.value;btn.disabled=true;}},enable:function(){this.enabled=true;if(this._isAnchor){var anc=$(this.id);if(wak.isDefined(anc.__oldOnClick)){anc.onclick=anc.__oldOnClick;}
wak.css.removeClass(anc,this.disabledClass);}else{var btn=$(this.id);btn.value=btn.__origValue||btn.value;btn.disabled=false;}}};CMFavsTarget=Class.create();CMFavsTarget.prototype={update:function(){if(!mira.user)return;var total=wak.map.size(mira.user.favoriteIds);var elem=$('lmFavsTarget');if(!elem)return;var oldText=elem.innerHTML;if(oldText.indexOf(")")==-1){oldText+="()";}
var newText=oldText.replace(/\(.*\)/,total>0?'('+total+')':'');elem.innerHTML=newText;},close:function(){},getBounds:function(){var to=$('lmFavsTarget');var toB=wak.geometry.bounds(to);return toB;},addFavorite:function(prop,flyingDiv,fromB){if(prop.__isFav)return;if(flyingDiv){var ondone=function(){UserService.instance.addFavorite(prop);flyingDiv.parentNode.removeChild(flyingDiv);this.update();}.bind(this);var toB=this.getBounds();wak.animate.line(flyingDiv,fromB,toB,ondone);}else{UserService.instance.addFavorite(prop);this.update();}}};CMFavsTarget.instance=new CMFavsTarget();RatesTab=Class.create();RatesTab.DEFAULT_RATE={name:'Season ',__id:0,weeknightPrice:0,weekendPrice:0,weeklyPrice:0,monthlyPrice:0,minimumNights:0};RatesTab.prototype={_prop:null,_table:null,id:'rates',title:'Rates',validator:null,rowValidator:null,_chart:null,_viewOnly:false,_datePicker:null,FIELDS:[['ratesComment','string','Rates Comments',false,true,null,null,null],['taxRate','float','Tax Rate',false,true,null,null,{min:0,max:100}],['cleaningFee','float','Cleaning Fee',false,true,null,null,{min:.0}],['otherFee','float','Other Fee',false,true,null,null,{min:.0}],['travelInsRate','float','Travel Insurance',false,true,null,null,{min:.1,max:100}],['damageIns','float','Damage Waiver',false,true,null,null,{min:0}],['feeComment','string','Fee Comment',false,true,null,null,null]],ctor:function(prop,viewOnly){this._prop=prop;this._viewOnly=viewOnly;this._ratesModel=this._prop.seasonalRates.clone();this._chart=new CMDateChart('ratesChartTemplate','ratesTable','rate','lmBody1');RatesTab.instance=this;this.rowValidator=new Validator('lmFieldError',null,null,this,'lmBody1','ratestabcontent');this.rowValidator._suppressElemCheck=true;this.rowValidator.appendInputRule('rateName','tableRowName','Season Name',true,false,'rateName',null,null);this.rowValidator.appendInputRule('rateStart','date','Start',true,false,'rateStart',null,null);this.rowValidator.appendInputRule('rateEnd','date','End',true,false,'rateEnd',null,null);this.rowValidator.appendInputRule('rateWeeknight','int','Sun-Thu',true,false,'rateWeeknight',null,null);this.rowValidator.appendInputRule('rateWeekend','int','Fri-Sat',true,false,'rateWeekend',null,null);this.rowValidator.appendInputRule('rateWeekly','int','Weekly',true,false,'rateWeekly',null,null);this.rowValidator.appendInputRule('rateMonthly','int','Monthly',true,false,'rateMonthly',null,null);this.rowValidator.appendInputRule('rateMin','int','Minimum Nights',true,false,'rateMin',null,null);this._table=new CMTable(g_ratesTemplate,'ratesTemplate','rate','addRateDiv',this.rowValidator);this._table.onTableReplaceRowTokens=this.onTableReplaceRowTokens.bind(this);this._table.onTableGetDefaultRowData=this.onTableGetDefaultRowData.bind(this);this._table.onTableUpdateDataModel=this.onTableUpdateDataModel.bind(this);this._table.onTableIsSaveWorthy=this.isSaveWorthy.bind(this);this._table.onTableDataModelChangedEvent=function(dataModel){this._chart.render(dataModel);}.bind(this);this._table.onTableEditRowEvent=function(id,index){if(index==0)return;this._datePicker=new CMDatePicker('rateStart'+id,'rateEnd'+id,wak.calendar.defaultNoDatesString);this._datePicker.onFormatDate=function(date){return date.format('%n/%e',false);}
this._datePicker.fromInputId='rateStart'+id;this._datePicker.toInputId='rateEnd'+id;this._datePicker.isYearRound=true;this._datePicker.eventDelegate=this.rowValidator;}.bind(this);},onPageLoad:function(){var travelInsCheckbox=$('sellsTravelIns');var damageInsCheckbox=$('sellsDamageIns');if(this._prop.travelInsRate)travelInsCheckbox.checked=true;if(this._prop.damageIns)damageInsCheckbox.checked=true;travelInsCheckbox.onclick=this.onTravelInsCheckboxClick.bindEventListener(this);damageInsCheckbox.onclick=this.onDamageInsCheckboxClick.bindEventListener(this);this.onTravelInsCheckboxClick();this.onDamageInsCheckboxClick();},onTravelInsCheckboxClick:function(){if($F('sellsTravelIns')){$('travelInsRate').disabled=false;}else{$('travelInsRate').value='';$('travelInsRate').disabled=true;}},onDamageInsCheckboxClick:function(){if($F('sellsDamageIns')){$('damageIns').disabled=false;}else{$('damageIns').value='';$('damageIns').disabled=true;}},onActivate:function(isFirstTime){if(!isFirstTime)return;var me=this;if(this._viewOnly&&this._ratesModel.length==0){}else{this._ratesModel.each(function(data,index){data.color=me._chart._allocateColor();me.addRateDisplayVariables(data);});this._table.render(this._ratesModel);this._chart.render(this._ratesModel);if(this._ratesModel.length>1){var firstRow=this._ratesModel[0];if(!firstRow.weeknightPrice&&!firstRow.weekendPrice&&!firstRow.weeklyPrice&&!firstRow.monthlyPrice){this._table.onEditRow(this._ratesModel[0].__id);}}}
if(mira.pageId=='EditProperty'){this.validator=EditProperty.instance.createTabValidator(this.FIELDS,this.id);this.validator.trackFieldLength('ratesComment',PropertyService.ESCAPE_ATTRS['ratesComment']);this.validator.trackFieldLength('feeComment',PropertyService.ESCAPE_ATTRS['feeComment']);if(wak.SAFARI){window.setTimeout('RatesTab.instance.initElemValues()',1);}}},initElemValues:function(){this.validator.setElemValues(this._prop);},isModified:function(){var data={};if(this.onCollectParams(data,null,true))return true;if(this._prop.seasonalRates.diff(data.seasonalRates,true))return true;},onCollectParams:function(addlParams,params,isModifiedCheck){var ret=this._table.commitOpenEdit(isModifiedCheck);if(ret.isInvalid)return true;addlParams.seasonalRates=isModifiedCheck?ret.dataModel:this._ratesModel.clone();for(var i=addlParams.seasonalRates.length-1;i>=0;i--){var rate=addlParams.seasonalRates[i];if(!this.isSaveWorthy(rate))addlParams.seasonalRates.removeAt(i);}},isSaveWorthy:function(rate){var isFirstRow=this._ratesModel[0].__id==rate.__id;var rateCount=this._ratesModel.length;if(isFirstRow){if(rateCount>1||(rate.weeknightPrice!=0||rate.weeklyPrice!=0||rate.weekendPrice!=0||rate.monthlyPrice!=0)){return true;}}
if(!isFirstRow&&(rate.startDate||rate.endDate)){return true;}
return false;},onSaved:function(addlParams){this._prop.seasonalRates=addlParams.seasonalRates;},onTableReplaceRowTokens:function(row,data,isEdit,index){var isYrRound=index==0;if(!wak.isDefined(data.color)){data.color=this._chart._allocateColor();}
if(isEdit){if(isYrRound)row.removeBlock('CustomBlock');else row.removeBlock('DefaultBlock');}},onTableGetDefaultRowData:function(len){var data=Object.clone(RatesTab.DEFAULT_RATE);data.__id=wak.idGenerator++;if(len>0){data.name=CMTable.genUniqueRowName(this._ratesModel,data);data.minimumNights=1;}else{data.name='Base Rate';data.startDate=new Date(2007,0,1,0,0,0,0);data.endDate=new Date(2007,11,31,0,0,0,0);data.minimumNights=1;}
return data;},addRateDisplayVariables:function(data){data.weeknightPriceDisplay=mira.formatValueForCurrency(mira.getCurrencySymbol(this._prop),data.weeknightPrice);data.weekendPriceDisplay=mira.formatValueForCurrency(mira.getCurrencySymbol(this._prop),data.weekendPrice);data.weeklyPriceDisplay=mira.formatValueForCurrency(mira.getCurrencySymbol(this._prop),data.weeklyPrice);data.monthlyPriceDisplay=mira.formatValueForCurrency(mira.getCurrencySymbol(this._prop),data.monthlyPrice);},onTableUpdateDataModel:function(data,dataIndex){var id=data.__id;data.weeknightPrice=parseInt($F('rateWeeknight'+id));data.weekendPrice=parseInt($F('rateWeekend'+id));data.weeklyPrice=parseInt($F('rateWeekly'+id));data.monthlyPrice=parseInt($F('rateMonthly'+id));data.minimumNights=parseInt($F('rateMin'+id));this.addRateDisplayVariables(data);if(dataIndex>0){data.name=$F('rateName'+id);data.startDate=this._datePicker.getFromDate();data.endDate=this._datePicker.getToDate();}},buildFakeRate:function(rowId){var index=-1;this._ratesModel.each(function(rate,idx){if(rate.__id==rowId)index=idx;});var fakeRate={__id:rowId};this.onTableUpdateDataModel(fakeRate,index);if(index==0){var rate=this._ratesModel[0];fakeRate.name=rate.name;fakeRate.startDate=rate.startDate;fakeRate.endDate=rate.endDate;}
return fakeRate;},validateAllFields:function(validator,userData){var strictMode=userData;var elemIds={weeknightElemId:validator.getElemIdForRpcName("rateWeeknight"),weekendElemId:validator.getElemIdForRpcName("rateWeekend"),weeklyElemId:validator.getElemIdForRpcName("rateWeekly"),monthlyElemId:validator.getElemIdForRpcName("rateMonthly"),rateNameElemId:validator.getElemIdForRpcName("rateName"),rateStartElemId:validator.getElemIdForRpcName("rateStart"),rateEndElemId:validator.getElemIdForRpcName("rateEnd"),rateMinElemId:validator.getElemIdForRpcName("rateMin")}
var fr=this.buildFakeRate(validator._rowSuffix);var isFirstRow=validator._rowSuffix==this._ratesModel[0].__id;var genErrorElemId=(wak.IE?'rateWeeknight':'rate')+validator._rowSuffix;var rateCount=this._ratesModel.length;var results={};if(!strictMode){if(isFirstRow&&rateCount==1&&!fr.weeknightPrice&&!fr.weekendPrice&&!fr.weeklyPrice&&!fr.monthlyPrice){return null;}
if(!isFirstRow&&!fr.startDate&&!fr.endDate&&!fr.weeknightPrice&&!fr.weekendPrice&&!fr.weeklyPrice&&!fr.monthlyPrice){return null;}}
if(isFirstRow&&!fr.weeknightPrice&&!fr.weekendPrice&&!fr.weeklyPrice&&!fr.monthlyPrice){results[genErrorElemId]="The Base Rate must have at least one rate specified";}
if(!isFirstRow&&!fr.name){results[elemIds.rateNameElemId]=validator.getRule(elemIds.weekendElemId).label+" must have a value.";return result;}
if(!isFirstRow&&(!fr.startDate||!fr.endDate)){results[genErrorElemId]="You must specify a valid date range."}
if(!fr.weeknightPrice&&!fr.weekendPrice&&!fr.weeklyPrice&&!fr.monthlyPrice){results[genErrorElemId]="You must specify at least one rate.";return results;}
if(fr.weekendPrice>0&&fr.weeknightPrice>fr.weekendPrice){results[elemIds.weekendElemId]=validator.getRule(elemIds.weekendElemId).label+" rate should be greater than "+validator.getRule(elemIds.weeknightElemId).label+" rate.";return results;}
if(fr.weeklyPrice>0&&Math.max(fr.weeknightPrice,fr.weekendPrice)>=fr.weeklyPrice){results[elemIds.weeklyElemId]=validator.getRule(elemIds.weeklyElemId).label+" rate should be greater than previous rates.";return results;}
if(fr.monthlyPrice>0&&Math.max(fr.weeknightPrice,fr.weekendPrice,fr.weeklyPrice)>=fr.monthlyPrice){results[elemIds.monthlyElemId]=validator.getRule(elemIds.monthlyElemId).label+" rate should be greater than rate should be greater than previous rates.";return results;}
if(!isFirstRow){var dup=this._ratesModel.pick(function(rate,index){return rate.__id!=validator._rowSuffix&&fr.name==rate.name;});if(dup){results[elemIds.rateNameElemId]="This name is not unique."
return results;}
dup=this._ratesModel.pick(function(rate,index){return rate.__id!=validator._rowSuffix&&fr.startDate.valueOf()==rate.startDate.valueOf()&&fr.endDate.valueOf()==rate.endDate.valueOf();});if(dup){results[elemIds.rateEndElemId]="Each rate season must have unique Start and End dates."
return results;}}
return results;},shouldValidateInput:function(validator,elemOrId,rule,userData){var strictMode=userData;if(!strictMode){var fakeRate=this.buildFakeRate(validator._rowSuffix)
if(!this.isSaveWorthy(fakeRate)){return null;}}
return $(elemOrId);},validateInput:function(validator,elemOrId,rule){var elem=$(elemOrId);if(rule.rpcParamName=='rateMin'){if($F(elem)<1){return{'elemId':elem.id,'errMsg':rule.label+" must be greater than equal to 1."};}}
return null;}};CMPropertyMap=Class.create();CMPropertyMap.prototype={_prop:null,_divId:null,_isInteractive:null,_editable:null,_gmap:null,mapIsVisible:null,zoom:11,ADDR_FIELDS:['addrLine1','addrCity','addrState','addrZip','addrCountry'],ctor:function(divId,isInteractive,editable){this._divId=divId;this._isInteractive=isInteractive;this._editable=editable;},showMarker:function(point){if(!this._marker){var markerOpts=this._editable?{draggable:true}:null;this._marker=new GMarker(point,markerOpts);this._gmap.addOverlay(this._marker);}
this._marker.setPoint(point);this._gmap.setCenter(point);},removeMarker:function(){this._gmap.removeOverlay(this._marker);this._marker=null;},getPropLatLng:function(prop){var result=null;if(prop.longitude){result={lat:prop.latitude,lng:prop.longitude};}
return result;},getLocationLatLng:function(prop){var result=null;if(prop.__longitude){result={lat:prop.__latitude,lng:prop.__longitude};}
return result;},renderMap:function(lat,lng,zoom,showMarker){if(!zoom)zoom=11;if(lat||lng){var point=new GLatLng(lat,lng);if(!this._gmap){this._gmap=new GMap2($(this._divId));if(this._isInteractive){this._gmap.addControl(new GSmallMapControl());this._gmap.addControl(new GMapTypeControl());}else{this._gmap.addControl(new GSmallZoomControl());}
this._gmap.setCenter(point);this._gmap.setZoom(zoom);}
this._gmap.setCenter(point);if(showMarker){this.showMarker(point);}}else{this.setMapToEmpty("Unable to map property");}},updateMap:function(displayMapDetail,params){var addrParams={};this.ADDR_FIELDS.each(function(elemId){addrParams[elemId]=params[elemId];});var missingAttr=wak.string.isEmpty(addrParams['addrState'])&&wak.string.isEmpty(addrParams['addrZip']);if(missingAttr){this.setMapToEmpty();}else{this.setMapToEmpty("Loading...");LocationService.instance.getMapInfo(addrParams,function(res){if(res.ok&&res.data){if(!this._map){var zoom=!displayMapDetail?12:9;this.renderMap(res.data.latitude,res.data.longitude,zoom,displayMapDetail);}else{var point=new GLatLng(res.data.latitude,res.data.longitude);this.showMarker(point);}
wak.css.display('propEmptyMapContent',false);this.mapIsVisible=true;}else{this.setMapToEmpty("Not enough info to map address -- Fill out address fields to display map");}}.bind(this));}},setMapToEmpty:function(errMsg){if(errMsg)$('emptyMapMsgDiv').innerHTML=errMsg;wak.css.display('propEmptyMapContent',true);this.mapIsVisible=false;},addMappingInfo:function(params){if(this._gmap!=null){var point=this._marker?this._marker.getPoint():this._gmap.getCenter();params.latitude=point.lat();params.longitude=point.lng();params.mapZoomLevel=this._gmap.getZoom();}}};CMPropertyForm=Class.create();CMPropertyForm.prototype={FIELDS:[['listingTitle','string','Title',true,true,null,null,null],['descriptionx','string','Description',true,true,'description',null,null],['displayMapDetail','checkbox','Map My Property',true,true,null,null,null],['addrLine1','string','Street',false,true,null,null,null],['addrCity','string','City',false,true,null,null,null],['addrState','select','State',true,true,null,null,null],['addrZip','string','Zip Code',false,true,null,null,null],['addrCountry','select','Country',true,true,null,null,null],['locationComment','string','Location Description',false,true,null,null,null],['propertyType','select','Type of Property',true,true,null,null,null],['squareFootage','int','Square Footage',true,true,null,null,null],['sleeps','int','Sleeps',true,true,null,null,{max:99}],['bedroomCount','int','Bedrooms',true,true,null,null,{max:100}],['bathroomCount','float','Bathrooms',true,true,null,null,{max:100,min:0}],['contactFirstName','string','First Name',true,true,null,null,null],['contactLastName','string','Last Name',true,true,null,null,null],['contactPhoneNumber','phoneNumber','Contact Number',true,true,null,null,null],['contactEmergencyNumber','phoneNumber','Emergency Number',true,true,null,null,null]],ADDR_FIELDS:['addrLine1','addrCity','addrState','addrZip','addrCountry'],helpInitialized:false,_validator:null,_map:null,_prop:null,_markerPoint:null,ctor:function(validator){this.ignoreAddrValidation=false;this._validator=validator;},init:function(prop){this._prop=prop;this.FIELDS.each(function(a){this._validator.appendInputRule(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);}.bind(this));if(prop){this._validator.setElemValues(prop);}
this.initFieldTrackers(this._validator);this.initHelpBubble();this.initPropertyMap(prop);},setValidator:function(validator){this._validator=validator;},initFieldTrackers:function(){this._validator.trackFieldLength('listingTitle',PropertyService.ESCAPE_ATTRS['listingTitle']);this._validator.trackFieldLength('descriptionx',PropertyService.ESCAPE_ATTRS['description']);this._validator.trackFieldLength('locationComment',PropertyService.ESCAPE_ATTRS['locationComment']);},initHelpBubble:function(){this.FIELDS.each(function(a){new CMHelpBubble(a[0]);});this.helpInitialized=true;},initPropertyMap:function(){$('displayMapDetail').onclick=this.setMarkerVisibility.bindEventListener(this);$('propEmptyMapContent').innerHTML=g_emptyPropMap;$('propEmptyMapContent').style.backgroundColor='#E8F6FF';this._map=new CMPropertyMap('propMapContent',false,true);this.ADDR_FIELDS.each(function(elemId){$(elemId).onchange=this.updateMap.bindEventListener(this);}.bind(this));var latLng=null;if(this._prop){latLng=this._map.getPropLatLng(this._prop);if(!latLng){latLng=this._map.getLocationLatLng(this._prop);}}
if(latLng){this._map.renderMap(latLng.lat,latLng.lng,this._prop.mapZoomLevel,this._prop.displayMapDetail);}else{this._map.renderMap(null,null,9,true);this._map.setMapToEmpty();}},updateMap:function(){var displayMarker=$F('displayMapDetail');var allParams=this._validator.getRpcParams(false,true);this._map.updateMap(displayMarker,allParams);},setMarkerVisibility:function(){var displayMarker=$F('displayMapDetail');if(displayMarker&&this._map){this.updateMap();}else{this._map.removeMarker();}},onCollectParams:function(params,onlyIfSet){if(this._map)this._map.addMappingInfo(params);},onSaved:function(){this.ignoreAddrValidation=false;},onProcessException:function(res,onErrorCallback){if(res.status!="exception")return true;var error=false;if(res.code=="InvalidProperty"&&res.data&&res.data.length>0){var data=res.data;if(!data[0].subcode){wak.log.error('unexpected validation response',data);}
if(data[0].subcode=="AddressInvalid"){error=true;if(onErrorCallback)onErrorCallback();this._validator.showAddressInvalidError('addressContent',data);}
this.ignoreAddrValidation=true;}
return error;}};CMUploadForm=Class.create();CMUploadForm.prototype={prop:null,_formId:'uploadForm',_fileId:'photoFile',_useHelpBubble:false,maxPhotos:20,ctor:function(prop,useHelpBubble){this.prop=prop;this._useHelpBubble=useHelpBubble;this.onBeforeImageUploadEvent=wak.emptyFunction;this.onImageUploadedEvent=null;CMUploadForm.instance=this;},init:function(){$(this._formId).action=mira.URL.PhotoUpload;$(this._fileId).onchange=function(){this.uploadImage(false);}.bindEventListener(this);this.updateUI();},updateUI:function(){var imageCount=this.prop&&this.prop.images?this.prop.images.length:0;if(imageCount<this.maxPhotos){var pluralS=(imageCount!=1)?"s":"";$('imageCounterDiv').innerHTML=imageCount+' photo'+pluralS+' uploaded.'
if(this._useHelpBubble)new CMHelpBubble('photoFile');$('photoFile').disabled=false;wak.css.removeClass('uploadButton','cmDisabledButtonLook');}else{$('imageCounterDiv').innerHTML=imageCount+' photos uploaded. <span class="lmRedText">You can upload more if you <a class="lmLink" href="'+mira.URL['About']+'/contactus">contact us</a> with the number of additional photos you wish to upload.</span>'
$('photoFile').disabled=true;wak.css.addClass('uploadButton','cmDisabledButtonLook');}},reset:function(){var oldFileInput=$(this._fileId);var newFileInput=$('emptyPhotoFile').cloneNode(false);newFileInput.style.display='inline';newFileInput.id=this._fileId;newFileInput.name=this._fileId;oldFileInput.parentNode.replaceChild(newFileInput,oldFileInput);$(this._fileId).onchange=function(){this.uploadImage(false);}.bindEventListener(this);this.updateUI();},imageUploadedPing:function(res){wak.css.displayToggle('cmFileUploadDiv','waitDiv');wak.css.display('imageCounterDiv',true)
if(!res.success){alert(strings.IMG_UPLOAD_ERROR+res.data);this.onImageUploadedEvent(null);return;}
this.prop.version++;var img=res.data;img.__isUnSaved=res.isUnsaved;this.prop.images.push(img);PropertyService.instance.normalizeImages(this.prop);this.onImageUploadedEvent(img);this.reset();},uploadImage:function(suppressEvent){if(!suppressEvent&&this.onBeforeImageUploadEvent())return;if($F(this._fileId).isEmpty()){alert(strings.SELECT_FILE);return;}
if(this.prop.images.length>=20){alert(strings.TOO_MANY_IMAGES);return;}
$('photoPropertyId').value=this.prop.id;$('photoPropertyVersion').value=this.prop.version;$(this._formId).submit();wak.css.displayToggle('waitDiv','cmFileUploadDiv','imageCounterDiv');}};CMPropertyDetail=Class.create();CMPropertyDetail.prototype={ctor:function(prop,xtabs){this._prop=PropertyService.instance.normalize(prop);this.summaryTab=new CMPDSummaryTab(this._prop);this.mapTab=new CMPDMapTab(this._prop);this.photosTab=new CMPDPhotosTab(this._prop);this.previewCal=null;this.previewMap=null;var arr=[this.summaryTab];arr.fill(arr.length,xtabs);arr.push(this.photosTab);arr.push(this.mapTab);this._allTabs=wak.tabs.create('mainTabs',arr);CMPropertyDetail.instance=this;},onLoad:function(){this._allTabs.render(null,'tabWidget');this._allTabs.tabs.invoke('onLoad');this._allTabs.activate(mira.params.tab||'summary');if(this._prop.__isFav){wak.css.show('isFavIcon');wak.css.show('removeFavorite');}else{wak.css.show('addFavIcon');}
var defer=function(){this.previewCal=new CMAvailability(this._prop,'previewCal');this.previewCal.calendar.config.up=2;this.previewCal.calendar.config.showNav=true;this.previewCal.loadAndRender();this.previewMap=new CMPropertyMap('previewMapId',false,false);this.previewMap.zoom=11;var latLng=this.previewMap.getPropLatLng(this._prop);if(latLng){this.previewMap.renderMap(latLng.lat,latLng.lng,this._prop.mapZoomLevel,this._prop.displayMapDetail);}else{latLng=this.previewMap.getLocationLatLng(this._prop);if(latLng){this.previewMap.renderMap(latLng.lat,latLng.lng,this._prop.mapZoomLevel,false);}}}.bind(this);window.setTimeout(defer,50);if(this._prop.images.length>0)this.onThumbClick(0);},onOptOut:function(){CMUtil.onOptOut(this._prop);},onThumbClick:function(imgIndex){CMUtil.onThumbClick(this._prop,imgIndex,'full');},onMouseOver:function(event,elem,imgIndex){CMUtil.onThumbMouseOver(event,elem,this._prop,imgIndex,'full');},onMouseOut:function(event,elem,imgIndex){CMUtil.onThumbMouseOut(event,elem,this._prop,imgIndex,'full');}};CMPDSummaryTab=Class.create();CMPDSummaryTab.prototype={_prop:null,id:'summary',title:'Summary',ctor:function(prop){this._prop=prop;CMPDSummaryTab.instance=this;}};CMPDMapTab=Class.create();CMPDMapTab.prototype={_prop:null,_map:null,id:'map',title:'Location',ctor:function(prop){this._prop=prop;CMPDMapTab.instance=this;},onActivate:function(isFirstTime){if(!isFirstTime)return;this._map=new CMPropertyMap('gmaps',true,false);var latLng=this._map.getPropLatLng(this._prop);if(latLng){this._map.renderMap(latLng.lat,latLng.lng,this._prop.mapZoomLevel,this._prop.displayMapDetail);}else{latLng=this._map.getLocationLatLng(this._prop);if(latLng){this._map.renderMap(latLng.lat,latLng.lng,this._prop.mapZoomLevel,false);}}}};CMPDPhotosTab=Class.create();CMPDPhotosTab.prototype={_prop:null,id:'photos',title:'Photos',ctor:function(prop){this._prop=prop;CMPDPhotosTab.instance=this;},onActivate:function(isFirstTime){if(!isFirstTime)return;this.render('photostabcontent');},render:function(divId){var t=wak.template.create(g_photosTabTemplate,divId);if(this._prop.images.length>0){var imgs=this._prop.images.clone();var fullImgBlock=t.getBlock('FullImgBlock');imgs.each(function(img,index){fullImgBlock.replaceToken('img',img);fullImgBlock.replaceToken('imgUrl',mira.getImageUrl(this._prop,img,'full'));if((index%2)==1){fullImgBlock.replaceToken('imgStyle','margin-right:0px;');}
fullImgBlock.next();}.bind(this));}else{t.removeBlock('FullImgBlock');}
t.compose();}};CMSlide=Class.create();CMSlide.prototype={prop:null,ctor:function(prop){this.prop=prop;},render:function(divId,onSlideClick){var t=wak.template.create(g_slide,divId);t.replaceToken('prop',this.prop);t.replaceToken('propImgUrl',mira.getPropImageUrl(this.prop));t.compose();if(onSlideClick)wak.closures.setEvent($(divId),"click",onSlideClick);}};CMFloatingHelp=Class.create();CMFloatingHelp.clearFloatingHelp=function(){var helpDiv=$('floatingHelp');if(helpDiv){var parentElem=$(helpDiv.__parentElemId);parentElem.removeChild(helpDiv);var element=parentElem;wak.geometry.resetAncestorsZIndex(parentElem);}}
CMFloatingHelp.onmouseover=function(id,msgId){var parentElem=$(id);if(!parentElem){wak.log.error("CMFloatingHelp.onmouseover -- no elem for: "+id);return;}
CMFloatingHelp.clearFloatingHelp();parentElem.appendChild(wak.html.parseHTMLFragment(g_floatingHelp));var floatingHelp=$('floatingHelp')
floatingHelp.__parentElemId=id;var floatingHelpContent=$('floatingHelpContent');floatingHelpContent.innerHTML=strings.FLOATINGHELP[msgId];wak.geometry.setAncestorsZIndex(parentElem,50);var bounds=wak.geometry.bounds(floatingHelp);floatingHelp.style.top=(-bounds.height-10)+'px';floatingHelp.style.left=(wak.IE?-10:0)+'px';wak.css.show(floatingHelp);}
CMHelpBubble=Class.create();CMHelpBubble.clearHelpBubble=function(){var helpDiv=$('helpDiv');if(helpDiv){wak.css.addClass(helpDiv,'lmOffScreen');}};CMHelpBubble.prototype={ctor:function(divId){var elem=$(divId);if(!elem){wak.log.error('CMHelpBubble::ctor -- no elem found for: '+divId);return;}
if(strings.PROPFORMHELP[divId]){if(elem.getAttribute('helpOffsetDivId')){if(elem.type=='file'||elem.type=='button'){wak.event.listen(divId,'mouseover',this.onFocus);wak.event.listen(divId,'mouseout',this.onBlur);}else{wak.event.listen(divId,'focus',this.onFocus);wak.event.listen(divId,'blur',this.onBlur);}}else{wak.log.error('CMHelpBubble::ctor -- No helpOffsetDivId on elem:'+elem.id);}}},onFocus:function(evt){evt=new WakEvent(evt);var elem=evt.target;var elemId=elem.id;var helpDiv=$('helpDiv');var helpOffsetDivId=null;if(strings.PROPFORMHELP.elemId){wak.log.error('CMHelpBubble::onFocus -- no help specified for elem'+elem.id);return;}
if(!elem.getAttribute('helpOffsetDivId')){wak.log.error("CMHelpBubble:onFocus() -- No helpOffsetDiv on elem:"+elem.id);return;}
var helpOffsetDivId=elem.getAttribute('helpOffsetDivId');CMHelpBubble.clearHelpBubble();if(!helpDiv){var offsetElem=$('lmBody1');helpDiv=offsetElem.appendChild(wak.html.parseHTMLFragment(g_helpBubble));}
$('helpContent').innerHTML=strings.PROPFORMHELP[elemId];wak.css.removeClass(helpDiv,'lmOffScreen');var leftOffset=486;wak.geometry.positionRelative(helpDiv,'lmBody1',helpOffsetDivId,{top:20,left:leftOffset});},onBlur:function(evt){CMHelpBubble.clearHelpBubble();}}
CMDateChart=new Class.create();CMDateChart.prototype={COLORS:["#FFFFCD","#FDC210","#93C846","#8EC7C1","#FFFF00","#FB8917","#FF99FF","#CCFE67","#758FE6","#CACE33","#01CBCB","#FF679A","#99FE02","#CC9900","#569CA8","#CECCFE","#02CD02","#D760D6","#65FFFD","#AEAEAE"],colorsUsed:null,divId:null,tableDivId:null,idRoot:null,bubbleOffsetParent:null,lastMouseOutDate:null,ctor:function(divId,tableDivId,idRoot,bubbleOffsetParent){this.divId=divId;this.colorsUsed={};this.tableDivId=tableDivId;this.idRoot=idRoot;this.bubbleOffsetParent=bubbleOffsetParent;},render:function(dataModel){var t=wak.template.create(g_dateChartTemplate,this.divId);t.replaceToken('idRoot',this.idRoot);var graphWidth=wak.geometry.bounds(this.tableDivId).width;$(this.divId).style.width=graphWidth+'px';var dayWidth=graphWidth/365;this._markColorsUsed(dataModel);var monthLabelBlock=t.getBlock("MonthLabelBlock");Date.ABBR_MONTHS.each(function(month,index){monthLabelBlock.replaceToken("month",month);monthLabelBlock.replaceToken("width",Math.round(dayWidth*Date.NUM_DAYS_IN_MONTH[index])+'px');monthLabelBlock.replaceToken("left",Math.round(dayWidth*Date.NUM_DAYS_TO_MONTH[index])+'px');monthLabelBlock.replaceToken('idRoot',this.idRoot);monthLabelBlock.next();});var chRanges=[];var chRangesByRowId={};var numDays=0;dataModel.each(function(row,index){if(!row.startDate)return;var startDay=row.startDate.getDayOfYear();var endDay=row.endDate.getDayOfYear();var wraps=false;if(startDay>endDay){numDays=365-startDay+endDay+1;wraps=true;}else{numDays=endDay-startDay+1;}
var chRange={'rowId':row.__id,'name':row.name,'startDay':startDay,'endDay':endDay,'numDays':numDays,'wraps':wraps,'color':dataModel[index].color,'borderColor':dataModel[index].color,'row':row};chRanges.push(chRange);chRangesByRowId[row.__id]=chRange;});chRanges.sort(function(r1,r2){return r1.numDays-r2.numDays;});var defaultRowId=chRanges[chRanges.length-1].rowId;var daysOfYear=[];daysOfYear[0]=-1;for(var i=1;i<=365;i++){daysOfYear[i]=defaultRowId;}
daysOfYear[366]=-1;function markRange(chRange,startDay,endDay){for(var i=startDay;i<=endDay;i++){if(daysOfYear[i]==defaultRowId){daysOfYear[i]=chRange.rowId;}}};chRanges.each(function(chRange){if(chRange.rowId!=defaultRowId){if(chRange.wraps){markRange(chRange,chRange.startDay,365);markRange(chRange,1,chRange.endDay);}else{markRange(chRange,chRange.startDay,chRange.endDay);}}});var chRegions=[];var lastRowId=-1;var startDay=1;var cntr=0;daysOfYear.each(function(rowId,index){if(lastRowId!=rowId){if(lastRowId!=-1){var endDay=index-1;var chRange=chRangesByRowId[lastRowId];var numDays=endDay-startDay+1;chRegions.push({'id':this.idRoot+'region_'+cntr++,'rowId':lastRowId,'startDay':startDay,'endDay':endDay,'color':chRange.color,'borderColor':chRange.color,'numDays':numDays,'range':chRange});startDay=index;}
lastRowId=rowId;}}.bind(this));Date.NUM_DAYS_TO_MONTH.each(function(offset,index){if(offset!=0){var chRange=chRangesByRowId[daysOfYear[offset]];var underRegion=chRegions.pick(function(region){return(!region.id.match('^month.*')&&region.startDay<=offset&&region.endDay>=offset);});chRegions.push({'id':this.idRoot+'monthDivider_'+index,'rowId':daysOfYear[offset],'startDay':offset,'endDay':offset,'color':'black','borderColor':chRange.borderColor,'numDays':1,'range':chRange,'underRegion':underRegion});}}.bind(this));var regionBlock=t.getBlock("ChartRegionBlock");chRegions.each(function(chRegion){regionBlock.replaceToken("regionId",chRegion.id);regionBlock.replaceToken('idRoot',this.idRoot);regionBlock.next();});t.compose();chRegions.each(function(chRegion,index){var regionElem=$(chRegion.id);var width=Math.round(chRegion.numDays*dayWidth);var left=Math.round((chRegion.startDay-1)*dayWidth);this._lastMouseOutDate=new Date();if(left+width>graphWidth-1){width=graphWidth-left-1;}
regionElem.style.width=width+'px';regionElem.style.backgroundColor=chRegion.color;regionElem.style.position="absolute";regionElem.style.left=left+'px';regionElem.style.top='0px';if(chRegion.rowId){$(regionElem).onmouseover=function(){var fn=function(){if(this._timer){this._onMouseOver(chRegion,dayWidth);}}.bind(this);var msSinceLastMouseOut=new Date().getTime()-this._lastMouseOutDate.getTime();if(msSinceLastMouseOut>200){this._timer=window.setTimeout(fn,150);}else{this._onMouseOver(chRegion,dayWidth);}}.bindEventListener(this);$(regionElem).onmouseout=function(){if(this._timer)window.clearTimeout(this._timer);this._timer=null;this._onMouseOut(chRegion,dayWidth);}.bindEventListener(this);regionElem.rangeName=chRegion.rangeName;}}.bind(this));},_onMouseOver:function(chRegion,dayWidth){var curRegion=chRegion.underRegion?chRegion.underRegion:chRegion;var elem=$(this.idRoot+curRegion.rowId);elem.style.backgroundColor=curRegion.borderColor;},_onMouseOut:function(chRegion,dayWidth){var curRegion=chRegion.underRegion?chRegion.underRegion:chRegion;var elem=$(this.idRoot+curRegion.rowId);if(wak.css.containsClass(elem,'editMode')){elem.style.backgroundColor='#EFEFEF';}else{elem.style.backgroundColor="white";}
elem.style.color='';this._lastMouseOutDate=new Date();},_markColorsUsed:function(dataModel){dataModel.each(function(data,index){this.colorsUsed[data.color]=1;}.bind(this));},_allocateColor:function(){var res=this.COLORS[this.COLORS.length];for(var i=0;i<this.COLORS.length;i++){if(this.colorsUsed[this.COLORS[i]]!=1){this.colorsUsed[this.COLORS[i]]=1;result=this.COLORS[i];break;}}
return result;}};CMUtil={_approvePending:false,_lastHoverIndex:-1,onThumbClick:function(prop,imgIndex,rep){var ieHack=function(){var url=mira.getImageUrl(prop,prop.images[imgIndex],rep);$('previewBigImage').src=url;LogEventService.instance.clientEvent('ViewThumbnail');if($('cmThumbHover'))wak.css.hide('cmThumbHover');};window.setTimeout(ieHack,0);var oldImg=$('imgThumb'+CMUtil._selImgIndex);if(oldImg)wak.css.removeClass(oldImg,'selected');wak.css.addClass('imgThumb'+imgIndex,'selected');CMUtil._selImgIndex=imgIndex;},onThumbMouseOver:function(event,elem,prop,imgIndex,rep){var url=mira.getImageUrl(prop,prop.images[imgIndex],rep);$('previewBigImage').src=url;wak.css.addClass('imgThumb'+imgIndex,'hovering');CMUtil._lastHoverIndex=imgIndex;},onThumbMouseOut:function(event,elem,prop,imgIndex,rep){var url=mira.getImageUrl(prop,prop.images[CMUtil._selImgIndex],rep);$('previewBigImage').src=url;if(CMUtil._lastHoverIndex>=0){wak.css.removeClass('imgThumb'+CMUtil._lastHoverIndex,'hovering');CMUtil._lastHoverIndex=-1;}},shouldShowOwnerSash:function(prop){return(mira.user&&!prop.ownerVerified&&prop.userId==mira.user.id);},onOptOut:function(prop,anc){alert(strings.NO_SHOW_ALERT);UserService.instance.optOut();}};CMPanelPrettyAlert=Class.create();CMPanelPrettyAlert.prototype={_dialogDiv:null,ctor:function(titleString,messageString,hideCloseButton){CMPanelPrettyAlert.instance=this;var template=wak.template.create(g_panelPrettyAlert);template.replaceToken('panelTitle',titleString);template.replaceToken('panelMessage',messageString);if(hideCloseButton){template.replaceToken('hideCloseButton','hidden');}
this._dialogDiv=wak.html.parseHTMLFragment(template.compose());this._dialogDiv=CMPanelRounded.create(this._dialogDiv,mira.constants.PANEL_TOP_GREEN);},addCssClassToTitle:function(aClass){wak.css.addClass('cmPanelWaitTitleId',aClass);},addCssClassToMessage:function(aClass){wak.css.addClass('cmPanelMessageId',aClass);},getPanelDiv:function(){return this._dialogDiv;},show:function(){WakModalDialog.showModalDialog(mira.constants.PRETTY_ALERT_PANEL,this._dialogDiv,this,200,true,true);},close:function(){if(WakModalDialog.namedOpenInstances[mira.constants.PRETTY_ALERT_PANEL])WakModalDialog.namedOpenInstances[mira.constants.PRETTY_ALERT_PANEL].close();},onDialogClose:function(){CMPanelPrettyAlert.instance=null;}};CMPanelPrettyAlert.show=function(){if(!CMPanelPrettyAlert.instance){aPanel=new CMPanelPrettyAlert();aPanel.show();}};CMPanelPrettyAlert.showTitleAndMessage=function(title,message,noAutoDismiss){var thankYouPanel=new CMPanelPrettyAlert(title,message,!noAutoDismiss);thankYouPanel.show();if(!noAutoDismiss){var closeThankYou=function(){thankYouPanel.close();};window.setTimeout(closeThankYou,1500);}};CMPanelPrettyAlert.showThankYou=function(message,autoDismiss){CMPanelPrettyAlert.showTitleAndMessage("Thank you",message,autoDismiss);};CMPanelWait=Class.create();CMPanelWait.prototype={_dialogDiv:null,_dialog:null,_deferredShow:false,ctor:function(titleString){if(!this.__closeCalled){CMPanelWait.instance=this;this._waitingToOpen=false;mira.tempDisableLoadingMessage();if(WakModalDialog.namedOpenInstances[mira.constants.WAIT_PANEL]){this._waitingToOpen=window.setTimeout(function(){this.ctor(titleString)}.bind(this),100);}else{var template=wak.template.create(g_panelWait);template.replaceToken('panelTitle',titleString);this._dialogDiv=wak.html.parseHTMLFragment(template.compose());this._dialogDiv=CMPanelRounded.create(this._dialogDiv,mira.constants.PANEL_TOP_WHITE,mira.constants.PANEL_BOTTOM_GRAY);if(this._deferredShow){this._deferredShow=false;this.show();}}}},show:function(){if(!this.__closeCalled){if(this._waitingToOpen){this._deferredShow=true;}else if(CMPanelWait.instance){mira.tempDisableLoadingMessage();this._dialog=new WakModalDialog(mira.constants.WAIT_PANEL,this._dialogDiv,this,300,false,true,true,true);this._dialog.open();}}},close:function(){this.__closeCalled=true;window.clearTimeout(this._waitingToOpen);this._waitingToOpen=false;CMPanelWait.instance=null;this._dialog.close();},onDialogClose:function(){if(wak.isDefinedNonNull(this._onCloseCallback)){this._onCloseCallback();}
CMPanelWait.instance=null;}};CMPanelWait.show=function(title,onCloseCallback){var aPanel=CMPanelWait.instance;if(!aPanel){aPanel=new CMPanelWait(title);}
if(aPanel&&onCloseCallback){aPanel._onCloseCallback=onCloseCallback;}
aPanel.show();};CMPanelWait.close=function(){if(CMPanelWait.instance){CMPanelWait.instance.close();}};CMPanelShareProperties=Class.create();CMPanelShareProperties.prototype={_dialog:null,_validator:null,_submitButton:null,_maxMessageChars:500,_shareType:null,ctor:function(shareType){mira.constants.assertConstant(shareType);this._shareType=shareType;var titleText=null;if(shareType==mira.constants.SHARE_SAVED_AUTO){titleText='Receive an email of your viewed properties';}else{titleText='Share with friends<br>or remind yourself';}
CMPanelShareProperties.instance=this;var template=wak.template.create(g_panelShareProperties);template.replaceToken('panelTitle',titleText);var showShareViewedTooCheckboxBlock=false;var showUrlToShareBlock=true;if((shareType==mira.constants.SHARE_SAVED)||(shareType==mira.constants.SHARE_SAVED_AUTO)){showUrlToShareBlock=false;if((mira.pageId=='MyFavorites')&&SearchResults.favoritesContainsViewedProperties()&&SearchResults.favoritesContainsSavedProperties()){showShareViewedTooCheckboxBlock=true;}}
if(!showShareViewedTooCheckboxBlock){template.removeBlock('shareViewedTooCheckboxBlock');}
if(!showUrlToShareBlock){template.removeBlock('urlToShareBlock');}
if(!showShareViewedTooCheckboxBlock&&!showUrlToShareBlock){template.replaceToken('panelHeightNoCheckboxOverride','panelHeightNoCheckboxOverride')}
var dialogContent=wak.html.parseHTMLFragment(template.compose());var dialogDiv=CMPanelRounded.create(dialogContent,mira.constants.PANEL_TOP_GREEN);if(showUrlToShareBlock){var url=null;if(typeof(SearchResults)!='undefined'){url=SearchResults.getCompleteSearchUrl();}else{url=window.location;}
$('spUrlToShareId').value=url;}
$('spButtonSubmitId').onclick=this.submitForm.bind(this);this._submitButton=new CMButton('spButtonSubmitId','lmButtonSendDisabled');this._dialog=new WakModalDialog(mira.constants.SHARE_PANEL,dialogDiv,this,200);if(!$('spEmailTextId').value&&mira.user&&mira.user.email)$('spEmailTextId').value=mira.user.email;this._validator=new Validator('lmFieldError',strings.FORM_ERROR_MSG,null,this,document.body,document.body);this._validator.appendInputRule('spEmailTextId','email','Email',true,false,'email',null,null);this._validator.appendInputRule('spFriendEmailsTextId','emailList','Friend emails',false,false,'friendEmails',null,null);this._validator.appendInputRule('spNameTextId','string','First Name',false,false,'name',null,null);this._validator.appendInputRule('spMessageTextId','string','Message',false,false,'message',null,null);this._validator.trackFieldLength('spMessageTextId',this._maxMessageChars);},show:function(){var logEventName='SharePropertiesPanelShown'+'-'+this._shareType;LogEventService.instance.clientEvent(logEventName);this._dialog.open();},_serverResponse:function(response){if(response.ok){Validator.clearFep();CMPanelPrettyAlert.showThankYou("Your email has been sent");}else{this._submitButton.enable();}},onDialogClose:function(){if(typeof(SearchResults)!='undefined')wak.autohelp.fire(mira.autohelp.VIEW_SAVED,function(){SearchResults.showDisappearingHelpBubble(mira.autohelp.VIEW_SAVED)},true);Validator.clearFep();CMPanelShareProperties.instance=null;},submitForm:function(){if(!this._validator.validateAllFields()){var params=this._validator.getRpcParams(false,false);this._submitButton.disable();var shareViewedTooCheckbox=$('spShareViewedTooCheckboxId');params.ignoreViewedOnly=wak.isDefinedNonNull(shareViewedTooCheckbox)&&wak.css.isUserVisible(shareViewedTooCheckbox)&&!shareViewedTooCheckbox.checked;if((this._shareType==mira.constants.SHARE_SAVED)||(this._shareType==mira.constants.SHARE_SAVED_AUTO)){UserService.instance.shareFavorites(params,this._serverResponse.bind(this));}else if(this._shareType==mira.constants.SHARE_SEARCH_RESULTS){params.url=$('spUrlToShareId').value;UserService.instance.shareSearchResults(params,this._serverResponse.bind(this));}else if(this._shareType==mira.constants.SHARE_PROPERTY){params.url=$('spUrlToShareId').value;UserService.instance.shareProperty(params,this._serverResponse.bind(this));}}},fill:function(){if(!$('spEmailTextId').value)$('spEmailTextId').value='keith@pickpackgo.com';if(!$('spFriendEmailsTextId').value)$('spFriendEmailsTextId').value='keith@lunamira.com';if(!$('spNameTextId').value)$('spNameTextId').value='Share Guy';if(!$('spMessageTextId').value)$('spMessageTextId').value='Hey guys, check out these awesome properties from PickPackGo!';this._validator.trackFieldLength('spMessageTextId',this._maxMessageChars);}};CMPanelShareProperties.show=function(shareType){var aPanel=CMPanelShareProperties.instance;if(!aPanel){aPanel=new CMPanelShareProperties(shareType);}
aPanel.show();wak.autohelp.setFired(mira.autohelp.SHARE_SAVED_AUTO);if(shareType==mira.constants.SHARE_SAVED_AUTO){wak.autohelp.setFired(mira.autohelp.SHARE_SAVED);}};CMLogin=new Class.create();CMLogin.AuthenticateReason=2;CMLogin.prototype={_formId:null,_delegate:null,ctor:function(formId,delegate){this._formId=formId;this._delegate=delegate;CMLogin.instance=this;},getForm:function(){return $(this._formId);},doSubmit:function(){var form=$(this._formId);form.action=mira.URL['LoginSubmit'];try{form.submit();}catch(exc){wak.log.error('CMLogin.doSubmit -- caught exc: ',exc);}},loginPing:function(errNum,tpw){if(this._delegate&&this._delegate.loginDone){var msg=null;switch(errNum){case 3:msg=tpw;break;case 2:msg="You are already logged in. Please sign out if you want to login as a different user or create a new account";break;case 1:msg="Sorry, that email address and password is not a valid combination.";break;}
this._delegate.loginDone(this,errNum,msg);}}};CMInquiry=new Class.create();CMInquiry.showInquiryForm=function(propId,delegate){var inquiry=new CMInquiry(propId,delegate);inquiry.showDialog();}
CMInquiry.swapInquiryForm=function(propId,delegate){var inquiry=new CMInquiry(propId,delegate,true);inquiry.onDialogOpen();}
CMInquiry.prototype={_divId:null,_propId:null,_datePicker:null,_dialog:null,_feeStructure:null,_feeStructFields:['Rent','CleaningFees','Taxes','OtherFees'],_inquiryFields:['Email','FirstName','LastName','NumAdults','NumChildren','NumPets','Question','PhoneNumber'],_validator:null,_inquirySubmitButton:null,_inquiryAuthButton:null,_numInquiries:null,_email:null,_userState:null,_delegate:null,_lastInquiryStatus:0,_DATES_CHANGED_EQUAL_ALL_PRESENT:1,_DATES_CHANGED_EQUAL_ALL_EMPTY:2,_DATES_CHANGED_UNEQUAL_ALL_PRESENT:3,_DATES_CHANGED_UNEQUAL_PANEL_EMPTY:4,_DATES_CHANGED_UNEQUAL_SEARCHBOX_EMPTY:5,ctor:function(propId,delegate,swapDiv){CMInquiry.instance=this;this._propId=propId;var template=wak.template.create(g_inquiry);template.replaceToken("propId",this._propId);var IVCTB1=(mira.sessionAttributes&&mira.sessionAttributes['UET_IVCTB1_InquiryNo_CallToBookYes']);if(IVCTB1){template.removeBlock("NotWhenIVCTB1Block");}else{template.removeBlock("OnlyWhenIVCTB1Block");}
var dialogDiv=wak.html.parseHTMLFragment(template.compose());dialogDiv=CMPanelRounded.create(dialogDiv);if(!swapDiv){this._dialog=new WakModalDialog(mira.constants.INQUIRY_PANEL,dialogDiv,this,200);}else{WakModalDialog.openInstance.swapContentDiv(mira.constants.INQUIRY_PANEL,dialogDiv);this._dialog=WakModalDialog.namedOpenInstances[mira.constants.INQUIRY_PANEL];}
this._delegate=delegate;this._feeStructure={cmInquiryRent:null,cmInquiryCleaningFees:0,cmInquiryTaxes:null,cmInquiryOtherFees:0};},showDialog:function(){this._dialog.open();},onDialogOpen:function(){if(this.datesExist()){LogEventService.instance.clientEvent('InquiryPanelShownDatesYES');}else{LogEventService.instance.clientEvent('InquiryPanelShownDatesNO');}
this._validator=new Validator('lmFieldError',strings.FORM_ERROR_MSG,null,this,document.body,document.body);this._validator.appendInputRule('cmInquiryFirstName','string','First Name',true,false,'firstName',null,null);this._validator.appendInputRule('cmInquiryLastName','string','Last Name',true,false,'lastName',null,null);this._validator.appendInputRule('cmInquiryEmail','email','Email',true,false,'email',null,null);var IVCTB1=(mira.sessionAttributes&&mira.sessionAttributes['UET_IVCTB1_InquiryNo_CallToBookYes']);this._validator.appendInputRule('cmInquiryPhoneNumber','phoneNumber','Phone Number',IVCTB1,false,'phoneNumber',null,{reqErrorMsg:"This property requires that you enter your phone number when making an inquiry."});this._validator.appendInputRule('cmInquiryStartDate','date','Start Travel',true,false,'startDate',null,null);this._validator.appendInputRule('cmInquiryEndDate','date','End Travel',true,false,'endDate',null,null);this._validator.appendInputRule('cmInquiryNumAdults','int','Adults',true,false,'numAdults',null,{min:1});this._validator.appendInputRule('cmInquiryNumChildren','int','Chidren',true,false,'numChildren',null,null);this._validator.appendInputRule('cmInquiryNumPets','int','Pets',true,false,'numPets',null,null);this._validator.appendInputRule('cmInquiryQuestion','string','Questions',true,false,'question',null,null);CMInquiry.instance._validator.trackFieldLength('cmInquiryQuestion',1000);this._inquirySubmitButton=new CMButton('cmInquirySubmitButton','sendButtonDisabled');this.getPrefillAndInitialRates();if(mira.user&&mira.user.noAuth==false){$('cmInquiryEmail').value=mira.user.email;}
if($('cmInquiryInsCheckbox'))$('cmInquiryInsCheckbox').onclick=this.updateFeeTable.bindEventListener(this);if($('cmInquiryFirstName'))$('cmInquiryFirstName').focus();if(IVCTB1){$('cmInquiryNumAdults').value=1;$('cmInquiryNumChildren').value=1;}},onDialogClose:function(){Validator.clearFep();CMInquiry.instance=null;},getPrefillAndInitialRates:function(){var today=Date.removeHMS(new Date());PropertyService.instance.getInquiryPanelPrefill(this._propId,today,today.add('M',12).monthEnd(),function(res){if(res.ok){var prefill=res.data;if(prefill._requiresPhone){var rule=this._validator.getRule('cmInquiryPhoneNumber');wak.css.display('cmInquiryOptText',false);rule.required=true;}
if(prefill.availability){this._datePicker=new CMDatePicker('cmInquiryStartDate','cmInquiryEndDate',null,2,prefill.availability);this._datePicker.eventDelegate=this;}
this._inquiryFields.each(function(field){if(prefill[field]){var elemId='cmInquiry'+field;$(elemId).value=prefill[field];}}.bind(this));if(prefill.StartDate){$('cmInquiryStartDate').value=prefill.StartDate.getSimpleDateString();}
if(prefill.EndDate){$('cmInquiryEndDate').value=prefill.EndDate.getSimpleDateString();}
this._numInquiries=prefill._numInquiries?prefill._numInquiries:0;var searchBoxInfo=mira.getSearchBoxCookie();if(searchBoxInfo&&!this._datePicker.getFromDate()&&!this._datePicker.getToDate()){if(searchBoxInfo['q.fromDate'])$('cmInquiryStartDate').value=searchBoxInfo['q.fromDate'];if(searchBoxInfo['q.toDate'])$('cmInquiryEndDate').value=searchBoxInfo['q.toDate'];}
var petsPulldown=$('cmInquiryNumPets');if(prefill&&prefill.NumPets=='no'){$('noPetsAllowed').selected=true;petsPulldown.disabled=true;}else{petsPulldown.length=petsPulldown.length-1;}
this.updateFees(true);}}.bind(this));},updateFeeTable:function(){var currencySymbol=mira.getCurrencySymbol();var total=0;for(var feeId in this._feeStructure){var val=this._feeStructure[feeId];if(val&&$(feeId)){$(feeId).innerHTML=mira.formatValueForCurrency(currencySymbol,val);if(feeId!='cmInquiryTravelIns'&&feeId!='cmInquiryDamageIns'){total+=val;}}else{$(feeId).innerHTML="&mdash;";}}
$('cmInquiryTotal').innerHTML=total>0?mira.formatValueForCurrency(currencySymbol,total):'&mdash;';},datesExist:function(){var searchBoxInfo=mira.getSearchBoxCookie();var searchFieldFrom=searchBoxInfo?Date.parseSimpleDate(searchBoxInfo['q.fromDate'],true):null;var searchFieldTo=searchBoxInfo?Date.parseSimpleDate(searchBoxInfo['q.toDate'],true):null;var panelFieldFrom=this._datePicker?this._datePicker.getFromDate(true):null;var panelFieldTo=this._datePicker?this._datePicker.getToDate(true):null;return(searchFieldFrom||searchFieldTo||panelFieldFrom||panelFieldTo);},datesHaveChanged:function(){var returnValue=null;var searchBoxInfo=mira.getSearchBoxCookie();var searchFieldFrom=searchBoxInfo?Date.parseSimpleDate(searchBoxInfo['q.fromDate'],true):null;var searchFieldTo=searchBoxInfo?Date.parseSimpleDate(searchBoxInfo['q.toDate'],true):null;var panelFieldFrom=this._datePicker?this._datePicker.getFromDate(true):null;var panelFieldTo=this._datePicker?this._datePicker.getToDate(true):null;var searchBoxIsEmpty=(!searchFieldFrom||!searchFieldTo);var panelIsEmpty=(!panelFieldFrom||!panelFieldTo);if(searchBoxIsEmpty&&panelIsEmpty){returnValue=this._DATES_CHANGED_EQUAL_ALL_EMPTY;}else if(panelIsEmpty){returnValue=this._DATES_CHANGED_UNEQUAL_PANEL_EMPTY;}else if(searchBoxIsEmpty){returnValue=this._DATES_CHANGED_UNEQUAL_SEARCHBOX_EMPTY;}else if((searchFieldFrom==panelFieldFrom)&&(searchFieldTo==panelFieldTo)){returnValue=this._DATES_CHANGED_EQUAL_ALL_PRESENT;}else{returnValue=this._DATES_CHANGED_UNEQUAL_ALL_PRESENT;}
return returnValue;},reset_feeStructure:function(){this._feeStructure.cmInquiryRent=null;this._feeStructure.cmInquiryCleaningFees=null;this._feeStructure.cmInquiryOtherFees=null;this._feeStructure.cmInquiryTaxes=null;this._feeStructure.cmInquiryTotal=null;},needRateRecalc:function(){var returnValue=false;var fromDate=this._datePicker.getFromDate();var toDate=this._datePicker.getToDate();var numAdults=$FN('cmInquiryNumAdults');var numChildren=$FN('cmInquiryNumChildren');if(fromDate&&toDate){var datesChanged=(!this.__lastFromDate||fromDate.getTime()!=this.__lastFromDate.getTime())||(!this.__lastToDate||toDate.getTime()!=this.__lastToDate.getTime());returnValue=datesChanged;}
this.__lastFromDate=fromDate;this.__lastToDate=toDate;this.__lastNumAdults=numAdults;this.__lastNumChildren=numChildren;return returnValue;},hideCalcErrors:function(){wak.css.display('cmInquiryMiscErrorId',false);wak.css.display('cmInquiryPropNotAvailId',false);wak.css.display('cmInquiryMinStayId',false);},updateFees:function(doPrefillInfo){var fromDate=this._datePicker.getFromDate();var toDate=this._datePicker.getToDate();var numAdults=$FN('cmInquiryNumAdults');var reqFieldsHaveValues=fromDate!=null&&toDate!=null;if(this.needRateRecalc()){this._calculatingFees=true;this.reset_feeStructure();this.hideCalcErrors();var delayedAction=function(){if(this._calculatingFees){CMPanelWait.show("Calculating fees...",function(){if(this._calculatingFees){wak.css.show('cmInquiryRateStatus');}}.bind(this));}}.bind(this);var todoWakModalDialogDoesNotSupportChildren=true;if(todoWakModalDialogDoesNotSupportChildren){wak.css.show('cmInquiryRateStatus');}else{window.setTimeout(delayedAction,500);}
if(this._inquirySubmitButton.enabled)this._inquirySubmitButton.disable();PropertyService.instance.calculateRentalFees(this._propId,fromDate,toDate,$FN('cmInquiryNumAdults'),$FN('cmInquiryNumChildren'),function(res){this._inquirySubmitButton.enable();this._lastInquiryStatus=0;wak.css.hide('cmInquiryRateStatus');this._calculatingFees=false;CMPanelWait.close();if(res.ok){var rateInfo=res.data;var resultsContainFeeInfo=false;if(rateInfo){this._lastInquiryStatus=rateInfo.errorCode;if(rateInfo.errorCode!=0){switch(rateInfo.errorCode){case 1:wak.css.display('cmInquiryMinStayId',true);break;case 2:wak.css.display('cmInquiryPropNotAvailId',true);break;case 3:wak.css.display('cmInquiryMiscErrorId',true);break;}}
this._feeStructFields.each(function(fee){this._feeStructure['cmInquiry'+fee]=rateInfo[fee];resultsContainFeeInfo|=rateInfo[fee];}.bind(this));}
wak.css.display('cmInquiryDoDoDatesID',!(resultsContainFeeInfo||reqFieldsHaveValues));}
this.updateFeeTable();}.bind(this));}
wak.css.display('cmInquiryDoDoDatesID',!reqFieldsHaveValues);this.updateFeeTable();},onDatePickerOpen:function(elemOrId){this._validator.onDatePickerOpen(elemOrId);},onDatePickerClose:function(elemOrId,fromDate,defaultText){this.updateFees(false);this._validator.onDatePickerClose(elemOrId,fromDate,defaultText);},onShowFep:function(validator,fepOrId,parentElemOrId){var parentElem=$(parentElemOrId);wak.geometry.setAncestorsZIndex(parentElem,2500);},onClearFep:function(fep,parentElem){wak.geometry.resetAncestorsZIndex(parentElem);},submitInquiry:function(){if(!this._validator.validateAllFields()){if(this._lastInquiryStatus==1){this._validator.showFep('cmInquiryStartDate',"The chosen dates don't meet the minimum stay requirement for this property.");return;}
if(this._lastInquiryStatus==2){this._validator.showFep('cmInquiryStartDate',"This property is not available on the chosen dates.");return;}
var startDate=this._datePicker.getFromDate();var endDate=this._datePicker.getToDate();if(!this._datePicker.isDateAvailable(startDate,true)){var dateString=startDate.format('%n/%e/%Y');var msg='This property is not available on '+dateString+'. Please choose another start date.';this._validator.showFep(this._datePicker.fromInputId,msg);return;}
if(!this._datePicker.isDateAvailable(endDate,false)){var dateString=endDate.format('%n/%e/%Y');var msg='This property is either not available on '+dateString+' or some of the days between the start date and end date. Please adjust your dates accordingly.';this._validator.showFep(this._datePicker.toInputId,msg);return;}
var params=this._validator.getRpcParams(false,false);params.propId=this._propId;params.startDate=this._datePicker.getFromDate(true);params.endDate=this._datePicker.getToDate(true);this._inquirySubmitButton.disable();LogEventService.instance.clientEvent('InquiryPanelSubmittedDatesYES');PropertyService.instance.submitInquiry(params,function(res){if(res.ok){if(res.data.ia){mira.reportConversionToAffiliate(this._propId,mira.constants.CONVERSION_EVENT_TYPE_LEAD,1);}
this.showFollowUp(params,res.data);this._lastSubmittedParams=params;}else{this._inquirySubmitButton.enable();}
if(mira.pageId!='MyFavorites'){var resultsCallback=function(results){if(results.data.userId){mira.user.favoriteIds=results.data.favoriteIds;if(results.data.favoriteProps)mira.user.favoriteProps=results.data.favoriteProps;}
var onSearchResultsPage=((typeof(SliderPane)!='undefined')&&SliderPane.instance);if(onSearchResultsPage){var compactPropsList=SliderPane.instance._res.props.compact();PropertyService.instance.normalize(compactPropsList);}
CMFavsTarget.instance.update();if(onSearchResultsPage){SliderPane.instance.render(false,true);}}.bind(this);UserService.instance.getCurrentUserFavsState({'includePropsList':(mira.pageId=='MyFavorites')},resultsCallback);}}.bind(this));}},cancelInquiry:function(params,data){Validator.clearFep();if(this._datePicker.getFromDate(true)){LogEventService.instance.clientEvent('InquiryPanelCancelledDatesYES');}else{LogEventService.instance.clientEvent('InquiryPanelCancelledDatesNO');}
if(!this.showDateCollectionPanel()){WakModalDialog.namedOpenInstances[mira.constants.INQUIRY_PANEL].close();}},showDateCollectionPanel:function(showThankYou){var haveShown=false;var shouldShow=!haveShown&&(mira.pageId!='MyFavorites');var returnValue=false;var introText=null;var searchBoxInfo=mira.getSearchBoxCookie();var datesChangeCode=this.datesHaveChanged();if(shouldShow&&this._delegate&&this._delegate.shouldShowDateCollector){if(!this._delegate.shouldShowDateCollector())shouldShow=false;}
if((datesChangeCode==this._DATES_CHANGED_EQUAL_ALL_EMPTY)||(datesChangeCode==this._DATES_CHANGED_UNEQUAL_SEARCHBOX_EMPTY)){introText=strings.DATE_COLLECTION.noPreviousSearch;}else if(datesChangeCode==this._DATES_CHANGED_UNEQUAL_ALL_PRESENT){shouldShow=true;introText=strings.DATE_COLLECTION.previousSearchWithDifferentDates;}
if(introText&&shouldShow){var startDate=null;var endDate=null;if(this._datePicker){startDate=this._datePicker.getFromDate(false);endDate=this._datePicker.getToDate(false);}
var dateCollector=new CMDateCollector(introText,this._delegate,startDate,endDate);dateCollector.showDialog();haveShown=true;returnValue=true;}
return returnValue;},showFollowUp:function(params,data){if(params)this._email=params.email;var numInquiries=this._numInquiries;Validator.clearFep();if(!this.showDateCollectionPanel(true)){var doingAuth=false;if(data.userState=='LOGGED_IN'||(numInquiries>1)){Validator.clearFep();CMPanelPrettyAlert.showThankYou("Your inquiry has been sent");}else{var template=wak.template.create(g_inquiry_signUpOrSignIn);var buttonDisabledClass=null;if(data.userState=='UNREGISTERED'){template.removeBlock('SignInBlock');buttonDisabledClass='signUpButtonDisabled';}else{template.removeBlock('SignUpBlock');buttonDisabledClass='signInButtonDisabled';}
template.replaceToken("propId",this._propId);template.replaceToken('email',params.email);var dialogDiv=wak.html.parseHTMLFragment(template.compose());doingAuth=true;dialogDiv=CMPanelRounded.create(dialogDiv);this._inquiryAuthButton=new CMButton('cmAuthButton',buttonDisabledClass);if(WakModalDialog.openInstance){WakModalDialog.openInstance.swapContentDiv(mira.constants.SIGN_UP_PANEL,dialogDiv);}else{this._dialog=new WakModalDialog(mira.constants.SIGN_UP_PANEL,dialogDiv,this,200);this._dialog.open();}
$('cmInquiryCloseId').onclick=function(){WakModalDialog.openInstance.close();}
if(doingAuth){this._ufValidator=new Validator("lmFieldError",strings.FORM_ERROR_MSG,'authFormError');this._ufValidator.appendInputRule('password','password','Password',true,true,'password',null);this._loginComp=new CMLogin('authForm',this);}}}},submitUserAuth:function(){try{if(!this._ufValidator.validateAllFields()){this._inquiryAuthButton.disable();this._loginComp.doSubmit();}}catch(exc){wak.log.error("Login.doSubmit - Caught exception: ",exc);this._inquiryAuthButton.enable();}
return false;},loginDone:function(loginComp,errNum,errMsg){if(!errMsg){var thankYouText=null;if(this._userState=='UNREGISTERED'){thankYouText="Your account has been created and you are successfully logged in.";}else{thankYouText="You have successfully logged in.";}
CMPanelPrettyAlert.showThankYou(thankYouText);$('headerSignIn').innerHTML='Sign Out';$('headerSignIn').href=mira.URL.Signout;if($('headingToggle')){wak.css.removeClass('headingToggle','lmHiddenNoDisplay');$('headingUserName').innerHTML=this._email.replace(/@.*/,'');}}else{this._ufValidator.showGroupError(errMsg);this._inquiryAuthButton.enable();}},cancelUserForm:function(){this._dialog.close();},forgotPassword:function(){alert("Coming soon!");},fill:function(){if(!$('cmInquiryEmail').value)$('cmInquiryEmail').value='null@pickpackgo.com';if(!$('cmInquiryFirstName').value)$('cmInquiryFirstName').value='Mike';if(!$('cmInquiryLastName').value)$('cmInquiryLastName').value='Tester';if(!this._datePicker.getFromDate(true))$('cmInquiryStartDate').value='6/15/2008';if(!this._datePicker.getToDate(true))$('cmInquiryEndDate').value='6/22/2008';if(!$('cmInquiryNumAdults').value==0)$('cmInquiryNumAdults').value='3';if(!$('cmInquiryQuestion').value)$('cmInquiryQuestion').value='How hot is the pool?';this.updateFees(false);}};CMCityHostInquiry=new Class.create();CMCityHostInquiry.newInquiryForm=function(cityHost){var inquiry=new CMCityHostInquiry(cityHost);}
CMCityHostInquiry.prototype={_cityHost:null,_validator:null,_inquirySubmitButton:null,ctor:function(aCityHost){CMCityHostInquiry.instance=this;this._cityHost=aCityHost;this._validator=new Validator('lmFieldError',strings.FORM_ERROR_MSG,null,this,null,'chNewQuestionPanelDiv');this._validator.appendInputRule('cmEmailAddress','email','Email',true,false,'emailAddress',null,null);this._validator.appendInputRule('cmFirstName','string','First Name',true,false,'firstName',null,null);this._validator.appendInputRule('cmQuestion','string','Question',true,false,'question',null,null);this._validator.trackFieldLength('cmQuestion',500);this._inquirySubmitButton=new CMButton('cmSubmitButton');},submitCityHostInquiryForm:function(){if(!this._validator.validateAllFields()){var params=this._validator.getRpcParams(false,false);params.cityHost=this._cityHost;this._inquirySubmitButton.disable();LocationService.instance.submitCityHostInquiry(params,function(res){if(res.ok){var elem=$('chNewQuestionPanelDiv');this._userState=res.data.userState;if(res.data.userState=='LOGGED_IN'||res.data.shouldPromptForAcct==false){this._saved();}else{}
$('cmQuestion').value='';}
this._inquirySubmitButton.enable();}.bind(this));}},_saved:function(){wak.animate.scroll(0);wak.geometry.positionBelowCenter('chSavedMsg','lmHeader',null,{top:-15});var fn=function(){wak.animate.close('chSavedMsg');};window.setTimeout(fn,3000);},onShowFep:function(validator,fepOrId,parentElemOrId){var parentElem=$(parentElemOrId);wak.geometry.setAncestorsZIndex(parentElem,2500);},onClearFep:function(fep,parentElem){wak.geometry.resetAncestorsZIndex(parentElem);},fill:function(){if(!$('cmEmailAddress').value)$('cmEmailAddress').value='null@pickpackgo.com';if(!$('cmFirstName').value)$('cmFirstName').value='Mike';if(!$('cmQuestion').value)$('cmQuestion').value='Do bears ever enter the city limits?';if(this._validator!=null){this._validator.trackFieldLength('cmQuestion',500);}}};CMErrorBanner=new Class.create();CMErrorBanner.prototype={_divId:null,_bannerHidden:null,_curHeight:null,ctor:function(divId){CMErrorBanner.instance=this;wak.template.create(g_cmErrorBanner,divId).compose();this._divId=divId;this._bannerHidden=true;},show:function(msg){var container=$(this._divId);var banner=$('cmErrorBannerDiv');var interval=null;var INCREMENT=10;var animateOpen=function(){if(container.offsetHeight>=this._curHeight-INCREMENT){window.clearInterval(interval);interval=null
container.style.height=this._curHeight+'px';this._bannerHidden=!this._bannerHidden;}else{container.style.height=(container.offsetHeight+INCREMENT)+'px';}}.bind(this);if(this._bannerHidden){container.style.height='1px';wak.css.display(container,true);}
$('cmErrorBannerMsgDiv').innerHTML=msg;if(this._bannerHidden||container.offsetHeight<banner.offsetHeight){this._curHeight=banner.offsetHeight;interval=setInterval(animateOpen,25);}},hide:function(){var container=$(this._divId);var banner=$('cmErrorBannerDiv');var height=banner.offsetHeight;var interval=null;var INCREMENT=5;var animateClose=function(){if(container.offsetHeight<=INCREMENT){window.clearInterval(interval);interval=null
container.style.height='1px';wak.css.display(container,false);this._bannerHidden=!this._bannerHidden;}else{container.style.height=(container.offsetHeight-INCREMENT)+'px';}}.bind(this);if(!this._bannerHidden){interval=setInterval(animateClose,25);}}};CMAuthenticator=Class.create();CMAuthenticator.prototype={_signInValidator:null,_signUpValidator:null,_fpwValidator:null,_signInSubmitButton:null,_signUpSubmitButton:null,_signInLoginComp:null,_signUpLoginComp:null,_dialog:null,_delegate:null,_propId:null,_signUpErrorElem:null,_signInErrorElem:null,isSignUp:true,ctor:function(delegate,signUpErrorElem,signInErrorElem){this._delegate=delegate;this._signUpErrorElem=signUpErrorElem;this._signInErrorElem=signInErrorElem;if($('signInButton'))this._signInSubmitButton=new CMButton('signInButton','signInButtonDisabled');this._signInValidator=new Validator("lmFieldError","Please fix the errors below and try again.",'loginFormError');this._signInValidator.appendInputRule('email','email','Email',true,true,'email',null);this._signInValidator.appendInputRule('password','password','Password',true,true,'password',null);if(mira.params.reason!='2'){this._signInValidator.appendInputRule('rememberMe','checkbox','Remember Me',false,true,'rememberMe',null);}else{if(mira.user)$('email').value=mira.user.email||'';}
if($('signUpButton'))this._signUpSubmitButton=new CMButton('signUpButton','signUpButtonDisabled');this._signUpValidator=new Validator("lmFieldError",strings.FORM_ERROR_MSG,'signupFormError');this._signUpValidator.appendInputRule('signUpEmail','email','email address',true,true,'email',null);if($('signUpEmail2')){this._signUpValidator.appendInputRule('signUpEmail2','string','verify email address',true,true,'void','signUpEmail');}
this._signUpValidator.appendInputRule('signUpPassword','password','password',true,true,'password',null);this._signUpValidator.appendInputRule('signUpPassword2','string','verify password',true,true,'void','signUpPassword');if($('termsOfServiceCb')){this._signUpValidator.appendInputRule('termsOfServiceCb','checkbox','Terms of Service',true,true,'void',null,{mustBeChecked:true,reqErrorMsg:strings.BOOKING_REVIEW.legalAgreementErr});}
if(!wak.cookie.enabled()){if(this._signInSubmitButton)this._signInSubmitButton.disable();if(this._signUpSubmitButton)this._signUpSubmitButton.disable();alert("Login not permitted.\n"+mira.noCookieAlertMsg());}
CMAuthenticator.instance=this;},showSignIn:function(){wak.css.display('signUpSection',false);wak.css.display('signInSection',true);},showSignUp:function(){wak.css.display('signInSection',false);wak.css.display('signUpSection',true);},doSignInValidation:function(){return this._signInValidator.validateAllFields();},doSignUpValidation:function(){return this._signUpValidator.validateAllFields();},doValidation:function(){if(this.isSignUp){return this.doSignUpValidation();}else{return this.doSignInValidation();}},doSignInSubmit:function(propId){try{this._propId=propId;this._signInLoginComp=new CMLogin('signInForm',this);if(!this._signInValidator.validateAllFields()){if(this._signInSubmitButton)this._signInSubmitButton.disable();$('method').value=mira.params.reason==2?'authenticate':'login';this._signInLoginComp.doSubmit(mira.params.reason);}}catch(exc){wak.log.error("Auth.doSignInSubmit() - Caught exception: ",exc);if(this._signInSubmitButton)this._signInSubmitButton.enable();}
return false;},signInSubmitCompleted:function(errNum,errMsg){this.loginComplete(errNum,errMsg);if(!errMsg){if(mira.params.stay==1&&this._signInSubmitButton){this._signInSubmitButton.enable();}}else{if(this._signInErrorElem){this._signInValidator.showError(this._signInErrorElem,errMsg);}else{this._signInValidator.showGroupError(errMsg);}
if(this._signInSubmitButton)this._signInSubmitButton.enable();}},doSignUpSubmit:function(propId){try{this._propId=propId;this._signUpLoginComp=new CMLogin('signUpForm',this);if(!this._signUpValidator.validateAllFields()){if(this._signUpSubmitButton)this._signUpSubmitButton.disable();this._signUpLoginComp.doSubmit();}}catch(exc){wak.log.error("Auth.doSignUpSubmit() - Caught exception: ",exc);if(this._signUpSubmitButton)this._signUpSubmitButton.enable();}
return false;},signUpSubmitCompleted:function(errNum,errMsg){this.loginComplete(errNum,errMsg);if(!errMsg){if(mira.params.stay==1&&this._signUpSubmitButton){this._signUpSubmitButton.enable();}}else{if(this._signUpErrorElem){this._signUpValidator.showError(this._signUpErrorElem,errMsg);}else{this._signUpValidator.showGroupError(errMsg);}
if(this._signUpSubmitButton)this._signUpSubmitButton.enable();}},doSubmit:function(){if(this.isSignUp){return this.doSignUpSubmit();}else{return this.doSignInSubmit();}},showFpwPanel:function(){this._action='forgotPw';this._dialog=new WakModalDialog(mira.constants.FORGOT_PW_PANEL,g_forgotPwPopup,this);this._dialog.open();},onDialogOpen:function(){if(this._action=='forgotPw'){var contents=wak.template.create(g_fpwPanel,'cmPopupMidId');contents.compose();this._fpwValidator=new Validator('cmPopupFormError',null,null,null,null,null);this._fpwValidator.appendInputRule('fpwEmail','email','Email Address',true,false,'email',null,null);this._fpwSubmitButton=new CMButton('fpwSubmitButton','submitButtonDisabled');}else{var contents=wak.template.create(g_resetPwPanel,'cmPopupMidId');contents.replaceToken('tpw',this._tpw);contents.replaceToken('email',this._email);contents.compose();this._resetPwValidator=new Validator('cmPopupFormError',null,null,null,null,null);this._resetPwValidator.appendInputRule('resetPassword1','password','New Password',true,false,'password',null,null);this._resetPwValidator.appendInputRule('resetPassword2','password','Verify New Password',true,false,null,'resetPassword1',null);this._resetPwSubmitButton=new CMButton('resetPwSubmitButton','submitButtonDisabled');}},onDialogOpenComplete:function(){if(this._action=='forgotPw'){$('fpwEmail').focus();}},doSubmitFpw:function(){try{if(!this._fpwValidator.validateAllFields()){this._fpwSubmitButton.disable();AuthService.instance.forgotPassword($F('fpwEmail'),function(res){if(res.ok){wak.template.create(g_fpwDone,'cmPopupMidId').compose();}else{if(exception){}}});}}catch(exc){wak.log.error("Login.doSubmit - Caught exception: ",exc);}
return false;},showResetPwPanel:function(tpw){this._action='resetPw';this._tpw=tpw;this._email=$F('email');this._dialog=new WakModalDialog(mira.constants.RESET_PW_PANEL,g_resetPwPopup,this);this._dialog.open();$('resetPassword1').focus();},doSubmitResetPw:function(){try{this._resetPwLoginComp=new CMLogin('resetPwForm',this);if(this._propId)$('resetPwForm').propertyId.value=this._propId;if(!this._resetPwValidator.validateAllFields()){this._resetPwSubmitButton.disable();this._resetPwLoginComp.doSubmit();}}catch(exc){wak.log.error("Login.doSubmit - Caught exception: ",exc);}
return false;},resetPwSubmitClosed:function(){WakModalDialog.namedOpenInstances[mira.constants.RESET_PW_PANEL].close();if(this._signInSubmitButton)this._signInSubmitButton.enable();if(this._signUpSubmitButton)this._signUpSubmitButton.enable();},resetPwSubmitCompleted:function(errNum,errMsg){wak.template.create(g_resetPwDone,'cmPopupMidId').compose();},loginComplete:function(errNum,errMsg){if(this._delegate&&this._delegate.loginComplete){if(wak.IE6){var myDelegate=this._delegate;function fn(){myDelegate.loginComplete(errNum,errMsg);};window.setTimeout(fn,1);}else{this._delegate.loginComplete(errNum,errMsg);}}},loginDone:function(loginComp,errNum,errMsg){if(errNum==3){this.showResetPwPanel(errMsg);return;}
switch(loginComp._formId){case'resetPwForm':this.resetPwSubmitCompleted(errNum,errMsg);break;case'signUpForm':this.signUpSubmitCompleted(errNum,errMsg);break;case'signInForm':this.signInSubmitCompleted(errNum,errMsg);break;}}};CMWhosTraveling=Class.create();CMWhosTraveling.prototype={_idPrefix:null,numAdultsElemId:null,numChildrenElemId:null,numPetsElemId:null,_delegate:null,ctor:function(idPrefix,div,delegate){this._idPrefix=idPrefix;this._div=div;this._delegate=delegate;this.numAdultsElemId=this._idPrefix+'NumAdults';this.numChildrenElemId=this._idPrefix+'NumChildren';this.numPetsElemId=this._idPrefix+'NumPets';var whosTravelingT=wak.template.create(g_whosTraveling,div);whosTravelingT.replaceToken('idPrefix',idPrefix);whosTravelingT.compose();CMWhosTraveling.instance=this;},setPetsAllowed:function(allowed){var petsPulldown=$(this.numPetsElemId);if(allowed!='no'){petsPulldown.length-=1;}else{$(this._idPrefix+'NoPetsAllowed').selected=true;petsPulldown.disabled=true;}},onChange:function(elem){if(this._delegate&&this._delegate.onChange){this._delegate.onChange(this,elem)}}};CMPanelRounded=Class.create();CMPanelRounded.create=function(panelContentsDivOrDivId,topColor,bottomColor,borderStyle){var dialogDiv=null;var panelContents=$(panelContentsDivOrDivId);if(panelContents){if(!topColor){topColor=mira.constants.PANEL_TOP_DEFAULT;}else{mira.constants.assertConstant(topColor);}
if(!bottomColor){bottomColor=mira.constants.PANEL_BOTTOM_DEFAULT;}else{mira.constants.assertConstant(bottomColor);}
if(!borderStyle){borderStyle=mira.constants.PANEL_BORDER_DEFAULT;}else{mira.constants.assertConstant(borderStyle);}
document.body.appendChild(panelContents);var panelBackgroundTmpl=wak.template.create(g_panelRounded);panelBackgroundTmpl.replaceToken('topColor',topColor);panelBackgroundTmpl.replaceToken('bottomColor',bottomColor);panelBackgroundTmpl.replaceToken('borderStyle',borderStyle);dialogDiv=wak.html.parseHTMLFragment(panelBackgroundTmpl.compose());wak.css.hide(dialogDiv);wak.css.hide(panelContents);wak.css.addClass(panelContents,'cmRoundedPanelContentAdditions');document.body.appendChild(dialogDiv);CMPanelRounded.sizeToFit(dialogDiv,panelContents);dialogDiv.appendChild(panelContents);dialogDiv.style.left='-5000px';dialogDiv.style.top='-5000px';wak.css.show(dialogDiv);wak.css.show(panelContents);}
return dialogDiv;};CMPanelRounded.sizeToFit=function(panelDivOrDivId,panelContentsDivOrDivId){return wak.html.sizeToFit(panelDivOrDivId,panelContentsDivOrDivId)};CMDateCollector=Class.create();CMDateCollector.prototype={_introText:null,_delegate:null,_validator:null,_initStartDate:null,_initEndDate:null,ctor:function(introText,delegate,initStartDate,initEndDate){this._introText=introText;this._delegate=delegate;this._initStartDate=initStartDate;this._initEndDate=initEndDate;CMDateCollector.instance=this;},showDialog:function(){var dateCollT=wak.template.create(g_dateColl);dateCollT.replaceToken('introText',this._introText);var s1=dateCollT.compose();var newDiv=wak.html.parseHTMLFragment(s1);newDiv=CMPanelRounded.create(newDiv);WakModalDialog.showModalDialog(mira.constants.DATE_COLLECTOR_PANEL,newDiv,this,200);this.setupDialog();},setupDialog:function(){this._datePicker=new CMDatePicker('cmDateCollStartDate','cmDateCollEndDate',null,2);this._validator=new Validator("lmFieldError","Please fix the errors below and try again.",null,this,document.body,document.body);this._validator.appendInputRule('cmDateCollStartDate','date','Start Date',true,true,'startDate',null);this._validator.appendInputRule('cmDateCollEndDate','date','End Date',true,true,'endDate',null);if(this._initStartDate)this._datePicker.setFromDate(this._initStartDate);if(this._initEndDate)this._datePicker.setToDate(this._initEndDate);},onShowFep:function(validator,fepOrId,parentElemOrId){var parentElem=$(parentElemOrId);wak.geometry.setAncestorsZIndex(parentElem,2500);},onClearFep:function(fep,parentElem){wak.geometry.resetAncestorsZIndex(parentElem);},refineSearch:function(){if(!this._validator.validateAllFields()){WakModalDialog.namedOpenInstances[mira.constants.DATE_COLLECTOR_PANEL].close();if(this._delegate&&this._delegate.refineSearch){var startDate=this._datePicker.getFromDate(false);var endDate=this._datePicker.getToDate(false);LogEventService.instance.dateCollectionPanel('InquiryPanel',startDate,endDate,"Ok");this._delegate.refineSearch(startDate,endDate);}}}};CMInfoWindow=Class.create();CMInfoWindow.doSubclassing=function(){if(typeof(GOverlay)=='undefined'){return;}
CMInfoWindow.prototype=new GOverlay();GOverlayExtensions={stemImage:mira.IW_STEM_PNG_URL,stemSize:new GSize(24,24),boxClass:'ppgInfoWindow',boxOffset:new GPoint(-10,23),fudge:0,ctor:function(map){this.map=map;this.visible=false;this.ie=false;var agent=navigator.userAgent.toLowerCase();if((agent.indexOf("msie")>-1)&&(agent.indexOf("opera")<1)){this.ie=true;}else{this.ie=false;}
var fudge=5;if(agent.indexOf("opera")>-1){fudge=3;}
if(agent.indexOf("firefox")>-1){fudge=0;}
if(agent.indexOf("safari")>-1){fudge=5;}
if((agent.indexOf("msie")>-1)&&(agent.indexOf("opera")<1)){fudge=0;}
this.fudge=fudge;},initialize:function(map){var div1=document.createElement("div");div1.style.position="absolute";map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div1);var div2=document.createElement("div");div2.style.position="absolute";div2.style.width=this.stemSize.width+"px";map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div2);this.div1=div1;this.div2=div2;},openOnMap:function(point,html,offset){this.offset=offset||new GPoint(0,0);this.point=point;this.div1.innerHTML='<div class="'+this.boxClass+'"><nobr>'+html+'</nobr></div>';var stemImageFullUrl=this.stemImage;if(this.ie&&this.stemImage.toLowerCase().indexOf(".png")>-1){var loader="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+mira.fullStaticUrl(this.stemImage)+"', sizingMethod='scale');";this.div2.innerHTML='<div style="height:'+this.stemSize.height+'px; width:'+this.stemSize.width+'px; '+loader+'" ></div>';}else{this.div2.innerHTML='<img src="'+this.stemImage+'" width="'+this.stemSize.width+'" height="'+this.stemSize.height+'">';}
var z=GOverlay.getZIndex(this.point.lat());this.div1.style.zIndex=z;this.div2.style.zIndex=z+1;this.visible=true;this.show();this.redraw(true);},openOnMarker:function(marker,html){var vx=marker.getIcon().iconAnchor.x-marker.getIcon().infoWindowAnchor.x;var vy=marker.getIcon().iconAnchor.y-marker.getIcon().infoWindowAnchor.y;this.openOnMap(marker.getPoint(),html,new GPoint(vx,vy));},redraw:function(force){if(!this.visible)return;var p=this.map.fromLatLngToDivPixel(this.point);this.div2.style.left=(p.x+this.offset.x)+"px";this.div2.style.bottom=(-p.y+this.offset.y-this.fudge)+"px";this.div1.style.left=(p.x+this.offset.x+this.boxOffset.x)+"px";this.div1.style.bottom=(-p.y+this.offset.y+this.boxOffset.y)+"px";},remove:function(){this.div1.parentNode.removeChild(this.div1);this.div2.parentNode.removeChild(this.div2);this.visible=false;},copy:function(){return new CMInfoWindow(this.map);},show:function(){this.div1.style.display="";this.div2.style.display="";this.visible=true;},hide:function(){this.div1.style.display="none";this.div2.style.display="none";this.visible=false;},isHidden:function(){return!this.visible;},supportsHide:function(){return true;},zindex:function(zin){var z=GOverlay.getZIndex(this.point.lat());this.div1.style.zIndex=z+zin;this.div2.style.zIndex=z+1+zin;}}
Object.extend(CMInfoWindow.prototype,GOverlayExtensions);};CMBookingRates=Class.create();CMBookingRates.prototype={_div:null,_idPrefix:null,_delegate:null,_errorCode:null,ctor:function(div,idPrefix,delegate){this._div=div;this._idPrefix=idPrefix?idPrefix:'cmBooking';this._delegate=delegate;},formatAmount:function(amount){var currencySymbol=mira.getCurrencySymbol();return amount==0?'&mdash;':mira.formatValueForCurrency(currencySymbol,amount);},render:function(charges,booking){var ratesTableT=wak.template.create(g_bookingRates,this._div);var hasRefundableDeposits=false;var hasOptionalFees=false;var otherTotal=0;var total=0;var grandTotal=0;ratesTableT.replaceToken('idPrefix',this._idPrefix);ratesTableT.replaceToken('Rent','&mdash;');ratesTableT.replaceToken('Taxes','&mdash;');ratesTableT.replaceToken('CleaningFees','&mdash;');ratesTableT.replaceToken('OtherFees','&mdash;');ratesTableT.replaceToken('Total','&mdash;');if(charges){charges.each(function(charge){switch(charge.type){case'REQUIRED':ratesTableT.replaceToken(charge.name,this.formatAmount(charge.amount));total+=charge.amount;break;case'REFUNDABLE':if(charge.amount>0){var refundRow=ratesTableT.getBlock('RefundableBlock').getBlock('RefundableRow');refundRow.replaceToken('depositName',charge.name);refundRow.replaceToken('depositAmount',this.formatAmount(charge.amount));refundRow.next();hasRefundableDeposits=true;grandTotal+=charge.amount;}
break;case'OPTIONAL':if(charge.amount>0){var optionRow=ratesTableT.getBlock('OptionalBlock').getBlock('OptionalRow');optionRow.replaceToken('optionFeeName',charge.name);optionRow.replaceToken('optionFeeAmount',this.formatAmount(charge.amount));optionRow.next();hasOptionalFees=true;}
break;case'OTHER':if(charge.amount>0){otherTotal+=charge.amount;}
break;}}.bind(this));}
ratesTableT.replaceToken('OtherFees',this.formatAmount(otherTotal));ratesTableT.replaceToken('total',this.formatAmount(otherTotal+total));ratesTableT.replaceToken('grandTotal',this.formatAmount(otherTotal+total+grandTotal));if(!hasRefundableDeposits)ratesTableT.removeBlock('RefundableBlock');if(!hasOptionalFees)ratesTableT.removeBlock('OptionalBlock');if(booking){ratesTableT.replaceToken('bookingId',booking.id);}else{ratesTableT.removeBlock('RentalAgreementBlock');}
ratesTableT.compose();},displayError:function(errorCode){if(errorCode!=this._errorCode){wak.css.display(this._idPrefix+'RatesMinStayError',false);wak.css.display(this._idPrefix+'RatesNotAvailError',false);wak.css.display(this._idPrefix+'RatesMiscError',false);}
if(errorCode&&errorCode!=0){switch(errorCode){case 1:wak.css.display(this._idPrefix+'RatesMinStayError',true);break;case 2:wak.css.display(this._idPrefix+'RatesNotAvailError',true);break;case 3:wak.css.display(this._idPrefix+'RatesMiscError',true);break;}}
this._errorCode=errorCode;},toggleBusyStatus:function(doShow){wak.css.visibility(this._idPrefix+'RatesStatusBusy',doShow);}};CMBookingDetails=Class.create();CMBookingDetails.prototype={_div:null,_idPrefix:null,_delegate:null,ctor:function(div,idPrefix,delegate){this._div=div;this._idPrefix=idPrefix?idPrefix:'cmBooking';this._delegate=delegate;},render:function(booking){var detailsT=wak.template.create(g_bookingDetails,this._div);detailsT.replaceToken('idPrefix',this._idPrefix);detailsT.replaceToken('startDate',booking.startDate.format("%B %e, %Y"));detailsT.replaceToken('endDate',booking.endDate.format("%B %e, %Y"));detailsT.replaceToken('obj',booking);detailsT.compose();}};CMBookingContact=Class.create();CMBookingContact.prototype={_div:null,_idPrefix:null,_delegate:null,ctor:function(div,idPrefix,delegate){this._div=div;this._idPrefix=idPrefix?idPrefix:'cmBooking';this._delegate=delegate;},render:function(booking,email){var contactT=wak.template.create(g_bookingContact,this._div);var ciObj=null;contactT.replaceToken('idPrefix',this._idPrefix);if(!booking.usesCiFields){ciObj={};['FirstName','LastName','Street1','Street2','City','State','Province','Zip','Country'].each(function(field){ciObj['ci'+field]=booking['cc'+field];}.bind(this));}
contactT.replaceToken('obj',booking);contactT.replaceToken('ciObj',ciObj?ciObj:booking);contactT.replaceToken('email',email);if(!booking.ciStreet2)contactT.removeBlock('CiStreet2Block');if(!booking.ccStreet2)contactT.removeBlock('CcStreet2Block');contactT.compose();}};