    Figment.Import( 'Figment.EventHandler',Figment.getJSRoot() + '_framework/' );
    Figment.Import( 'Figment.DOM',Figment.getJSRoot() + '_framework/' );
    Figment.Import('Figment.Form',Figment.getJSRoot() + '_framework/');
    Figment.Import('Figment.Form.Validation',Figment.getJSRoot() + '_framework/');
    Figment.Import('Figment.Date',Figment.getJSRoot() + '_framework/');
    Figment.Import('Disney.WDPRO.IBC.ErrorHandling',Figment.getJSRoot() + '_global');
    
    Figment.Namespace('Disney.WDPRO.IBC.TravelDates');

   

    Disney.WDPRO.IBC.TravelDates = {
        
        objArrivalDate: null,
        objArrivalError: null,
        objDepartDate: null,
        objDepartError: null,
        bCheckDate: false,
        strDateFormat: 'mm/dd/yyyy',
        strDefaultArrivalDate: '',
        strDefaultDepartureDate: '',
        strDateOuput: '',
        objContinueBtn: null,
        objProductSelection: null,
        
        init: function () {
            //this.strDefaultArrivalDate = Disney.WDPRO.IBC.Rules.Landing.getDefaultArrivalDate();
            this.objArrivalDate = document.getElementById("travelDates_Arrival");
            //this.objArrivalDate.value = this.dateOutput(this.strDefaultArrivalDate);
            this.objArrivalError = document.getElementById("travelDates_Arrival_Error");
                        
            //this.strDefaultDepartureDate = Disney.WDPRO.IBC.Rules.Landing.getDefaultDepartureDate();
            this.objDepartDate = document.getElementById("travelDates_Departure");
            //this.objDepartDate.value = this.dateOutput(this.strDefaultDepartureDate);
            this.objDepartError = document.getElementById("travelDates_Departure_Error");
                        
            this.objContinueBtn = document.getElementById("continue");
            this.objProductSelection = document.getElementsByName("productSelection");          
        },		
        changeText: function (objTextField) {
            if(objTextField.value !== '' && objTextField.value === this.strDateFormat) {
                objTextField.value = '';
            }
            else if ( objTextField.value === '') {
                objTextField.value = this.strDateFormat.toLowerCase();
            }
            else if ( objTextField.value !== '' && objTextField.value !== this.strDateFormat) {
                objTextField.value = objTextField.value;
            }
        },
        
        showWarning: function ( objWarningDiv ) {
            objWarningDiv.style.display = 'block';
        },
        
        hideWarning: function ( objWarningDiv ) {
            objWarningDiv.style.display = 'none';
        },
        
        dateOutput: function (objDate) {
            
            var intMonth = objDate.getMonth() + 1;
            var strMonth = intMonth;
            var intDate = objDate.getDate();
            var strDate = intDate;
            var intYear = objDate.getFullYear();
            return strMonth + "/" + strDate + "/" + intYear;
        },
        
        convertDate: function ( strDate ) {
            // should be in mm/dd/yyyy
            var listArray = strDate.split(/[\/\.\-\s]/);
            if(listArray[2].length >= 4) {
                var strYear = listArray[2][2] + listArray[2][3];
            }
            var objDate = new Date(parseInt(listArray[2],10), parseInt(listArray[0],10)-1, parseInt(listArray[1],10));
            return objDate;     
        },
        
        checkDate: function ( strDate ) {
            return Figment.Form.Validation.isValidDate(strDate);
        },
        
        dateFormat: function (objDate) {
            if(objDate) {
                return objDate.toDateString();
            }
        },
        
        getSelectedPathType: function()
        {
            var buttons = Figment.DOM.getElementsByClassName('productSelectionBtn');
            var button;
            var i;
            var pathType = null;
            
            if ( buttons[ 0 ].type === 'hidden' )
            {
                pathType = buttons[ 0 ].value;
            }
            else
            {
                for( i=0; i < buttons.length; i++ )
                {
                    button = buttons[i];
                    if( button.checked  )
                    {
                        pathType = button.value;
                    }
    
                }
            }
            
            delete button;
            delete buttons;
            
            return pathType;
        }
        
    };
    
    Figment.Namespace('Disney.WDPRO.IBC.TravelDates.Rules');
    
    Disney.WDPRO.IBC.TravelDates.Rules = {
        
        refreshDateValues: function () {
            /*
            // only refresh arrival date if it hasnt been changed
            if(Disney.WDPRO.IBC.TravelDates.convertDate(Disney.WDPRO.IBC.TravelDates.objArrivalDate.value) > Disney.WDPRO.IBC.TravelDates.strDefaultArrivalDate ) {
                
            } else {
                //Disney.WDPRO.IBC.TravelDates.objArrivalDate.value = Disney.WDPRO.IBC.TravelDates.dateOutput(Disney.WDPRO.IBC.Rules.Landing.getDefaultArrivalDate());
            }
            
            // only refresh departure date if it hasn't been changed
            if(Disney.WDPRO.IBC.TravelDates.convertDate(Disney.WDPRO.IBC.TravelDates.objDepartDate.value) > Disney.WDPRO.IBC.TravelDates.strDefaultDepartureDate ) {
                
            } else {
                //Disney.WDPRO.IBC.TravelDates.objDepartDate.value = Disney.WDPRO.IBC.TravelDates.dateOutput(Disney.WDPRO.IBC.Rules.Landing.getDefaultDepartureDate());
            }
            
            */
        },
        
        validateArrivalDate: function (arrivalDate) {
            arrivalDate.value = Figment.Date.correctYear(arrivalDate.value);
            var bResult = Disney.WDPRO.IBC.Dates.isValid(new Date(arrivalDate.value),Disney.WDPRO.IBC.TravelDates.getSelectedPathType());
            if( !bResult )
            {
                arrivalDate.value = Disney.WDPRO.IBC.TravelDates.dateOutput( new Date( Disney.WDPRO.IBC.Dates.resetDefaultArrivalDate( Disney.WDPRO.IBC.TravelDates.getSelectedPathType() ) ) );
            }
            // validate that the departure date is fine
            this.validateDepartureDate(Disney.WDPRO.IBC.TravelDates.objDepartDate);
        },
        
        validateDepartureDate: function (departureDate) {
            departureDate.value = Figment.Date.correctYear(departureDate.value);
            
            var arrivalDate = document.getElementById("travelDates_Arrival");

            departureDate.value = Disney.WDPRO.IBC.TravelDates.dateOutput( new Date( Disney.WDPRO.IBC.Dates.resetDay( new Date(arrivalDate.value), new Date(departureDate.value), Disney.WDPRO.IBC.TravelDates.getSelectedPathType() ) ) );
            
            delete arrivalDate;
            
            /*
            var arrivalDate = new Date(Disney.WDPRO.IBC.TravelDates.objArrivalDate.value);
            var maxArrivalDate = new Date(Disney.WDPRO.IBC.Rules.Landing.getMaxArrivalDate());
            
            var desiredDepartureDate = new Date(departureDate.value);
            var defaultDepartureDate = new Date(Disney.WDPRO.IBC.Rules.Landing.getDefaultDepartureDate());
            var maxDepartureDate = new Date(Disney.WDPRO.IBC.Rules.Landing.getMaxDepartureDate());
            var minDepartureDate = new Date(Disney.WDPRO.IBC.Rules.Landing.getMinDepartureDate());
            
            if(desiredDepartureDate <= arrivalDate) {
                // departure date can NOT be less than the arrival date submitted by the guest
                Disney.WDPRO.IBC.ErrorHandling.addMessage(departureDate,'E000572');
            } else {
                Disney.WDPRO.IBC.ErrorHandling.removeMessage(departureDate,'E000572');
            }
            
            if(desiredDepartureDate > maxArrivalDate) {
                // departure date cannot be more than the max arrival date
                Disney.WDPRO.IBC.ErrorHandling.addMessage(departureDate,'E000575');
            } else {
                Disney.WDPRO.IBC.ErrorHandling.removeMessage(departureDate,'E000575');
            }
            
            if (desiredDepartureDate > maxDepartureDate) {
                // departure date can NOT be more than the max Departure Date
                Disney.WDPRO.IBC.ErrorHandling.addMessage(departureDate,'E000573');
            } else {
                Disney.WDPRO.IBC.ErrorHandling.removeMessage(departureDate,'E000573');
            }
            
            if (desiredDepartureDate < minDepartureDate) {
                // departure date can not be less than the minimum departure date
                Disney.WDPRO.IBC.ErrorHandling.addMessage(departureDate,'E000574');
            } else {
                Disney.WDPRO.IBC.ErrorHandling.removeMessage(departureDate,'E000574');
            }
            * */
        }
    };
    
    
    
    Figment.Namespace('Disney.WDPRO.IBC.TravelDates.Events');
    
    Disney.WDPRO.IBC.TravelDates.Events = {
                
        EVENT_arrivalTextField_onfocus: function ( evt ) {
            Disney.WDPRO.IBC.TravelDates.changeText(Disney.WDPRO.IBC.TravelDates.objArrivalDate);
        },
        
        EVENT_arrivalTextField_onblur: function ( evt ) {
	        var objWindowEvent = Figment.EventHandler.getEvent(evt);
            var arrivalDate = objWindowEvent.element;
                
            Disney.WDPRO.IBC.TravelDates.Rules.validateArrivalDate(arrivalDate);

	        var arrivalDateNew = new Date();
	        var departureDateNew = new Date();
			arrivalDateNew.setDate(arrivalDateNew.getDate()+5);
			departureDateNew.setDate(departureDateNew.getDate()+12);
			
			var enteredDate = new Date(Disney.WDPRO.IBC.TravelDates.objArrivalDate.value);
			var otherDeluxe = document.getElementById("ResortCategory_ODLX");
	        if (otherDeluxe && otherDeluxe.checked===true){
		        if ( enteredDate <= arrivalDateNew){
			        document.getElementById("travelDates_Arrival").value = Disney.WDPRO.IBC.TravelDates.dateOutput(arrivalDateNew);
			        document.getElementById("travelDates_Departure").value = Disney.WDPRO.IBC.TravelDates.dateOutput(departureDateNew);
		        
		        }
            }
	        delete otherDeluxe;
	        
	        if (document.getElementById("ResortCategory_I_KNOW").checked===true){
	        	var resortCode = document.getElementById("resortSelectionDropDown").value.substring(resortCategoryPrefix.length);
	            
	            if (resortCode === "SWN" || resortCode === "DOL"){
		            if ( enteredDate <= arrivalDateNew){
		            document.getElementById("travelDates_Arrival").value = Disney.WDPRO.IBC.TravelDates.dateOutput(arrivalDateNew);
		            document.getElementById("travelDates_Departure").value = Disney.WDPRO.IBC.TravelDates.dateOutput(departureDateNew);
		            }
	            }
	        }
        },
        
        EVENT_arrivalTextField_onkeypress: function ( evt ) {
            var objWindowEvent = Figment.EventHandler.getEvent(evt);

            // keyCode 13 is the Enter key
            if (objWindowEvent.event.keyCode === 13) {
                var arrivalDate = objWindowEvent.element;
                Disney.WDPRO.IBC.TravelDates.Rules.validateArrivalDate(arrivalDate);
                delete arrivalDate;
            }
        },
        
        
        EVENT_departureTextField_onfocus: function ( evt ) {
            Disney.WDPRO.IBC.TravelDates.changeText(Disney.WDPRO.IBC.TravelDates.objDepartDate);
        },
        
        EVENT_departureTextField_onblur: function ( evt ) {
         
            var objWindowEvent = Figment.EventHandler.getEvent(evt);
            var departureDate = objWindowEvent.element;
            Disney.WDPRO.IBC.TravelDates.Rules.validateDepartureDate(departureDate);
        },
        
        EVENT_departureTextField_onkeypress: function ( evt ) {
            var objWindowEvent = Figment.EventHandler.getEvent(evt);
            
            // keyCode 13 is the Enter key
            if (objWindowEvent.event.keyCode === 13) {
                var departureDate = objWindowEvent.element;
                Disney.WDPRO.IBC.TravelDates.Rules.validateDepartureDate(departureDate);
                delete departureDate;
            }
        },
		
		// onload, use the stored state cookie values if they exist:
		EVENT_useStoredStateCookieDates: function () {
	
			dtCookieArrive = Disney.WDPRO.IBC.Dates.cookieArrive;
			dtCookieDepart = Disney.WDPRO.IBC.Dates.cookieDepart;
			bUseSpecialOfferEndDate = document.getElementById("bUseSpecialOfferEndDate");
			if (dtCookieArrive != undefined && dtCookieDepart != undefined) {
				objArrivalDate = document.getElementById("travelDates_Arrival");
				objDepartDate = document.getElementById("travelDates_Departure");
				if(bUseSpecialOfferEndDate === undefined || bUseSpecialOfferEndDate === null) {
				  var difference = (new Date(dtCookieDepart).getTime() )- (new Date(dtCookieArrive).getTime());
                                  var daysDifference = Math.floor(difference/1000/60/60/24);
				if(daysDifference > 14)
				{ 
				   Disney.WDPRO.IBC.TravelDates.Rules.validateArrivalDate(new Date(dtCookieArrive));
				   Disney.WDPRO.IBC.TravelDates.Rules.validateDepartureDate(new Date(dtCookieDepart));
				}
				else{
				     objArrivalDate.value = Disney.WDPRO.IBC.TravelDates.dateOutput(new Date(dtCookieArrive));
			             objDepartDate.value = Disney.WDPRO.IBC.TravelDates.dateOutput(new Date(dtCookieDepart));
			}
			}
			}
			delete objArrivalDate;
			delete objDepartDate;
			delete dtCookieArrive;
			delete dtCookieArrive;
		},
        
        main: function ( evt ) {
		
            Disney.WDPRO.IBC.TravelDates.init();
            var objArrival = Disney.WDPRO.IBC.TravelDates.objArrivalDate;
            var objDeparture = Disney.WDPRO.IBC.TravelDates.objDepartDate;
            var objProductSelect = Disney.WDPRO.IBC.TravelDates.objProductSelection;
			
			// load events
            
            // arrival field
            if( objArrival !== null ) {
                Figment.EventHandler.addEvent(objArrival, 'focus', Disney.WDPRO.IBC.TravelDates.Events.EVENT_arrivalTextField_onfocus );
                Figment.EventHandler.addEvent(objArrival, 'blur', Disney.WDPRO.IBC.TravelDates.Events.EVENT_arrivalTextField_onblur );
                Figment.EventHandler.addEvent(objArrival, 'keypress', Disney.WDPRO.IBC.TravelDates.Events.EVENT_arrivalTextField_onkeypress );
            }

            // departure field
            if( objDeparture !== null ) {
                Figment.EventHandler.addEvent(objDeparture, 'focus', Disney.WDPRO.IBC.TravelDates.Events.EVENT_departureTextField_onfocus );
                Figment.EventHandler.addEvent(objDeparture, 'blur', Disney.WDPRO.IBC.TravelDates.Events.EVENT_departureTextField_onblur );
                Figment.EventHandler.addEvent(objDeparture, 'keypress', Disney.WDPRO.IBC.TravelDates.Events.EVENT_departureTextField_onkeypress );
            }

			Disney.WDPRO.IBC.TravelDates.Events.EVENT_useStoredStateCookieDates();
        }
        
    };
    
    Figment.EntryPoint.add( Disney.WDPRO.IBC.TravelDates.Events );

