/**
 * @fileoverview Zapatec Calendar widget. Include this file in your HTML page.
 * Includes Zapatec Calendar modules: calendar-core.js, calendar-date-core.js, calendar-setup.js.
 *
 * <pre>
 * Copyright (c) 2004-2006 by Zapatec, Inc.
 * http://www.zapatec.com
 * 1700 MLK Way, Berkeley, California,
 * 94709, U.S.A.
 * All rights reserved.
 * </pre>
 */

/**
 * @private Get path to this script
 */
if (!window.Zapatec || (Zapatec && !Zapatec.include)) {
	alert("You need to include zapatec.js file!");
} else {
	Zapatec.calendarPath = Zapatec.getPath();
	
	// Include required scripts
	Zapatec.Transport.include(Zapatec.calendarPath + 'calendar-core.js');
	Zapatec.Transport.include(Zapatec.calendarPath + 'calendar-date-core.js');
	Zapatec.Transport.include(Zapatec.calendarPath + 'calendar-setup.js');
}



window.calendar = null;		/**< global object that remembers the calendar */

// initialize the preferences object;
// embed it in a try/catch so we don't have any surprises
try {
	Zapatec.Calendar.loadPrefs();
} catch(e) {};
Zapatec.Utils.addEvent(window, "load", Zapatec.Utils.checkActivation);



			var startDate;
			var endDate;
			var callbacks = 0;
			function resetDates() {
				startDate = endDate = null;
			}
			/*
			* Given two dates (in seconds) find out if date1 is bigger, date2 is bigger or
			 * they're the same, taking only the dates, not the time into account.
			 * In other words, different times on the same date returns equal.
			 * returns -1 for date1 bigger, 1 for date2 is bigger 0 for equal
			 */

			function compareDatesOnly(date1, date2) {
				var year1 = date1.getYear();
				var year2 = date2.getYear();
				var month1 = date1.getMonth();
				var month2 = date2.getMonth();
				var day1 = date1.getDate();
				var day2 = date2.getDate();

				if (year1 > year2) {
					return -1;
				}
				if (year2 > year1) {
					return 1;
				}

				//years are equal
				if (month1 > month2) {
					return -1;
				}
				if (month2 > month1) {
					return 1;
				}

				//years and months are equal
				if (day1 > day2) {
					return -1;
				}
				if (day2 > day1) {
					return 1;
				}
				//days are equal
				return 0;
			}

			function filterDates1(cal) {
				startDate = cal.date;
				var o = document.getElementById("calendar2");
				o.innerHTML = "";
				var tomorrow = new Date(cal.date.getTime() + 86401000);
				cal.date = tomorrow;
				var calDep = Zapatec.Calendar.setup({
					timeFormat     :    "24",
					showsTime      :    false,          //no time
					electric       :    true,
					dateStatusFunc :    dateInRange2, //the function to call
					onUpdate       :    filterDates2,
					weekNumbers	   :    false,
					showOthers     :    true,
					flat           :    calendar2,
					flatCallback   :    flatCalendarCallback2,
					date           :    tomorrow
				});
				setStartDate(startDate);
				setEndDate(tomorrow);
			}
			
			function setEndDate(date) {
				endDate = date;
				document.requirements.departureInput.value = date.print(DATE_FORMAT);
				updateDrop("departure");
			}
			
			function setStartDate(date) {
				startDate = date;
				document.requirements.arrivalInput.value = date.print(DATE_FORMAT);
				updateDrop("arrival");
			}

			function filterDates2(cal) {
				endDate = cal.date;
				setEndDate(endDate);
			}

			function dateInRange1(date) {
				if (endDate != null) {
				}

				//disable days prior to today
				var today = new Date();
				var compareToday = compareDatesOnly(date, today);
				if (compareToday > 0) {
					return(true);
				}
				//all other days are enabled
				return false;
				return(ret);
			}


			function dateInRange2(date) {
				if (startDate != null) {
					// Disable dates before start date
					var compareDays = compareDatesOnly(startDate, date);
					if  (compareDays < 0) {
						return (true);
					}

					// Hilight end date with "edges" style
					if  (compareDays == 0) {
						{return "edges";}
					}

					// Hilight inner dates with "between" style
					if ((endDate != null) && (date > startDate) && (date < endDate)) {
						return "between";
					} 
				} 

				var now = new Date();
				if (compareDatesOnly(now, date) < 0) {
					return (true);
				}

				//all other days are enabled
				return false;
			}
	
	
		function updateDrop(dateType) {
			var f = document.requirements;
			var str = eval("f." + dateType + "Input.value");
			if (DATE_FORMAT == "%d/%m/%Y") {
				var d = new Date(str.substr(6,4) + "/" + str.substr(3,2) + "/" + str.substr(0,2));
			} else {
				var d = new Date(str.substr(6,4) + "/" + str.substr(0,2) + "/" + str.substr(3,2));
			}
			setIndex(eval("f." + dateType + "_day"), d.getDate()-1);
			setIndex(eval("f." + dateType + "_month"), d.getMonth());
			setIndex(eval("f." + dateType + "_year"), getYearIndex(eval("f." + dateType + "_year"), d.getFullYear()));
		}
		
		function getYearIndex(obj, year) {
			var found = false;
			var i = 0;
			var index = 0;
			do {
				if (obj[i].value == year) {
					found = true;
					index = i;
				}
				i++;
			} while (!found && i < 20);
			return index;
		}
		
		function setIndex(obj, index) {
			obj.selectedIndex = index;
		}
		
		function changeDrop(dateType) {
			var f = document.requirements;
			var d = eval("f." + dateType + "_day[f." + dateType + "_day.selectedIndex].value");
			var m = parseInt(eval("f." + dateType + "_month[f." + dateType + "_month.selectedIndex].value"))+1;
			var y = eval("f." + dateType + "_year[f." + dateType + "_year.selectedIndex].value");
			var date = new Date(y + "/" + m + "/" + d);
			
			if (dateType == "arrival") {
				startDate = date;
				var o = document.getElementById("calendar1");
				o.innerHTML = "";
				var cal2 = new Zapatec.Calendar.setup({
					showsTime      :     false,          //no time
					electric       :     true,
					dateStatusFunc :    dateInRange1, //the function to call
					onUpdate       :    filterDates1,
					weekNumbers	   :    false,
					showOthers     :    true,
					flat	       :    calendar1,
					flatCallback   :    flatCalendarCallback1,
					date		   :    startDate
				});  
				filterDates1(cal2);
			} else {
				var o = document.getElementById("calendar2");
				o.innerHTML = "";
				var calDep = new Zapatec.Calendar.setup({
					showsTime      :     false,          //no time
					electric       :     true,
					dateStatusFunc :    dateInRange2, //the function to call
					onUpdate       :    filterDates2,
					weekNumbers	   :    false,
					showOthers     :    true,
					flat	       :    calendar2,
					flatCallback   :    flatCalendarCallback2,
					date		   :    date
				});  
				
				filterDates2(calDep);
			}
		}