
	var now=new Date();
	$.datepicker.gTodayDate=new Date(now.getFullYear(),now.getMonth(),now.getDate() );

	function setDatePickerDefaults(lang){

		$.datepicker.regionalLang=lang;
		switch(lang) {
			
			case 'BUL':
			$.datepicker.regional['BUL'] = {
				clearText: 'Изчисти', 
				closeText: 'Затвори', 
				prevText: 'назад', 
				nextText: 'напред', 
				currentText: 'Днес', 
				monthNames: ['Януари','Февруари','Март','Април','Май','Юни','Юли','Август','Септември','Октомври','Ноември','Декември'],
				monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни','Юли','Авг','Сеп','Окт','Ное','Дек'],
				weekHeader: 'Сд', 
				dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
				dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
				dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
				dateFormat: 'dd-mm-yy', 
				firstDay: 1, 
				isRTL: false,
				clearTxt: 'Изчисти периода'
			};
			$.datepicker.setDefaults($.datepicker.regional['BUL']);
			break;
		}
		
	}
	
	function dp_nights_between_dates(date1, date2) {
	    var ONE_DAY = 1000*60*60*24;
	    var date1_ms = date1.getTime();
	    var date2_ms = date2.getTime();
	    return Math.round((date1_ms - date2_ms)/ONE_DAY);
	}
	
	var CustomDatepickerUi = function(fromElemId, toElemId, nightsElemId ) {

		if( !fromElemId || !$('#'+fromElemId) ){ alert('customDatepickerUi param fromElemId is empty!'); }
		if( !toElemId || !$('#'+toElemId) ){ alert('customDatepickerUi param toElemId is empty!'); }
		
		var fromElem=$('#'+fromElemId);
		var toElem=$('#'+toElemId);
		
		var clearDatepicker=function(){
			if( nightsElemId ){ $('#'+nightsElemId).val(''); }
			$.datepicker._clearDate(fromElem);
			$.datepicker._clearDate(toElem);
			fromElem.datepicker('option', 'minDate', new Date());
			fromElem.datepicker('option', 'maxDate', null);
			toElem.datepicker('option', 'minDate', new Date());
			toElem.datepicker('option', 'maxDate', null);
		}
		
		if( nightsElemId ){
			$('#'+nightsElemId).keyup(function(){
				var f_val=fromElem.val();
				var t_val=toElem.val();
				var f_time,t_time;				
				var nights=$('#'+nightsElemId).val();
				nights=parseInt(nights);
				
				if(!nights || NaN==nights || nights<1){
					alert('Input valid nights count!');
					$(this).val('');
					return false;
				}
				
				if(f_val){
					f_time=$.datepicker.parseDate('dd-mm-yy', f_val).getTime();
					t_time=f_time+nights*1000*60*60*24;
					toElem.datepicker( "setDate", new Date(t_time) );
					fromElem.datepicker( "option", "maxDate", new Date(t_time) );
					fromElem.datepicker( "option", "minDate", new Date(t_time-31*1000*60*60*24) );
					toElem.val( $.datepicker.formatDate('dd-mm-yy',new Date(t_time)) );
				}
				else if(t_val){
					t_time=$.datepicker.parseDate('dd-mm-yy', t_val).getTime();
					f_time=t_time-nights*1000*60*60*24;
					fromElem.datepicker( "setDate", new Date(f_time) );
					toElem.datepicker( "minDate", new Date(f_time) );
					toElem.datepicker( "maxDate", new Date(f_time+31*1000*60*60*24) );
					fromElem.val( $.datepicker.formatDate('dd-mm-yy',new Date(f_time)) );
				}
			});
		}
		
		var dpAddClearBtn = function(input) {

       		var buttonPane = $(input).datepicker( "widget" ).find( ".ui-datepicker-buttonpane" );
       		buttonPane.html('');
       		buttonPane.css('text-align', 'center');
			var clearTxt=$.datepicker.regional[$.datepicker.regionalLang]&&$.datepicker.regional[$.datepicker.regionalLang].clearTxt ? $.datepicker.regional[$.datepicker.regionalLang].clearTxt : 'Clear period';
			var clearBtn = $('<input>');
			clearBtn.attr('type', 'button');
			clearBtn.attr('value', clearTxt);
			clearBtn.attr('class', 'ui-datepicker-clear ui-state-default ui-priority-primary ui-corner-all');
			clearBtn.click(function() {
				clearDatepicker();
			});
			clearBtn.css('margin','2px');
				
            clearBtn.appendTo( buttonPane );
		}
		
		var f_minDate=$.datepicker.gTodayDate;
		var t_minDate=$.datepicker.gTodayDate;
		var f_maxDate=null;
		var t_maxDate=null;
		var _dt;
		if(toElem.val()){
			_dt=$.datepicker.parseDate('dd-mm-yy', toElem.val());
			if( (_dt.getTime()-31*1000*60*60*24)>$.datepicker.gTodayDate.getTime() ) f_minDate=new Date(_dt.getTime()-31*1000*60*60*24);
			f_maxDate=_dt;
		}
		if(fromElem.val()){
			_dt=$.datepicker.parseDate('dd-mm-yy', fromElem.val());
			t_maxDate=new Date(_dt.getTime()+31*1000*60*60*24);
			t_minDate=_dt;
		}

		fromElem.datepicker({
			numberOfMonths: 2,
			minDate: f_minDate,
			maxDate: f_maxDate,
			dateFormat: 'dd-mm-yy',
			defaultDate: +0,
			showAnim: '',
			showButtonPanel: true,
			
			beforeShow: function(input, inst) {
				setTimeout(function() {
					dpAddClearBtn(input);
				}, 10);
			},
			
    		onChangeMonthYear: function( input ) {
        		setTimeout(function() {
        			dpAddClearBtn(input);
        		}, 10);
    		},
			
			beforeShowDay: function(date){
				var today=$.datepicker.gTodayDate;
				var t_today=today.getTime();
				var t_date=date.getTime();

				var t_to, t_from, t_tmin;
				var from=fromElem.datepicker('getDate');
				if(from) {
					t_from=from.getTime();
				}
				var to=toElem.datepicker('getDate');
				if(to) {
					t_to=to.getTime();
					t_tmin=t_to-31*24*60*60*1000;
				}
				
				if( t_date<t_today || (to&&t_date>t_to) ) {
					return [false,'pastDayCalendar','Disabled to select'];
				}
				else if(from&&to&&t_date>=t_from&&t_date<=t_to) {
					if( t_date==t_today ) return [true,'markedDay markedToday','Selected'];
					if(t_date==t_from) return [true,'selectedDay','Selected'];
					return [true,'markedDay','Selected'];
				}
				else if( t_date==t_today ) {
					return [true,'markedToday','Today, Available to select'];
				}

				if(from&&t_date==t_from) return [true,'selectedDay','Selected'];
				return [true,'', 'Available to select'];
			},
			
			onClose: function() {
				if( ''==toElem.val()&&''!=fromElem.val() ) setTimeout( function(){toElem.datepicker('show');}, 100);
			},
			
		    onSelect: function (dateStr) {
		    	setTimeout(function() {
		    	  if(!dateStr) { return; }
				  var dateFormat=fromElem.datepicker('option','dateFormat');
				  date = $.datepicker.parseDate(dateFormat, dateStr);
            	  toElem.datepicker('option', 'minDate', date);
            	  toElem.datepicker('option', 'maxDate', new Date(date.getTime()+31*24*60*60*1000) );
            	  if( nightsElemId ) {
            	  	var to_date=toElem.datepicker('getDate');
            	  	if( to_date ) {
            	  		$('#'+nightsElemId).val(dp_nights_between_dates(to_date,date));
            	  	}
            	  }
		    	},10);
		    }
			
		});
		
		
		toElem.datepicker({
			numberOfMonths: 2,
			minDate: t_minDate,
			maxDate: t_maxDate,
			dateFormat: 'dd-mm-yy',
			defaultDate: +0,
			showAnim: '',
			showButtonPanel: true,

			beforeShow: function(input, inst) {
				setTimeout(function() {
					dpAddClearBtn(input);
				}, 10);
			},
			
    		onChangeMonthYear: function(input) {
        		setTimeout(function() {
        			dpAddClearBtn(input);
        		}, 10);
    		},
			
			beforeShowDay: function(date){
				
				var today=$.datepicker.gTodayDate;
				var t_today=today.getTime();
				var t_date=date.getTime();

				var t_to, t_from, t_fmax;
				var from=fromElem.datepicker('getDate');
				if(from){
					t_from=from.getTime();
					t_fmax=t_from+31*24*60*60*1000;
				}
				var to=toElem.datepicker('getDate');
				if(to){
					t_to=to.getTime();
				}

				if( t_date<t_today||(from&&(t_date<t_from||t_date>t_fmax))) {
					if( t_date==t_today ) return [false,'pastDayCalendar markedToday','Disabled to select'];
					return [false,'pastDayCalendar','Disabled to select'];
				}
				else if(from&&to&&t_date>=t_from&&t_date<=t_to) {
					if( t_date==t_today ) return [true,'markedDay markedToday','Selected'];
					if(t_date==t_to) return [true,'selectedDay','Selected'];
					return [true,'markedDay','Selected'];
				}
				else if (from&&''==toElem.val()&&t_from==t_date) {
					return [true,'selectedDay','Selected'];
				}
				else if( t_date==t_today ) {
					return [true,'markedToday','Today, Available to select'];
				}

				if(to&&t_date==t_to) return [true,'selectedDay','Selected'];
				return [true,'', 'Available to select'];
			},
			
		    onSelect: function (dateStr) {
		    	setTimeout(function() { 
		    	  if(!dateStr) { return; }
				  var dateFormat=toElem.datepicker('option','dateFormat');
				  var date = $.datepicker.parseDate(dateFormat, dateStr);
				  var minDate = (date.getTime()-31*24*60*60*1000)>$.datepicker.gTodayDate.getTime() ? new Date(date.getTime()-31*24*60*60*1000) : $.datepicker.gTodayDate;
            	  fromElem.datepicker('option', 'maxDate', date);
            	  fromElem.datepicker('option', 'minDate', minDate);
            	  if( nightsElemId ) {
            	  	var from_date=fromElem.datepicker('getDate');
            	  	if( from_date ) {
            	  		$('#'+nightsElemId).val(dp_nights_between_dates(date,from_date));
            	  	}
            	  }
		    	},10);
		    }

		});
		
	}
