/* Copyright (c) 2006-2007, Apple Inc. All rights reserved. */
/* Compressed JavaScript. Do not modify. */


/* calaccess.js */

function prepare(inAlwaysRun){if(window.unitTestHandler&&(!inAlwaysRun))return true;drawTooltips();server();serverui();gPoofManager=new PoofManager();if($('module_calendars')){var titleLink=Builder.node('a',{href:'#'},["\u00A0"]);titleLink.onclick=invalidate;replaceElementContents('document_title',titleLink);gCalendarViewController=new CalendarViewController();}
else{var isAllDay=getMetaTagValue('apple_appt_allday')=='true';replaceElementContents('appointment_entry_starttime',Loc.getLongDateString(createDateObjFromISO8601(getMetaTagValue('apple_appt_dtstart'),!isAllDay)));gToolbar=new Toolbar();gAppointmentController=new AppointmentController();gToolbar.mChildren.remove.setCallback(gAppointmentController.handleDeleteButtonClick);gToolbar.mChildren.edit.setCallback(gAppointmentController.handleEditButtonClick);gToolbar.mChildren.add.setCallback(gAppointmentController.handleAddButtonClick);var isNewAppt=/notify=appointment_created_message/.test(d.cookie);if(isNewAppt)gAppointmentController.handleEditButtonClick();}
gNotifier=new Notifier();gPopupManager=new PopupManager();gSearchPopup=new SearchPopup();gTooltipManager.mShowTimeout=2500;}
function documentShouldUnload(){if(window.gAppointmentController&&window.gAppointmentController.mEditMode){return Loc.unloadConfirm;}}
function buildDateAndTimeFields(inParent,inDateFieldID,inHourFieldID,inMinuteFieldID,inAMPMFieldID){var minuteIncrements=5;var parentNode=$(inParent);var dateLink=Builder.node('a',{href:'#',id:inDateFieldID},'-');dateLink.onclick=invalidate;parentNode.appendChild(dateLink);var datePicker=new DatePicker(dateLink);var hourPopup=Builder.node('select',{id:inHourFieldID});for(var i=1;i<=12;i++){hourPopup.appendChild(Builder.node('option',{value:''+i},''+i));}
parentNode.appendChild(hourPopup);parentNode.appendChild(d.createTextNode(':'));var minutePopup=Builder.node('select',{id:inMinuteFieldID});for(var i=0;i<60;i+=minuteIncrements){minutePopup.appendChild(Builder.node('option',{value:padNumberStr(i,2)},padNumberStr(i,2)));}
parentNode.appendChild(minutePopup);parentNode.appendChild(d.createTextNode("\u00A0"));var ampmPopup=Builder.node('select',{id:inAMPMFieldID},[Builder.node('option',{value:Loc.ampm[0]},Loc.ampm[0]),Builder.node('option',{value:Loc.ampm[1]},Loc.ampm[1])]);parentNode.appendChild(ampmPopup);return datePicker;}
function getDateFromFields(inDatePicker,inHourField,inMinuteField,inAMPMField){var startDate=new Date(inDatePicker.mSelectedDate.getTime());if(Form.getIntValue(inHourField)==12){startDate.setHours($(inAMPMField).selectedIndex*12);}
else{startDate.setHours(Form.getIntValue(inHourField)+($(inAMPMField).selectedIndex*12));}
startDate.setMinutes(Form.getIntValue(inMinuteField));return startDate;}
function updateAllDayFields(inAllDayField,inDaysField,inHoursField,inMinutesField){var allDay=$(inAllDayField).checked;$(inHoursField).disabled=allDay;$(inMinutesField).disabled=allDay;if(allDay){if(Form.getIntValue(inDaysField)<1)$(inDaysField).value='1';$(inHoursField).value='0';$(inMinutesField).value='00';}}
function buildDurationFields(inParent,inDaysFieldID,inHoursFieldID,inMinutesFieldID){var minuteIncrements=5;parentNode=$(inParent);parentNode.appendChild(Builder.node('input',{type:'text',id:inDaysFieldID,maxlength:'2'}))
parentNode.appendChild(d.createTextNode(Loc.appointment_entry_duration_days))
parentNode.appendChild(Builder.node('select',{id:inHoursFieldID}))
parentNode.appendChild(d.createTextNode(':'));parentNode.appendChild(Builder.node('select',{id:inMinutesFieldID}));for(var i=0;i<24;i++){$(inHoursFieldID).appendChild(Builder.node('option',{value:''+i},''+i));}
for(var i=0;i<60;i+=minuteIncrements){$(inMinutesFieldID).appendChild(Builder.node('option',{value:padNumberStr(i,2)},padNumberStr(i,2)));}}
function getDurationFromFields(inDaysField,inHoursField,inMinutesField){return{days:Form.getIntValue(inDaysField),hours:Form.getIntValue(inHoursField),minutes:Form.getIntValue(inMinutesField)};}
var AppointmentController=Class.create();AppointmentController.prototype={initialize:function(){bindEventListeners(this,['handleEditButtonClick','handleCancelButtonClick','handleDoneButtonClick','handleDeleteButtonClick','handleAddButtonClick','handleAllDayCheckboxClick','handleTimeChanged']);Element.formatElementDateContents('appointment_entry_starttime');this.mAppointment={dtstart:getMetaTagValue('apple_appt_dtstart'),duration:getMetaTagValue('apple_appt_duration'),allDay:(getMetaTagValue('apple_appt_allday')=='true')};var dtstartField=Builder.node('div',{style:'display:none',id:'appointment_entry_starttime_field'});$('appointment_entry_starttime').parentNode.appendChild(dtstartField);this.mDatePicker=buildDateAndTimeFields(dtstartField,'appointment_entry_starttime_date_field','appointment_entry_starttime_hour_field','appointment_entry_starttime_minute_field','appointment_entry_starttime_ampm_field');this.mDatePicker.mSelectedDate=createDateObjFromISO8601(this.mAppointment.dtstart,!this.mAppointment.allDay);this.mDatePicker.updateFromSelection();Event.observe('appointment_entry_starttime_hour_field','change',this.handleTimeChanged);Event.observe('appointment_entry_starttime_minute_field','change',this.handleTimeChanged);Event.observe('appointment_entry_starttime_ampm_field','change',this.handleTimeChanged);if(arguments.length>0)Object.extend(this,arguments[0]);this.addToolbarItems();var entryFormSubmit=function(){this.handleDoneButtonClick();return false;};if($('calendarentry_form'))$('calendarentry_form').onsubmit=entryFormSubmit.bind(this);},addToolbarItems:function(){var tb=gToolbar.mEditToolbar;var ul=gToolbar.addButtonsToToolbar(tb,['done_button','cancel_button']);ul.className='tbactions';gToolbar.setToolbarButtonCallback('done_button',this.handleDoneButtonClick);gToolbar.setToolbarButtonCallback('cancel_button',this.handleCancelButtonClick);},switchToEditor:function(){this.mEditMode=true;$('editing_document_title').value=Element.firstNodeValue('document_title');var startDate=createDateObjFromISO8601(this.mAppointment.dtstart,!this.mAppointment.allDay);this.mDatePicker.mSelectedDate=startDate;this.mDatePicker.updateFromSelection();$('appointment_entry_starttime_hour_field').value=startDate.formatDate('g');$('appointment_entry_starttime_minute_field').value=startDate.formatDate('i');$('appointment_entry_starttime_ampm_field').value=startDate.formatDate('a');if(!this.mAllDayField){this.mAllDayField=Builder.node('div',{id:'appointment_entry_allday_field'},[Builder.node('label',{htmlFor:'appointment_entry_allday_checkbox'},[Builder.node('input',{type:'checkbox',id:'appointment_entry_allday_checkbox'}),[Loc.appointment_entry_allday]])]);Element.cleanWhitespace('allDayRow');$('allDayRow').lastChild.appendChild(this.mAllDayField);$('appointment_entry_allday_checkbox').onchange=this.handleAllDayCheckboxClick;}
$('appointment_entry_allday_checkbox').checked=this.mAppointment.allDay;if(!this.mDurationField){this.mDurationField=Builder.node('div',{id:'appointment_entry_duration_field'});insertAfter(this.mDurationField,'appointment_entry_duration');buildDurationFields(this.mDurationField,'appointment_entry_duration_days_field','appointment_entry_duration_hours_field','appointment_entry_duration_minutes_field');}
var durationObj=durationFromISO8601(this.mAppointment.duration);$('appointment_entry_duration_days_field').value=durationObj.days||'';$('appointment_entry_duration_hours_field').value=durationObj.hours;$('appointment_entry_duration_minutes_field').value=padNumberStr(durationObj.minutes,2);this.handleAllDayCheckboxClick();if(!this.mLocationField){this.mLocationField=Builder.node('input',{type:'text',value:'',id:'appointment_entry_location_field'});insertAfter(this.mLocationField,'appointment_entry_location');}
this.mLocationField.value=Element.firstNodeValue('appointment_entry_location');if(!this.mDescriptionField){this.mDescriptionField=Builder.node('textarea',{id:'appointment_entry_description_field'});insertAfter(this.mDescriptionField,'appointment_entry_description');}
replaceElementContents(this.mDescriptionField,Element.firstNodeValue('appointment_entry_description'));$('appointment_entry_starttime','appointment_entry_duration','appointment_entry_location','appointment_entry_description').invoke('hide');$('appointment_entry_starttime_field','allDayRow',this.mAllDayField,this.mDurationField,this.mLocationField,this.mDescriptionField).invoke('show');gToolbar.expandToolbar();var focusCallback=function(){$('editing_document_title').focus();}
setTimeout(focusCallback,1000);},switchToDisplay:function(){this.mEditMode=false;$('appointment_entry_starttime_field','allDayRow',this.mDurationField,this.mAllDayField,this.mLocationField,this.mDescriptionField).invoke('hide');$('appointment_entry_starttime','appointment_entry_duration','appointment_entry_location','appointment_entry_description').invoke('show');gToolbar.collapseToolbar();},deleteAppointmentFromServer:function(){dialogManager().showProgressMessage('delete_appointment_progress');var callback=function(inRequestObj,inResponseObj){dialogManager().hide();window.scrollTo(0,0);if(gAnimate)gPoofManager.showOverElement('document_title');gNotifier.printAtPage('appointment_deleted_message',CollabUID.sharedInstance().mParentLocation+'?dtstart='+this.mAppointment.dtstart);};this.mRequest=server().calendar.deleteEntry(callback.bind(this),uid().mValue).makeRequired();},handleEditButtonClick:function(){serverui().ensureLogin(this.switchToEditor.bind(this));},handleAddButtonClick:function(){var dt=new Date();dt.setDate(dt.getDate());var dtstart=parseInt(dateObjToISO8601(dt,false))+'T000000';var appt={type:'vevent',dtstart:dtstart,duration:'P1D',summary:Loc.default_appt_summary,allDay:true,uid:'-'}
var appointmentAddedCallbacck=function(q,r){var loc=gBasePath+encodeURI(encodeURI(r.uid));gNotifier.printAtPage('appointment_created_message',loc);}
var okCallback=function(){var calendarStruct={summary:appt.summary||'',location:appt.location||'',description:appt.description||'',duration:appt.duration,dtstart:appt.dtstart,allDay:(appt.allDay==true),type:'vevent'};this.mRequest=server().calendar.addEntry(appointmentAddedCallbacck.bind(this),uid().mBasePath,calendarStruct).makeRequired();}
appointmentDialog().show(appt,null,okCallback.bind(this),'add_button');},handleCancelButtonClick:function(){this.switchToDisplay();return false;},handleDoneButtonClick:function(){var startDate=getDateFromFields(this.mDatePicker,'appointment_entry_starttime_hour_field','appointment_entry_starttime_minute_field','appointment_entry_starttime_ampm_field');var duration=getDurationFromFields('appointment_entry_duration_days_field','appointment_entry_duration_hours_field','appointment_entry_duration_minutes_field');this.mAppointment={allDay:$('appointment_entry_allday_checkbox').checked,dtstart:dateObjToISO8601(startDate,!$('appointment_entry_allday_checkbox').checked),duration:durationToISO8601(duration),summary:$F('editing_document_title'),location:$F('appointment_entry_location_field'),description:$F('appointment_entry_description_field')};var callback=function(inRequestObj,inResponseObj){dialogManager().hide();gNotifier.print('appointment_saved_message');};dialogManager().showProgressMessage('appointment_save_progress');this.mRequest=server().calendar.updateEntry(callback,uid().mValue,this.mAppointment).makeRequired();replaceElementContents('document_title',$F('editing_document_title'));replaceElementContents('appointment_entry_starttime',Loc.getLongDateString(startDate));replaceElementContents('appointment_entry_duration',Loc.getDurationDisplayString(duration));replaceElementContents('appointment_entry_location',$F('appointment_entry_location_field'));replaceElementContents('appointment_entry_description',$F('appointment_entry_description_field'));this.switchToDisplay();return false;},handleDeleteButtonClick:function(){if(!this.mDeleteConfirmDialog){this.mDeleteConfirmDialog=dialogManager().drawDialog('delete_appointment_confirm',[],'delete_page_confirm_ok');}
var callback=function(){targetedDialogManager().show(this.mDeleteConfirmDialog,null,this.deleteAppointmentFromServer.bind(this),'remove_button');}
serverui().ensureLogin(callback.bind(this));},handleAllDayCheckboxClick:function(){updateAllDayFields('appointment_entry_allday_checkbox','appointment_entry_duration_days_field','appointment_entry_duration_hours_field','appointment_entry_duration_minutes_field');},handleTimeChanged:function(){$('appointment_entry_allday_checkbox').checked=false;this.handleAllDayCheckboxClick();}}
AppointmentDialogManager=Class.createWithSharedInstance('appointmentDialog');AppointmentDialogManager.prototype={initialize:function(){bindEventListeners(this,['handleDeleteClick']);this.mAppointmentDialog=dialogManager().drawDialog('appointment_dialog',[{label:'appointment_dialog_summary',contents:'<input name="summary" id="appointment_dialog_summary" type="text" class="appointment_dialog_field" />'},{label:'appointment_dialog_location',contents:'<input name="location" id="appointment_dialog_location" type="text" class="appointment_dialog_field" />'},{label:'appointment_entry_starttime',contents:'<div id="appointment_dialog_dtstart"></div>'},{label:'',contents:'<label for="appointment_dialog_allday_checkbox"><input type="checkbox" id="appointment_dialog_allday_checkbox" />'+Loc.appointment_entry_allday+'</label>'},{label:'appointment_entry_duration',contents:'<div id="appointment_dialog_duration"></div>'}],'appointment_dialog_ok');var td=$('appointment_dialog_ok').up('td');td.colSpan='1';td.parentNode.insertBefore(Builder.node('td',[Builder.node('div',{className:'submit'},[Builder.node('input',{type:'button',id:'appointment_dialog_delete',value:Loc.tags_rename_dialog_delete})])]),td);$('appointment_dialog_delete').onclick=this.handleDeleteClick;this.mDialogDatePicker=buildDateAndTimeFields('appointment_dialog_dtstart','appointment_dialog_dtstart_date','appointment_dialog_dtstart_hour','appointment_dialog_dtstart_minutes','appointment_dialog_dtstart_ampm');$('appointment_dialog_dtstart_date').onclick=function(){this.mDialogDatePicker.mElement.style.zIndex='505';return false;}.bind(this);buildDurationFields('appointment_dialog_duration','appointment_dialog_duration_days','appointment_dialog_duration_hours','appointment_dialog_duration_minutes');$('appointment_dialog_allday_checkbox').onchange=function(){updateAllDayFields('appointment_dialog_allday_checkbox','appointment_dialog_duration_days','appointment_dialog_duration_hours','appointment_dialog_duration_minutes');}},show:function(inAppointment,inCancelCallback,inOKCallback,inOptElement,inOptDeleteCallback){this.mDeleteCallback=inOptDeleteCallback;var isNewAppointment=!(inAppointment.uid&&(inAppointment.uid!='-'));$('appointment_dialog_delete').style.display=isNewAppointment?'none':'';var elm=null;var shownDisplayNode=null;if(inAppointment.displayNodes){var node=inAppointment.displayNodes.detect(function(node){if(node.element)return true;});if(node)elm=node.element;}
if(shownDisplayNode)elm=shownDisplayNode.element;if(!elm){tempApptDivs=$$('#module_calendars .temporary_calendar_appointment');if(tempApptDivs.length>0){elm=tempApptDivs[0];}}
$('appointment_dialog_summary').value=inAppointment.summary||'';$('appointment_dialog_location').value=inAppointment.location||'';var apptDate=createDateObjFromISO8601(inAppointment.dtstart,!inAppointment.allDay);this.mDialogDatePicker.mSelectedDate=apptDate;this.mDialogDatePicker.updateFromSelection();$('appointment_dialog_dtstart_hour').value=apptDate.formatDate('g');$('appointment_dialog_dtstart_minutes').value=apptDate.formatDate('i');$('appointment_dialog_dtstart_ampm').value=apptDate.formatDate('a');var duration=durationFromISO8601(inAppointment.duration);$('appointment_dialog_duration_days').value=duration.days||'';$('appointment_dialog_duration_hours').value=duration.hours||'0';$('appointment_dialog_duration_minutes').value=padNumberStr(duration.minutes||0,2);$('appointment_dialog_allday_checkbox').checked=(inAppointment.allDay==true);updateAllDayFields('appointment_dialog_allday_checkbox','appointment_dialog_duration_days','appointment_dialog_duration_hours','appointment_dialog_duration_minutes');var okCallback=function(){Object.extend(inAppointment,{summary:$F('appointment_dialog_summary'),location:$F('appointment_dialog_location'),dtstart:dateObjToISO8601(getDateFromFields(this.mDialogDatePicker,'appointment_dialog_dtstart_hour','appointment_dialog_dtstart_minutes','appointment_dialog_dtstart_ampm'),!$('appointment_dialog_allday_checkbox').checked),duration:durationToISO8601(getDurationFromFields('appointment_dialog_duration_days','appointment_dialog_duration_hours','appointment_dialog_duration_minutes')),allDay:$('appointment_dialog_allday_checkbox').checked});if(inOKCallback)inOKCallback();}
var m=elm||inOptElement?targetedDialogManager():dialogManager();m.show(this.mAppointmentDialog,inCancelCallback,okCallback.bind(this),elm||inOptElement);},handleDeleteClick:function(inEvent){dialogManager().hide();if(this.mDeleteCallback)this.mDeleteCallback();return false;}}
var CalendarViewController=Class.create();CalendarViewController.prototype={mBufferDays:70,mResizeHandleHeight:2,mSpacerWidth:2,mSnapHours:0.5,mRefreshTimeout:30000,mDefaultHours:0.5,mMinimumHours:0.5,mMonthGridSize:[50,50],mBannerHeight:15,mWeekEventElementOffsets:[0,-1,-2,-2],mSecondsInDay:86400000,initialize:function(){bindEventListeners(this,['handleMonthViewButtonClick','handleWeekViewButtonClick','handleMonthMoreButtonClick','handleMouseDownInWeekTimedAppointment','handleWeekTimedAppointmentRescheduleMove','handleWeekTimedAppointmentRescheduleEnd','handleMouseDownInWeekTimedAppointmentSlot','handleWeekTimedAppointmentResizeBegin','handleWeekTimedAppointmentResizeMove','handleWeekTimedAppointmentResizeEnd','handleMouseDownInBannerAppointment','handleBannerAppointmentRescheduleMove','handleBannerAppointmentRescheduleEnd','handleMouseDownInBannerAppointmentSlot','handleBannerAppointmentResizeMove','handleBannerAppointmentResizeEnd','handleWindowResize']);this.mParentElement=$('page_body');if(arguments.length>0)Object.extend(this,arguments[0]);this.drawCalendar();if(IEFixes.isIE&&!this.mDatePicker.mMonthMode){this.mWeekEventSpacer.space();this.mWeekHeaderSpacer.space();this.mWeekBannerSpacer.space();}
d.getElementsByClassName('calendar_grid_week_banner_slot').each(function(elm){Event.observe(elm,'mousedown',this.handleMouseDownInBannerAppointmentSlot);}.bind(this));var scroller=$('calendar_grid_week_events');scroller.scrollTop=(scroller.scrollHeight-Element.getHeight(scroller))/2;this.mDatePicker.subscribe(this.handleDateChanged.bind(this));var dtstart=window.location.search.match(/dtstart=([^&]+)/);if(dtstart){var dt=createDateObjFromISO8601(dtstart[1],false);if(dt)this.mDatePicker.mSelectedDate=dt;}
var calendarView=d.cookie.match(/calendarView=([^;]+)/);if(calendarView&&(calendarView[1]=='month')){this.mDatePicker.mMonthMode=true;}
this.mFontSizeObserver=new SizeObserver($('linkCal'),1,this.handleFontSizeChanged.bind(this));dialogManager().showProgressMessage(Loc.updating_calendar_message);serverui().ensureLogin(this.mDatePicker.updateFromSelection.bind(this.mDatePicker),'read');if(!IEFixes.isIE)observeEvents(this,window,{resize:'handleWindowResize'});},springsResizeCallback:function(){if(Element.visible('calendar_grid_week_view')){var h=parseInt($('calendar_grid_springs').style.height)-$('calendar_grid_week_events').offsetTop;Element.setOffsetHeight('calendar_grid_week_events',h);var testSlotDivs=$('calendar_grid_week_events_columns').getElementsByClassName('calendar_grid_week_event_slot');if(testSlotDivs.length>0){this.mWeekGridSize=[testSlotDivs[0].offsetWidth,testSlotDivs[0].offsetHeight];}}
else{var h=parseInt($('calendar_grid_springs').style.height)-$('calendar_grid_month_content').offsetTop;Element.setOffsetHeight('calendar_grid_month_content',h);var testDivSlots=$('calendar_grid_month_weekday_columns').getElementsByClassName('calendar_grid_month_row_0');if(testDivSlots.length>0){this.mMonthGridSize=[testDivSlots[0].offsetWidth,testDivSlots[0].offsetHeight];}}
this.mBannerHeight=$('banner_sizing_appointment').offsetHeight;},drawCalendar:function(){this.mViewSprings=new ViewSprings('calendar_grid_springs',this.springsResizeCallback.bind(this));$A($('calendar_grid_week_events_columns').getElementsByClassName('calendar_grid_hours_key')).each(function(elm){for(var hour=1;hour<24;hour++){elm.appendChild(Builder.node('div',Loc.getLocalizedHourKey(hour)));}});if(Loc.appointment_allday!='All Day')$$('#calendar_grid_week_events_content div.calendar_grid_hours_key')[0].appendChild(Builder.node('div',{style:'position:relative;top:-5em;left:0;height:1px;margin:0;padding:0 0 0 1em;visibility:hidden'},Loc.appointment_allday));for(var column=0;column<7;column++){var li=Builder.node('li',{className:'calendar_grid_week_events_column calendar_grid_week_column_'+column});for(var row=0;row<24;row++){var slotDiv=Builder.node('div',{className:'calendar_grid_week_event_slot calendar_grid_week_row_'+row},IEFixes.isIE?"\u00A0":Loc.getLocalizedHourKey(row));if(IEFixes.isIE6)replaceElementContents(slotDiv,Builder.node('img',{src:'about:blank',alt:''}));if(IEFixes.isIE)slotDiv.style.textIndent='0';li.appendChild(slotDiv);slotDiv.onmousedown=this.handleMouseDownInWeekTimedAppointmentSlot;}
$('calendar_grid_week_events_columns').appendChild(li);}
replaceElementContents($$('#calendar_grid_week_banner_columns div.calendar_grid_hours_key div')[0],Loc.appointment_allday);this.mWeekEventSpacer=new BlockSpacer('calendar_grid_week_events_columns',$('calendar_grid_week_events_content'));this.mWeekHeaderSpacer=new BlockSpacer('calendar_grid_week_header_columns',this.mWeekEventSpacer);this.mWeekBannerSpacer=new BlockSpacer('calendar_grid_week_banner_columns',this.mWeekEventSpacer);this.mSplitView=new SplitView('calendar_grid_week_view',{mViews:[$('calendar_grid_week_banners'),$('calendar_grid_week_events')],mSplitter:'calendar_grid_week_splitter',mMaintainTotalHeight:true,mMinimumHeight:66});for(var column=0;column<7;column++){var columnElm=Builder.node('div',{className:'calendar_grid_column_contents calendar_grid_month_day_contents'});$('calendar_grid_month_weekday_columns').appendChild(Builder.node('li',{className:'calendar_grid_month_column_'+column},[columnElm]));for(var row=0;row<6;row++){var labelElm=Builder.node('div',{className:'calendar_grid_month_daylabel'},"\u00A0");var elm=Builder.node('div',{className:'calendar_grid_month_day calendar_grid_month_row_'+row},[labelElm]);columnElm.appendChild(elm);Event.observe(elm,'mousedown',this.handleMouseDownInBannerAppointmentSlot);Event.observe(labelElm,'mousedown',this.handleMonthMoreButtonClick);}}
this.mMonthViewSpacers=[new BlockSpacer('calendar_grid_month_weekday_columns','calendar_grid_month_content')];$A($('calendar_grid_month_weekday_columns').getElementsByClassName('calendar_grid_month_day_contents')).each(function(elm){this.mMonthViewSpacers.push(new BlockSpacer(elm,(this.mMonthViewSpacers.length>1?this.mMonthViewSpacers[1]:'calendar_grid_month_content'),true));}.bind(this));$('module_calendars').style.visibility='';Object.extend($('calendar_nav_view_week').down('a'),{onclick:this.handleWeekViewButtonClick,title:Loc.tooltips.week_button});Object.extend($('calendar_nav_view_month').down('a'),{onclick:this.handleMonthViewButtonClick,title:Loc.tooltips.month_button});Object.extend($('calendar_nav_date_picker').down('a'),{onclick:invalidate,title:Loc.choose_date_button});this.mDatePicker=new DatePicker($('calendar_nav_date_picker').firstChild,{mSelectWeek:true,mAllowMonthMode:true,mPositionAbove:true,mPrevWidget:$('calendar_nav_date_prev').down('a'),mNextWidget:$('calendar_nav_date_next').down('a')});this.springsResizeCallback();if(IEFixes.isIE)insertAtBeginning(Builder.node('div',{style:'height:0'}),'calendar_grid_week_events_content');},handleFontSizeChanged:function(inElement,inHeight){this.mViewSprings.boing();if(this.mDatePicker.mMonthMode){this.mMonthViewSpacers.each(function(spc){spc.space();});}
else{this.mWeekEventSpacer.space();this.mWeekHeaderSpacer.space();this.mWeekBannerSpacer.space();}
this.drawVisibleAppointments(false);},handleMonthViewButtonClick:function(inEvent){this.mDatePicker.mMonthMode=true;this.mDatePicker.mTodaySelected=false;this.mDatePicker.updateFromSelection();return false;},handleWeekViewButtonClick:function(inEvent){this.mDatePicker.mMonthMode=false;this.mDatePicker.mTodaySelected=false;this.mDatePicker.updateFromSelection();return false;},handleMonthMoreButtonClick:function(inEvent){Event.stop(inEvent);var elm=Event.element(inEvent);dt=elm.up().id.match(/_(\d{8})/)[1];this.mDatePicker.mSelectedDate=createDateObjFromISO8601(dt,false);this.handleWeekViewButtonClick();return false;},handleDateChanged:function(){if(Element.visible(this.mParentElement)){var range=this.mDatePicker.getSelectedRange();var today=new Date();$('calendar_grid_week_year').update(this.mDatePicker.mSelectedDate.formatDate('Y'));var currentDate=new Date(range[0].getTime());$A($('calendar_grid_week_header_columns').getElementsByClassName('calendar_grid_weekday_label')).each(function(elm){replaceElementContents(elm,currentDate.formatDate(Loc.dateFormats.calendarDayHeader));currentDate.setDate(currentDate.getDate()+1);});currentDate=new Date(range[0].getTime());$A($('calendar_grid_week_banner_columns').getElementsByClassName('calendar_grid_week_banner_slot')).each(function(elm){elm.id='calendar_grid_week_banner_slot_'+parseInt(dateObjToISO8601(currentDate,false));currentDate.setDate(currentDate.getDate()+1);});replaceElementContents('calendar_grid_month_header',range[0].formatDate(Loc.dateFormats.longMonthAndYear));currentDate=new Date(range[0].getTime());currentDate.setDate(1);currentDate.setDate(currentDate.getDate()-currentDate.getDay());for(var i=0;i<6;i++){$$('#calendar_grid_month_content .calendar_grid_month_row_'+i+' div.calendar_grid_month_daylabel').each(function(elm){replaceElementContents(elm,''+currentDate.getDate());elm.parentNode.id='calendar_grid_month_day_'+parseInt(dateObjToISO8601(currentDate,false));if(currentDate.getMonth()==range[0].getMonth()){elm.up().removeClassName('calendar_grid_othermonth_day');}
else{elm.up().addClassName('calendar_grid_othermonth_day');}
currentDate.setDate(currentDate.getDate()+1);});}
if(Element.visible(this.mDatePicker.mMonthMode?'calendar_grid_week_view':'calendar_grid_month_view')){$('calendar_grid_week_view','calendar_grid_month_view').invoke('toggle');this.setLastView(this.mDatePicker.mMonthMode?'month':'week');$H(this.mAppointments).each(function(currentAppt){currentAppt.value.displayNodes.each(function(currentNode){if(currentNode.element){Element.remove(currentNode.element);delete currentNode.element;}})});this.mViewSprings.boing();if(this.mDatePicker.mMonthMode){this.mMonthViewSpacers.each(function(spc){spc.space();});}
else{this.mWeekEventSpacer.space();this.mWeekHeaderSpacer.space();this.mWeekBannerSpacer.space();var scroller=$('calendar_grid_week_events');scroller.scrollTop=(scroller.scrollHeight-Element.getHeight(scroller))/2;}}
this.springsResizeCallback();if($('calendar_grid_week_view').visible()){$$('#calendar_grid_week_view .calendar_grid_week_today_column').invoke('removeClassName','calendar_grid_week_today_column');if(compareDateWeeks(today,this.mDatePicker.mSelectedDate)){$$('#calendar_grid_week_view .calendar_grid_week_column_'+today.getDay()).invoke('addClassName','calendar_grid_week_today_column');}
$$('#calendar_grid_week_header_columns .calendar_grid_today_weekday_label').invoke('removeClassName','calendar_grid_today_weekday_label');$$('#calendar_grid_week_view .calendar_grid_week_selected_column').invoke('removeClassName','calendar_grid_week_selected_column');var selectedDtstart=dateObjToISO8601(this.mDatePicker.mSelectedDate,false);var todayIsSelected=(parseInt(selectedDtstart)==parseInt(dateObjToISO8601(today,false)));if((!todayIsSelected)&&this.mAppointments&&$('calendar_grid_week_view').visible()){var colNum=this.mDatePicker.mSelectedDate.getDay();$$('#calendar_grid_week_header_columns .calendar_grid_weekday_label')[colNum].addClassName('calendar_grid_today_weekday_label');$$('#calendar_grid_week_view .calendar_grid_week_column_'+colNum).invoke('addClassName','calendar_grid_week_selected_column');}}
this.drawVisibleAppointments(false);this.getAppointmentsFromServer();}},handleMouseDownInWeekTimedAppointment:function(inEvent){Event.stop(inEvent);var pos=[Event.pointerX(inEvent),Event.pointerY(inEvent)];var elm=Event.element(inEvent);var isResize=elm.className&&elm.className.match(/_resizehandle/);var appt=elm.parentNode.dataSource;var apptDiv=Builder.node('div',{className:'temporary_calendar_appointment'},appt.summary);$('calendar_grid_week_events_content').appendChild(apptDiv);['width','height','top','left'].each(function(s){apptDiv.style[s]=elm.parentNode.style[s];});appt.displayNodes.each(function(currentNode){if(currentNode.element)currentNode.element.style.visibility='hidden';});var allowedRange=[Element.getTop('calendar_grid_week_events')];allowedRange.push(allowedRange[0]+Element.getHeight('calendar_grid_week_events'));var weekday=(-1);var foundColumn=$A($('calendar_grid_week_events_columns').getElementsByClassName('calendar_grid_week_events_column')).detect(function(li,i){if(Position.within(li,pos[0],pos[1])){weekday=i;return true;}
return false;});if(!foundColumn)return false;this.mDragInfo={appt:appt,element:apptDiv,startWeekday:weekday,startPointer:pos,startTop:parseInt(apptDiv.style.top),startHeight:parseInt(apptDiv.style.height),allowedRange:allowedRange}
this.startDrag();observeEvents(this,d,{mousemove:isResize?'handleWeekTimedAppointmentResizeMove':'handleWeekTimedAppointmentRescheduleMove',mouseup:isResize?'handleWeekTimedAppointmentResizeEnd':'handleWeekTimedAppointmentRescheduleEnd'});return false;},handleWeekTimedAppointmentRescheduleMove:function(inEvent){Event.stop(inEvent);var pos=[Event.pointerX(inEvent),Event.pointerY(inEvent)];var weekday=(-1);var foundColumn=$A($('calendar_grid_week_events_columns').getElementsByClassName('calendar_grid_week_events_column')).detect(function(li,i){if(Position.within(li,pos[0],pos[1])){weekday=i;return true;}
return false;});if(foundColumn&&this.mDragInfo.allowedRange[0]<=pos[1]&&pos[1]<=this.mDragInfo.allowedRange[1]){if(weekday!=this.mDragInfo.currentWeekday){Position.clone(foundColumn.firstChild,this.mDragInfo.element,{setHeight:false,setTop:false});this.mDragInfo.element.style.width=(parseInt(this.mDragInfo.element.style.width)+this.mWeekEventElementOffsets[2])+'px';this.mDragInfo.currentWeekday=weekday;}
var snapHeight=this.mWeekGridSize[1]*this.mSnapHours;var delta=pos[1]-this.mDragInfo.startPointer[1];delta=Math.floor(delta/snapHeight)*snapHeight;var top=this.mDragInfo.startTop+delta;this.mDragInfo.element.style.top=top+'px';}},handleWeekTimedAppointmentRescheduleEnd:function(inEvent){stopObservingEvents(this,d,{mousemove:'handleWeekTimedAppointmentRescheduleMove',mouseup:'handleWeekTimedAppointmentRescheduleEnd'});var dt=createDateObjFromISO8601(this.mDragInfo.appt.dtstart,true);if(this.mDragInfo.currentWeekday!=null)dt.setDate(dt.getDate()+(this.mDragInfo.currentWeekday-this.mDragInfo.startWeekday));var hours=dt.getHours()+(dt.getMinutes()/60);hours+=(parseInt(this.mDragInfo.element.style.top)-this.mDragInfo.startTop)/this.mWeekGridSize[1];hours=Math.round(hours/this.mSnapHours)*this.mSnapHours;dt.setHours(Math.floor(hours));dt.setMinutes((hours-Math.floor(hours))*60);var dtstart=dateObjToISO8601(dt,true);var dirty=(dtstart!=this.mDragInfo.appt.dtstart);this.mDragInfo.appt.dtstart=dtstart;Element.remove(this.mDragInfo.element);this.endDrag();this.drawAppointment(this.mDragInfo.appt,false);if(dirty){this.updateAppointmentEntry(this.mDragInfo.appt);}
else{this.showApptDetails(this.mDragInfo.appt);}
delete this.mDragInfo;},handleMouseDownInWeekTimedAppointmentSlot:function(inEvent){Event.stop(inEvent);var elm=Event.element(inEvent);var parentElm=Event.findElement(inEvent,'li');var rowMatch=elm.className.match(/calendar_grid_week_row_(\d+)/);var columnMatch=parentElm.className.match(/calendar_grid_week_column_(\d+)/);if(rowMatch&&columnMatch){var overlap=(Event.pointerY(inEvent)-Position.page(elm)[1])/this.mWeekGridSize[1];overlap=Math.floor(overlap/this.mSnapHours)*this.mSnapHours;var startDate=new Date(this.mDatePicker.getSelectedRange()[0].getTime());startDate.setDate(startDate.getDate()+parseInt(columnMatch[1]));startDate.setHours(parseInt(rowMatch[1]));startDate.setMinutes(overlap*60);startDate.setSeconds(0);var apptDiv=Builder.node('div',{className:'temporary_calendar_appointment'},Loc.default_appt_summary);$('calendar_grid_week_events_content').appendChild(apptDiv);Position.clone(elm,apptDiv,{setWidth:false,setHeight:false});Element.setOffsetWidth(apptDiv,elm.offsetWidth);Element.setOffsetHeight(apptDiv,this.mWeekGridSize[1]*this.mDefaultHours);apptDiv.style.top=(parseInt(apptDiv.style.top)+(overlap*this.mWeekGridSize[1]))+'px';this.mDragInfo={element:apptDiv,startDate:startDate,startPointer:[Event.pointerX(inEvent),Event.pointerY(inEvent)],startHeight:this.mWeekGridSize[1]*this.mDefaultHours,maxSize:24-startDate.getHours()-overlap}
this.startDrag();observeEvents(this,d,{mousemove:'handleWeekTimedAppointmentResizeMove',mouseup:'handleWeekTimedAppointmentResizeEnd'});}
return false;},handleWeekTimedAppointmentResizeBegin:function(inEvent){},handleWeekTimedAppointmentResizeMove:function(inEvent){Event.stop(inEvent);var height=(Event.pointerY(inEvent)-this.mDragInfo.startPointer[1])+this.mDragInfo.startHeight;var snapHeight=this.mWeekGridSize[1]*this.mSnapHours;height=Math.floor(height/snapHeight)*snapHeight;height=Math.max(height,this.mWeekGridSize[1]*this.mMinimumHours);this.mDragInfo.element.style.height=height+'px';},handleWeekTimedAppointmentResizeEnd:function(inEvent){stopObservingEvents(this,d,{mousemove:'handleWeekTimedAppointmentResizeMove',mouseup:'handleWeekTimedAppointmentResizeEnd'});var height=parseInt(this.mDragInfo.element.style.height);var hours=height/this.mWeekGridSize[1];var overlap=hours-Math.floor(hours);overlap=Math.round(overlap/this.mSnapHours)*this.mSnapHours;hours=Math.floor(hours)+overlap;var duration=durationToISO8601(this.getDurationForHours(hours));var appt=this.mDragInfo.appt;if(!appt){appt={type:'vevent',dtstart:dateObjToISO8601(this.mDragInfo.startDate,true),summary:Loc.default_appt_summary,allDay:false,uid:'-'};}
appt.duration=duration;this.endDrag();if((!this.mDragInfo.appt)||this.mDragInfo.appt.uid=='-'){var showApptDialogCallback=function(){this.showApptDialog(appt)}
serverui().ensureLogin(showApptDialogCallback.bind(this));}
else{appt.displayNodes.each(function(currentNode){if(currentNode.element){$(currentNode.element).removeClassName('temporary_calendar_appointment');$(currentNode.element).addClassName('calendar_appointment');}});this.updateAppointmentEntry(appt);}},handleMouseDownInBannerAppointment:function(inEvent){Event.stop(inEvent);var pos=[Event.pointerX(inEvent),Event.pointerY(inEvent)];var elm=Event.element(inEvent);var isResize=elm.className&&elm.className.match(/_resizehandle/);var appt=elm.up().dataSource;appt.displayNodes.each(function(currentNode){if(currentNode.element){Element.removeClassName(currentNode.element,'calendar_appointment');Element.addClassName(currentNode.element,'temporary_calendar_appointment');}});var allDropZones=[];if($('calendar_grid_week_view').visible()){allDropZones=$A($('calendar_grid_week_banner_columns').getElementsByClassName('calendar_grid_week_banner_slot'));}
else{allDropZones=$A($('calendar_grid_month_weekday_columns').getElementsByClassName('calendar_grid_month_day'));}
var foundElm=allDropZones.detect(function(elm){return Position.within(elm,pos[0],pos[1])&&elm.id&&elm.id.match(/_\d{8}/);});if(!foundElm)return false;var clickedDate=createDateObjFromISO8601(foundElm.id.match(/_(\d{8})/)[1],false);var startDate=createDateObjFromISO8601(appt.dtstart,false);var startOffsetDays=(clickedDate.getTime()-startDate.getTime())/this.mSecondsInDay;this.mDragInfo={appt:appt,allDropZones:allDropZones,startOffsetDays:startOffsetDays,startDate:startDate}
this.startDrag();observeEvents(this,d,{mousemove:isResize?'handleBannerAppointmentResizeMove':'handleBannerAppointmentRescheduleMove',mouseup:isResize?'handleBannerAppointmentResizeEnd':'handleBannerAppointmentRescheduleEnd'});},handleBannerAppointmentRescheduleMove:function(inEvent){var pos=[Event.pointerX(inEvent),Event.pointerY(inEvent)];var foundElm=this.mDragInfo.allDropZones.detect(function(elm){return Position.within(elm,pos[0],pos[1])&&elm.id&&elm.id.match(/_\d{8}/);});if(!foundElm)return false;var dt=createDateObjFromISO8601(foundElm.id.match(/_(\d{8})/)[1],false);dt.setDate(dt.getDate()-this.mDragInfo.startOffsetDays);var dtstart=dateObjToISO8601(dt,false);if(parseInt(dtstart)!=parseInt(this.mDragInfo.appt.dtstart)){var timeMatch=this.mDragInfo.appt.dtstart.match(/T\d{6}/);if(timeMatch){dtstart=dtstart.replace(/T\d{6}/,timeMatch[0]);}
this.mDragInfo.appt.dtstart=dtstart;this.drawAppointment(this.mDragInfo.appt,false);this.mDragInfo.dirty=true;this.mDragInfo.appt.displayNodes.each(function(currentNode){if(currentNode.element){Element.addClassName(currentNode.element,'temporary_calendar_appointment');Element.removeClassName(currentNode.element,'calendar_appointment');}});}},handleBannerAppointmentRescheduleEnd:function(inEvent){stopObservingEvents(this,d,{mousemove:'handleBannerAppointmentRescheduleMove',mouseup:'handleBannerAppointmentRescheduleEnd'});this.mDragInfo.appt.displayNodes.each(function(currentNode){if(currentNode.element){$(currentNode.element).removeClassName('temporary_calendar_appointment');$(currentNode.element).addClassName('calendar_appointment');}});this.endDrag();if(this.mDragInfo.dirty){this.updateAppointmentEntry(this.mDragInfo.appt);}
else{this.showApptDetails(this.mDragInfo.appt);}},handleMouseDownInBannerAppointmentSlot:function(inEvent){Event.stop(inEvent);var elm=Event.element(inEvent);var elmDateMatch=elm.id.match(/_(\d{8})/);if(elmDateMatch){var allDropZones=[];if($('calendar_grid_week_view').visible()){allDropZones=$A($('calendar_grid_week_banner_columns').getElementsByClassName('calendar_grid_week_banner_slot'));}
else{allDropZones=$A($('calendar_grid_month_weekday_columns').getElementsByClassName('calendar_grid_month_day'));}
var startDate=createDateObjFromISO8601(elmDateMatch[1]+'T000000',false);var appt={type:'vevent',dtstart:elmDateMatch[1]+'T000000',duration:'P1D',summary:Loc.default_appt_summary,allDay:true,uid:'-'}
this.drawAppointment(appt,false);this.mDragInfo={appt:appt,allDropZones:allDropZones,startDate:startDate}
this.startDrag();observeEvents(this,d,{mousemove:'handleBannerAppointmentResizeMove',mouseup:'handleBannerAppointmentResizeEnd'});}
return false;},handleBannerAppointmentResizeMove:function(inEvent){Event.stop(inEvent);var pos=[Event.pointerX(inEvent),Event.pointerY(inEvent)];var foundElm=this.mDragInfo.allDropZones.detect(function(elm){return Position.within(elm,pos[0],pos[1])&&elm.id&&elm.id.match(/_\d{8}/);});if(foundElm){var endDate=createDateObjFromISO8601(foundElm.id.match(/_(\d{8})/)[1],false);var duration={days:(endDate.getTime()-this.mDragInfo.startDate.getTime())/this.mSecondsInDay};duration.days=Math.round(Math.max(++duration.days,1));this.mDragInfo.appt.duration=durationToISO8601(duration);this.drawAppointment(this.mDragInfo.appt,false);}},handleBannerAppointmentResizeEnd:function(inEvent){Event.stop(inEvent);stopObservingEvents(this,d,{mousemove:'handleBannerAppointmentResizeMove',mouseup:'handleBannerAppointmentResizeEnd'});this.endDrag();if(this.mDragInfo.appt.uid=='-'){this.showApptDialog(this.mDragInfo.appt);}
else{this.mDragInfo.appt.displayNodes.each(function(currentNode){if(currentNode.element){$(currentNode.element).removeClassName('temporary_calendar_appointment');$(currentNode.element).addClassName('calendar_appointment');}});this.updateAppointmentEntry(this.mDragInfo.appt);}},handleWindowResize:function(inEvent){this.mViewSprings.boing();if(this.mDatePicker.mMonthMode){this.mMonthViewSpacers.each(function(spc){spc.space();});this.drawVisibleAppointments(false);}},setLastView:function(inViewName){var cookieExpire=new Date();cookieExpire.setFullYear(cookieExpire.getFullYear()+2);d.cookie='calendarView='+inViewName+'; expires='+cookieExpire.toGMTString()+'; path='+CollabUID.sharedInstance().mParentLocation;},showApptDetails:function(inAppointment){this.showApptDialog(inAppointment);},showApptDialog:function(inAppointment){if(this.mTimer){clearTimeout(this.mTimer);delete this.mTimer;}
this.mGetApptsRequest=null;var cancelButtonCallback=function(){$$('#module_calendars .temporary_calendar_appointment').invoke('remove');delete this.mDragInfo;this.getAppointmentsFromServer();}
var okButtonCallback=function(){this.updateAppointmentEntry(inAppointment);}
var deleteCallback=function(){this.deleteAppointmentFromServer(inAppointment);}
appointmentDialog().show(inAppointment,cancelButtonCallback.bind(this),okButtonCallback.bind(this),null,deleteCallback.bind(this));},deleteAppointmentFromServer:function(inAppointment){dialogManager().showProgressMessage('delete_appointment_progress');var callback=function(inRequestObj,inResponseObj){var apptElm=targetedDialogManager().mActiveParent;dialogManager().hide();gPoofManager.showOverElement(apptElm);this.removeAppointment(inAppointment);this.getAppointmentsFromServer();};this.mRequest=server().calendar.deleteEntry(callback.bind(this),inAppointment.uid).makeRequired();},updateAppointmentEntry:function(inAppointment){var calendarStruct={summary:inAppointment.summary||'',location:inAppointment.location||'',description:inAppointment.description||'',duration:inAppointment.duration,dtstart:inAppointment.dtstart,allDay:(inAppointment.allDay==true),type:'vevent'};if(inAppointment.uid=='-'){this.mRequest=server().calendar.addEntry(this.gotAddEntryResponse.bind(this),uid().mBasePath,calendarStruct).makeRequired();}
else{this.mRequest=server().calendar.updateEntry(this.gotUpdateEntryResponse.bind(this),inAppointment.uid,calendarStruct);}},gotAddEntryResponse:function(inRequestObj,inResponseObj){var r=inResponseObj;if(this.mDragInfo){if(this.mDragInfo.element){Element.remove(this.mDragInfo.element);}
else if(this.mDragInfo.appt&&this.mDragInfo.appt.uid=='-'){this.mDragInfo.appt.dtstart='19700101T000000';this.drawAppointment(this.mDragInfo.appt,false);}
delete this.mDragInfo;}
if(r.uid){this.mAppointments[r.uid]=Object.extend({uid:r.uid},r);}
this.mDatePicker.mSelectedDate=createDateObjFromISO8601(r.dtstart,!r.allDay);this.mDatePicker.updateFromSelection();gNotifier.print('appointment_created_message');this.getAppointmentsFromServer();},gotUpdateEntryResponse:function(inRequestObj,inResponseObj){var r=inResponseObj;if(this.mDragInfo){if(this.mDragInfo.element){Element.remove(this.mDragInfo.element);}}
if(r.uid&&this.mAppointments[r.uid])Object.extend(this.mAppointments[r.uid],r);this.mDatePicker.mSelectedDate=createDateObjFromISO8601(r.dtstart,!r.allDay);this.mDatePicker.updateFromSelection();gNotifier.print(Loc.appointment_saved_message);this.getAppointmentsFromServer();},getAppointmentsFromServer:function(){if(this.mTimer){clearTimeout(this.mTimer);delete this.mTimer;}
if(this.mParentElement.style.display!='none'){var range=this.mDatePicker.getSelectedRange();range[0].setDate(range[0].getDate()-this.mBufferDays);range[1].setDate(range[1].getDate()+this.mBufferDays);var requestQuery={startTime:dateObjToISO8601(range[0],true),endTime:dateObjToISO8601(range[1],true)};this.mGetApptsRequest=server().calendar.getEntries(this.gotAppointmentsFromServer.bind(this),uid().mBasePath,requestQuery);}},gotAppointmentsFromServer:function(inRequestObj,inResponseObj){if(inRequestObj==this.mGetApptsRequest){this.syncWithRows(inResponseObj,(this.mAppointments&&gAnimate));if(this.mTimer){clearTimeout(this.mTimer);delete this.mTimer;}
this.mTimer=setTimeout(this.getAppointmentsFromServer.bind(this),this.mRefreshTimeout);dialogManager().hideProgressMessage();if(window.unitTestHandler)unitTestHandler.messageFromJS_('gotAppointmentsFromServer');}},startDrag:function(){Position.prepare();this.mGetApptsRequest=null;if(this.mTimer){clearTimeout(this.mTimer);delete this.mTimer;}
gTooltipManager.hide(false);var timerFunction=function(){delete this.mDragTimer;};this.mDragTimer=setTimeout(timerFunction.bind(this),gDoubleClickDelay);gTooltipManager.mEnabled=false;},endDrag:function(inDraw){if(inDraw)this.drawVisibleAppointments(false);gTooltipManager.mEnabled=true;},drawAppointment:function(inAppointment,inAnimate){var isMonthView=Element.visible('calendar_grid_month_view');if(inAppointment.uid){this.updateRectsForAppointment(inAppointment);inAppointment.displayNodes.each(function(currentNode){if(currentNode.rect&&currentNode.overlaps&&currentNode.overlaps.index>=this.mMonthBannerLimit&&isMonthView){delete currentNode.rect;}
if(currentNode.rect){if(currentNode.overlaps&&(inAppointment.allDay||isMonthView)){currentNode.rect[1]+=(currentNode.rect[3]+2)*currentNode.overlaps.index;}
else if(currentNode.overlaps){currentNode.rect[0]+=currentNode.rect[2]*currentNode.overlaps.index/currentNode.overlaps.total;currentNode.rect[2]=currentNode.rect[2]/currentNode.overlaps.total;}
var apptDiv=currentNode.element;if(!apptDiv){var contentLink=Builder.node('div',{className:(inAppointment.allDay?'calendar_banner_content':'calendar_appointment_content')});var resizeHandle=Builder.node('div',{className:inAppointment.allDay?'calendar_banner_resizehandle':'calendar_appointment_resizehandle'});apptDiv=Builder.node(isMonthView&&!inAppointment.allDay?'p':'div',{className:inAppointment.uid=='-'?'temporary_calendar_appointment':'calendar_appointment',style:'position:absolute'},[contentLink,resizeHandle]);if(isMonthView&&!inAppointment.allDay){Element.addClassName(apptDiv,'month_view_appointment');}
apptDiv.dataSource=inAppointment;apptDiv.onselectstart=invalidate;contentLink.onclick=invalidate;contentLink.onmousedown=invalidate;resizeHandle.onmousedown=invalidate;if(isMonthView||inAppointment.allDay){Event.observe(contentLink,'mousedown',this.handleMouseDownInBannerAppointment);Event.observe(resizeHandle,'mousedown',this.handleMouseDownInBannerAppointment);}
else{Event.observe(contentLink,'mousedown',this.handleMouseDownInWeekTimedAppointment);Event.observe(resizeHandle,'mousedown',this.handleMouseDownInWeekTimedAppointment);}}
else if(!isMonthView){if(inAppointment.allDay&&(apptDiv.parentNode==$('calendar_grid_week_events_content'))){Element.remove(apptDiv);$('calendar_grid_week_banners_content').appendChild(apptDiv);Event.stopObserving(apptDiv.firstChild,'mousedown',this.handleMouseDownInWeekTimedAppointment);Event.stopObserving(apptDiv.lastChild,'mousedown',this.handleMouseDownInWeekTimedAppointment);Event.observe(apptDiv.firstChild,'mousedown',this.handleMouseDownInBannerAppointment);Event.observe(apptDiv.lastChild,'mousedown',this.handleMouseDownInBannerAppointment);}
else if((!inAppointment.allDay)&&(apptDiv.parentNode==$('calendar_grid_week_banners_content'))){Element.remove(apptDiv);$('calendar_grid_week_events_content').appendChild(apptDiv);Event.stopObserving(apptDiv.firstChild,'mousedown',this.handleMouseDownInBannerAppointment);Event.stopObserving(apptDiv.lastChild,'mousedown',this.handleMouseDownInBannerAppointment);Event.observe(apptDiv.firstChild,'mousedown',this.handleMouseDownInWeekTimedAppointment);Event.observe(apptDiv.lastChild,'mousedown',this.handleMouseDownInWeekTimedAppointment);}}
var oldBounds=styleBoundsForDiv(apptDiv);var snapToPos=function(){apptDiv.style.left=currentNode.rect[0]+'px';apptDiv.style.top=currentNode.rect[1]+'px';};if(inAnimate&&oldBounds&&((oldBounds[0]!=currentNode.rect[0])||(oldBounds[1]!=currentNode.rect[1]))){var movex=currentNode.rect[0]-oldBounds[0];var movey=currentNode.rect[1]-oldBounds[1];if(!this.mParallelAnimations)this.mParallelAnimations=[];this.mParallelAnimations.push(new Effect.MoveBy(apptDiv,movey,movex,{afterFinish:snapToPos}));}
else{snapToPos();}
var snapToSize=function(){apptDiv.style.width=currentNode.rect[2]+'px';apptDiv.style.height=currentNode.rect[3]+'px';apptDiv.firstChild.style.height=(parseInt(apptDiv.style.height)-this.mResizeHandleHeight)+'px';}.bind(this);if(inAnimate&&oldBounds&&((oldBounds[2]!=currentNode.rect[2])||(oldBounds[3]!=currentNode.rect[3]))){var delta_w=currentNode.rect[2]-oldBounds[2];var delta_h=currentNode.rect[3]-oldBounds[3];if(!this.mParallelAnimations)this.mParallelAnimations=[];this.mParallelAnimations.push(new Effect.ResizeBy(apptDiv,delta_w,delta_h,{afterFinish:snapToSize}));}
else{snapToSize();}
var summaryToDisplay=inAppointment.summary||'-';if(isMonthView&&(!inAppointment.allDay)){summaryToDisplay='• '+summaryToDisplay;}
replaceElementContents(Object.extend(apptDiv.firstChild,{tooltipElement:'appointment_tooltip',tooltipValues:inAppointment}),summaryToDisplay);if(!currentNode.element){gTooltipManager.observe(apptDiv.firstChild);if(inAnimate)Element.hide(apptDiv);if(isMonthView){$('calendar_grid_month_content').appendChild(apptDiv);}
else{(inAppointment.allDay?$('calendar_grid_week_banners_content'):$('calendar_grid_week_events_content')).appendChild(apptDiv);}
currentNode.element=apptDiv;if(inAnimate)new Effect.Appear(apptDiv);}
currentNode.element.style.visibility='';}
else if(currentNode.element){Event.stopObserving(currentNode.element.firstChild,'mousedown',this.handleMouseDownInWeekTimedAppointment);Event.stopObserving(currentNode.element.lastChild,'mousedown',this.handleMouseDownInWeekTimedAppointment);Event.stopObserving(currentNode.element.firstChild,'mousedown',this.handleMouseDownInBannerAppointment);Event.stopObserving(currentNode.element.lastChild,'mousedown',this.handleMouseDownInBannerAppointment);gTooltipManager.stopObserving(currentNode.element.firstChild);currentNode.element.onselectstart=null;var deleteElement=function(inOptEffect){var elm=inOptEffect?inOptEffect.element:currentNode.element;if(elm){elm.dataSource=null;if(elm.parentNode)Element.remove(elm);}
currentNode.element=null;}
if(inAnimate){if(!this.mParallelAnimations)this.mParallelAnimations=[];this.mParallelAnimations.push(new Effect.Fade(currentNode.element,{afterFinish:deleteElement.bind(this)}));}
else{deleteElement();}}}.bind(this));}},removeAppointment:function(inAppointment,inAnimate){if(inAppointment.uid){if(this.mAppointments[inAppointment.uid])delete this.mAppointments[inAppointment.uid];inAppointment.dtstart='';this.drawAppointment(inAppointment,inAnimate);}},drawVisibleAppointments:function(inAnimate){if(this.mAppointments){this.mBannerCounts=new Object();$H(this.mAppointments).each(function(currentAppt){if(currentAppt.value.displayNodes){currentAppt.value.displayNodes.each(function(currentNode){if(currentNode.overlaps)delete currentNode.overlaps;});}}.bind(this));this.mMonthBannerLimit=Math.floor((this.mMonthGridSize[1]-this.mBannerHeight)/(this.mBannerHeight+3));var scannedNodes=new Object();var isMonthView=Element.visible('calendar_grid_month_view');$H(this.mAppointments).each(function(currentAppt){if(currentAppt.value.dtstart){var dt=createDateObjFromISO8601(currentAppt.value.dtstart,!currentAppt.allDay);for(var i=0;i<Math.max(durationFromISO8601(currentAppt.value.duration).days,1);i++){var dtkey=dateObjToISO8601(dt,!currentAppt.allDay).match(/\d{8}/)[0];if(!this.mBannerCounts[dtkey])this.mBannerCounts[dtkey]=0;this.mBannerCounts[dtkey]++;dt.setDate(dt.getDate()+1);}}
var sectionAxis=isMonthView||currentAppt.value.allDay?1:0;var overlapAxis=isMonthView||currentAppt.value.allDay?0:1;this.updateRectsForAppointment(currentAppt.value);currentAppt.value.displayNodes.each(function(currentNode){if(currentNode.rect){var sectionName=sectionAxis+'_'+currentNode.rect[sectionAxis];if(!scannedNodes[sectionName])scannedNodes[sectionName]=[];scannedNodes[sectionName].each(function(otherNode){var highestBeginning=Math.max(otherNode.rect[overlapAxis],currentNode.rect[overlapAxis]);var lowestEnding=Math.min((otherNode.rect[overlapAxis]+otherNode.rect[overlapAxis+2]),(currentNode.rect[overlapAxis]+currentNode.rect[overlapAxis+2]));if(highestBeginning<lowestEnding){otherNode.overlaps=otherNode.overlaps||{index:0,total:1};otherNode.overlaps.total++;currentNode.overlaps={index:otherNode.overlaps.index+1,total:otherNode.overlaps.total};}}.bind(this));scannedNodes[sectionName].push(currentNode);}}.bind(this));}.bind(this));if(Element.visible('calendar_grid_month_view')){$A(d.getElementsByClassName('calendar_grid_month_day')).each(function(elm){if(elm.id){var bc=this.mBannerCounts[elm.id.match(/\d{8}/)[0]];if(!bc)bc=0;var a=elm.down('a');if(!a){a=Builder.node('a',{href:'#'});a.onclick=this.handleMonthMoreButtonClick;elm.appendChild(a);}
replaceElementContents(a,String.format(Loc.more_link_format,{count:bc}));a.style.display=(bc>this.mMonthBannerLimit?'':'none');}}.bind(this));}
$H(this.mAppointments).each(function(currentAppt){this.drawAppointment(currentAppt.value,inAnimate);}.bind(this));if(this.mParallelAnimations){new Effect.Parallel(this.mParallelAnimations,{});delete this.mParallelAnimations;}}},syncWithRows:function(inRows,inAnimate){if(!this.mAppointments)this.mAppointments=new Object();var syncStatus=Array.syncKeyedArrayWithRows(this.mAppointments,inRows);syncStatus.deletedRows.each(function(appt){this.removeAppointment(appt,inAnimate);}.bind(this));this.drawVisibleAppointments(inAnimate);},updateRectsForAppointment:function(inAppointment,inOptRecursion){var isMonthView=Element.visible('calendar_grid_month_view');var recursion=inOptRecursion||0;var startDate=createDateObjFromISO8601(inAppointment.dtstart,!inAppointment.allDay);var duration=durationFromISO8601(inAppointment.duration);if(recursion==0){inAppointment.displayNodes=inAppointment.displayNodes||[];inAppointment.displayNodes.each(function(currentNode){currentNode.rect=null;});}
if(!startDate)return false;if(recursion==0)inAppointment.time_string=Loc.getTimeRangeDisplayString(startDate,duration);if(inAppointment.allDay||isMonthView){var days=duration.days||0;for(var i=0;i<recursion;i++){startDate.setDate(startDate.getDate()+inAppointment.displayNodes[i].days);days-=inAppointment.displayNodes[i].days;}
days=Math.min(days,7-startDate.getDay());if(recursion==0&&(!inAppointment.allDay))days=Math.max(days,1);if(days<=0)return false;var rect=null;var prefix=isMonthView?'calendar_grid_month_day_':'calendar_grid_week_banner_slot_';var startElement=$(prefix+parseInt(dateObjToISO8601(startDate,inAppointment.allDay)));var endDate=new Date(startDate.getTime());endDate.setDate(endDate.getDate()+days-1);var endElement=$(prefix+parseInt(dateObjToISO8601(endDate,inAppointment.allDay)));if(startElement&&endElement){var startOffsetElement=IEFixes.isIE?(isMonthView?startElement.parentNode.parentNode:startElement.parentNode):startElement;var endOffsetElement=IEFixes.isIE?(isMonthView?endElement.parentNode.parentNode:endElement.parentNode):endElement;rect=[startOffsetElement.offsetLeft,startElement.offsetTop,50,this.mBannerHeight];if(isMonthView)rect[1]+=this.mBannerHeight;rect[2]=endOffsetElement.offsetLeft+endElement.offsetWidth-rect[0]+this.mWeekEventElementOffsets[2];}
if(inAppointment.displayNodes.length<=recursion)inAppointment.displayNodes[recursion]=new Object();Object.extend(inAppointment.displayNodes[recursion],{days:days,rect:rect});}
else{var hours=duration.hours||0;if(duration.minutes)hours+=(duration.minutes/60);for(var i=0;i<recursion;i++){startDate.setDate(startDate.getDate()+1);startDate.setHours(0);startDate.setMinutes(0);startDate.setSeconds(0);hours-=inAppointment.displayNodes[i].hours;}
hours=Math.min(hours,24-startDate.getHours()-(startDate.getMinutes()/60));if(hours<=0)return false;var rect=null;if(compareDateWeeks(startDate,this.mDatePicker.mSelectedDate)){var cloneElm=$$('#calendar_grid_week_events_columns .calendar_grid_week_column_'+startDate.getDay()+' .calendar_grid_week_row_'+startDate.getHours())[0];hours=Math.max(hours,0.25);var rect=[cloneElm.offsetLeft,cloneElm.offsetTop+((startDate.getMinutes()/60)*this.mWeekGridSize[1]),cloneElm.offsetWidth,hours*this.mWeekGridSize[1]];this.mWeekEventElementOffsets.each(function(offset,i){rect[i]+=offset;});if(IEFixes.isIE)rect[0]+=cloneElm.parentNode.offsetLeft;}
if(inAppointment.displayNodes.length<=recursion)inAppointment.displayNodes[recursion]=new Object();Object.extend(inAppointment.displayNodes[recursion],{hours:hours,rect:rect});}
this.updateRectsForAppointment(inAppointment,++recursion);return true;},getHoursForDuration:function(inDuration){var hours=inDuration.hours||0;if(inDuration.minutes)hours+=(inDuration.minutes/60);return(hours==0?null:hours);},getDurationForHours:function(inHours){var duration={hours:Math.floor(inHours)};var r=inHours-duration.hours;if(r>0)duration.minutes=Math.floor(60*r);return duration;}}
Loc.tooltips['edit_button']=Loc.tooltips['edit_button_calendar'];Loc.tooltips['add_button']=Loc.tooltips['add_button_calendar'];Loc.tooltips['remove_button']=Loc.tooltips['remove_button_calendar'];if(window.loaded)loaded('calaccess.js');