

WDPRO_LOADER.addModule({ 
	  name: "bookingModule"
	, type: "js"
	, fullpath: "http://adisneyparks.disney.go.com/media/disneyparks/js/_global/modules/bookingModule.js"
	, varName: "WDPRO.dlr.BookingModule"
	, requires: ['yahoo', 'event', 'dom', 'calendar']
}); 



WDPRO_LOADER.require("bookingModule");

WDPRO_LOADER.addCallback(
	function() {
	
	

		var $D = YAHOO.util.Dom;
		var $E = YAHOO.util.Event;

		
		var moduleForm = $D.get("HomeBookingModuleNarrowForm");
		var tripTypesDiv = $D.getElementsByClassName("tripTypeSelection", "div", moduleForm)[0];
		var tripTypesRadios = $D.getElementsBy(
			function(el) {
				try {
					return (el.getAttribute("type").toUpperCase() == "RADIO");
				}
				catch (e) { }
			}
			, "input"
			, tripTypesDiv
		);

		var arriveDiv = document.createElement("div");

		var arriveTextField = document.createElement("input");
		arriveTextField.setAttribute("type", "text");
		

		var arriveTrigger = document.createElement("input");
		arriveTrigger.setAttribute("type", "button");
		$D.addClass(arriveTrigger, "calendarTrigger");

		arriveDiv.appendChild(arriveTextField);
		$D.insertBefore(arriveDiv, $D.get("arrivalDiv"));
		$D.insertAfter(arriveTrigger, arriveTextField);

		var arriveLabel = $D.getPreviousSibling(arriveDiv);
		$D.insertBefore(arriveLabel, $D.getChildren(arriveDiv)[0]);


		var departDiv = document.createElement("div");

		var departTextField = document.createElement("input");
		departTextField.setAttribute("type", "text");
		
		
		var departTrigger = document.createElement("input");
		departTrigger.setAttribute("type", "button");
		$D.addClass(departTrigger, "calendarTrigger");

		departDiv.appendChild(departTextField);
		$D.insertBefore(departDiv, $D.get("departureDiv"));
		$D.insertAfter(departTrigger, departTextField);

		var departLabel = $D.getPreviousSibling(departDiv);
		$D.insertBefore(departLabel, $D.getChildren(departDiv)[0]);


		$D.addClass(arriveDiv, "popupModuleContainer");
		$D.addClass(departDiv, "popupModuleContainer");


		var arriveErrorPanel = document.createElement("div");
		arriveErrorPanel.id = "arrivalErrorPanel";
		$D.addClass(arriveErrorPanel, "errorPanel");
		$D.insertBefore(arriveErrorPanel, arriveDiv);

		var departErrorPanel = document.createElement("div");
		departErrorPanel.id = "departureErrorPanel";
		$D.addClass(departErrorPanel, "errorPanel");
		$D.insertBefore(departErrorPanel, departDiv);

		var mainErrorPanel = document.createElement("div");
		mainErrorPanel.id = "mainErrorPanel";
		$D.addClass(mainErrorPanel, "errorPanel");
		$D.insertBefore(mainErrorPanel, arriveErrorPanel);
		
		

		var strDefaultArrivalDate = "11/27/2009";
		arriveTextField.setAttribute("value", strDefaultArrivalDate);
		
		var dtArriveDefault = new Date(strDefaultArrivalDate);
		var dtArriveMin = new Date("11/24/2009");
		var dtArriveMax = new Date("1/4/2010");
		
		var arrivalCalendarModule = new WDPRO.dlr.BookingModuleCalendar(
			{
				defaultDate: dtArriveDefault
				, minDate: dtArriveMin
				, maxDate: dtArriveMax
				, textField: arriveTextField
				, selectBoxes: {
					year: moduleForm.arrivalYear
					, month: moduleForm.arrivalMonth
					, day: moduleForm.arrivalDate
				}
				, container: arriveDiv
				, containerFocusedClass: "focused"
				, button: arriveTrigger
				, errorPanel: arriveErrorPanel
				, dateFormatErrorMessage: "Please format your arrival date as \"Month/Day/Year.\" For example, \"7/17/1955\"."
				, dateTooEarlyErrorMessage: "Please enter a later arrival date. Your arrival is not available."
				, dateTooLateErrorMessage: "Please enter a earlier arrival date. Your arrival is not available."
				, invalidDateErrorMessage: "Please enter a valid arrival date. Use the format \"Month/Day/Year.\" For example, \"7/17/1955\".a"
				, moduleName: "arrival module"
			}
		);

		var arrivalCalendar = arrivalCalendarModule.getCalendar();
		arrivalCalendar.select(strDefaultArrivalDate);
		arrivalCalendar.cfg.setProperty("pagedate", "11/2009");
		arrivalCalendar.cfg.setProperty("locale_weekdays", YAHOO.widget.Calendar.ONE_CHAR)
		arrivalCalendar.render();


		
		var strDefaultDepartureDate = "12/1/2009";
		departTextField.setAttribute("value", strDefaultDepartureDate);

		
		var dtDepartDefault = new Date(strDefaultDepartureDate);
		var dtDepartMin = new Date("11/26/2009");
		var dtDepartMax = new Date("1/5/2010");
		var departureCalendarModule = new WDPRO.dlr.BookingModuleCalendar(
			{
				defaultDate: dtDepartDefault
				,minDate: dtDepartMin
				, maxDate: dtDepartMax
				, textField: departTextField
				, selectBoxes: {
					year: moduleForm.departureYear
					, month: moduleForm.departureMonth
					, day: moduleForm.departureDate
				}
				, container: departDiv
				, containerFocusedClass: "focused"
				, button: departTrigger
				, errorPanel: departErrorPanel
				, dateFormatErrorMessage: "Please format your departure date as \"Month/Day/Year.\" For example, \"7/17/1955\"."
				, dateTooEarlyErrorMessage: "Please enter a later departure date. Your departure is not available."
				, dateTooLateErrorMessage: "Please enter a earlier arrival date. Your arrival is not available."
				, invalidDateErrorMessage: "Please enter a valid departure date. Use the format \"Month/Day/Year.\" For example, \"7/17/1955\"."
				, moduleName: "departure module"
			}
		);

		var departureCalendar = departureCalendarModule.getCalendar();
		departureCalendar.select(strDefaultDepartureDate);
		departureCalendar.cfg.setProperty("pagedate", "12/2009");
		departureCalendar.cfg.setProperty("locale_weekdays", YAHOO.widget.Calendar.ONE_CHAR)
		departureCalendar.render();


		var bookingModule = new WDPRO.dlr.BookingModule(
			{
				arrivalModule: arrivalCalendarModule
				, departureModule: departureCalendarModule
				, form: moduleForm
				, errorPanel: mainErrorPanel
				, submissionHandler: null
				, tripTypes: [{ elements: tripTypesRadios[1], minNightsRequired: 1, maxNightsAllowed: 30, defaultLOS: 2, minLOSErrorMessage: "Please enter a later departure date. Your length of stay is too short.", maxLOSErrorMessage: "Please enter an earlier departure date. Your length of stay is too long.", dateOrderErrorMessage: "Please enter a later departure date. Your departure date is before your arrival date.", departureConfig: { defaultDate: new Date('11/27/2009'), minDate: new Date('11/25/2009'), maxDate: new Date('1/3/2010')}, arrivalConfig: { defaultDate: new Date('11/25/2009'), minDate: new Date('11/24/2009'), maxDate: new Date('1/2/2010')}}, { elements: tripTypesRadios[0], minNightsRequired: 2, maxNightsAllowed: 30, defaultLOS: 4, minLOSErrorMessage: "Please enter a later departure date. Your length of stay is too short.", maxLOSErrorMessage: "Please enter an earlier departure date. Your length of stay is too long.", dateOrderErrorMessage: "Please enter a later departure date. Your departure date is before your arrival date.", departureConfig: { defaultDate: new Date('12/1/2009'), minDate: new Date('11/26/2009'), maxDate: new Date('1/5/2010')}, arrivalConfig: { defaultDate: new Date('11/27/2009'), minDate: new Date('11/24/2009'), maxDate: new Date('1/4/2010')}}]
			}
		);


	}
);
