/*
 * YMDInput 
 * changes text input field to three dropdowns
 * 
 * version 0.1
 *
 *
 *
 *
 *
 */

(function($){

	$.fn.YMDInput = function(input) {
		$.each(this, function(i, item){
			new $.fn.YMDInput.instance($(this), input);	
		});
	};
	
	$.fn.YMDInput.instance = function(container, input) {
		this.container = container; 											
		this.settings = $.extend({}, $.fn.YMDInput.defaults, input);
				
		this.init();
	};
	
	
	$.extend($.fn.YMDInput.instance.prototype, {
		init: function(){
			var that = this;
			
			this.name = this.container.attr('name');
			
			// get default date
			var defaultYear = parseInt(this.settings.defaultDate.substr(0, 4), 10);
			var defaultMonth = parseInt(this.settings.defaultDate.substr(5, 2), 10);
			var defaultDate = parseInt(this.settings.defaultDate.substr(8, 2), 10);
			
			var inputSet = $('<fieldset>');
			
			// create select for date
			var inputDate = '<select name="' + this.name + '_D">';
			for(var i = 1; i <= 31;i++){
				inputDate += '<option value="';
				if(i < 10){ inputDate += '0' }
				inputDate += i + '"';
				if(i === defaultDate){
					inputDate += ' selected="selected"';
				}
				inputDate += '>' + i + '</option>';
			}
			this.inputDate = $(inputDate);
			
			// create select for month
			var inputMonth = '<select name="' + this.name + '_M">';
			for(i = 0; i < this.settings.months.length;i++){
				inputMonth += '<option value="';
				if((i+1) < 10){ inputMonth += '0' }
				inputMonth += (i+1) + '"';
				if((i+1) === defaultMonth){
					inputMonth += ' selected="selected"';
				}
				inputMonth += '>' + this.settings.months[i] + '</option>';
			}
			this.inputMonth = $(inputMonth);
			
			if(typeof(this.settings.startYear) === 'number' && typeof(this.settings.endYear) === 'number' && this.settings.startYear < this.settings.endYear){		
				// create select for year
				var inputYear = '<select name="' + this.name + '_Y">';
				for(i = this.settings.startYear; i < this.settings.endYear;i++){
					inputYear += '<option value="' + i + '"';
					if(i === defaultYear){
						inputYear += ' selected="selected"';
					}
					inputYear += '>' + i + '</option>';
				}
				this.inputYear = $(inputYear);
			}else{
				// no start and end year given
				var inputYear = '<input name="' + this.name + '_Y" value="' + defaultYear + '" />';
				this.inputYear = $(inputYear);
			}
			
			
			
			// attach event handlers
			this.inputDate.change(function(){that.updateValue()});
			this.inputMonth.change(function(){that.updateValue()});
			this.inputYear.change(function(){that.updateValue()});
			
			// append this stuff to the DOM
			for(var i = 0; i < this.settings.order.length; i++){
				switch(this.settings.order[i]){
					case 'y': inputSet.append(this.inputYear); break;
					case 'm': inputSet.append(this.inputMonth); break;
					case 'd': inputSet.append(this.inputDate); break;
				}
			}
			//inputSet.append(this.inputHidden);
			
			this.container.prev().append(inputSet);
			
			// hide original input
			this.container.hide();
			// store value on init
			this.updateValue();
		},
		
		updateValue: function(){
			this.container.val(this.inputYear.val() + '-' + this.inputMonth.val() + '-' + this.inputDate.val());
		}
		
	});
	
	
	//Default settings
	$.fn.YMDInput.defaults = {
		order: ['y', 'm', 'd'],
		months: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
		startYear: null,
		endYear: null,
		defaultDate: '1970-09-01'	// default in ISO-8601
	};

})(jQuery);
