//' Software by DavidRegier.com. Unauthorized use of this code is prohibited
function Calendar(){this.Settings=new Array();this.Settings.greeting="Aloha";this.Settings.compressData=1;try{var test=CalData.length;}
catch(Err){var eMsg="ERROR: Data in cal-data.js is malformed (bad syntax). CalData (calendar data) array cannot be initialized.\n\n";for(member in Err)eMsg+=member+": "+Err[member]+"\n";reportError("Data Syntax Error",eMsg);}
this.Settings.futureMonthsAdmin=calMonthsFutureAdmin;this.Settings.futureMonthsPublic=calMonthsFuturePublic;this.Settings.pastMonthsAdmin=calMonthsPastAdmin;this.addReservation=addReservation;this.cancelEvt=cancelEvt;this.changeDate=changeDate;this.clear=clear;this.editReservation=editReservation;this.getCal=getCal;this.getDayOfWeek=getDayOfWeek;this.getEditResGUI=getEditResGUI;this.getBookingType=getBookingType;this.getMonthName=getMonthName;this.getNewResGUI=getNewResGUI;this.getNextSpan=getNextSpan;this.getNumDaysInMonth=getNumDaysInMonth;this.getNumNights=getNumNights;this.getReadAllLogInGUI=getReadAllLogInGUI;this.getReadAllWin=getReadAllWin;this.getRenter=getRenter;this.getValidDates=getValidDates;this.getWinWid=getWinWid;this.highlight=highlight;this.init=init;this.dataUnmodified=dataUnmodified;this.logInReadAll=logInReadAll;this.logOff=logOff;this.morphView=morphView;this.pollData=pollData;this.pollDataHeader=pollDataHeader;this.publish=publish;this.recordModifications=recordModifications;this.resetSearchGUI=resetSearchGUI;this.scrollDownOnLogin=scrollDownOnLogin;this.searchGuests=searchGuests;this.sendMail=sendMail;this.showSearchGUI=showSearchGUI;this.setActualDates=setActualDates;this.setDates=setDates;this.setPublishButton=setPublishButton;this.setRequestObj=setRequestObj;this.toHTM=toHTM;this.toText=toText;this.updateDisplay=updateDisplay;this.Msg=new Array();this.Msg.actual="\n\nNote that the actual dates must always be within the display date period.";this.Msg.backToBack="Click to add a back-to-back; click background to reset";this.Msg.bkTypeConf="a confirmed reservation";this.Msg.bkTypeNC="I&#39;m not changing the booking type";this.Msg.bkTypePend="a pending reservation";this.Msg.bkTypeSpc="I&#39;m designating dates as available for discount";this.Msg.butAddOK="Set new reservation";this.Msg.butCancel="Close this pop-up window";this.Msg.butEditOK="Edit this reservation";this.Msg.ckIn="Set as new display check-in date";this.Msg.ckOut="Set as display check-out date; click background to reset";this.Msg.client="Name of Client";this.Msg.confirmed="Confirmed Reservation";this.Msg.confirmedShort="Confirmed";this.Msg.del="I&#39;m permanently deleting this reservation";this.Msg.dtVis="Check-in/out dates that will show on calendar";this.Msg.edit="Click to edit; right-click for read-only";this.Msg.helpCache="Understanding cache & why it can cause problems";this.Msg.help="Calendar Help, Tips & FAQs";this.Msg.logOff="All Finished? Log-off to end your session";this.Msg.logOffReadAll="Cancel read-all access";this.Msg.noEdit="No changes were recorded because you did not modify any information";this.Msg.notes="Notes or comments (if any)";this.Msg.available="Available for check-in";this.Msg.pending="Pending Reservation (on hold)";this.Msg.pendingShort="Pending";this.Msg.publish="Save your new calendar data to the web";this.Msg.readAll="Show read-all booking info";this.Msg.restart="Click a check-out date; click background to reset";this.Msg.searchCal="Search calendar by guest name";this.Msg.sendMail="Send e-mail to selected Administrator(s)";this.Msg.today="Today";this.Msg.writing="Writing calendar, please wait...";this.CarryBookingForward=new Array();this.Span=null;this.SpanOld=null;this.SpanIn=null;this.SpanOut=null;this.nextMon;this.nextYr;this.userWithWritePrivileges=(GetCookie("userWithWritePrivileges"));if(this.userWithWritePrivileges){this.userWithWritePrivileges=this.userWithWritePrivileges.replace(/_/, " " );
DeleteCookie("userHasReadAllPrivileges");}
this.userHasReadAllPrivileges=0;if(qStr.getVal("pw")==rapw||GetCookie("userHasReadAllPrivileges")){SetCookie("userHasReadAllPrivileges","yes");DeleteCookie(this.userWithWritePrivileges);this.userHasReadAllPrivileges=1;}
this.publicUser=!this.userWithWritePrivileges&&!this.userHasReadAllPrivileges;this.calPending=0;this.dataLastModified="";this.Request=null;this.timer=0;this.logFile="last-administrator.js";this.dataFile="cal-data.js";this.downloadedData=0;this.readAllURL=document.location.href.split("?")[0]+"?pw="+rapw;function scrollDownOnLogin(){if(this.userWithWritePrivileges||this.userHasReadAllPrivileges&&!window.LastAdministrator){var y=0;var ThisLink=document.getElementById("CalSearch");var parPosAbs=false;while(ThisLink){if(SF){if(!parPosAbs)parPosAbs=(ThisLink.style.position=="absolute");if(parPosAbs&&ThisLink==Body)break;}
y+=ThisLink.offsetTop;ThisLink=ThisLink.offsetParent;}
window.scroll(0,y-10);}}
function setRequestObj(){if(window.XMLHttpRequest){try{this.Request=new XMLHttpRequest();}
catch(Err){this.Request=null;}}
else if(window.ActiveXObject){try{this.Request=new ActiveXObject("Msxml2.XMLHTTP");}
catch(Err){try{this.Request=new ActiveXObject("Microsoft.XMLHTTP");}
catch(Err){this.Request=null;}}}}
function pollData(){Cal.setRequestObj();if(this.Request){this.Request.onreadystatechange=function(){if(Cal.Request.readyState==4){if(Cal.Request.status==200){eval(Cal.Request.responseText);if(Cal.userWithWritePrivileges)document.AspForm.EditedJS.value=Cal.Request.responseText;document.getElementById("CalID").innerHTML=Cal.getCal();Cal.init();Cal.dataLastModified=Cal.Request.getResponseHeader("Last-Modified");clearTimeout(Cal.timer);if(Cal.userWithWritePrivileges)FW.pollAdministrators();else
Cal.pollDataHeader();}
else
Cal.timer=setTimeout("Cal.pollData();",1000);}}
this.Request.open("GET",Cal.dataFile+"?"+Math.random());this.Request.send(null);}}
function pollDataHeader(){Cal.setRequestObj();if(this.Request){this.Request.onreadystatechange=function(){if(Cal.Request.readyState==4){if(Cal.Request.status==200){if(Cal.dataLastModified){if(Cal.dataLastModified!=Cal.Request.getResponseHeader("Last-Modified")){clearTimeout(Cal.timer);Cal.pollData();}
else
Cal.dataLastModified=Cal.Request.getResponseHeader("Last-Modified");}
else
Cal.dataLastModified=Cal.Request.getResponseHeader("Last-Modified");}
Cal.timer=setTimeout("Cal.pollDataHeader();",5000);}}
this.Request.open("HEAD",Cal.dataFile+"?"+Math.random());this.Request.send(null);}}
function logInReadAll(){var Form=document.LogIn;var PW=Form.pw;if(PW.value){if(Form.remember_pw.checked)SetCookie("pwReadAll",PW.value.trim(),expDate12Mon);if(PW.value==rapw)document.location.replace(fileName+"?pw="+PW.value);else{alert("Incorrect password");PW.value="";PW.focus();}}
else{alert("Please enter your password");PW.focus();}
return false;}
function getReadAllLogInGUI(evt){if(!evt)evt=window.event;var pwReadAll=(GetCookie("pwReadAll"))?GetCookie("pwReadAll"):"";var pwChecked=(pwReadAll)?" checked='checked'":"";var gui="<form name='LogIn' style='margin:0px;'><table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td><table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td class='fwField' style='padding-top:6px;'>Password</td><td class='fwValue' style='padding-top:6px;' id='tdBookingID'><input type='password' name='pw' autocomplete='off' value='"+pwReadAll+"' class='fwText' title='Case sensitive read-all password' onkeypress='if( window.event && window.event.keyCode == 13 || event.which == 13 ) { return Cal.logInReadAll(); }' /></td></tr><tr><td align='center' colspan='2' class='fwValue' style='padding-top:6px; white-space:nowrap;'><input type='checkbox' id='remember_pw' name='remember_pw' onClick='if( checked ) { var pw = document.LogIn.pw.value.trim(); if( pw ) SetCookie( \"pwReadAll\", pw, expDate12Mon ); } else DeleteCookie( \"pwReadAll\" );'"+pwChecked+" /><label for='remember_pw'> Remember Me</label></td></tr><tr><td align='center' colspan='2' style='padding:10px 0px 0px 0px; white-space:nowrap;'><input type='button' name='OK' value='OK' class='logInButtons' onClick='return Cal.logInReadAll();' /><input type='button' value='Cancel' class='logInButtons' onClick='DW.removeWin();' /></td></tr></table></td></tr></table></form>";DW.createWindow(["Read-All Log-In",gui],[0,300,0],null,evt,6);(pwReadAll)?setTimeout("document.LogIn.OK.focus();",100):setTimeout("document.LogIn.pw.focus();",100);return false;}
function editReservation(Form){function subGetDateOpenTags(dates){var Dates=dates.split(" ");for(var j in Dates)Dates[j]="<span onClick='Cal.setDates( this, event );' onMouseOver='if( window.Cal ) return Cal.highlight( this, 1 );' onMouseOut='if( window.Cal ) return Cal.highlight( this, 0 );' class='calOpen'>"+Dates[j]+"</span>";return Dates.join(" ");}
var propNum=parseInt(Form.Property_Number.value);var bookNum=parseInt(Form.Booking_Number.value)+1;var propName=CalData[propNum-1][0];var BookingToEdit=CalData[propNum-1][bookNum];var delBooking=(Form.delBooking.checked),editBooking=!delBooking;var existingBookNum=CalData[propNum-1][bookNum][1],newBookNum=-1;for(var i=0;i<Form.BookType.length;i++){if(Form.BookType[i].checked){newBookNum=parseInt(Form.BookType[i].value);break;}}
if(newBookNum==0)newBookNum=existingBookNum;var Now=new Date();var CkInArr=this.getValidDates(Form.Checkin_Date,"Checkin");if(CkInArr==null)return false;var CkOutArr=this.getValidDates(Form.Checkout_Date,"Checkout");if(CkOutArr==null)return false;var CkInDate=new Date(CkInArr[2]+2000,CkInArr[0]-1,CkInArr[1]);var newCkInDate=CkInDate.getTime();var existingCkInDate=new Date(CalData[propNum-1][bookNum][0][2]+2000,CalData[propNum-1][bookNum][0][0]-1,CalData[propNum-1][bookNum][0][1]).getTime();var CkOutDate=new Date(CkOutArr[2]+2000,CkOutArr[0]-1,CkOutArr[1]);var newCkOutDate=CkOutDate.getTime();var existingCkOutDate=new Date(CalData[propNum-1][bookNum][0][5]+2000,CalData[propNum-1][bookNum][0][3]-1,CalData[propNum-1][bookNum][0][4]).getTime();if(newCkInDate==newCkOutDate){alert("Check-in & Check-out dates are the same date.");Form.Checkin_Date.focus();return false;}
else if(newCkInDate>newCkOutDate){alert("Check-in date is after the Check-out date. Sorry but this is just not possible on planet earth!");Form.Checkout_Date.focus();return false;}
var ckInActualOffset=0,ckOutActualOffset=0;var ActualDates=this.setActualDates(Form,newCkInDate,newCkOutDate);if(ActualDates){ckInActualOffset=ActualDates[0];ckOutActualOffset=ActualDates[1];}
else return false;var nonDisplayDateEdit=(!delBooking&&Form.Checkin_Date.value==Form.Checkin_Date.defaultValue&&Form.Checkout_Date.value==Form.Checkout_Date.defaultValue);var displayDateEdit=(!delBooking&&(Form.Checkin_Date.value!=Form.Checkin_Date.defaultValue||Form.Checkout_Date.value!=Form.Checkout_Date.defaultValue));var br=(this.Settings.compressData)?"":"\n";var newCalData="";newCalData+="CalData=["+br+br;var delBookingsEndingBeforeMS=new Date(Now.getFullYear(),Now.getMonth()-this.Settings.pastMonthsAdmin,1).getTime();outer:for(var j=0;j<CalData.length-1;j++){newCalData+="[\""+CalData[j][0]+"\",";var ExistingDates=CalData[j].slice(1);for(var k=0;k<ExistingDates.length;k++){var endDateMS=new Date(ExistingDates[k][0][5]+2000,ExistingDates[k][0][3]-1,ExistingDates[k][0][4]).getTime();var existingCalData=(endDateMS>=delBookingsEndingBeforeMS)?"[["+ExistingDates[k][0][0]+","+ExistingDates[k][0][1]+","+ExistingDates[k][0][2]+","+ExistingDates[k][0][3]+","+ExistingDates[k][0][4]+","+ExistingDates[k][0][5]+","+ExistingDates[k][0][6]+","+ExistingDates[k][0][7]+"],"+ExistingDates[k][1]+",\""+ExistingDates[k][2]+"\","+ExistingDates[k][3]+",\""+ExistingDates[k][4]+"\",\""+ExistingDates[k][5]+"\","+ExistingDates[k][6]+"],":"";if(propName==CalData[j][0]){if(BookingToEdit!=ExistingDates[k])newCalData+=existingCalData;else{var guest=Form.Client.value;guest=guest.toHTM();var notes=Form.Notes.value;notes=notes.toHTM();var thisBooking="[["+CkInArr[0]+","+CkInArr[1]+","+CkInArr[2]+","+CkOutArr[0]+","+CkOutArr[1]+","+CkOutArr[2]+","+ckInActualOffset+","+ckOutActualOffset+"],"+newBookNum+",\""+this.userWithWritePrivileges+"\","+Now.getTime()+",\""+guest+"\",\""+notes+"\","+ExistingDates[k][6]+"]";if(editBooking){var begDateMS=newCkInDate;var endDateMS=newCkOutDate;var dayMS=86400000;var nDaysCheckInMonth=this.getNumDaysInMonth(CkInArr[0],CkInArr[2]+2000);var nDaysCheckOutMonth=this.getNumDaysInMonth(CkOutArr[0],CkOutArr[2]+2000);if(CkInArr[1]>nDaysCheckInMonth){alert("Bad Dates: You are attempting to change the check-in date to "+CkInArr[0]+"/"+CkInArr[1]+" but there are only "+nDaysCheckInMonth+" days that month");return false;}
else if(CkOutArr[1]>nDaysCheckOutMonth){alert("Bad Dates: You are attempting to change the check-out date to "+CkOutArr[0]+"/"+CkOutArr[1]+" but there are only "+nDaysCheckOutMonth+" days that month");return false;}
for(var i=0;i<ExistingDates.length;i++){if(BookingToEdit!=ExistingDates[i]){var ExistingCheckIn=new Date(ExistingDates[i][0][2]+2000,ExistingDates[i][0][0]-1,ExistingDates[i][0][1]);var existingCheckInMS=ExistingCheckIn.getTime();var ExistingCheckOut=new Date(ExistingDates[i][0][5]+2000,ExistingDates[i][0][3]-1,ExistingDates[i][0][4]);var existingCheckOutMS=ExistingCheckOut.getTime();for(var thisRequestedDay=begDateMS;thisRequestedDay<endDateMS;thisRequestedDay+=dayMS){if(thisRequestedDay>=existingCheckInMS&&thisRequestedDay<existingCheckOutMS){alert("Conflicting Dates: Your requested booking from "+Form.Checkin_Date.value+" to "+Form.Checkout_Date.value+" conflicts with an existing booking from "+ExistingDates[i][0][0]+"/"+ExistingDates[i][0][1]+"/"+ExistingDates[i][0][2]+" to "+ExistingDates[i][0][3]+"/"+ExistingDates[i][0][4]+"/"+ExistingDates[i][0][5]+".");return false;}}}}
newCalData+=thisBooking+",";var newDataSet="[["+CkInArr[0]+","+CkInArr[1]+","+CkInArr[2]+","+CkOutArr[0]+","+CkOutArr[1]+","+CkOutArr[2]+","+ckInActualOffset+","+ckOutActualOffset+"],"+newBookNum+",\""+ExistingDates[k][2]+"\","+ExistingDates[k][3]+",\""+guest+"\",\""+notes+"\","+ExistingDates[k][6]+"],";if(newDataSet==existingCalData){alert(this.Msg.noEdit);return false;}}}}
else newCalData+=existingCalData;}
newCalData=newCalData.replace(/,$/, "" );
newCalData+="],"+br+br;} newCalData+="[\""+this.userWithWritePrivileges+"\","+Now.getTime()+"]"+br+br;newCalData+="];";if(displayDateEdit){function subSortAscNum(a,b){return a[7]<b[7]?-1:a[7]>b[7]?1:a[7]==b[7]?7:a[7]<b[7]?-1:1;}
eval(newCalData);newCalData="CalData=["+br+br;for(var j=0;j<CalData.length-1;j++){var ExistingDates=CalData[j].slice(1);for(var k=0;k<ExistingDates.length;k++){var startDateMS=new Date(ExistingDates[k][0][2]+2000,ExistingDates[k][0][0]-1,ExistingDates[k][0][1]).getTime();ExistingDates[k][7]=startDateMS;}
ExistingDates.sort(subSortAscNum);newCalData+="[\""+CalData[j][0]+"\",";for(var k=0;k<ExistingDates.length;k++){var existingCalData="[["+ExistingDates[k][0][0]+","+ExistingDates[k][0][1]+","+ExistingDates[k][0][2]+","+ExistingDates[k][0][3]+","+ExistingDates[k][0][4]+","+ExistingDates[k][0][5]+","+ExistingDates[k][0][6]+","+ExistingDates[k][0][7]+"],"+ExistingDates[k][1]+",\""+ExistingDates[k][2]+"\","+ExistingDates[k][3]+",\""+ExistingDates[k][4]+"\",\""+ExistingDates[k][5]+"\","+ExistingDates[k][6]+"],";newCalData+=existingCalData;}
newCalData=newCalData.replace(/,$/, "" );
newCalData+="],"+br+br;}
newCalData+="[\""+this.userWithWritePrivileges+"\","+Now.getTime()+"]"+br+br;newCalData+="];";}
var Form=document.AspForm;Form.EditedJS.value=newCalData;if(delBooking||nonDisplayDateEdit){var Spans=document.getElementsByTagName("span");for(var i=0;i<Spans.length;i++){if(Spans[i].className=="calBooked"||Spans[i].className=="calPending"){var Td=Spans[i].parentNode;var PropData=Td.id.split("_");for(var k in PropData)PropData[k]=parseInt(PropData[k]);var spanNum=PropData[0];var spanMon=PropData[1];var spanYr=PropData[2];var DaysOfSpan=Spans[i].innerHTML.split(" ");var spanStartDay=DaysOfSpan[0];var spanDay=parseInt(spanStartDay.replace(/^0/, "" ) );
if(propNum==spanNum){var firstDayOfSpan=new Date(spanYr+2000,spanMon-1,spanDay).getTime();if(firstDayOfSpan>=existingCkInDate&&firstDayOfSpan<existingCkOutDate){var existingBookClass="";switch(existingBookNum){case 1:existingBookClass="calBooked";break;case 2:existingBookClass="calPending";break;default:alert("Switch/Case Error at Cal.editReservation: switch( existingBookNum )");}
var newClass="";switch(newBookNum){case 0:newClass=existingBookClass;break;case 1:newClass="calBooked";break;case 2:newClass="calPending";break;default:alert("Switch/Case Error at Cal.editReservation: switch( newBookNum )");}
var spanOn="<span onClick='if( window.Cal ) Cal.getEditResGUI( this, event, 1 );' oncontextmenu='if( window.Cal ) { return Cal.getReadAllWin( this, event, 1 ); }' onMouseover='if( window.Cal ) { this.title = ( ( Cal.SpanOld ) ? Cal.getRenter( this, 1 ) + Cal.Msg.backToBack : Cal.getRenter( this, 1 ) + Cal.Msg.edit ); this.style.cursor = \"pointer\"; return true; }' class='"+newClass+"'>",spanOff="</span>";if(document.createRange){var Range=document.createRange();Range.selectNode(Spans[i]);var dates=(delBooking)?subGetDateOpenTags(Range.toString()):spanOn+Range.toString()+spanOff;var frag=Range.createContextualFragment(dates);Td.replaceChild(frag,Spans[i]);}
else{var htm=(delBooking)?subGetDateOpenTags(Spans[i].innerHTML):spanOn+Spans[i].innerHTML+spanOff;Spans[i].outerHTML=htm;}}}}}
eval(newCalData);document.getElementById("calLastUpdateUserID").innerHTML=CalData[CalData.length-1][0];document.getElementById("calLastUpdateTimeID").innerHTML=new Date(CalData[CalData.length-1][1]).toLocaleString();DW.removeWin();this.setPublishButton();this.searchGuests(0);return false;}
else{eval(newCalData);document.getElementById("CalID").innerHTML=Cal.getCal();DW.removeWin();Cal.init();this.setPublishButton();this.searchGuests(0);return false;}}
function getEditResGUI(Span,evt,clickedRes){if(!evt)evt=window.event;var launchEditWin=(this.SpanOld==null);if(launchEditWin){if(clickedRes){var Td=Span.parentNode;var PropData=Td.id.split("_");for(var i in PropData)PropData[i]=parseInt(PropData[i]);var propName=Td.previousSibling.firstChild.innerHTML;var propNum=PropData[0];var monthClicked=PropData[1];var dayInClicked=parseInt(Span.innerHTML.split(" ")[0].replace(/^0/, "" ) );
var yrClicked=PropData[2];}
else{var Link=Span;var hiddenData=Link.nextSibling.value;var PropData=hiddenData.split("_");for(var i=0;i<PropData.length-1;i++)PropData[i]=parseInt(PropData[i]);var propNum=PropData[0];var monthClicked=PropData[1];var dayInClicked=PropData[2];var yrClicked=PropData[3];var propName=PropData[4];}
var inDateClicked=new Date(yrClicked+2000,monthClicked-1,dayInClicked).getTime();var monIn,dayIn,yrIn,CkInDate,monOut,dayOut,yrOut,CkOutDate,bookType=0,lastEditor,lastEditTime,bookingNum,guest="",notes="",CkInDateActual,CkOutDateActual;outer:for(var i=0;i<CalData.length-1;i++){if(CalData[i][0]==propName){var Bookings=CalData[i].slice(1);for(var k=0;k<Bookings.length;k++){var firstDayOfBooking=new Date(Bookings[k][0][2]+2000,Bookings[k][0][0]-1,Bookings[k][0][1]).getTime();var lastDayOfBooking=new Date(Bookings[k][0][5]+2000,Bookings[k][0][3]-1,Bookings[k][0][4]).getTime();if(inDateClicked>=firstDayOfBooking&&inDateClicked<lastDayOfBooking){monIn=Bookings[k][0][0];dayIn=Bookings[k][0][1];yrIn=Bookings[k][0][2];CkInDate=new Date(yrIn+2000,monIn-1,dayIn);monOut=Bookings[k][0][3];dayOut=Bookings[k][0][4];yrOut=Bookings[k][0][5];CkOutDate=new Date(yrOut+2000,monOut-1,dayOut);CkInDateActual=new Date(yrIn+2000,monIn-1,dayIn+Bookings[k][0][6]);CkOutDateActual=new Date(yrOut+2000,monOut-1,dayOut-Bookings[k][0][7]);bookType=Bookings[k][1];lastEditor=Bookings[k][2];lastEditTime=Bookings[k][3];guest=Bookings[k][4];notes=Bookings[k][5].toText();bookingNum=k;break outer;}}}}
var nNights=this.getNumNights(CkInDate,CkOutDate);var dwTitle="";var gui="<form name='editRes' style='margin:0px;' onSubmit='return Cal.editReservation( this );'><table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td><table align='center' border='0' cellspacing='0' cellpadding='0' class='calPopUps'><tr><td align='center' colspan='2' style='padding:4px 0px 4px 0px; white-space:nowrap;'>Display Dates: "+this.getDayOfWeek(CkInDate.getDay(),3)+" "+this.getMonthName(monIn,0)+" "+dayIn+", "+((yrIn<10)?"0"+yrIn:yrIn)+" to "+this.getDayOfWeek(CkOutDate.getDay(),3)+" "+this.getMonthName(monOut,0)+" "+dayOut+", "+((yrOut<10)?"0"+yrOut:yrOut)+";&nbsp; "+nNights+" nights<div class='calLastEditedBy'>Last modified by "+lastEditor+" on "+(new Date(lastEditTime).toLocaleString())+"</div></td></tr><tr><td align='left' colspan='2' style='padding:8px 0px 4px 0px; white-space:nowrap;'><input type='checkbox' id='delBooking' name='delBooking' title='"+this.Msg.del+"' /><label for='delBooking'> I'd like to Delete this Reservation</label></td></tr><tr><td align='left' colspan='2' style='padding:0px 0px 0px 0px; white-space:nowrap;'><div style='margin:6px 0px 2px 0px;'>I'd like to change the booking type to: </div>&nbsp; <input type='radio' id='BookTypeEdit1' name='BookType' value='1' title='I&#39;m changing to "+this.Msg.bkTypeConf+"'"+((bookType==1)?" checked='checked'":"")+" /><label for='BookTypeEdit1'>Confirmed</label>; &nbsp;&nbsp; <input type='radio' id='BookTypeEdit2' name='BookType' value='2' title='I&#39;m changing to "+this.Msg.bkTypePend+"'"+((bookType==2)?" checked='checked'":"")+" /><label for='BookTypeEdit2'>Pending</label>; &nbsp;";switch(bookType){case 1:dwTitle=Cal.getBookingType(1)+" Reservation";break;case 2:dwTitle=Cal.getBookingType(2)+" Reservation";break;default:alert("Switch/Case Error at Cal.getEditResGUI while writing BookType radio buttons");}
gui+="</td></tr><tr><td style='padding:12px 4px 0px 4px; white-space:nowrap;'>Display Dates</td><td style='padding:12px 4px 0px 4px; white-space:nowrap;'><input type='text' name='Checkin_Date' id='Checkin_Date' onBlur='return Cal.changeDate( this, \"Checkout_Date\", 1, 0, 0, 1 );' value='"+monIn+"/"+dayIn+"/"+yrIn+"' class='dwDate' title='Display check-in date' /><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling, \"Checkout_Date\", 0, 1, 0, 1 );' class='calArrow' style='margin:0px 0px 0px 2px;' title='Increase display check-in date' tabindex='-1'>&uarr;</a><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling.previousSibling, \"Checkout_Date\", 0, 0, 1, 1 );' class='calArrow' style='margin:0px 6px 0px 0px;' title='Decrease display check-in date' tabindex='-1'>&darr;</a> to <input type='text' name='Checkout_Date' id='Checkout_Date' onBlur='return Cal.changeDate( this, \"Checkin_Date\", 1, 0, 0, 1 );' value='"+monOut+"/"+dayOut+"/"+yrOut+"' class='dwDate' style='margin:0px 0px 0px 6px;' title='Display check-out date' /><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling, \"Checkin_Date\", 0, 1, 0, 1 );' class='calArrow' style='margin:0px 0px 0px 2px;' title='Increase display check-out date' tabindex='-1'>&uarr;</a><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling.previousSibling, \"Checkin_Date\", 0, 0, 1, 1 );' class='calArrow' style='margin:0px 4px 0px 0px;' title='Decrease display check-out date' tabindex='-1'>&darr;</a><span id='nNightsDisplayID'>"+nNights+"</span> nights</td></tr>";gui+="<tr><td style='padding:12px 4px 0px 4px; white-space:nowrap;'>Actual Dates</td><td style='padding:12px 4px 0px 4px; white-space:nowrap;'><input type='text' name='Checkin_Date_Actual' id='Checkin_Date_Actual' onBlur='return Cal.changeDate( this, \"Checkout_Date_Actual\", 1, 0, 0, 0 );' value='"+(CkInDateActual.getMonth()+1)+"/"+CkInDateActual.getDate()+"/"+(CkInDateActual.getFullYear()-2000)+"' class='dwDate' title='Actual check-in date' /><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling, \"Checkout_Date_Actual\", 0, 1, 0, 0 );' class='calArrow' style='margin:0px 0px 0px 2px;' title='Increase actual check-in date' tabindex='-1'>&uarr;</a><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling.previousSibling, \"Checkout_Date_Actual\", 0, 0, 1, 0 );' class='calArrow' style='margin:0px 6px 0px 0px;' title='Decrease actual check-in date' tabindex='-1'>&darr;</a> to <input type='text' name='Checkout_Date_Actual' id='Checkout_Date_Actual' onBlur='return Cal.changeDate( this, \"Checkin_Date_Actual\", 1, 0, 0, 0 );' value='"+(CkOutDateActual.getMonth()+1)+"/"+CkOutDateActual.getDate()+"/"+(CkOutDateActual.getFullYear()-2000)+"' class='dwDate' style='margin:0px 0px 0px 6px;' title='Actual check-out date' /><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling, \"Checkin_Date_Actual\", 0, 1, 0, 0 );' class='calArrow' style='margin:0px 0px 0px 2px;' title='Increase actual check-out date' tabindex='-1'>&uarr;</a><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling.previousSibling, \"Checkin_Date_Actual\", 0, 0, 1, 0 );' class='calArrow' style='margin:0px 4px 0px 0px;' title='Decrease actual check-out date' tabindex='-1'>&darr;</a><span id='nNightsActualID'>"+parseInt((CkOutDateActual.getTime()-CkInDateActual.getTime())/86400000)+"</span> nights</td></tr>";gui+="<tr><td style='padding:10px 4px 0px 4px; white-space:nowrap;'>Client</td><td style='padding:10px 4px 0px 4px; white-space:nowrap;'><input type='text' name='Client' class='calText' value='"+guest+"' title='"+this.Msg.client+"' /></td></tr><tr><td style='padding:10px 4px 0px 4px; white-space:nowrap;'>Notes</td><td style='padding:10px 4px 0px 4px; white-space:nowrap;'><textarea name='Notes' rows='5' wrap='true' class='dwNotes' title='"+this.Msg.notes+"'>"+notes+"</textarea></td></tr><tr><td align='center' colspan='2' style='padding:10px 0px 0px 0px; white-space:nowrap;'><input type='submit' name='subBut' value='OK' class='calOkCancel' title='"+this.Msg.butEditOK+"' /><input type='button' value='Cancel' onClick='DW.removeWin();' class='calOkCancel' title='"+this.Msg.butCancel+"' /></td></tr><tr style='display:none;'><td align='center' colspan='2' style='padding:10px 0px 0px 0px;'><input type='text' name='Property_Number' value='"+propNum+"' style='width:60px;' /> <input type='text' name='Booking_Number' value='"+bookingNum+"' style='width:60px;' /> </td></tr></table></td></tr></table></form>";DW.createWindow(["Edit "+dwTitle+"<span class='calProp'>: "+propName+"</span>",gui],[0,460,0],null,evt,6);}
else{var TdOld=this.SpanOld.parentNode;var propNameCkIn=TdOld.previousSibling.innerHTML;var propNameCkOut=Span.parentNode.previousSibling.innerHTML;if(propNameCkIn==propNameCkOut){var PropData=TdOld.id.split("_");for(var i in PropData)PropData[i]=parseInt(PropData[i]);var propNum=PropData[0];var ckInMon=PropData[1];var ckInYr=PropData[2];this.nextMon=ckInMon;this.nextYr=ckInYr;var ThisSpan=null;if(this.SpanOld.nextSibling&&this.SpanOld.nextSibling.tagName)ThisSpan=this.SpanOld.nextSibling;else if(this.SpanOld.nextSibling&&this.SpanOld.nextSibling.nextSibling&&this.SpanOld.nextSibling.nextSibling.tagName)ThisSpan=this.SpanOld.nextSibling.nextSibling;else ThisSpan=this.getNextSpan(propNum,ckInMon,ckInYr);while(ThisSpan&&ThisSpan!=Span){if(ThisSpan.className=="calBooked"||ThisSpan.className=="calPending")break;if(ThisSpan.nextSibling&&ThisSpan.nextSibling.tagName)ThisSpan=ThisSpan.nextSibling;else if(ThisSpan.nextSibling&&ThisSpan.nextSibling.nextSibling&&ThisSpan.nextSibling.nextSibling.tagName)ThisSpan=ThisSpan.nextSibling.nextSibling;else ThisSpan=this.getNextSpan(propNum,ckInMon,ckInYr);}
if(Span==ThisSpan){this.SpanOld.className="calOpen";this.getNewResGUI(Span,evt);this.SpanIn=this.SpanOld;this.SpanOut=Span;this.SpanOld=null;}
else{cancelEvt(evt);alert("You clicked an existing reservation after setting a check-in date. It appears you may be attempting to set a new back-to-back reservation???\n\nIf so, you are allowed to add a new back-to-back in this manner, but you must click the existing reservation IMMEDIATELY FOLLOWING your check-in date!");}}
else{cancelEvt(evt);alert("You clicked an existing reservation after setting a check-in date for a different property.\n\nTIP: Need to reset & start over? Click the background reset...");}}}
function updateDisplay(propNum,ckInMon,ckInDay,ckInYr,ckOutDay,bookClass){function subAddEvtHandlers(NewSpan){if(useDOM){NewSpan.onclick=function(event){if(window.Cal)Cal.getEditResGUI(this,event,1);}
NewSpan.oncontextmenu=function(event){if(window.Cal){return Cal.getReadAllWin(this,event,1);}}
NewSpan.onmouseover=function(){if(window.Cal){this.title=(Cal.SpanOld)?Cal.getRenter(this,1)+Cal.Msg.backToBack:Cal.getRenter(this,1)+Cal.Msg.edit;this.style.cursor="pointer";return true;}}}
else{return "onClick='if( window.Cal ) Cal.getEditResGUI( this, event, 1 );' oncontextmenu='if( window.Cal ) { return Cal.getReadAllWin( this, event, 1 ); }' onMouseover='if( window.Cal ) { this.title = ( ( Cal.SpanOld ) ? Cal.getRenter( this, 1 ) + Cal.Msg.backToBack : Cal.getRenter( this, 1 ) + Cal.Msg.edit ); this.style.cursor = \"pointer\"; return true; }'";}}
var ThisSpan=null;if(this.SpanIn.nextSibling&&this.SpanIn.nextSibling.tagName)ThisSpan=this.SpanIn.nextSibling;else if(this.SpanIn.nextSibling&&this.SpanIn.nextSibling.nextSibling&&this.SpanIn.nextSibling.nextSibling.tagName)ThisSpan=this.SpanIn.nextSibling.nextSibling;else ThisSpan=this.getNextSpan(propNum,ckInMon,ckInYr);var LastSpan=this.SpanIn;var useDOM=(document.createRange)?true:false;var Range=(useDOM)?document.createRange():document.body.createTextRange();(useDOM)?Range.setStartBefore(this.SpanIn):Range.moveToElementText(this.SpanIn);if(!ThisSpan)ThisSpan=this.SpanOut;var userClickedLastDayOfMon=(ThisSpan&&ThisSpan.innerHTML=="01");if(userClickedLastDayOfMon){if(useDOM){Range.setEndAfter(this.SpanIn);var NewSpan=document.createElement("span");subAddEvtHandlers(NewSpan);NewSpan.className=bookClass;Range.surroundContents(NewSpan);NewSpan.innerHTML=Range.toString();Range=document.createRange();Range.setStartBefore(ThisSpan);}
else{var NewRange=document.body.createTextRange();NewRange.moveToElementText(this.SpanIn);Range.setEndPoint("EndToEnd",NewRange);Range.pasteHTML("<span class='"+bookClass+"' "+subAddEvtHandlers(null)+">"+Range.text+"</span>");Range=document.body.createTextRange();Range.moveToElementText(ThisSpan);}}
while(ThisSpan&&ThisSpan!=this.SpanOut){LastSpan=ThisSpan;if(ThisSpan.nextSibling&&ThisSpan.nextSibling.tagName){ThisSpan=ThisSpan.nextSibling;}
else if(ThisSpan.nextSibling&&ThisSpan.nextSibling.nextSibling&&ThisSpan.nextSibling.nextSibling.tagName){ThisSpan=ThisSpan.nextSibling.nextSibling;}
else{if(useDOM){Range.setEndAfter(ThisSpan);var NewSpan=document.createElement("span");subAddEvtHandlers(NewSpan);NewSpan.className=bookClass;Range.surroundContents(NewSpan);NewSpan.innerHTML=Range.toString();ThisSpan=this.getNextSpan(propNum,ckInMon,ckInYr);LastSpan=ThisSpan;Range=document.createRange();Range.setStartBefore(ThisSpan);}
else{var NewRange=document.body.createTextRange();NewRange.moveToElementText(ThisSpan);Range.setEndPoint("EndToEnd",NewRange);Range.pasteHTML("<span class='"+bookClass+"' "+subAddEvtHandlers(null)+">"+Range.text+"</span>");ThisSpan=this.getNextSpan(propNum,ckInMon,ckInYr);LastSpan=ThisSpan;Range=document.body.createTextRange();Range.moveToElementText(ThisSpan);}}}
if(ckOutDay>1){if(useDOM){var NewSpan=document.createElement("span");subAddEvtHandlers(NewSpan);NewSpan.className=bookClass;Range.setEndAfter(LastSpan);Range.surroundContents(NewSpan);NewSpan.innerHTML=Range.toString();}
else{var NewRange=document.body.createTextRange();NewRange.moveToElementText(LastSpan);Range.setEndPoint("EndToEnd",NewRange);Range.pasteHTML("<span class='"+bookClass+"' "+subAddEvtHandlers(null)+">"+Range.text+"</span>");}}}
function addReservation(Form){var Now=new Date();var propName=Form.Property_Name.value;var Checkin_Date=Form.Checkin_Date.value.split("/");for(var i in Checkin_Date)Checkin_Date[i]=parseInt(Checkin_Date[i]);var Checkout_Date=Form.Checkout_Date.value.split("/");for(var i in Checkout_Date)Checkout_Date[i]=parseInt(Checkout_Date[i]);var CkInDate=new Date(Checkin_Date[2]+2000,Checkin_Date[0]-1,Checkin_Date[1]);var newCkInDate=CkInDate.getTime();var CkOutDate=new Date(Checkout_Date[2]+2000,Checkout_Date[0]-1,Checkout_Date[1]);var newCkOutDate=CkOutDate.getTime();var BookType=Form.BookType,bookType="0",bookClass="";for(var i=0;i<BookType.length;i++){if(BookType[i].checked)bookType=BookType[i].value;}
switch(bookType){case "1":bookClass="calBooked";break;case "2":bookClass="calPending";break;default:alert("Switch/Case Error at Cal.addReservation while setting bookClass");}
var Client=Form.Client;var guest=Client.value.toHTM();var Notes=Form.Notes;var notes=Notes.value.toHTM();var ckInActualOffset=0,ckOutActualOffset=0;var ActualDates=this.setActualDates(Form,newCkInDate,newCkOutDate);if(ActualDates){ckInActualOffset=ActualDates[0];ckOutActualOffset=ActualDates[1];}
else return false;var br=(this.Settings.compressData)?"":"\n";var newCalData="";newCalData+="CalData=["+br+br;var delBookingsEndingBeforeMS=new Date(Now.getFullYear(),Now.getMonth()-this.Settings.pastMonthsAdmin,1).getTime();outer:for(var j=0;j<CalData.length-1;j++){newCalData+="[\""+CalData[j][0]+"\",";var ExistingDates=CalData[j].slice(1);if(ExistingDates.length==0&&propName==CalData[j][0]){var thisBooking="[["+Checkin_Date[0]+","+Checkin_Date[1]+","+Checkin_Date[2]+","+Checkout_Date[0]+","+Checkout_Date[1]+","+Checkout_Date[2]+","+ckInActualOffset+","+ckOutActualOffset+"],"+bookType+",\""+this.userWithWritePrivileges+"\","+Now.getTime()+","+"\""+guest+"\",\""+notes+"\","+Now.getTime()+"]";newCalData+=thisBooking+",";}
for(var k=0;k<ExistingDates.length;k++){var endDateMS=new Date(ExistingDates[k][0][5]+2000,ExistingDates[k][0][3]-1,ExistingDates[k][0][4]).getTime();var existingCalData=(endDateMS>=delBookingsEndingBeforeMS)?"[["+ExistingDates[k][0][0]+","+ExistingDates[k][0][1]+","+ExistingDates[k][0][2]+","+ExistingDates[k][0][3]+","+ExistingDates[k][0][4]+","+ExistingDates[k][0][5]+","+ExistingDates[k][0][6]+","+ExistingDates[k][0][7]+"],"+ExistingDates[k][1]+",\""+ExistingDates[k][2]+"\","+ExistingDates[k][3]+","+"\""+ExistingDates[k][4]+"\",\""+ExistingDates[k][5]+"\","+ExistingDates[k][6]+"],":"";if(propName==CalData[j][0]){var existingCkInDate=new Date(ExistingDates[k][0][2]+2000,ExistingDates[k][0][0]-1,ExistingDates[k][0][1]).getTime();var nextExistingCkInDate=(k<ExistingDates.length-1)?new Date(ExistingDates[k+1][0][2]+2000,ExistingDates[k+1][0][0]-1,ExistingDates[k+1][0][1]).getTime():Number.POSITIVE_INFINITY;var thisBooking="[["+Checkin_Date[0]+","+Checkin_Date[1]+","+Checkin_Date[2]+","+Checkout_Date[0]+","+Checkout_Date[1]+","+Checkout_Date[2]+","+ckInActualOffset+","+ckOutActualOffset+"],"+bookType+",\""+this.userWithWritePrivileges+"\","+Now.getTime()+","+"\""+guest+"\",\""+notes+"\","+Now.getTime()+"]";var newBooking=thisBooking+",";if(k==0&&newCkInDate<existingCkInDate){newCalData+=newBooking;newCalData+=existingCalData;}
else if(newCkInDate>existingCkInDate&&newCkInDate<nextExistingCkInDate){newCalData+=existingCalData;newCalData+=newBooking;}
else
newCalData+=existingCalData;}
else newCalData+=existingCalData;}
newCalData=newCalData.replace(/,$/, "" );
newCalData+="],"+br+br;}
newCalData+="[\""+this.userWithWritePrivileges+"\","+Now.getTime()+"]"+br+br;newCalData+="];";var Form=document.AspForm;Form.EditedJS.value=newCalData;if(SF){eval(newCalData);document.getElementById("CalID").innerHTML=Cal.getCal();DW.removeWin();Cal.init();this.setPublishButton();this.searchGuests(0);return false;}
else{var propNum=parseInt(this.SpanIn.parentNode.id.split("_")[0]);var ckInMon=Checkin_Date[0];var ckInDay=Checkin_Date[1];var ckInYr=Checkin_Date[2];var ckOutDay=Checkout_Date[1];this.nextMon=ckInMon;this.nextYr=ckInYr;this.updateDisplay(propNum,ckInMon,ckInDay,ckInYr,ckOutDay,bookClass);eval(newCalData);document.getElementById("calLastUpdateUserID").innerHTML=CalData[CalData.length-1][0];document.getElementById("calLastUpdateTimeID").innerHTML=new Date(CalData[CalData.length-1][1]).toLocaleString();DW.removeWin();this.setPublishButton();this.searchGuests(0);return false;}}
function getNewResGUI(Span,evt){var TdOut=Span.parentNode;var tdOutID=TdOut.id;var tdInID=this.SpanOld.parentNode.id;var propName=TdOut.previousSibling.firstChild.innerHTML;var propNum=parseInt(tdInID.split("_")[0]);var monIn=parseInt(tdInID.split("_")[1]);var dayIn=parseInt(this.SpanOld.innerHTML.replace(/^0/, "" ) );
var yrIn=parseInt(tdInID.split("_")[2]);var CkInDate=new Date(yrIn+2000,monIn-1,dayIn);var monOut=parseInt(tdOutID.split("_")[1]);var dayOut=parseInt(Span.innerHTML.replace(/^0/, "" ) );
var yrOut=parseInt(tdOutID.split("_")[2]);var CkOutDate=new Date(yrOut+2000,monOut-1,dayOut);var nNights=this.getNumNights(CkInDate,CkOutDate);var gui="<form name='addRes' style='margin:0px;' onSubmit='return Cal.addReservation( this );'><table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td><table align='center' border='0' cellspacing='0' cellpadding='0' class='calPopUps'><tr><td align='center' colspan='2' style='padding:4px 0px 0px 0px; cursor:default;' title='"+this.Msg.dtVis+"'>Display Dates: "+this.getDayOfWeek(CkInDate.getDay(),3)+" "+this.getMonthName(monIn,0)+" "+dayIn+", "+((yrIn<10)?"0"+yrIn:yrIn)+" to "+this.getDayOfWeek(CkOutDate.getDay(),3)+" "+this.getMonthName(monOut,0)+" "+dayOut+", "+((yrOut<10)?"0"+yrOut:yrOut)+";&nbsp; "+nNights+" nights</td></tr><tr><td align='center' colspan='2' style='padding:8px 0px 0px 0px;'>I'd like to add the following reservation type:</td></tr><tr><td align='center' colspan='2' style='padding:0px 0px 0px 0px;'><input type='radio' id='BookTypeNew1' name='BookType' value='1' title='I&#39;m adding "+this.Msg.bkTypeConf+"' /><label for='BookTypeNew1'>Confirmed</label>; &nbsp;<input type='radio' id='BookTypeNew2' name='BookType' value='2' checked='checked' title='I&#39;m adding "+this.Msg.bkTypePend+"' /><label for='BookTypeNew2'>Pending</label>; &nbsp;</td></tr>";gui+="<tr><td style='padding:12px 4px 0px 4px; white-space:nowrap;'>Actual Dates</td><td style='padding:12px 4px 0px 4px; white-space:nowrap;'><input type='text' name='Checkin_Date_Actual' id='Checkin_Date_Actual' onBlur='return Cal.changeDate( this, \"Checkout_Date_Actual\", 1, 0, 0, 0 );' value='"+monIn+"/"+dayIn+"/"+yrIn+"' class='dwDate' title='Actual check-in date' /><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling, \"Checkout_Date_Actual\", 0, 1, 0, 0 );' class='calArrow' style='margin:0px 0px 0px 2px;' title='Increase actual check-in date' tabindex='-1'>&uarr;</a><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling.previousSibling, \"Checkout_Date_Actual\", 0, 0, 1, 0 );' class='calArrow' style='margin:0px 6px 0px 0px;' title='Decrease actual check-in date' tabindex='-1'>&darr;</a> to <input type='text' name='Checkout_Date_Actual' id='Checkout_Date_Actual' onBlur='return Cal.changeDate( this, \"Checkin_Date_Actual\", 1, 0, 0, 0 );' value='"+monOut+"/"+dayOut+"/"+yrOut+"' class='dwDate' style='margin:0px 0px 0px 6px;' title='Actual check-out date' /><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling, \"Checkin_Date_Actual\", 0, 1, 0, 0 );' class='calArrow' style='margin:0px 0px 0px 2px;' title='Increase actual check-out date' tabindex='-1'>&uarr;</a><a href='javascript:void(0)' onClick='return Cal.changeDate( this.previousSibling.previousSibling, \"Checkin_Date_Actual\", 0, 0, 1, 0 );' class='calArrow' style='margin:0px 4px 0px 0px;' title='Decrease actual check-out date' tabindex='-1'>&darr;</a><span id='nNightsActualID'>"+nNights+"</span> nights</td></tr>";gui+="<tr><td class='calFieldForm'>Client</td><td class='calValueForm'><input type='text' name='Client' class='calText' title='"+this.Msg.client+"' /></td></tr><tr><td class='calFieldForm'>Notes</td><td class='calValueForm'><textarea name='Notes' rows='5' wrap='true' class='dwNotes' title='"+this.Msg.notes+"'></textarea></td></tr><tr><td align='center' colspan='2' style='padding:10px 0px 0px 0px;'><input type='submit' value='OK' class='calOkCancel' title='"+this.Msg.butAddOK+"' /><input type='button' value='Cancel' class='calOkCancel' onClick='DW.removeWin();' title='"+this.Msg.butCancel+"' /></td></tr><tr style='display:none;'><td align='center' colspan='2' style='padding:10px 0px 0px 0px;'><input type='text' name='Property_Name' value='"+propName+"' style='width:150px;' /> <input type='text' name='Checkin_Date' value='"+monIn+"/"+dayIn+"/"+yrIn+"' style='width:60px;' /> <input type='text' name='Checkout_Date' value='"+monOut+"/"+dayOut+"/"+yrOut+"' style='width:60px;' /></td></tr></table></td></tr></table></form>";DW.createWindow(["Add New Booking<span class='calProp'>: "+propName+"</span>",gui],[0,450,0],null,evt,6);setTimeout("document.addRes.Client.focus();",100);}
function resetSearchGUI(){document.getElementById("SearchResults").innerHTML="";var SearchName=document.getElementById("SearchName");SearchName.value="";SearchName.focus();}
function searchGuests(setFocus){var SearchName=document.getElementById("SearchName");if(SearchName){var SearchResults=document.getElementById("SearchResults");var searchName=SearchName.value.trim();if(searchName){searchName=searchName.replace(/ {2,}/g, " " );
SearchName.value=searchName;var SearchNameArr=searchName.split(" ");var matches="";var multiRentals=(CalData.length>2);for(var i=0;i<CalData.length-1;i++){var Property=CalData[i];var propName=Property[0];for(var k=1;k<Property.length;k++){var Booking=Property[k];var dbName=Booking[4].toText();var bookType=this.getBookingType(Booking[1]);var hiddenData=(i+1)+"_"+Booking[0][0]+"_"+Booking[0][1]+"_"+Booking[0][2]+"_"+propName;var allSearchNamesMatch=true;for(var j=0;j<SearchNameArr.length;j++){var searchWord=SearchNameArr[j];var Pattern=new RegExp(searchWord,"i");if( !Pattern.test(dbName)){allSearchNamesMatch=false;break;}}
if(allSearchNamesMatch){var CkInDateActual=new Date(Booking[0][2]+2000,Booking[0][0]-1,Booking[0][1]+Booking[0][6]);var CkOutDateActual=new Date(Booking[0][5]+2000,Booking[0][3]-1,Booking[0][4]-Booking[0][7]);var nNights=this.getNumNights(CkInDateActual,CkOutDateActual);matches+="<tr><td colspan='"+((multiRentals)?5:4)+"' class='csrs'>&nbsp;</td></tr><tr><td class='csr'><a href='javascript:void(0);' class='csr'>"+dbName+"</a><input type='hidden' value='"+hiddenData+"' /></td>"+((multiRentals)?"<td class='csr'>"+propName+"</td>":"")+"<td class='csr'>"+bookType+"</td><td class='csr'>"+(CkInDateActual.getMonth()+1)+"/"+CkInDateActual.getDate()+"/"+(CkInDateActual.getFullYear()-2000)+" to "+(CkOutDateActual.getMonth()+1)+"/"+CkOutDateActual.getDate()+"/"+(CkOutDateActual.getFullYear()-2000)+"</td><td class='csr'>"+nNights+"</td></tr>";}}}
if(matches){SearchResults.innerHTML="<table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td class='csrHead'>Guest</td>"+((multiRentals)?"<td class='csrHead'>Property</td>":"")+"<td class='csrHead'>Status</td><td class='csrHead'>Actual Dates</td><td class='csrHead'>Nights</td></tr>"+matches+"</table>";var Links=document.getElementsByTagName("a");for(var i=0;i<Links.length;i++){if(Links[i].className=="csr"){if(this.userWithWritePrivileges){Links[i].onclick=function(event){Cal.getEditResGUI(this,event,0);}
Links[i].oncontextmenu=function(event){return Cal.getReadAllWin(this,event,0);}
Links[i].title=Cal.Msg.edit;}
else{Links[i].onclick=function(event){return Cal.getReadAllWin(this,event,0);}
Links[i].title=Cal.Msg.readAll;}}}}
else
SearchResults.innerHTML="<div style='margin:20px 0px 0px 0px;'>Sorry, no matching records found for guest &ldquo;"+searchName+"&rdquo;</div>";}
else{SearchResults.innerHTML="";}
if(setFocus)SearchName.focus();}}
function showSearchGUI(){var htm="<div style='margin:15px 0px 10px 0px;'>Guest: <input type='text' class='calSearch' id='SearchName' onkeypress='if( window.event && window.event.keyCode == 13 || event.which == 13 ) { Cal.searchGuests( 1 ); return false; }' value='' title='Guest First and/or Last Name(s)'/> &nbsp;<input type='button' value='Search' onClick='Cal.searchGuests( 1 );' title='Search by Guest Name' /> &nbsp;<input type='button' value='Reset' onClick='Cal.resetSearchGUI();' title='Clear Guest Name & Results' /> &nbsp;<input type='button' value='X' onClick='document.getElementById( \"CalSearchGUI\" ).innerHTML = \"\";' title='Close this search section' style='padding:0px 3px 0px 3px;' /></div><div id='SearchResults' style='margin:0px 0px 20px 0px;'></div>";document.getElementById("CalSearchGUI").innerHTML=htm;document.getElementById("SearchName").focus();}
function getCal(){self.status=this.Msg.writing;for(var i=0;i<CalData.length-1;i++)this.CarryBookingForward[CalData[i][0]]=[0,""];var Today=new Date();var thisYear=Today.getFullYear();var thisMonth=Today.getMonth()+1;var thisDay=Today.getDate();var pastMonths=(this.publicUser)?0:this.Settings.pastMonthsAdmin;var numMonths=(this.publicUser)?this.Settings.futureMonthsPublic:this.Settings.futureMonthsAdmin+this.Settings.pastMonthsAdmin;var firstDayOfFirstMonth=new Date(thisYear,thisMonth-1-pastMonths,1).getTime();var htm="";var nProps=CalData.length-1;var winWid=this.getWinWid();var fSizeCls=(this.getWinWid()>=1250)?"calHiRes":"calLoRes";htm+="<table align='center' border='0' cellspacing='5' cellpadding='0'>";if(this.userWithWritePrivileges)htm+="<tr><td colspan='2' class='calButtons' id='calButtonsTop'><input type='button' id='PublishCalendarTop' class='calButton' value='Publish' />&nbsp;&nbsp;<input type='button' id='LogOffCalendarTop' class='calButton' value='Log Off' /></td></tr>";if(nProps>1)htm+="<tr class='pfHide'><td colspan='2'><div class='RentalsRB' id='RentalsRB'><br></div></td></tr>";for(var monCounter=0;monCounter<numMonths;monCounter++){var htmRow="";self.status="Writing month "+(monCounter+1)+" of "+numMonths+"...";var nMonthThisRow=thisMonth+monCounter-pastMonths-1;var factor=Math.floor(nMonthThisRow/12);var nMonth=nMonthThisRow-(factor*12);var nYear=thisYear+factor;var FirstDayOfThisMonth=new Date(nYear,nMonth,1);var theYear=FirstDayOfThisMonth.getFullYear();var theMonth=FirstDayOfThisMonth.getMonth()+1;var theDay=FirstDayOfThisMonth.getDay();var nDaysThisMonth=this.getNumDaysInMonth(theMonth,theYear);htmRow+="<tr><td colspan='2' class='calSpacer'>&nbsp;</td></tr>";if(monCounter-pastMonths==0&&pastMonths>0)htmRow+="<tr><td colspan='2' align='center'><div class='calDivider'><!-- x --></div></td></tr>";htmRow+="<tr><td class='calMon "+fSizeCls+"'>"+this.getMonthName(theMonth,1)+" "+theYear.toString().substring(2,4)+"</td><td class='calDaysWeek "+fSizeCls+"'>&nbsp;";var nDay=theDay;for(var i=1;i<=nDaysThisMonth;i++){var dayOfWeek=this.getDayOfWeek(nDay,2);var dayOfWeekLong=this.getDayOfWeek(nDay);nDay=(nDay<6)?nDay+1:0;var today=(thisYear==theYear&&thisMonth==theMonth&&thisDay==i);htmRow+=(today)?"<span class='calToday' title='"+((window.Cal)?this.Msg.today+": "+dayOfWeekLong+" "+theMonth+"/"+i+"/"+(theYear-2000):"")+"'>"+dayOfWeek+"</span> ":dayOfWeek+" ";}
htmRow+="&nbsp;</td></tr>";for(var propNum=0;propNum<nProps;propNum++){var propName=CalData[propNum][0];var Bookings=CalData[propNum].slice(1);var openedSpans=0,closedSpans=0;htmRow+="<tr class='prop"+propNum+"'><td class='calProp "+fSizeCls+"'><span class='calProp'>"+propName+"</span></td><td class='calDays "+fSizeCls+"' id='"+(propNum+1)+"_"+theMonth+"_"+(theYear-2000)+"'>&nbsp;";for(var dayOfMon=1;dayOfMon<=nDaysThisMonth;dayOfMon++){var output=((dayOfMon<10)?"0"+dayOfMon:dayOfMon)+"";if(this.CarryBookingForward[propName][0]){openedSpans++;output=this.CarryBookingForward[propName][1]+output;this.CarryBookingForward[propName][0]=0;}
for(var bookingNum=0;bookingNum<Bookings.length;bookingNum++){var ckInMon=Bookings[bookingNum][0][0];var ckInDay=Bookings[bookingNum][0][1];var ckInYr=Bookings[bookingNum][0][2];var ckOutMon=Bookings[bookingNum][0][3];var ckOutDay=Bookings[bookingNum][0][4];var ckOutYr=Bookings[bookingNum][0][5];if(monCounter==0){var ckInDateMS=new Date(ckInYr+2000,ckInMon-1,ckInDay).getTime();var ckOutDateMS=new Date(ckOutYr+2000,ckOutMon-1,ckOutDay).getTime();if(ckInDateMS<firstDayOfFirstMonth&&ckOutDateMS>firstDayOfFirstMonth){ckInDay=1;ckInMon=theMonth;ckInYr=theYear-2000;}}
var begStrikeThrough=(theMonth==ckInMon&&dayOfMon==ckInDay&&theYear-2000==ckInYr);if(ckOutDay-1==0){ckOutMon--;if(ckOutMon==0){ckOutMon=12;ckOutYr--;}
ckOutDay=getNumDaysInMonth(ckOutMon,ckOutYr+2000)+1;}
if(begStrikeThrough){var bookType=Bookings[bookingNum][1];switch(bookType){case 1:openedSpans++;output="<span class='calBooked'>"+output;this.CarryBookingForward[propName][1]="<span class='calBooked'>";break;case 2:openedSpans++;output="<span class='calPending'>"+output;this.CarryBookingForward[propName][1]="<span class='calPending'>";this.calPending=1;break;default:alert("Switch/Case Error at Cal.getCal: begStrikeThrough");}}
var endStrikeThrough=(theMonth==ckOutMon&&dayOfMon==ckOutDay-1&&theYear-2000==ckOutYr);if(endStrikeThrough){closedSpans++;output+="</span>";}}
htmRow+=output+" ";}
if(openedSpans>closedSpans){htmRow+="</span>";this.CarryBookingForward[propName][0]=1;}
htmRow+="&nbsp;</td></tr>";}
htm+=htmRow;}
htm+="<tr><td colspan='2' class='calLastUpdate'>Calendar last updated <span class='calLastUpdate'>by <span id='calLastUpdateUserID'>"+CalData[CalData.length-1][0]+"</span></span> on <span id='calLastUpdateTimeID'>"+new Date(CalData[CalData.length-1][1]).toLocaleString()+"</span></td></tr>";if(this.userWithWritePrivileges){htm+="<tr><td colspan='2' class='calButtons' id='calButtonsBot'><input type='button' id='PublishCalendarBot' class='calButton' value='Publish' />&nbsp;&nbsp;<input type='button' class='calButton' id='LogOffCalendarBot' value='Log Off' /></td></tr>";}
htm+="</table>";htm=htm.replace(/\s<\/span>/g, "</span> " );
htm+="";this.searchGuests(0);self.status="";return htm;}
function getReadAllWin(Span,evt,clickedRes){if(!evt)evt=window.event;if(clickedRes){var Td=Span.parentNode;var PropData=Td.id.split("_");for(var i in PropData)PropData[i]=parseInt(PropData[i]);var propName=Td.previousSibling.firstChild.innerHTML;var propNum=PropData[0];var monthClicked=PropData[1];var dayInClicked=parseInt(Span.innerHTML.split(" ")[0].replace(/^0/, "" ) );
var yrClicked=PropData[2];}
else{var Link=Span;var hiddenData=Link.nextSibling.value;var PropData=hiddenData.split("_");for(var i=0;i<PropData.length-1;i++)PropData[i]=parseInt(PropData[i]);var propNum=PropData[0];var monthClicked=PropData[1];var dayInClicked=PropData[2];var yrClicked=PropData[3];var propName=PropData[4];}
var inDateClicked=new Date(yrClicked+2000,monthClicked-1,dayInClicked).getTime();var monIn,dayIn,yrIn,CkInDate,monOut,dayOut,yrOut,CkOutDate,bookType=0,lastEditor,lastEditTime,bookingNum,guest="",notes="",creationTime,CkInDateActual,CkOutDateActual;outer:for(var i=0;i<CalData.length-1;i++){if(CalData[i][0]==propName){var Bookings=CalData[i].slice(1);for(var k=0;k<Bookings.length;k++){var firstDayOfBooking=new Date(Bookings[k][0][2]+2000,Bookings[k][0][0]-1,Bookings[k][0][1]).getTime();var lastDayOfBooking=new Date(Bookings[k][0][5]+2000,Bookings[k][0][3]-1,Bookings[k][0][4]).getTime();if(inDateClicked>=firstDayOfBooking&&inDateClicked<lastDayOfBooking){monIn=Bookings[k][0][0];dayIn=Bookings[k][0][1];yrIn=Bookings[k][0][2];CkInDate=new Date(yrIn+2000,monIn-1,dayIn);monOut=Bookings[k][0][3];dayOut=Bookings[k][0][4];yrOut=Bookings[k][0][5];CkOutDate=new Date(yrOut+2000,monOut-1,dayOut);CkInDateActual=new Date(yrIn+2000,monIn-1,dayIn+Bookings[k][0][6]);CkOutDateActual=new Date(yrOut+2000,monOut-1,dayOut-Bookings[k][0][7]);bookType=Bookings[k][1];lastEditor=Bookings[k][2];lastEditTime=Bookings[k][3];guest=Bookings[k][4].toHTM();notes=Bookings[k][5].toHTM();creationTime=Bookings[k][6];bookingNum=k;break outer;}}}}
var nNights=this.getNumNights(CkInDate,CkOutDate);var booking=this.getBookingType(bookType);var gui="<table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td><table align='center' border='0' cellspacing='0' cellpadding='0' class='calPopUps'><tr><td class='calField'>Status</td><td class='calValue' id='tdBookingID'>"+booking+"</td></tr><tr style='cursor:default;' title='Dates that are showing on the calendar'><td class='calField'>Display Dates</td><td class='calValue' id='tdDatesID'>"+this.getDayOfWeek(CkInDate.getDay(),3)+" "+this.getMonthName(monIn,0)+" "+dayIn+", "+(yrIn+2000)+" to "+this.getDayOfWeek(CkOutDate.getDay(),3)+" "+this.getMonthName(monOut,0)+" "+dayOut+", "+(yrOut+2000)+";&nbsp; "+nNights+" nights</td></tr>";gui+="<tr style='cursor:default;' title='Actual \"real\" check-in & check-out dates'><td class='calField'>Actual Dates</td><td class='calValue' id='tdDatesID'>"+this.getDayOfWeek(CkInDateActual.getDay(),3)+" "+this.getMonthName(CkInDateActual.getMonth()+1,0)+" "+CkInDateActual.getDate()+", "+CkInDateActual.getFullYear()+" to "+this.getDayOfWeek(CkOutDateActual.getDay(),3)+" "+this.getMonthName(CkOutDateActual.getMonth()+1,0)+" "+CkOutDateActual.getDate()+", "+CkOutDateActual.getFullYear()+";&nbsp; "+parseInt((CkOutDateActual.getTime()-CkInDateActual.getTime())/86400000)+" nights</td></tr>";gui+="<tr><td class='calField'>Client</td><td class='calValue' id='tdGuestID'>"+guest+"</td></tr><tr><td valign='top' class='calField'>Notes</td><td class='calValue' id='tdNotesID'>"+notes+"</td></tr>";gui+="<tr><td class='calField'>Created</td><td class='calValue' id='tdLastEditorID'>"+new Date(creationTime).toLocaleString()+"</td></tr><tr><td class='calField'>Last Modified</td><td class='calValue' id='tdLastEditorID'>"+new Date(lastEditTime).toLocaleString()+" by "+lastEditor+"</td></tr>";var showSendMailList=false;for(var person in DB.ShowInSendMailList){showSendMailList=true;break;}
if(showSendMailList){gui+="<tr><td class='calField'><a href='javascript:Cal.sendMail();' title='"+this.Msg.sendMail+"' class='dwLink'>Send Mail To</a></td><td class='calValue'>";var counter=0;for(var person in DB.Administrators){if(DB.ShowInSendMailList[person]){gui+="<input type='checkbox' id='email"+counter+"' value='"+DB.Administrators[person]+"' onMouseover='this.title=\""+DB.Administrators[person]+"\";' /><label for='email"+counter+"'> "+person+"</label><br>";counter++;}}
gui+="</td></tr>";}
gui+="</table></td></tr></table>";DW.createWindow(["Reservation Information<span class='calProp'>: "+propName+"</span>",gui],[0,600,0],null,evt,6);try{if(counter==1)document.getElementById("email0").checked=true;} catch(Err){}
return false;}
function sendMail(){var counter=0,eMail="";while(document.getElementById("email"+counter)){var Checkbox=document.getElementById("email"+counter);if(Checkbox.checked)eMail+=Checkbox.value+",";counter++;}
eMail=eMail.replace(/,$/, "" );
var output="";var Cells=document.getElementsByTagName("td");for(var i=0;i<Cells.length-2;i++){if(Cells[i].className=="calField")output+=Cells[i].innerHTML.toText()+": ";if(Cells[i].className=="calValue")output+=Cells[i].innerHTML.toText()+"\r\n";}
var propName=document.getElementById("dwTitleBarID").innerHTML.replace(/<.*?>/g, "" );
var dates=document.getElementById("tdDatesID").innerHTML.replace(/&nbsp;/g, " " );
output="\r\n\r\n"+output+"\r\nRead-All URL: "+this.readAllURL;if(SF)document.location.href="mailto:"+eMail+"?subject="+propName+"&body="+output;else
document.location.href="mailto:"+eMail+"?subject="+escape(propName)+"&body="+escape(output);}
function init(){try{var searchCal=" &#149; <a href='javascript:void(0);' onclick='Cal.showSearchGUI(); return false;' title='"+this.Msg.searchCal+"' class='cal' id='CalSearch' style='font-size:11pt;'>Search</a>";var CalGreeting=document.getElementById("CalGreeting");if(this.userWithWritePrivileges){var Cells=document.getElementsByTagName("td");for(var i=0;i<Cells.length;i++){if(Cells[i].className.indexOf("calDays ")==0){var data=Cells[i].innerHTML;var newData=data;for(k=1;k<=31;k++){var day=(k<10)?"0"+k:""+k;var Days=data.split(day);Days[0]=Days[0].toLowerCase();var dateOpen=(Days[0].split("span").length%2)?true:false;if(dateOpen){newData=newData.split(day).join("<span onClick='Cal.setDates( this, event );' onMouseOver='if( window.Cal ) return Cal.highlight( this, 1 );' onMouseOut='if( window.Cal ) return Cal.highlight( this, 0 );' class='calOpen'>"+day+"</span>");}}
Cells[i].innerHTML=newData;}}
document.body.onclick=Cal.clear;var Spans=document.getElementsByTagName("span");for(var i=0;i<Spans.length;i++){if(Spans[i].className=="calBooked"||Spans[i].className=="calPending"){Spans[i].onclick=function(event){if(window.Cal)Cal.getEditResGUI(this,event,1);}
Spans[i].oncontextmenu=function(event){if(window.Cal){return Cal.getReadAllWin(this,event,1);}}
Spans[i].onmouseover=function(){if(window.Cal){this.title=(Cal.SpanOld)?Cal.getRenter(this,1)+Cal.Msg.backToBack:Cal.getRenter(this,1)+Cal.Msg.edit;this.style.cursor="pointer";return true;}}}}
var greeting=this.Settings.greeting+" "+this.userWithWritePrivileges+", you're logged in as Administrator"+searchCal+" &#149; <a href='calendar-help.aspx' onclick='PopUp.openWin( this.href ); return false;' title='"+this.Msg.help+"' class='cal' style='font-size:11pt;'>Instructions</a>";CalGreeting.innerHTML=greeting;var PublishCalendarTop=document.getElementById("PublishCalendarTop");PublishCalendarTop.onclick=Cal.publish;PublishCalendarTop.title=this.Msg.publish;var LogOffCalendarTop=document.getElementById("LogOffCalendarTop");LogOffCalendarTop.onclick=Cal.logOff;LogOffCalendarTop.title=this.Msg.logOff;var PublishCalendarBot=document.getElementById("PublishCalendarBot");PublishCalendarBot.onclick=Cal.publish;PublishCalendarBot.title=this.Msg.publish;var LogOffCalendarBot=document.getElementById("LogOffCalendarBot");LogOffCalendarBot.onclick=Cal.logOff;LogOffCalendarBot.title=this.Msg.logOff;}
var CalDesignation=document.getElementById("CalDesignation");CalDesignation.onclick=function(event){FW.getLogInGUI(event);}
CalDesignation.oncontextmenu=function(event){return Cal.getReadAllLogInGUI(event);}
if((this.publicUser||this.userHasReadAllPrivileges)&&!this.userWithWritePrivileges){if(this.userHasReadAllPrivileges)var greeting=this.Settings.greeting+", you have read-all privileges &#149; Click reservations for booking info"+searchCal+" &#149; <a href='calendar.aspx' onClick='DeleteCookie( \"userHasReadAllPrivileges\" );' title='"+this.Msg.logOffReadAll+"' class='cal' style='font-size:11pt;'>Log-off</a>";else{var Today=new Date();var greeting=this.Settings.greeting+", it's "+this.getDayOfWeek(Today.getDay())+", "+this.getMonthName(Today.getMonth()+1,1)+" "+Today.getDate()+", "+Today.getFullYear();}
CalGreeting.innerHTML=greeting;var Cells=document.getElementsByTagName("td");for(var i=0;i<Cells.length;i++){if(Cells[i].className.indexOf("calDays ")==0){var data=Cells[i].innerHTML;var newData=data;for(k=1;k<=31;k++){var day=(k<10)?"0"+k:""+k;var Days=data.split(day);Days[0]=Days[0].toLowerCase();var dateOpen=(Days[0].split("span").length%2)?true:false;if(dateOpen){newData=newData.split(day).join("<span class='calOpenPub' title='"+this.Msg.available+"'>"+day+"</span>");}}
Cells[i].innerHTML=newData;}}
var Spans=document.getElementsByTagName("span");for(var i=0;i<Spans.length;i++){if(Spans[i].className=="calBooked"||Spans[i].className=="calPending"){switch(Spans[i].className){case "calBooked":if(this.userHasReadAllPrivileges&&Spans[i].parentNode.id){Spans[i].onclick=function(event){if(window.Cal){return Cal.getReadAllWin(this,event,1);}}
Spans[i].onmouseover=function(){if(window.Cal){this.title=Cal.Msg.confirmedShort+Cal.getRenter(this,0);this.style.cursor="pointer";return true;}}}
else
Spans[i].onmouseover=function(){if(window.Cal){this.title=Cal.Msg.confirmed;this.style.cursor="default";return true;}}
break;case "calPending":if(this.userHasReadAllPrivileges&&Spans[i].parentNode.id){Spans[i].onclick=function(event){if(window.Cal){return Cal.getReadAllWin(this,event,1);}}
Spans[i].onmouseover=function(){if(window.Cal){this.title=Cal.Msg.pendingShort+Cal.getRenter(this,0);this.style.cursor="pointer";return true;}}}
else
Spans[i].onmouseover=function(){if(window.Cal){this.title=Cal.Msg.pending;this.style.cursor="default";return true;}}
break;default:alert("Switch/Case Error at Cal.init()");}}}}
var nProps=CalData.length-1;if(nProps>1){var calPropNum=GetCookie("calPropNum");calPropNum=(calPropNum)?parseInt(calPropNum):-1;var RentalsRB=document.getElementById("RentalsRB");var htm="<span class='show'>Show</span>: <input type='radio' id='showAll' name='rentals' value='-1' onClick='SetCookie( \"calPropNum\", \"-1\" ); Cal.morphView(this);' title='Show all rentals'"+((calPropNum==-1)?" checked":"")+" /><label for='showAll' title='Show all rentals'>All;</label>&nbsp;";for(var i=0;i<nProps;i++){var pName=CalData[i][0];htm+="&nbsp; <input type='radio' id='showProp"+i+"' name='rentals' value='"+i+"' onClick='SetCookie( \"calPropNum\", \""+i+"\" ); Cal.morphView(this);' title='Show "+pName+" only'"+((calPropNum==i)?" checked":"")+" /><label for='showProp"+i+"' title='Show "+pName+" only'"+((calPropNum==i)?" checked":"")+">"+pName+";</label>&nbsp;";}
RentalsRB.innerHTML=htm;if(calPropNum>=0)this.morphView(null);}
if(qStr&&qStr.getVal("cancelForceLogin")=="yes"){document.getElementById("CalGreeting").className="off";document.getElementById("calButtonsTop").className="off";document.getElementById("calButtonsBot").className="off";}
self.status="";}
catch(Err){if(local){var eMsg="";for(member in Err)eMsg+=member+": "+Err[member]+"; ";eMsg=eMsg.replace(/\n/g, " " );
self.status="Cal.init Exception: "+eMsg;}
else
self.status="Initializing Cal.init() method, one moment please...";setTimeout("Cal.init();",2500);}}
function morphView(RadioButton){var nRadioButton=(RadioButton)?parseInt(RadioButton.value):parseInt(GetCookie("calPropNum"));var TR=document.getElementsByTagName("tr");for(var i=0;i<TR.length;i++){var rePattern=/^prop\d+$/;if( rePattern.test(TR[i].className)){var nPropRow=parseInt(TR[i].className.replace(/^prop/, "" ) );
TR[i].style.display=(nRadioButton==nPropRow||nRadioButton==-1)?"":"none";}}}
function getRenter(Span,renterBefore){var renter="";var PropData=Span.parentNode.id.split("_");for(var k in PropData)PropData[k]=parseInt(PropData[k]);var propName=Span.parentNode.previousSibling.firstChild.innerHTML;var monthClicked=PropData[1];var dayInClicked=parseInt(Span.innerHTML.split(" ")[0].replace(/^0/, "" ) );
var yrClicked=PropData[2];var inDateClicked=new Date(yrClicked+2000,monthClicked-1,dayInClicked).getTime();outer:for(var i=0;i<CalData.length-1;i++){if(CalData[i][0]==propName){var Bookings=CalData[i].slice(1);for(var k=0;k<Bookings.length;k++){var firstDayOfBooking=new Date(Bookings[k][0][2]+2000,Bookings[k][0][0]-1,Bookings[k][0][1]).getTime();var lastDayOfBooking=new Date(Bookings[k][0][5]+2000,Bookings[k][0][3]-1,Bookings[k][0][4]).getTime();if(inDateClicked>=firstDayOfBooking&&inDateClicked<lastDayOfBooking){renter=Bookings[k][4].toText();if(renter)renter=(renterBefore)?renter+": ":": "+renter;break outer;}}}}
return renter;}
function getNextSpan(propNum,ckInMon,ckInYr){this.nextMon++;if(this.nextMon>12){this.nextMon=1;this.nextYr++;}
var NextTd=document.getElementById(propNum+"_"+this.nextMon+"_"+this.nextYr);if(NextTd){if(NextTd.firstChild&&NextTd.firstChild.tagName)ThisSpan=NextTd.firstChild;else if(NextTd.firstChild&&NextTd.firstChild.nextSibling&&NextTd.firstChild.nextSibling.tagName)ThisSpan=NextTd.firstChild.nextSibling;}
else
var ThisSpan=null;return ThisSpan;}
function highlight(Span,on){function subDisable(){Span.className="calOff";Span.title="";}
var SpanOld=this.SpanOld;var settingCkOut=(SpanOld);if(settingCkOut){if(on){if(Span.className=="calOpen"||Span.className=="calOff"){var pNameCkIn=parseInt(SpanOld.parentNode.id.split("_")[0]);var ckInMon=parseInt(SpanOld.parentNode.id.split("_")[1]);var ckInDay=parseInt(SpanOld.innerHTML.replace(/^0/, "" ) );
var ckInYr=parseInt(SpanOld.parentNode.id.split("_")[2]);var pNameCkOut=parseInt(Span.parentNode.id.split("_")[0]);var ckOutMon=parseInt(Span.parentNode.id.split("_")[1]);var ckOutDay=parseInt(Span.innerHTML.replace(/^0/, "" ) );
var ckOutYr=parseInt(Span.parentNode.id.split("_")[2]);var ckInDate=new Date(ckInYr+2000,ckInMon-1,ckInDay).getTime();var ckOutDate=new Date(ckOutYr+2000,ckOutMon-1,ckOutDay).getTime();if(pNameCkIn==pNameCkOut){var foundBooking=false;this.nextMon=ckInMon;this.nextYr=ckInYr;var ThisSpan=null;if(SpanOld.nextSibling&&SpanOld.nextSibling.tagName)ThisSpan=SpanOld.nextSibling;else if(SpanOld.nextSibling&&SpanOld.nextSibling.nextSibling&&SpanOld.nextSibling.nextSibling.tagName)ThisSpan=SpanOld.nextSibling.nextSibling;else ThisSpan=this.getNextSpan(pNameCkIn,ckInMon,ckInYr);while(ThisSpan&&ThisSpan!=Span){if(ThisSpan.className=="calBooked"||ThisSpan.className=="calPending"){foundBooking=true;break;}
if(ThisSpan.nextSibling&&ThisSpan.nextSibling.tagName)ThisSpan=ThisSpan.nextSibling;else if(ThisSpan.nextSibling&&ThisSpan.nextSibling.nextSibling&&ThisSpan.nextSibling.nextSibling.tagName)ThisSpan=ThisSpan.nextSibling.nextSibling;else ThisSpan=this.getNextSpan(pNameCkIn,ckInMon,ckInYr);}
if(ckOutDate>ckInDate&&!foundBooking){Span.className="calActive";Span.title=this.Msg.ckOut;}
else
subDisable();}
else
subDisable();}}
else{if(Span.className=="calActive"){Span.className="calOpen";Span.title="";}}}
else{Span.className="calOpen";if(on)Span.title=this.Msg.ckIn;else
Span.title="";}
return true;}
function setDates(Span,evt){cancelEvt(evt);if(Span.className!="calOff"){if(this.SpanOld&&Span.className=="calActive"){Cal.SpanOld.className="calOpen";Span.className="calOpen";Cal.getNewResGUI(Span,evt);Cal.SpanIn=Cal.SpanOld;Cal.SpanOut=Span;Cal.SpanOld=null;}
else{if(Span.className=="calOpen"){Span.className="calCkIn";this.SpanOld=Span;var propName=Span.parentNode.previousSibling.firstChild.innerHTML;Span.title=this.Msg.restart;}
else{Span.className="calOpen";this.SpanOld=null;Span.title=this.Msg.ckIn;}}}
else if(this.SpanOld){var propName=this.SpanOld.parentNode.previousSibling.firstChild.innerHTML;alert("To set the check-out date, you must click a "+propName+" date that is past the check-in date that you've already established. In addition, there must be no other bookings between the check-in and check-out dates.\n\nTIP: Need to reset & start over? Click the background reset...");}}
function setActualDates(Form,newCkInDate,newCkOutDate){var CkInActualArr=this.getValidDates(Form.Checkin_Date_Actual,"Actual Checkin");if(CkInActualArr==null)return false;var CkOutActualArr=this.getValidDates(Form.Checkout_Date_Actual,"Actual Checkout");if(CkOutActualArr==null)return false;var CkInDateActual=new Date(CkInActualArr[2]+2000,CkInActualArr[0]-1,CkInActualArr[1]);var newCkInDateActual=CkInDateActual.getTime();ckInActualOffset=parseInt((newCkInDateActual-newCkInDate)/86400000);var CkOutDateActual=new Date(CkOutActualArr[2]+2000,CkOutActualArr[0]-1,CkOutActualArr[1]);var newCkOutDateActual=CkOutDateActual.getTime();ckOutActualOffset=parseInt((newCkOutDate-newCkOutDateActual)/86400000);if(ckInActualOffset<0){alert("Sorry, the actual check-in date \""+Form.Checkin_Date_Actual.value+"\" is before the display check-in date. "+this.Msg.actual);return false;}
else if(ckOutActualOffset<0){alert("Sorry, the actual check-out date \""+Form.Checkout_Date_Actual.value+"\" is after the display check-out date. "+this.Msg.actual);return false;}
else if(newCkInDateActual>newCkOutDateActual){alert("Sorry, but the actual check-in date \""+Form.Checkin_Date_Actual.value+"\" is after than the actual check-out date \""+Form.Checkout_Date_Actual.value+"\".");return false;}
return[ckInActualOffset,ckOutActualOffset];}
function getValidDates(DateField,description){var goodDates=1;var dateRE=/^\d{1,2}\/{1}\d{1,2}\/{1}\d{1,2}$/;var date=DateField.value;if( !dateRE.test(date)){goodDates=0;}
if(goodDates){var Dates=date.split("/");for(var i in Dates)Dates[i]=parseInt(Dates[i].replace(/^0/, "" ) );}
else
var Dates=null;return Dates;}
function changeDate(ThisField,otherFieldID,blurEvt,increment,decrement,displayDates){if(!increment)increment=0;if(!decrement)decrement=0;if(increment||decrement||blurEvt){var dateRE=/^\d{1,2}\/{1}\d{1,2}\/{1}\d{1,2}$/;if( !dateRE.test(ThisField.value)){alert("Unable to change date \""+ThisField.value+"\". It must be in the mm/dd/yy format, and mm, dd & yy must be digits.");ThisField.value=ThisField.defaultValue;ThisField.focus();return false;}
var ThisDate=ThisField.value.split("/");for(var i=0;i<ThisDate.length;i++)ThisDate[i]=parseInt(ThisDate[i].replace(/^0/, "" ) );
if(increment)ThisDate[1]+=1;else if(decrement)ThisDate[1]+=-1;var NewDate=new Date(ThisDate[2]+2000,ThisDate[0]-1,ThisDate[1]);ThisField.value=(NewDate.getMonth()+1)+"/"+NewDate.getDate()+"/"+(NewDate.getFullYear()-2000);var OtherDate=document.getElementById(otherFieldID).value.split("/");for(var i=0;i<OtherDate.length;i++)OtherDate[i]=parseInt(OtherDate[i].replace(/^0/, "" ) );
var otherDate=new Date(OtherDate[2]+2000,OtherDate[0]-1,OtherDate[1]).getTime();var spread=(ThisField.name.indexOf("Checkin_")==0)?otherDate-NewDate.getTime():NewDate.getTime()-otherDate;var nNights=parseInt(spread)/86400000;document.getElementById(((displayDates)?"nNightsDisplayID":"nNightsActualID")).innerHTML=nNights;return true;}}
function getWinWid(){var winWid;try{winWid=(IE)?document.body.clientWidth:window.innerWidth;}
catch(Err){winWid=0;}
return winWid;}
function getNumNights(StartDate,EndDate){var dateDiffMS=EndDate.getTime()-StartDate.getTime();return parseInt(dateDiffMS/86400000);}
function getDayOfWeek(index,nChars){var arrWeekDay=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var theDay=arrWeekDay[index];return(nChars)?theDay.substring(0,nChars):theDay;}
function getMonthName(index,fullName){var arrMonth=["January","February","March","April","May","June","July","August","September","October","November","December"];var month=arrMonth[index-1];return(fullName)?month:month.substring(0,3);}
function getNumDaysInMonth(month,year){var leapYear=false;if(year%4!=0)leapYear=false;else if(year%400==0)leapYear=true;else if(year%100==0)leapYear=false;else leapYear=true;var nDays=31;if(month==4||month==6||month==9||month==11)nDays=30;else if(month==2)nDays=(leapYear)?29:28;return nDays;}
function toHTM(){var str=this.toString();str=str.replace(/^\s*|\s*$/g, "" );
str=str.replace(/^\n*|\n*$/g, "" );
str=str.replace(/\r\n/g, "<br>" );
str=str.replace(/\r/g, "<br>" );
str=str.replace(/\n/g, "<br>" );
str=str.replace(/\"/g, "&#34;" );
str=str.replace(/\'/g, "&#39;" );
return str;}
String.prototype.toHTM=toHTM;function toText(){var str=this.toString();str=str.replace(/<br>/gi, "\r\n" );
str=str.replace(/&#34;/g, "\"" );
str=str.replace(/&#39;/g, "'" );
str=str.replace(/&nbsp;/g, " " );
str=str.replace(/&amp;/g, "&" );
return str;}
String.prototype.toText=toText;function cancelEvt(evt){if(window.event&&window.event.cancelBubble!=null)window.event.cancelBubble=true;else
evt.stopPropagation();}
function recordModifications(Form){var Now=new Date();eval(Form.EditedJS.defaultValue);var CalDataInitial=CalData;var CalDataInitialHT=new Array();eval(Form.EditedJS.value);var CalDataFinal=CalData;var CalDataFinalHT=new Array();var htmNew="",htmEdited="",htmDeleted="";for(var i=0;i<CalDataInitial.length-1;i++){var PropertyInitial=CalDataInitial[i];var propertyInitialName=CalDataInitial[i][0];CalDataInitialHT[propertyInitialName]=new Array();for(var k=1;k<PropertyInitial.length;k++){var creationDate=PropertyInitial[k][6].toString();CalDataInitialHT[propertyInitialName][creationDate]=PropertyInitial[k];}}
for(var i=0;i<CalDataFinal.length-1;i++){var PropertyFinal=CalDataFinal[i];var propertyFinalName=CalDataFinal[i][0];CalDataFinalHT[propertyFinalName]=new Array();for(var k=1;k<PropertyFinal.length;k++){var creationDate=PropertyFinal[k][6].toString();CalDataFinalHT[propertyFinalName][creationDate]=PropertyFinal[k];}}
for(var propertyFinalName in CalDataFinalHT){var PropertyFinal=CalDataFinalHT[propertyFinalName];for(var creationDate in PropertyFinal){if(CalDataInitialHT[propertyFinalName][creationDate]){if(CalDataInitialHT[propertyFinalName][creationDate].toString()!=CalDataFinalHT[propertyFinalName][creationDate].toString()){var BookingInitial=CalDataInitialHT[propertyFinalName][creationDate];var BookingFinal=CalDataFinalHT[propertyFinalName][creationDate];var CkInDateInitial=new Date(BookingInitial[0][2]+2000,BookingInitial[0][0]-1,BookingInitial[0][1]);var ckInDateInitialMS=CkInDateInitial.getTime();var ckInDayOfWeekInitial=Cal.getDayOfWeek(CkInDateInitial.getDay(),3);var CkInDateFinal=new Date(BookingFinal[0][2]+2000,BookingFinal[0][0]-1,BookingFinal[0][1]);var ckInDateFinalMS=CkInDateFinal.getTime();var ckInDayOfWeekFinal=Cal.getDayOfWeek(CkInDateFinal.getDay(),3);var CkOutDateInitial=new Date(BookingInitial[0][5]+2000,BookingInitial[0][3]-1,BookingInitial[0][4]);var ckOutDateInitialMS=CkOutDateInitial.getTime();var ckOutDayOfWeekInitial=Cal.getDayOfWeek(CkOutDateInitial.getDay(),3);var CkOutDateFinal=new Date(BookingFinal[0][5]+2000,BookingFinal[0][3]-1,BookingFinal[0][4]);var ckOutDateFinalMS=CkOutDateFinal.getTime();var ckOutDayOfWeekFinal=Cal.getDayOfWeek(CkOutDateFinal.getDay(),3);var nNightsInitial=Cal.getNumNights(CkInDateInitial,CkOutDateInitial);var nNightsFinal=Cal.getNumNights(CkInDateFinal,CkOutDateFinal);var CkInDateInitialActual=new Date(BookingInitial[0][2]+2000,BookingInitial[0][0]-1,BookingInitial[0][1]+BookingInitial[0][6]);var ckInDateInitialActualMS=CkInDateInitialActual.getTime();var ckInDayOfWeekInitialActual=Cal.getDayOfWeek(CkInDateInitialActual.getDay(),3);var CkInDateFinalActual=new Date(BookingFinal[0][2]+2000,BookingFinal[0][0]-1,BookingFinal[0][1]+BookingFinal[0][6]);var ckInDateFinalActualMS=CkInDateFinalActual.getTime();var ckInDayOfWeekFinalActual=Cal.getDayOfWeek(CkInDateFinalActual.getDay(),3);var CkOutDateInitialActual=new Date(BookingInitial[0][5]+2000,BookingInitial[0][3]-1,BookingInitial[0][4]-BookingInitial[0][7]);var ckOutDateInitialActualMS=CkOutDateInitialActual.getTime();var ckOutDayOfWeekInitialActual=Cal.getDayOfWeek(CkOutDateInitialActual.getDay(),3);var CkOutDateFinalActual=new Date(BookingFinal[0][5]+2000,BookingFinal[0][3]-1,BookingFinal[0][4]-BookingFinal[0][7]);var ckOutDateFinalActualMS=CkOutDateFinalActual.getTime();var ckOutDayOfWeekFinalActual=Cal.getDayOfWeek(CkOutDateFinalActual.getDay(),3);htmEdited+="<br><table border='0' cellspacing='0' cellpadding='0' class='eMailOuter'><tr><td class='eMailOuter'><table border='0' cellspacing='0' cellpadding='0'>";if(CalDataInitial.length>2)htmEdited+="<tr><td class='eMailLeftCol'>Rental: </td><td class='eMailRightCol'>"+propertyFinalName+"</td></tr>";htmEdited+="<tr><td class='eMailLeftCol'>Status: </td><td class='eMailRightCol'>";if(BookingInitial[1]==BookingFinal[1])htmEdited+=Cal.getBookingType(BookingFinal[1]);else htmEdited+="<span class='eMailModified'><nobr>"+Cal.getBookingType(BookingInitial[1])+"</nobr> &rarr; <nobr>"+Cal.getBookingType(BookingFinal[1])+"</nobr></span>";htmEdited+="</td></tr><tr><td class='eMailLeftCol'>Display Dates: </td><td class='eMailRightCol'>";if(ckInDateInitialMS==ckInDateFinalMS&&ckOutDateInitialMS==ckOutDateFinalMS)htmEdited+=ckInDayOfWeekFinal+" "+BookingFinal[0][0]+"/"+BookingFinal[0][1]+"/"+BookingFinal[0][2]+" to "+ckOutDayOfWeekFinal+" "+BookingFinal[0][3]+"/"+BookingFinal[0][4]+"/"+BookingFinal[0][5]+"; "+nNightsFinal+" nights";else htmEdited+="<span class='eMailModified'><nobr>"+ckInDayOfWeekInitial+" "+BookingInitial[0][0]+"/"+BookingInitial[0][1]+"/"+BookingInitial[0][2]+" to "+ckOutDayOfWeekInitial+" "+BookingInitial[0][3]+"/"+BookingInitial[0][4]+"/"+BookingInitial[0][5]+"; "+nNightsInitial+" nights</nobr><br>&darr;<br><nobr>"+ckInDayOfWeekFinal+" "+BookingFinal[0][0]+"/"+BookingFinal[0][1]+"/"+BookingFinal[0][2]+" to "+ckOutDayOfWeekFinal+" "+BookingFinal[0][3]+"/"+BookingFinal[0][4]+"/"+BookingFinal[0][5]+"; "+nNightsFinal+" nights</nobr></span>";htmEdited+="</td></tr><tr><td class='eMailLeftCol'>Actual Dates: </td><td class='eMailRightCol'>";if(ckInDateInitialActualMS==ckInDateFinalActualMS&&ckOutDateInitialActualMS==ckOutDateFinalActualMS)htmEdited+=ckInDayOfWeekInitialActual+" "+(CkInDateInitialActual.getMonth()+1)+"/"+CkInDateInitialActual.getDate()+"/"+(CkInDateInitialActual.getFullYear()-2000)+" to "+ckOutDayOfWeekInitialActual+" "+(CkOutDateInitialActual.getMonth()+1)+"/"+CkOutDateInitialActual.getDate()+"/"+(CkOutDateInitialActual.getFullYear()-2000)+"; "+(nNightsInitial-BookingInitial[0][6]-BookingInitial[0][7])+" nights";else htmEdited+="<span class='eMailModified'><nobr>"+ckInDayOfWeekInitialActual+" "+(CkInDateInitialActual.getMonth()+1)+"/"+CkInDateInitialActual.getDate()+"/"+(CkInDateInitialActual.getFullYear()-2000)+" to "+ckOutDayOfWeekInitialActual+" "+(CkOutDateInitialActual.getMonth()+1)+"/"+CkOutDateInitialActual.getDate()+"/"+(CkOutDateInitialActual.getFullYear()-2000)+"; "+(nNightsInitial-BookingInitial[0][6]-BookingInitial[0][7])+" nights</nobr><br>&darr;<br><nobr>"+ckInDayOfWeekFinalActual+" "+(CkInDateFinalActual.getMonth()+1)+"/"+CkInDateFinalActual.getDate()+"/"+(CkInDateFinalActual.getFullYear()-2000)+" to "+ckOutDayOfWeekFinalActual+" "+(CkOutDateFinalActual.getMonth()+1)+"/"+CkOutDateFinalActual.getDate()+"/"+(CkOutDateFinalActual.getFullYear()-2000)+"; "+(nNightsFinal-BookingFinal[0][6]-BookingFinal[0][7])+" nights</nobr></span>";htmEdited+="</td></tr><tr><td class='eMailLeftCol'>Client: </td><td class='eMailRightCol'>";if(BookingInitial[4]==BookingFinal[4])htmEdited+=BookingInitial[4];else htmEdited+="<span class='eMailModified'><nobr>"+((BookingInitial[4])?BookingInitial[4]:"No Name")+"</nobr> &rarr; <nobr>"+((BookingFinal[4])?BookingFinal[4]:"No Name")+"</nobr></span>";htmEdited+="</td></tr><tr><td class='eMailLeftCol'>Notes: </td><td class='eMailRightCol'>";if(BookingInitial[5]==BookingFinal[5])htmEdited+=BookingInitial[5];else htmEdited+="<span class='eMailModified'>"+((BookingInitial[5])?BookingInitial[5]:"No Notes")+"<br>&darr;<br>"+((BookingFinal[5])?BookingFinal[5]:"No Notes")+"</span>";htmEdited+="</td></tr><tr><td class='eMailLeftCol'>Created: </td><td class='eMailRightCol'>"+new Date(BookingFinal[6]).toLocaleString()+"</td></tr><tr><td class='eMailLeftCol'>Modified: </td><td class='eMailRightCol'>"+new Date(BookingFinal[3]).toLocaleString()+"</td></tr></table></td></tr></table>";}}
else{var Booking=CalDataFinalHT[propertyFinalName][creationDate];var CkInDate=new Date(Booking[0][2]+2000,Booking[0][0]-1,Booking[0][1]);var ckInDayOfWeek=Cal.getDayOfWeek(CkInDate.getDay(),3);var CkOutDate=new Date(Booking[0][5]+2000,Booking[0][3]-1,Booking[0][4]);var ckOutDayOfWeek=Cal.getDayOfWeek(CkOutDate.getDay(),3);var nNights=Cal.getNumNights(CkInDate,CkOutDate);var CkInDateActual=new Date(Booking[0][2]+2000,Booking[0][0]-1,Booking[0][1]+Booking[0][6]);var ckInDayOfWeekActual=Cal.getDayOfWeek(CkInDateActual.getDay(),3);var CkOutDateActual=new Date(Booking[0][5]+2000,Booking[0][3]-1,Booking[0][4]-Booking[0][7]);var ckOutDayOfWeekActual=Cal.getDayOfWeek(CkOutDateActual.getDay(),3);htmNew+="<br><table border='0' cellspacing='0' cellpadding='0' class='eMailOuter'><tr><td class='eMailOuter'><table border='0' cellspacing='0' cellpadding='0'>";if(CalDataInitial.length>2)htmNew+="<tr><td class='eMailLeftCol'>Rental: </td><td class='eMailRightCol'>"+propertyFinalName+"</td></tr>";htmNew+="<tr><td class='eMailLeftCol'>Status: </td><td class='eMailRightCol'>"+Cal.getBookingType(Booking[1])+"</td></tr><tr><td class='eMailLeftCol'>Display Dates: </td><td class='eMailRightCol'>"+ckInDayOfWeek+" "+Booking[0][0]+"/"+Booking[0][1]+"/"+Booking[0][2]+" to "+ckOutDayOfWeek+" "+Booking[0][3]+"/"+Booking[0][4]+"/"+Booking[0][5]+"; "+nNights+" nights</td></tr><tr><td class='eMailLeftCol'>Actual Dates: </td><td class='eMailRightCol'>"+ckInDayOfWeekActual+" "+(CkInDateActual.getMonth()+1)+"/"+CkInDateActual.getDate()+"/"+(CkInDateActual.getFullYear()-2000)+" to "+ckOutDayOfWeekActual+"/"+(CkOutDateActual.getMonth()+1)+"/"+CkOutDateActual.getDate()+"/"+(CkOutDateActual.getFullYear()-2000)+"; "+(nNights-Booking[0][6]-Booking[0][7])+" nights</td></tr><tr><td class='eMailLeftCol'>Client: </td><td class='eMailRightCol'>"+Booking[4]+"</td></tr><tr><td class='eMailLeftCol'>Notes: </td><td class='eMailRightCol'>"+Booking[5]+"</td></tr><tr><td class='eMailLeftCol'>Created: </td><td class='eMailRightCol'>"+new Date(Booking[6]).toLocaleString()+"</td></tr></table></td></tr></table>";}}}
for(var propertyInitialName in CalDataInitialHT){var PropertyInitial=CalDataInitialHT[propertyInitialName];for(var creationDate in PropertyInitial){if(!CalDataFinalHT[propertyInitialName][creationDate]){var Booking=CalDataInitialHT[propertyInitialName][creationDate];var CkInDate=new Date(Booking[0][2]+2000,Booking[0][0]-1,Booking[0][1]);var ckInDayOfWeek=Cal.getDayOfWeek(CkInDate.getDay(),3);var CkOutDate=new Date(Booking[0][5]+2000,Booking[0][3]-1,Booking[0][4]);var ckOutDayOfWeek=Cal.getDayOfWeek(CkOutDate.getDay(),3);var autoDeletedMS=new Date(Now.getFullYear(),Now.getMonth()-this.Settings.pastMonthsAdmin,1).getTime();if(CkOutDate.getTime()<autoDeletedMS)continue;var nNights=Cal.getNumNights(CkInDate,CkOutDate);var CkInDateActual=new Date(Booking[0][2]+2000,Booking[0][0]-1,Booking[0][1]+Booking[0][6]);var ckInDayOfWeekActual=Cal.getDayOfWeek(CkInDateActual.getDay(),3);var CkOutDateActual=new Date(Booking[0][5]+2000,Booking[0][3]-1,Booking[0][4]-Booking[0][7]);var ckOutDayOfWeekActual=Cal.getDayOfWeek(CkOutDateActual.getDay(),3);htmDeleted+="<br><table border='0' cellspacing='0' cellpadding='0' class='eMailOuter'><tr><td class='eMailOuter'><table border='0' cellspacing='0' cellpadding='0'>";if(CalDataInitial.length>2)htmDeleted+="<tr><td class='eMailLeftCol'>Rental: </td><td class='eMailRightCol'>"+propertyInitialName+"</td></tr>";htmDeleted+="<tr><td class='eMailLeftCol'>Status: </td><td class='eMailRightCol'>"+Cal.getBookingType(Booking[1])+"</td></tr><tr><td class='eMailLeftCol'>Display Dates: </td><td class='eMailRightCol'>"+ckInDayOfWeek+" "+Booking[0][0]+"/"+Booking[0][1]+"/"+Booking[0][2]+" to "+ckOutDayOfWeek+" "+Booking[0][3]+"/"+Booking[0][4]+"/"+Booking[0][5]+"; "+nNights+" nights</td></tr><tr><td class='eMailLeftCol'>Actual Dates: </td><td class='eMailRightCol'>"+ckInDayOfWeekActual+" "+(CkInDateActual.getMonth()+1)+"/"+CkInDateActual.getDate()+"/"+(CkInDateActual.getFullYear()-2000)+" to "+ckOutDayOfWeekActual+"/"+(CkOutDateActual.getMonth()+1)+"/"+CkOutDateActual.getDate()+"/"+(CkOutDateActual.getFullYear()-2000)+"; "+(nNights-Booking[0][6]-Booking[0][7])+" nights</td></tr><tr><td class='eMailLeftCol'>Client: </td><td class='eMailRightCol'>"+Booking[4]+"</td></tr><tr><td class='eMailLeftCol'>Notes: </td><td class='eMailRightCol'>"+Booking[5]+"</td></tr><tr><td class='eMailLeftCol'>Created: </td><td class='eMailRightCol'>"+new Date(Booking[6]).toLocaleString()+"</td></tr><tr><td class='eMailLeftCol'>Last Modified: </td><td class='eMailRightCol'>"+new Date(Booking[3]).toLocaleString()+"</td></tr></table></td></tr></table>";}}}
var output=((htmNew)?"<div class='eMailSectionTitle'>New Bookings:</div>"+htmNew+"<br><br>":"")+((htmEdited)?"<div class='eMailSectionTitle'>Modified Bookings:</div>"+htmEdited+"<br><br>":"")+((htmDeleted)?"<div class='eMailSectionTitle'>Deleted Bookings:</div>"+htmDeleted:"");output+="<div class='eMailSectionTitle' style='margin:30px 0px 0px 0px;'>Read-All URL:</div><div style='margin:5px 0px 0px 20px;'><a href='"+Cal.readAllURL+"'>"+Cal.readAllURL+"</a></div>";Form.Calendar_Modifications.value=output;Form.Calendar_Modification_Time.value=Now.toLocaleString()+"<br>("+Cal.userWithWritePrivileges+"'s Time Zone)";}
function publish(){if(Cal.dataUnmodified())alert("You have not edited the calendar, edit the calendar then press Publish");else{var Form=document.AspForm;if(Cal.userWithWritePrivileges!="Demo User"){Form.ASP_Job.value="File_Writer";Form.Which_Button.value="js";var PublishCalendarBot=document.getElementById("PublishCalendarBot");if(PublishCalendarBot)document.getElementById("PublishCalendarBot").disabled=true;var PublishCalendarTop=document.getElementById("PublishCalendarTop");if(PublishCalendarTop)document.getElementById("PublishCalendarTop").disabled=true;Cal.recordModifications(Form);Form.submit();DW.removeWin();}
else
alert("Sorry, but Publishing has been disabled for the demo...");}}
function setPublishButton(){var PublishCalendarTopStyle=document.getElementById("PublishCalendarTop");var PublishCalendarBotStyle=document.getElementById("PublishCalendarBot");if(this.dataUnmodified()){PublishCalendarTopStyle.className="calButton";PublishCalendarBotStyle.className="calButton";}
else{PublishCalendarTopStyle.className="calButtonOn";PublishCalendarBotStyle.className="calButtonOn";}}
function dataUnmodified(){var Form=document.AspForm;eval(Form.EditedJS.defaultValue);var CalDataFinal=CalData.slice(0,CalData.length-1);var calDataFinal=CalDataFinal.toString();eval(Form.EditedJS.value);var CalDataInitial=CalData.slice(0,CalData.length-1);var calDataInitial=CalDataInitial.toString();calDataInitial=calDataInitial.replace(/,\d{13,},/g, "" ).replace(/\r/g, "" ).replace(/\n/g, "" );
calDataFinal=calDataFinal.replace(/,\d{13,},/g, "" ).replace(/\r/g, "" ).replace(/\n/g, "" );
return(calDataInitial==calDataFinal);}
function logOff(){var logOff=1;var Form=document.AspForm;if(!Cal.dataUnmodified()){logOff=(confirm("You have edited the calendar without publishing. Your unpublished edits will be lost upon logging out. Do you still want to log off?\n\n1. Click OK to log off, your unpublished edits will be lost.\n2. Click Cancel and you will stay logged-in."))?1:0;if(logOff)Form.EditedJS.value=Form.EditedJS.defaultValue;}
if(logOff){document.getElementById("LogOffCalendarTop").disabled=true;document.getElementById("LogOffCalendarBot").disabled=true;document.location.replace(fileName+"?logoff=yes");}}
function getBookingType(nBooking){switch(nBooking){case 1:return "Confirmed";case 2:return "Pending";default:alert("Switch/Case Error at Cal.getBookingType");return "";}}
function clear(){if(window.Cal&&Cal.SpanOld){Cal.SpanOld.className="calOpen";Cal.SpanOld.title="";Cal.SpanOld=null;}}} Cal=new Calendar();