<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<library>

	<!---
		Create the visual output for the viewstates: days, months, weeks 
		and navigation between the viewstates
	 -->
	<class name="lzCalendarGrid" extends="view" x="204" y="26" bgcolor="0xFFFFFF"
					width="${ parent.width - 204 }" height="${ parent.height-26 }" >
		
		<attribute name="currentDate" value="null" />
		<attribute name="currentWeek" value="0" type="number" />
		<attribute name="currentDay" value="0" type="number" />
		<attribute name="viewType" value="month" type="string" />
		
		<!---
			Prevent from re-rendering when switching the viewState 
		 -->
		<attribute name="reRenderLock" value="false" type="boolean" />
		
		<!---
			A reference to the current selected calendar event view
		 -->
		<attribute name="calendarEvent" value="null" />
		
		<!---
			Thrown whenever the user scrolls the day or week view
		 -->
		<event name="onScollContent" />
		
		<!---
			Thrown when the user clicks on the date header in week or on the 
			date text in the week view
		 -->
		<event name="onSelectDate" />
		
		<!---
			Thrown when the user clicks in the empty space in a date in the month view
		 -->
		<event name="onNewEventDate" />
		
		<!---
			Thrown when the user selects a date in the day or week view
			in this event the user chooses two dates as he 
			can drag an area in the calendar
			start and end can be found in: tStartDate,tEndDate
		 -->
		<event name="onStartEndDate" />
		
		<attribute name="tStartDate" value="null" />
		<attribute name="tEndDate" value="null" />
		
		<method name="setCurrentDate" args="tDate">
			if (this.currentDate != tDate) {
				this.currentDate = tDate;
			}
		</method>
		
		<method name="selectStartEndDateTime" args="tStartDate,tEndDate">
			this.tStartDate = tStartDate;
			this.tEndDate = tEndDate;
			this.onStartEndDate.sendEvent(null);
		</method>
		
		<method name="checkAndShow" args="tDate,dayIndex,weekIndex">
			this.setCurrentDate(tDate);
			this.currentWeek = weekIndex + 1; //the index in the xml dataset list construct starts counting with 1
			this.currentDay = dayIndex + 1; //the index in the xml dataset list construct starts counting with 1
			if (this.viewType == "day") {
				this.setAttribute("viewType","none");
				this.showDay();
			} else if (this.viewType == "week") {
				this.setAttribute("viewType","none");
				this.showWeek();
			}
		</method>
		
		<method name="isCurrentMonth" args="tMonth">
			if (this.currentDate == null) {
				if ($debug) Debug.warn("currentDate is NULL ");
				return false;
			}
			return (tMonth == this.currentDate.getMonth());
		</method>
		
		<method name="showDay">
			if ($debug) Debug.write("Show Day ",this.currentDay,this.currentWeek);
			this.setAttribute("reRenderLock",false);
			this.setAttribute("viewType","day");
		</method>
		
		<method name="showWeek">
			this.setAttribute("reRenderLock",true);
			this.setAttribute("viewType","week");
			this.setAttribute("reRenderLock",false);
		</method>
		
		<method name="showMonth">
			this.setAttribute("reRenderLock",true);
			this.setAttribute("viewType","month");
			this.setAttribute("reRenderLock",false);
		</method>
		
		<method name="selectCalendarEvent" args="tRef">
			if ($debug) Debug.write("selectCalendarEvent ",tRef);
			this.setAttribute("calendarEvent",tRef);
		</method>
		
		<!-- 
			The day grid
		 -->
		<state name="day" applied="${ classroot.viewType == 'day' }">
		
			<lzDayView currentDay="${ classroot.currentDay }">
				<handler name="oninit">
					this.setAttribute("datapath","getAppointmentsByWeekCalendarResponse/return["+classroot.currentWeek+"]");
				</handler>
			</lzDayView>
			
		</state>
		
		<!-- 
			The week grid
		 -->
		<state name="week" applied="${ classroot.viewType == 'week' }">
		
			<!-- A week view is nothing else then 7 days next to each other -->
			<lzDayView currentDay="${ classroot.currentDay }" singleDayView="false" daysPerWeek="7"
						reRenderLock="${ classroot.reRenderLock }">
				<handler name="oninit">
					this.setAttribute("datapath","getAppointmentsByWeekCalendarResponse/return["+classroot.currentWeek+"]");
				</handler>
			</lzDayView>
			
		</state>
		
		<!-- 
			The month grid
		 -->
		<state name="month" applied="${ classroot.viewType == 'month' }">
		
			<lzMonthView />
			
		</state>
		
	</class>
	
	<class name="textHourHelper" extends="text" height="30" 
		width="40" fgcolor="0x666666" />

</library>