(function($){

	$.widget('ui.datetime_selector', {

	   options: {
    		version: "1.0",
			type: 'datetime',
			date: null,
			time: null,
			ampm: null,
			disabled: 'false',
			passThruId: null,
			showlabel: true,
			value: null,
			required: false			 
	   },

		_create: function() {
			var self 	= this, 
				options = self.options, 
				element = $(self.element[0]), 
				type 	= options.type;
					
			self.tableObj;
			self.dateObj;
			self.timeObj;
			self.ampmObj;
								
			self.tableObj 	= $('<table class="dt-table" cellspacing="0" cellpadding="0"><tr class="dt-row"></tr></table>'); 

			// If the type is date or date time then include the date component
			if (type == 'datetime' || type == 'date') {
				self.dateObj = $('<td style="font-size: 12px; width:150px;">'+(options.showlabel ? 'Date:' : '')+' <input type="text" ' + (options.disabled == 'false' ? '' : 'disabled="true"') + ' class="date" value="' + (options.date == null ? '' : options.date) + '" size="10" /></td>');
				self.dateObj.find('.date').datepicker({
					changeYear: true
				});
				
				self.dateObj.find('.date').bind('change', function(){
					self.update();
				});
				
				self.tableObj.find('.dt-row').append(self.dateObj);

			}
			 
			//if the type is time or date time include the time piece 			
			if (type == 'datetime' || type == 'time'){
				self.timeObj = $('<td style="width: 200px;">Time: <input type="text" '+(options.disabled == 'false'? '' : 'disabled="true"')+' class="time" value="'+(options.time == null ? '':options.time)+'" size="5" /></td>');
				self.ampmObj = $('<select style="min-width: 0; width: 50px;" size="1" '+(options.disabled == 'false'? '' : 'disabled="true"')+'><option value="AM" '+ (options.ampm == 'AM' ? 'selected="selected"' : '') + '>AM</option><option value="PM" '+ (options.ampm == 'PM' ? 'selected="selected"' : '') + '>PM</option></select>');  

				self.timeObj.find('.time').bind('change', function() {
			  		self.update(); 
				}); 

				self.ampmObj.bind('change', function() {
					self.update(); 
				}); 

				self.timeObj.append(self.ampmObj); 
				self.tableObj.find('.dt-row').append(self.timeObj); 
			}
			
			self.update();
			
			element.append(self.tableObj); 
			
		},

		update: function() {

			var self 	= this,
				options = self.options,
				type 	= options.type;
			
			var dateItems,
				timeItems,
				hoursTxt,
				minutes;
									
			if (type == 'datetime' || type == 'date') {
			
				if(self.dateObj.find('.date').val() != null && self.dateObj.find('.date').val() != '' && self.dateObj.find('.date').val() != undefined) {
					dateItems = self.dateObj.find('.date').val().split('/');
				}
			}

			if (type == 'datetime') {
			
				if(self.timeObj.find('.time').val() != null && self.timeObj.find('.time').val() != '' && self.timeObj.find('.time').val() != undefined) {
		
					timeItems = self.timeObj.find('.time').val().split(':');
					
					var pattern = /^0/g;
					var hours = parseInt(timeItems[0].replace(pattern, ''));
					
					hoursTxt = '';
					minutes = timeItems[1];
					
					if (self.ampmObj.val() == 'AM') {
						if (hours == 12) 
							hours = 0;
					}
					else {
						if (hours < 12) 
							hours = hours + 12;
					}
					
					if (hours < 10) {
						hoursTxt = '0' + hours;
					}
					else {
						hoursTxt = hours;
					}
					
				}
			}
           
            if(dateItems !== undefined) {
			    if(dateItems.length > 1) {
					if(type == 'datetime') {
						self._setOption('date', dateItems[2] + '-' + dateItems[0] + '-' + dateItems[1]);
						self._setOption('time', hoursTxt + ':' + minutes + ':00');
						self._setOption('value', dateItems[2] + '-' + dateItems[0] + '-' + dateItems[1] + ' ' + hoursTxt + ':' + minutes + ':00');				
					} else if (type == 'date') {
						self._setOption('date', dateItems[2] + '-' + dateItems[0] + '-' + dateItems[1]);
						self._setOption('value', dateItems[2] + '-' + dateItems[0] + '-' + dateItems[1] + ' 01:00:00');
					} else if (type == 'time') {
						self._setOption('time', hoursTxt + ':' + minutes + ':00');
						self._setOption('value', hoursTxt + ':' + minutes + ':00');
					}
			    }
			}
		   		   
			if(options.passThruId != null && options.value !== undefined) {
				$(options.passThruId).val(options.value); 
			}

		},
		
		getValue: function() {
			return this.options.value;
		}

	});


})(jQuery); 
