YAHOO.namespace("search");

YAHOO.search.isAccommodation = false;
YAHOO.search.hasEndDate = true;
YAHOO.search.maxDateLimit = 14;

YAHOO.search.setIsAccommodation = function(isAcc) {
	YAHOO.search.isAccommodation = isAcc;
}

YAHOO.search.setHasEndDate = function(hasEnd) {
	YAHOO.search.hasEndDate = hasEnd;
}

YAHOO.search.setMaxDateLimit = function(maxDateLimit) {
	YAHOO.search.maxDateLimit = maxDateLimit;
}

YAHOO.search.initCalendars = function(currentDateString) {
	var currentDate = YAHOO.calendar.common.stringToDate(currentDateString);
	
	YAHOO.search.startDate = new YAHOO.widget.CalendarGroup("searchStartDateCalendar","searchStartDateCalendarContainer", {PAGES:2});
    YAHOO.search.startDate.cfg.setProperty("mindate", currentDate);
	YAHOO.calendar.common.translate(YAHOO.search.startDate);
	var searchStartDateInput = $$(".searchStartDateInput")[0];
	var startDate = YAHOO.calendar.common.stringToDate(searchStartDateInput.value);
	YAHOO.search.startDate.select(startDate);
	YAHOO.search.startDate.cfg.setProperty("pagedate", startDate); 				
	YAHOO.search.startDate.render();
	$$(".searchStartDateButton").each(
		function(element) {
			Event.observe(element, "click", YAHOO.search.showStartDateCalendar);
		}
	);
	searchStartDateInput.readOnly = true;
	searchStartDateInput.onfocus = function(event) {
		this.blur();
	}
	YAHOO.search.startDate.selectEvent.subscribe(YAHOO.search.handleStartDateSelect, YAHOO.search.startDate, true);
	YAHOO.calendar.common.calendars.push(YAHOO.search.startDate);
	Event.observe($("searchStartDateCalendarContainer"), "click", function(event) {
		YAHOO.calendar.common.lastClicked = YAHOO.search.startDate; 
	});
	
	if (YAHOO.search.isAccommodation) {
		YAHOO.search.nightsCount = Ext.getCmp('request.nightsCount');
		YAHOO.search.nightsCount.on("select", YAHOO.search.handleNightsCountChange);	
	}
	
	if (YAHOO.search.hasEndDate) {
		YAHOO.search.endDate = new YAHOO.widget.CalendarGroup("searchEndDateCalendar","searchEndDateCalendarContainer", {PAGES:2});
		YAHOO.calendar.common.translate(YAHOO.search.endDate);
		var searchEndDateInput = $$(".searchEndDateInput")[0];
		var endDate = YAHOO.calendar.common.stringToDate(searchEndDateInput.value);
		YAHOO.search.endDate.select(endDate);
		YAHOO.search.endDate.cfg.setProperty("pagedate", endDate);
		YAHOO.search.endDate.render();
		YAHOO.search.updateEndDateCalendar(); 				
		$$(".searchEndDateButton").each(
			function(element) {
				Event.observe(element, "click", YAHOO.search.showEndDateCalendar);
			}
		);
		searchEndDateInput.readOnly = true;
		searchEndDateInput.onfocus = function(event) {
			this.blur();
		}
		YAHOO.search.endDate.selectEvent.subscribe(YAHOO.search.handleEndDateSelect, YAHOO.search.endDate, true);
		YAHOO.calendar.common.calendars.push(YAHOO.search.endDate);
		Event.observe($("searchEndDateCalendarContainer"), "click", function(event) {
			YAHOO.calendar.common.lastClicked = YAHOO.search.endDate; 
		});
	}
}


YAHOO.search.showStartDateCalendar = function() {
	YAHOO.calendar.common.lastClicked = YAHOO.search.startDate;
	var startDate = YAHOO.search.startDate.getSelectedDates()[0];
    YAHOO.search.startDate.cfg.setProperty("pagedate", startDate); 				
    YAHOO.search.startDate.render();
	YAHOO.search.startDate.show();
}

YAHOO.search.showEndDateCalendar = function() {
	YAHOO.calendar.common.lastClicked = YAHOO.search.endDate; 
	var endDate = YAHOO.search.endDate.getSelectedDates()[0];
    YAHOO.search.endDate.cfg.setProperty("pagedate", endDate);
    YAHOO.search.endDate.render();
	YAHOO.search.endDate.show();
}

YAHOO.search.handleStartDateSelect = function(type,args,obj) { 
    var date = args[0][0]; 
    var year = "" + date[0], month =  "" + date[1], day = "" + date[2];
    var fullDate = new Date(0);
    fullDate.setFullYear(year,month - 1,day);
    $$(".searchStartDateInput")[0].value = dateFormat(fullDate, YAHOO.calendar.common.dateFormat.toLowerCase()); 
    
    if (YAHOO.search.hasEndDate) {
	    YAHOO.search.updateEndDateCalendar();
    }
    YAHOO.search.startDate.hide();
}

YAHOO.search.updateEndDateCalendar = function() {
	var startDate = YAHOO.search.startDate.getSelectedDates()[0];

	var minDiff;
	if (YAHOO.search.isAccommodation) {
		minDiff = 1;
	} else {
		minDiff = 0;
	}

	var minDate = YAHOO.widget.DateMath.add(startDate, YAHOO.widget.DateMath.DAY, minDiff);
    YAHOO.search.endDate.cfg.setProperty("mindate", minDate);
    
	var maxDate = YAHOO.widget.DateMath.add(startDate, YAHOO.widget.DateMath.DAY, minDiff + YAHOO.search.maxDateLimit);
    YAHOO.search.endDate.cfg.setProperty("maxdate", maxDate);

    if (YAHOO.search.isAccommodation) {
    	nightsCount = parseInt(YAHOO.search.nightsCount.getValue(), 10);
    	var endDate = YAHOO.widget.DateMath.add(startDate, YAHOO.widget.DateMath.DAY, nightsCount);
    } else {
    	var endDate = YAHOO.search.endDate.getSelectedDates()[0];
    	if (YAHOO.widget.DateMath.after(minDate, endDate)) {
    		endDate = minDate;
    	}
    	if (YAHOO.widget.DateMath.before(maxDate, endDate)) {
    		endDate = maxDate;
    	}
    }

	YAHOO.search.endDate.select(endDate);
    YAHOO.search.endDate.cfg.setProperty("pagedate", endDate); 				
				
	YAHOO.search.endDate.render();
}

YAHOO.search.handleNightsCountChange = function() {
    var nightsCount = parseInt(YAHOO.search.nightsCount.getValue(), 10);
	var startDate = YAHOO.search.startDate.getSelectedDates()[0];

    var endDate = YAHOO.widget.DateMath.add(startDate, YAHOO.widget.DateMath.DAY, nightsCount);
	YAHOO.search.endDate.select(endDate);
    YAHOO.search.endDate.cfg.setProperty("pagedate", endDate); 				
				
	YAHOO.search.endDate.render();
}

YAHOO.search.handleEndDateSelect = function(type,args,obj) { 
    var date = args[0][0]; 
    var year = "" + date[0], month =  "" + date[1], day = "" + date[2];
    
    var fullDate = new Date(0);
    fullDate.setFullYear(year,month - 1,day);
    $$(".searchEndDateInput")[0].value = dateFormat(fullDate, YAHOO.calendar.common.dateFormat.toLowerCase());
    
	var startDate = YAHOO.search.startDate.getSelectedDates()[0];
	var endDate = YAHOO.search.endDate.getSelectedDates()[0];
    if (YAHOO.search.isAccommodation) {
    	YAHOO.search.nightsCount.setValue(YAHOO.widget.DateMath.getDayOffset(endDate, 2000) - YAHOO.widget.DateMath.getDayOffset(startDate, 2000));
    }
	YAHOO.search.endDate.hide();
}
