var DateRangeSelector = function(options) {
	var defaults = {
		fromTxt: '#from',
		toTxt: '#to',
		minDate: null,
		minDateRange: 1,
		todayMin: true,
		datePickedCallback: null,
		datePickerOptions: {}
	};
	
	var t = this;
	var _options = $.extend({}, defaults, options);
	var _datePickerOptions = $.extend({}, {}, _options.datePickerOptions);
	
	var today = new Date();
	if(_options.minDate) {
		_options.minDate = new Date(Date.parse(_options.minDate));
		if(_options.minDate < today && _options.todayMin)
			_options.minDate = today;
	} else {
		_options.minDate = today;
	}
	
	var _txtFrom = $(_options.fromTxt);
	var _txtTo = $(_options.toTxt);
	var _beforeShowFrom = null;
	var _minDate;
	
	var tryGetDate = function(txt) {
		try {
			var dt = Date.parse(txt);
			return dt;
		} catch(err) { }
		return null;
	}
	
	this.setStartDate = function(dateText) {
		var oldDate = tryGetDate(_txtFrom.val());
		_txtFrom.val(dateText);
		
		var changeDate = false;
		if(_txtTo.val())
			changeDate = true;
		
		this.startDateChanged(dateText, oldDate, changeDate);
	};
	
	this.startDateChanged = function(dateText, formerDate, setNewDate) {
		var from = tryGetDate(dateText);
		if(!from)
			return;
		
		var to = tryGetDate(_txtTo.val());
		var diff = 0;
		if(to && formerDate) {
			diff = Math.round( Math.abs(to - formerDate));
		}
		if(!diff)
			diff = 259200000;
		
		var newTo = new Date(from + diff);
		
		if(_txtTo.attr('disabled')) {
			_txtTo.removeAttr('disabled');
			_txtTo.datepicker(_datePickerOptions);
		}
		
		if(setNewDate)
			_txtTo.val((newTo.getMonth() + 1) + '/' + newTo.getDate() + '/' +  newTo.getFullYear());
		_txtTo.datepicker('option', 'minDate', new Date(from + (86400000 * _options.minDateRange)));
	};
	
	var dtoptions = {
		beforeShow: function(inst) {
			_beforeShowFrom = tryGetDate($(inst).val());
		},
		onSelect: function(dateText) {
			t.startDateChanged(dateText, _beforeShowFrom, true);
			if(_options.datePickedCallback)
				_options.datePickedCallback(dateText);
		},
		minDate: _options.minDate
	};
	
	var finalOptions = $.extend({}, dtoptions, _datePickerOptions);
	
	_txtFrom.datepicker(finalOptions);
	
	if(!_txtFrom.val())
		_txtTo.attr('disabled', 'disabled');
	else {
		_txtTo.datepicker(_datePickerOptions);
		var from = tryGetDate(_txtFrom.val());
		if(from)
			_txtTo.datepicker('option', 'minDate', new Date(from + 86400000));
	}
};

function setByDateDate(date) {
	$.ajax({
		url: '/ClassLibrary/com/Calendar/Public.cfc?method=renderCalendar&startDate=' + date,
		dataType: 'text',
		success: function(data) {
			$('div.tabbody table.calendarthumb').parent().html(data);
		}
	});
}


$(document).ready(function () {
	var range = new DateRangeSelector({
		fromTxt: 'input#sd',
		toTxt: 'input#ed',
		minDateRange: 1,
		minDate: '1/1/1990',
		todayMin: false,
		datePickedCallback: setByDateDate
	});
	
	$('ul#calsearchtabs a').bind('click', function() {
		var name = $(this).attr('href');
		name = name.substring(name.indexOf('#') + 1);
		$('div.tabbody').hide();
		$('div.' + name).show();
		$('ul#calsearchtabs li').removeClass('selected');
		$(this).closest('li').addClass('selected');
		$('input[name="tab"]').val(name);
		
		return false;
	});
	
	$('div.tabbody td.norm a').live('click', function() {
		var td = $(this).closest('td');
		var day = $(this).text();
		var value = $(this).attr('href');
		value = value.substring(value.indexOf('?') + 3);
		
		var reg = /(\d+\/)\d+(\/\d+)/;
		var oldTD = $('div.tabbody td.currentdate');
		var oldDay = oldTD.text();
		var oldDate = value.replace(reg, '$1' + oldDay + '$2');
		
		td.children().remove();
		td.removeClass('norm')
			.addClass('currentdate')
			.text(day);
		
		// $('input#s').val(value);
		range.setStartDate(value);
		$('input#ed').val('');
		
		oldTD.html('');
		oldTD.removeClass('currentdate')
			.addClass('norm')
			.append($('<a />')
				.attr('href', '?s=' + oldDate)
				.text(oldDay)
		);
		
		return false;
	});
	
	$('div.tabbody td.previous a, div.tabbody td.next a').live('click', function() {
		var date = $(this).attr('href');
		date = date.substring(date.indexOf('?') + 3);
		// $('input#s').val(date);
		range.setStartDate(date);
		$('input#ed').val('');
		
		setByDateDate(date);
		
		return false;
	});
});

