var dateWidget = {

	getDaysInMonth: function(year, month) {
		return 32 - new Date(year, month, 32).getDate();
	},

	// get joined date string from multiple selects
	getDate: function(id) {
		
		var dateString = [];
		$.each(['_Y', '_m', '_d'], function(index, value)
		{
			dateString.push($('select#' + id + value).val());
		});
		return dateString.join('-');
	},
	
	// set multiple selects by single date string
	setDate: function(id, dateString) {
		dateString = dateString.split('-');
		
		$.each(['_Y', '_m', '_d'], function(index, value)
		{
			if($('select#' + id + value).val() !== dateString[index])
				$('select#' + id + value).val(dateString[index]).trigger('change');
		});
		
		return true;
	},
	
	limit: function(options, date) {
		if(options.setLower !== undefined && date > dateWidget.getDate(options.setLower))
			dateWidget.setDate(options.setLower, date);

		if(options.setHigher !== undefined && date < dateWidget.getDate(options.setHigher))
			dateWidget.setDate(options.setHigher, date);
	},
	
	defaultOptions:  {

		buttonImage				: '/css/dgvs/img/datepicker-icon-small.gif',
		buttonText				: 'Kalender',
		buttonImageOnly		: true,
		dateFormat				: 'yy-mm-dd',
		showAnim					: '',
		showOn						: 'button',
		numberOfMonths		: 2,
		shortYearCutoff		: '+30',
		showMonthAfterYear: false,
		beforeShow				: function(input, inst) { $(input).val(dateWidget.getDate(inst.settings.baseId));},
		onSelect					: function(date, inst) {
			dateWidget.setDate(inst.settings.baseId, date);
			dateWidget.limit(inst.settings, date);
/*
			if(inst.settings.setHigher !== undefined) {
				console.log('dp set higher: ', inst.settings.setHigher);
				//$('#' + inst.settings.setHigher + '_d').trigger('change');
			}

*/
		}

	},
	
	init: function() {

		$.fn.extend({disOpt: function(min, max) {
			// disable options of a select by their numeric value
			this.find('option').each(function(i, el) {
				el = $(el);
				if(el.val() < min || el.val() > max) el.attr('disabled', true).hide();
			})
		}});

		$.datepicker.setDefaults($.extend({}, $.datepicker.regional['de'], this.defaultOptions));
		//$.datepicker.prototype.updateRelated = function() {
			//	console.log('updateRelated');
		//}


	},
	
	create: function(options) {

		var elements = $('select[id^=' + options.baseId + ']');
		
		var field = $('<input id="' + options.baseId + '_dp" type="text" size="1" style="border:none;width:0px;margin:0 -20px 0 15px;height:1px;width:1px" />');
		field.insertAfter(elements.last());
		field.datepicker(options);
		field.datepicker('setDate', dateWidget.getDate(options.baseId));
		
		elements.change(function(e)
		{
			var newDate;
			var dateString = newDate = dateWidget.getDate(options.baseId);

			if(dateString < options.minDate)
				newDate = options.minDate;
			else if(dateString > options.maxDate)
				newDate = options.maxDate;
			
			if(dateString !== newDate)
				dateWidget.setDate(options.baseId, newDate);
			
			dateWidget.limit(options, newDate);

		});
	}
}


$().ready(function() {
	dateWidget.init();	
});


