// Do not edit this compressed file. Download, rename & edit the master version of it.
function Calendar(){this.Settings=new Array();this.Settings.greeting="Aloha";this.Settings.activateActualDates=1;this.Settings.activateSpecials=0;this.Settings.compressData=1;try{var test=CalData.length;}
catch(Err){if(qStr&&qStr.getVal("ms"))document.location.href="calendar.aspx";else{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.getReadAllWin=getReadAllWin;this.getRenter=getRenter;this.getValidDates=getValidDates;this.getWinWid=getWinWid;this.highlight=highlight;this.init=init;this.logOff=logOff;this.morphView=morphView;this.publish=publish;this.publishRightClick=publishRightClick;this.recordModifications=recordModifications;this.sendMail=sendMail;this.setActualDates=setActualDates;this.setDates=setDates;this.toHTM=toHTM;this.toText=toText;this.updateDisplay=updateDisplay;this.pollServer=pollServer;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="Click to set new check-in date";this.Msg.ckOut="Click to set check-out date; click background to reset";this.Msg.confirmed="Confirmed Reservation";this.Msg.confirmedShort="Confirmed";this.Msg.open="Available for check-in";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.client="Name of Client";this.Msg.helpCache="Understanding cache & why it can cause problems";this.Msg.logOff="All Finished? Log-off to end your session";this.Msg.noEdit="No changes were recorded because you did not modify any information";this.Msg.notes="Notes or comments (if any)";this.Msg.pending="Pending Reservation (on hold)";this.Msg.pendingShort="Pending";this.Msg.pf="Load printer-friendly version of this page";this.Msg.publish="Save your new calendar data to the web";this.Msg.reset="Click a check-out date; click background to reset";this.Msg.sendMail="Send e-mail to selected Administrator(s)";this.Msg.special="Dates available for discount";this.Msg.today="Today";this.Msg.write="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.calSpecial=0;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 pollServer(){var debug=0;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;}}}
clearTimeout(Cal.timer);if(this.Request){if(this.userWithWritePrivileges&&this.downloadedData){this.Request.onreadystatechange=function(){if(Cal.Request.readyState==4){if(Cal.Request.status==200){eval(Cal.Request.responseText);var admin_user=admin_user.replace(/_/, " " );
if(admin_user&&Cal.userWithWritePrivileges!=admin_user){DeleteCookie(Cal.userWithWritePrivileges);alert("Sorry but "+admin_user+" has just forced a log-in and is now the Administrator! In order to protect the integrity of our data, our calendar software does not allow concurrent administrators (two or more users editing the same data at the same time). Please contact "+admin_user+" if you have any questions.\n\n==> You will now be logged-off as Administrator.");document.location.replace(fileName+"?logoff=yes&forcedOut=yes");}
if(debug)self.status=Cal.logFile+" retrieved "+new Date().toLocaleString()+"; admin_user="+admin_user;}
else{if(debug)alert("Cal.pollServer() preloader encountered an error retrieving "+Cal.logFile+":\n Status: "+Cal.Request.status+"\n StatusText: "+Cal.Request.statusText);}
Cal.timer=setTimeout("Cal.pollServer();",5000);}}
this.Request.open("GET",Cal.logFile+"?"+Math.random());this.Request.send(null);}
else{this.downloadedData=1;this.Request.onreadystatechange=function(){if(Cal.Request.readyState==4){if(Cal.Request.status==200){var CalDataInitial=CalData;eval(Cal.Request.responseText);var CalDataFinal=CalData;if(CalDataInitial.toString()!=CalDataFinal.toString()){document.getElementById("CalID").innerHTML=Cal.getCal();Cal.init();}
if(debug)self.status=Cal.dataFile+" retrieved "+new Date().toLocaleString();}
else{if(debug)alert("Cal.pollServer() preloader encountered an error retrieving "+Cal.dataFile+":\n Status: "+Cal.Request.status+"\n StatusText: "+Cal.Request.statusText);}
Cal.timer=setTimeout("Cal.pollServer();",5000);}}
this.Request.open("GET",Cal.dataFile+"?"+Math.random());this.Request.send(null);}}
else if(debug)self.status="Browser does not support the HttpRequest Request Protocol";}
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;if(this.Settings.activateActualDates){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"||Spans[i].className=="calSpecial"){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;case 3:existingBookClass="calSpecial";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;case 3:newClass="calSpecial";break;default:alert("Switch/Case Error at Cal.editReservation: switch( newBookNum )");}
var spanOn="<span onClick='if( window.Cal ) Cal.getEditResGUI( this, event );' oncontextmenu='if( window.Cal ) { return Cal.getReadAllWin( this, event ); }' 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();return false;}
else{eval(newCalData);document.getElementById("CalID").innerHTML=Cal.getCal();DW.removeWin();Cal.init();return false;}}
function getEditResGUI(Span,evt){if(!evt)evt=window.event;var launchEditWin=(this.SpanOld==null);if(launchEditWin){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];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);if(this.Settings.activateActualDates){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' name='delBooking' title='"+this.Msg.del+"' /> I'd like to Delete this Reservation</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>";var rbBooked="&nbsp; <input type='radio' name='BookType' value='1' title='I&#39;m changing to "+this.Msg.bkTypeConf+"' />Confirmed; &nbsp;";var rbPending="&nbsp; <input type='radio' name='BookType' value='2' title='I&#39;m changing to "+this.Msg.bkTypePend+"' />Pending; &nbsp;";var rbNoChange="&nbsp; <input type='radio' name='BookType' value='0' checked title='"+this.Msg.bkTypeNC+"' />No change; &nbsp;";var rbSpecial=(this.Settings.activateSpecials)?"&nbsp; <input type='radio' name='BookType' value='3' title='"+this.Msg.bkTypeSpc+"' />Special; &nbsp;":"";switch(bookType){case 1:gui+=rbPending+rbSpecial;dwTitle=Cal.getBookingType(1)+" Reservation";break;case 2:gui+=rbBooked+rbSpecial;dwTitle=Cal.getBookingType(2)+" Reservation";break;case 3:gui+=rbBooked+rbPending;dwTitle=Cal.getBookingType(3);break;default:alert("Switch/Case Error at Cal.getEditResGUI while writing BookType radio buttons");}
gui+=rbNoChange+"</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>";if(this.Settings.activateActualDates)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' style='margin:0px 4px 0px 0px;' title='"+this.Msg.butEditOK+"' /><input type='button' value='Cancel' onClick='DW.removeWin();' style='margin:0px 0px 0px 4px;' 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"||ThisSpan.className=="calSpecial")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);}
NewSpan.oncontextmenu=function(event){if(window.Cal){return Cal.getReadAllWin(this,event);}}
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 );' oncontextmenu='if( window.Cal ) { return Cal.getReadAllWin( this, event ); }' 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;case "3":bookClass="calSpecial";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;if(this.Settings.activateActualDates){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();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();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' name='BookType' value='1' checked title='I&#39;m adding "+this.Msg.bkTypeConf+"' />Confirmed; &nbsp;<input type='radio' name='BookType' value='2' title='I&#39;m adding "+this.Msg.bkTypePend+"' />Pending; &nbsp;";if(this.Settings.activateSpecials)gui+="<input type='radio' name='BookType' value='3' title='"+this.Msg.bkTypeSpc+"' />Special";gui+="</td></tr>";if(this.Settings.activateActualDates)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' style='margin:0px 4px 0px 0px;' title='"+this.Msg.butAddOK+"' /><input type='button' value='Cancel' onClick='DW.removeWin();' style='margin:0px 0px 0px 4px;' 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 getCal(){self.status=this.Msg.write;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";var todayIs=this.getDayOfWeek(Today.getDay())+", "+this.getMonthName(thisMonth,1)+" "+thisDay+", "+thisYear;var greeting=this.Settings.greeting+", it's "+todayIs;if(this.userWithWritePrivileges)greeting=this.Settings.greeting+" "+this.userWithWritePrivileges+", you are logged in as Administrator. It's "+todayIs;else if(this.userHasReadAllPrivileges)greeting=this.Settings.greeting+", you have read-all access; click reservations for booking info. It's "+todayIs;htm+="<table align='center' border='0' cellspacing='5' cellpadding='0'>";htm+="<caption class='calGreeting'>"+greeting+"</caption>";htm+="<tr><td colspan='2'><div class='pubCalInstructions' id='PubCalInstructions'><br><br><br><br></div></td></tr>";if(this.userWithWritePrivileges){htm+="<tr><td colspan='2'><div id='AdminCalInstructions'><ul class='calInstructions' style='visibility:hidden;'><li><br></li><li><br></li><li><br></li><li><br></li><li><br></li></ul></div></td></tr>";htm+="<tr><td colspan='2' class='calButtons'><input type='button' id='PublishCalendarTop' value='Publish' />&nbsp;&nbsp;<input type='button' id='LogOffCalendarTop' 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);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:"")+"'>"+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;case 3:openedSpans++;output="<span class='calSpecial'>"+output;this.CarryBookingForward[propName][1]="<span class='calSpecial'>";this.calSpecial=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'><input type='button' id='PublishCalendarBot' value='Publish' />&nbsp;&nbsp;<input type='button' id='LogOffCalendarBot' value='Log Off' /></td></tr>";}
htm+="</table>";htm=htm.replace(/\s<\/span>/g, "</span> " );
htm+="";self.status="";return htm;}
function getReadAllWin(Span,evt){if(!evt)evt=window.event;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];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);if(this.Settings.activateActualDates){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>";if(this.Settings.activateActualDates)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]+"\";' /> "+person+"<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{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].className=="calSpecial"){Spans[i].onclick=function(event){if(window.Cal)Cal.getEditResGUI(this,event);}
Spans[i].oncontextmenu=function(event){if(window.Cal){return Cal.getReadAllWin(this,event);}}
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 AdminCalInstructions=document.getElementById("AdminCalInstructions");if(AdminCalInstructions){var htm="<table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td><ul class='calInstructions'><li>Click an open date to add a new booking</li><li>Click an existing booking to edit or delete it</li><li>Press Publish when you are finished editing</li><li>Remember to Log Off when you are all done</li><li>For more info read these <a href='calendar-help.aspx' onclick='PopUp.openWin( this.href ); return false;' class='cal'>instructions & tips</a></li></ul></td></tr></table>";AdminCalInstructions.innerHTML=htm;}
var PublishCalendarTop=document.getElementById("PublishCalendarTop");PublishCalendarTop.onclick=Cal.publish;PublishCalendarTop.oncontextmenu=Cal.publishRightClick;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.oncontextmenu=Cal.publishRightClick;PublishCalendarBot.title=this.Msg.publish;var LogOffCalendarBot=document.getElementById("LogOffCalendarBot");LogOffCalendarBot.onclick=Cal.logOff;LogOffCalendarBot.title=this.Msg.logOff;}
var PubCalInstructions=document.getElementById("PubCalInstructions");if(PubCalInstructions){var htm="<table align='center' border='0' cellspacing='0' cellpadding='0'><tr><td><fieldset class='calDesignation'><legend class='calDesignation' align='center'>&nbsp;<span onClick='FW.getLogInGUI( event );'>Calendar Designation</span><span onContextmenu='document.location.replace(\"calendar.aspx?pw="+rapw+"\" ); return false;'>s</span>&nbsp;</span></legend><table align='center' border='0' cellspacing='0' cellpadding='10'><tr><td><table align='center' border='0' cellspacing='0' cellpadding='0' class='calInstructions'><tr><td align='right' style='padding:0px 4px 0px 0px;'>Available:</td><td class='calDays calHiRes'>&nbsp;<span class='calOpenPub'>01 02 03</span>&nbsp;</td><td align='right' style='padding:0px 4px 0px 20px;'>Reserved:</td><td class='calDays calHiRes'>&nbsp;<span class='calBooked'>01 02 03</span>&nbsp;</td>";if(this.calPending)htm+="<td align='right' style='padding:0px 4px 0px 20px;'>Pending:</td><td class='calDays calHiRes'>&nbsp;<span class='calPending'>01 02 03</span>&nbsp;</td>";if(this.calSpecial)htm+="<td align='right' style='padding:0px 4px 0px 20px;'>Available for Discount:</td><td class='calDays calHiRes'>&nbsp;<span class='calSpecial'>01 02 03</span>&nbsp;</td>";htm+="</tr></table></td></tr></table></fieldset></td></tr></table>";PubCalInstructions.innerHTML=htm;}
if((this.publicUser||this.userHasReadAllPrivileges)&&!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 class='calOpenPub' title='"+this.Msg.open+"'>"+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"||Spans[i].className=="calSpecial"){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);}}
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);}}
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;case "calSpecial":if(this.userHasReadAllPrivileges&&Spans[i].parentNode.id){Spans[i].onclick=function(event){if(window.Cal){return Cal.getReadAllWin(this,event);}}
Spans[i].onmouseover=function(){if(window.Cal){this.title=Cal.Msg.special;this.style.cursor="pointer";return true;}}}
else
Spans[i].onmouseover=function(){if(window.Cal){this.title=Cal.Msg.special;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);}
self.status="";}
catch(Err){self.status="Initializing Cal.init() method, one moment please...";setTimeout("Cal.init();",250);}}
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"||ThisSpan.className=="calSpecial"){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.reset;}
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>/g, "\r\n" );
str=str.replace(/&#34;/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 publishRightClick(){Cal.publish(1);return false;}
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> &rarr; <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> &rarr; <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(rightClick){var leftClick=(rightClick==1)?false:true;rightClick=!leftClick;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, "" );
calDataFinal=calDataFinal.replace(/,\d{13,},/g, "" );
if((leftClick&&calDataInitial!=calDataFinal)||rightClick){if(Cal.userWithWritePrivileges!="Demo User"){Form.ASP_Job.value="File_Writer";Form.Which_Button.value=(leftClick)?"js":"jsRightClick";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...");}
else
alert("You have not edited the calendar, edit the calendar then press Publish");}
function logOff(){var logOff=1;var Form=document.AspForm;if(Form.EditedJS.value!=Form.EditedJS.defaultValue){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, any 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";case 3:return "Available for Discount";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();