disabledDays = null;

datepickerHelper = {
		minDate: null,
		maxDate: null, 
		object: '#datepicker',	
		language: null,
		numberOfMonths: 3,
		
		init: function (minDateParam, maxDateParam, disabledDaysParam, languageParam, numberOfMonthsParam) {
			disabledDays = disabledDaysParam; 
			
			if(minDateParam.length > 0)
				this.minDate = minDateParam;
			if(maxDateParam.length > 0)
				this.maxDate = maxDateParam;
			
			this.language = languageParam;
			this.numberOfMonths = numberOfMonthsParam;
		},
		
		nationalDays: function (date) {
			var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
			var currentDate = new Date();

			for (i = 0; i < disabledDays.length; i++) {
				if($.inArray((d) + '-' + (m+1) + '-' + y ,disabledDays) != -1 ) {
					return [false, 'notAvailable', 'Fecha no disponible'];
				} else if ( currentDate > date) {
					return [false];
				}
			}
			
			return [true];
		},
		
		noWeekendsOrHolidays: function (date) {
			var noWeekend = jQuery.datepicker.noWeekends(date);
			return noWeekend[0] ? nationalDays(date) : noWeekend;
		},
		
		printDatepicker: function () {
			$.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional[this.language]));

			jQuery(this.object).datepicker({
				minDate: this.minDate,
				maxDate: this.maxDate,
				
				numberOfMonths: this.numberOfMonths,
				constrainInput: true,
				beforeShowDay: this.nationalDays
			});	
		},
		
		validateDate: function (date_start, date_end) {
			control = false;
			index_start = 0;
			
			date_start = this.strToTimestamp(date_start, '/');
			date_end = this.strToTimestamp(date_end, '/');
			
			if(disabledDays.length > 0) {
				date_checking_start = this.strToTimestamp(disabledDays[index_start], '-');
				date_checking_last = date_checking_start;
			}
			
			for (i = 1; (i < disabledDays.length) && (control == false); i++) {
				
				date_checking_current = this.strToTimestamp(disabledDays[i], '-');
				
				/**
				 * Check if there are a date in an interval, also if there is the last interval
				 * that we have.
				 */
				if(date_checking_current - date_checking_last != 86400000 || i == disabledDays.length - 1) {
					
					control = (date_checking_start > date_start && date_checking_start < date_end);
					control = control || (date_checking_last > date_start && date_checking_last < date_end);
					control = control || (date_checking_start > date_start && date_checking_last < date_end);
									
					date_checking_start = date_checking_current;
				} 
				
				date_checking_last = date_checking_current;
			}
			
			return control;
		},
		
		strToTimestamp: function  (dateVal, splitVal) {
			dateVal = dateVal.split(splitVal);
			dateVal = new Date(	dateVal[1] + '/' + 
								dateVal[0] + '/' + 
								dateVal[2]);
			
			return parseInt(dateVal.getTime());
		},
		
		correctFormat: function (date) {
			date_array = date.split('/');
			date_format = date_array[2] + '/' + date_array[1] + '/' + date_array[0];
			
			return date_format;
		}
};