/*
	iCalendar (Interval Calendar)
	Version: 0.1
	Author: John Peloquin (john@whardy.com)
	Date: 05/12/08
	Description:
		Extension of the YUI Calendar control designed for user
		selection of an interval of dates.
	
	Dependencies:
		- YUI Calendar control (and dependencies) version 2.5.1+
*/

YAHOO.namespace('whardy');

YAHOO.whardy.iCalendar = function(ctr, cfg) {
	this.interval_instance = {
		select_state: 0,
		select_ignore: false
	};
	
	if(YAHOO.lang.isUndefined(cfg)) {
		var cfg = {};
	}
	
	cfg.multi_select = true;
	
	YAHOO.whardy.iCalendar.superclass.constructor.call(this, ctr, cfg);
	
	this.selectEvent.subscribe(this.onIntervalSelect, this, true);
	this.deselectEvent.subscribe(this.onIntervalDeselect, this, true);

}; YAHOO.lang.extend(YAHOO.whardy.iCalendar, YAHOO.widget.Calendar);

YAHOO.whardy.iCalendar.prototype.dateString = function(d) {
	return (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
};

YAHOO.whardy.iCalendar.prototype.dateIntervalString = function(d_lower, d_upper) {
	return this.dateString(d_lower) + '-' + this.dateString(d_upper);
};

YAHOO.whardy.iCalendar.prototype.getIntervalLowerDate = function() {
	var dates = this.getSelectedDates();
	if(dates.length != 0) {
		return dates[0];
	}
	else {
		return null;
	}
};

YAHOO.whardy.iCalendar.prototype.getIntervalUpperDate = function() {
	var dates = this.getSelectedDates();
	if(dates.length != 0) {
		return dates[dates.length - 1];
	}
	else {
		return null;
	}
};

YAHOO.whardy.iCalendar.prototype.setInterval = function(lower, upper) {
	var a = lower.split('/');
	this.cfg.setProperty('selected', lower + '-' + upper, false);
	this.cfg.setProperty('pagedate', a[0] + '/' + a[2], false);
	this.interval_instance.select_state = 2;
}

YAHOO.whardy.iCalendar.prototype.resetInterval = function() {
	this.cfg.setProperty('selected', [], false);
	this.interval_instance.select_state = 0;
}

YAHOO.whardy.iCalendar.prototype.onIntervalSelect = function(type, args, obj) {
	if(!this.interval_instance.select_ignore) {
		this.interval_instance.select_state = (this.interval_instance.select_state + 1) % 3;
		if(this.interval_instance.select_state == 0) {
			this.deselectAll();
			this.cfg.setProperty('selected', this.dateString(this.toDate(args[0][0])), false);
			this.render();
			this.interval_instance.select_state = 1;
		}
		else {
			var dates = this.getSelectedDates();
			if(dates.length > 1) {
				this.interval_instance.select_ignore = true;
				this.select(this.dateIntervalString(dates[0], dates[dates.length - 1]));
				this.interval_instance.select_ignore = false;
				this.render();
				return false;
			}
		}
	}
};

YAHOO.whardy.iCalendar.prototype.onIntervalDeselect = function(type, args, obj) {
	if(this.interval_instance.select_state != 0) {
		var d = this.toDate(args[0]);
		var s = this.dateString(d);
		var dates = this.getSelectedDates();
		if(dates.length != 0) {
			s += (',' + this.dateIntervalString(dates[0], dates[dates.length - 1]));
		}
		this.cfg.setProperty('selected', s, false);
		this.interval_instance.select_state = 0;
		this.deselectAll();
		this.select(d);
		this.render();
		return false;
	}
};


