//Customization of bufer time for DAN
var time_buffer_value = 0;
// Highlighting range days at calendar
var payment_request_id = 0;
// Check  start time or end time for the time, which is gone already TODAY.
var is_check_start_time_gone = false;
// Prepare to show tooltips
function prepare_tooltip(myParam){   
       var tooltip_day_class_4_show = " .timespartly";
       if (is_show_availability_in_tooltips) {
           if (  wpdev_in_array( parent_booking_resources , myParam ) )
                tooltip_day_class_4_show = " .datepick-days-cell";//" .datepick-days-cell a";  // each day
       }
       if (is_show_cost_in_tooltips) {
            tooltip_day_class_4_show =  " .datepick-days-cell";//" .datepick-days-cell a";  // each day
       }
      // Show tooltip at each day if time availability filter is set
      if(typeof( global_avalaibility_times[myParam]) != "undefined") {
          if (global_avalaibility_times[myParam].length>0)  tooltip_day_class_4_show = " .datepick-days-cell";  // each day
      }
    jQuery("#calendar_booking" + myParam + tooltip_day_class_4_show ).popover( {
        placement: 'top'
      , delay: { show: 500, hide: 1 }
      , content: ''
      , template: '
'
    });
}
// Check is this day booked or no
function is_this_day_booked(bk_type, td_class, i){ // is is not obligatory parameter
    if (    ( jQuery('#calendar_booking'+bk_type+' .cal4date-' + td_class).hasClass('date_user_unavailable') ) 
         || ( jQuery('#calendar_booking'+bk_type+' .cal4date-' + td_class).hasClass('datepick-unselectable') )
         || (  ( jQuery('#calendar_booking'+bk_type+' .cal4date-' + td_class).hasClass('check_out_time') )  && ( i!=0 )  )
       ){ // If we find some unselect option so then make no selection at all in this range
                jQuery('#calendar_booking'+bk_type+' .cal4date-' + td_class).removeClass('datepick-current-day');
                document.body.style.cursor = 'default';return true;
    }
    //Check if in selection range are reserved days, if so then do not make selection
    if(typeof(date_approved[ bk_type ]) !== 'undefined')
        if(typeof(date_approved[ bk_type ][ td_class ]) !== 'undefined') { //alert(date_approved[ bk_type ][ td_class ][0][5]);
              for (var j=0; j < date_approved[ bk_type ][ td_class ].length ; j++) {
                    if ( ( date_approved[ bk_type ][ td_class ][j][3] == 0) &&  ( date_approved[ bk_type ][ td_class ][j][4] == 0) )  {document.body.style.cursor = 'default';return true;}
                    if ( ( (date_approved[ bk_type ][ td_class ][j][5] * 1) == 2 ) && (i!=0)) {document.body.style.cursor = 'default';return true;}
              }
        }
    if(typeof( date2approve[ bk_type ]) !== 'undefined')
        if(typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined') {
              for ( j=0; j < date2approve[ bk_type ][ td_class ].length ; j++) {
                    if ( ( date2approve[ bk_type ][ td_class ][j][3] == 0) &&  ( date2approve[ bk_type ][ td_class ][j][4] == 0) )  {document.body.style.cursor = 'default';return true;}
                    if ( ( (date2approve[ bk_type ][ td_class ][j][5] * 1) == 2 ) && (i!=0)) {document.body.style.cursor = 'default';return true;}
              }
        }
    return false;
}
// Get the closets ABS value of element in array to the current myValue
function getAbsClosestValue(myValue, myArray){
    if (myArray.length == 0 ) return myValue;       // If the array is empty -> return  the myValue
    var obj = myArray[0];
    var diff = Math.abs(myValue - obj);             // Get distance between  1st element
    var closetValue = myArray[0];                   // Save 1st element
    for (var i = 1; i < myArray.length; i++) {
        obj = myArray[i];
        if ( Math.abs(myValue - obj) < diff ) {     // we found closer value -> save it
            diff = Math.abs(myValue - obj);
            closetValue = obj;
        }
    }
    return closetValue;
}
// Highligt selectable date in Calendar
function hoverDayPro(value, date, bk_type) {
    if (date == null) return false;
    var i=0 ; var td_class; var td_overs = [];                                                              // local variables
    
    if(typeof( check_conditions_for_range_days_selection ) == 'function') {check_conditions_for_range_days_selection( date , bk_type);} // Highlight dates based on the conditions
    // Fixed Days Selection mode - 1 mouse click
    if (bk_days_selection_mode == 'fixed') {
        jQuery('.datepick-days-cell-over').removeClass('datepick-days-cell-over');                          // clear all selections
        if(typeof( check_conditions_for_start_day_selection ) == 'function') 
            check_conditions_for_start_day_selection(bk_type, date, 'start');
        if (bk_1click_mode_days_start != -1) {                                                              // find the Closest start day to the hover day
            var startDay = getAbsClosestValue(date.getDay(), bk_1click_mode_days_start);
            date.setDate( date.getDate() -  ( date.getDay() - startDay )  );
            
            if(typeof( check_conditions_for_range_days_selection_for_check_in ) == 'function') {check_conditions_for_range_days_selection_for_check_in( date , bk_type);} // Highlight dates based on the conditions
        }
        if(typeof( check_conditions_for_start_day_selection ) == 'function') 
            check_conditions_for_start_day_selection(bk_type, date, 'end');
        for( i=0; i < bk_1click_mode_days_num ; i++) {                                                      // recheck  if all days are available for the booking
            td_class =  (date.getMonth()+1) + '-' + date.getDate() + '-' + date.getFullYear();
            if (  is_this_day_booked(bk_type, td_class, i)  ) return false;                                 // check if day is booked
            td_overs[td_overs.length] = '#calendar_booking'+bk_type+ ' .cal4date-' + td_class;              // add to array for later make selection by class
            date.setDate(date.getDate() + 1);                                                               // set next date
        }
        for ( i=0; i < td_overs.length ; i++) {                                                             // add class to all elements
            jQuery( td_overs[i] ).addClass('datepick-days-cell-over');
        }
        return true;
    }
    // Dynamic Days Selection mode - 2 mouse clicks
    if (bk_days_selection_mode == 'dynamic') {
        jQuery('.datepick-days-cell-over').removeClass('datepick-days-cell-over');                          // clear all highlight days selections
        var inst = jQuery.datepick._getInst(document.getElementById('calendar_booking'+bk_type));
        // Highligh days Before Selection
        if ( (inst.dates.length == 0) || (inst.dates.length>1)  ) {                                         // We are not clicked yet on days, or the selection was done and we are need to make new selection
            var selceted_first_day = new Date();
            selceted_first_day.setFullYear(date.getFullYear(),(date.getMonth()), (date.getDate() ) );
            
            if(typeof( check_conditions_for_start_day_selection ) == 'function') 
                check_conditions_for_start_day_selection(bk_type, date, 'start');
            if (bk_2clicks_mode_days_start != -1) {
                var startDay = getAbsClosestValue(date.getDay(), bk_2clicks_mode_days_start);
                selceted_first_day.setDate( date.getDate() -  ( date.getDay() - startDay )  );
                if(typeof( check_conditions_for_range_days_selection_for_check_in ) == 'function') {check_conditions_for_range_days_selection_for_check_in( selceted_first_day , bk_type);} // Highlight dates based on the conditions                
            }
            if(typeof( check_conditions_for_start_day_selection ) == 'function') 
                check_conditions_for_start_day_selection(bk_type, date, 'end');
            
            i=0;
            while( ( i < bk_2clicks_mode_days_min) ) {
               i++;
               td_class =  (selceted_first_day.getMonth()+1) + '-' + selceted_first_day.getDate() + '-' + selceted_first_day.getFullYear();
               if (   is_this_day_booked(bk_type, td_class, (i-1))   ) return false;                         // check if day is booked
               td_overs[td_overs.length] = '#calendar_booking'+bk_type+ ' .cal4date-' + td_class;            // add to array for later make selection by class
               selceted_first_day.setFullYear(selceted_first_day.getFullYear(),(selceted_first_day.getMonth()), (selceted_first_day.getDate() + 1) );
            }
        }
        // First click on days
        if (inst.dates.length == 1) {                                                                       // select start date in Dynamic range selection, after first days is selected
            var selceted_first_day = new Date();
            selceted_first_day.setFullYear(inst.dates[0].getFullYear(),(inst.dates[0].getMonth()), (inst.dates[0].getDate() ) ); //Get first Date
            var is_check = true;
            i=0;
            while(  (is_check ) || ( i < bk_2clicks_mode_days_min ) ) {                                         // Untill rich MIN days number.
               i++;
               td_class =  (selceted_first_day.getMonth()+1) + '-' + selceted_first_day.getDate() + '-' + selceted_first_day.getFullYear();
                if (  is_this_day_booked(bk_type, td_class, (i-1))  ) return false;                             // check if day is booked
                td_overs[td_overs.length] = '#calendar_booking'+bk_type+ ' .cal4date-' + td_class;              // add to array for later make selection by class
                var is_discreet_ok = true;
                if (bk_2clicks_mode_days_specific.length>0) {              // check if we set some discreet dates
                    is_discreet_ok = false;
                    for (var di = 0; di < bk_2clicks_mode_days_specific.length; di++) {   // check if current number of days inside of discreet one
                         if ( (  i == bk_2clicks_mode_days_specific[di] )  ) {
                             is_discreet_ok = true;
                             di = (bk_2clicks_mode_days_specific.length + 1);
                         }
                    }
                }
                if (   ( date.getMonth() == selceted_first_day.getMonth() )  &&
                       ( date.getDate() == selceted_first_day.getDate() )  &&
                       ( date.getFullYear() == selceted_first_day.getFullYear() )  && ( is_discreet_ok )  )
                {is_check =  false;}
                if ((selceted_first_day > date ) && ( i >= bk_2clicks_mode_days_min ) && ( i < bk_2clicks_mode_days_max )  && (is_discreet_ok)  )   {
                    is_check =  false;
                }
                if ( i >= bk_2clicks_mode_days_max ) is_check =  false;
                selceted_first_day.setFullYear(selceted_first_day.getFullYear(),(selceted_first_day.getMonth()), (selceted_first_day.getDate() + 1) );
            }
        }
        // Highlight Days
        for ( i=0; i < td_overs.length ; i++) {                                                             // add class to all elements
            jQuery( td_overs[i] ).addClass('datepick-days-cell-over');
        }
        return true;
    }
}
// select a day
function selectDayPro(all_dates,   bk_type){
    if(typeof( prepare_tooltip ) == 'function') {setTimeout("prepare_tooltip("+bk_type+");",1000);}
    if(typeof( check_conditions_for_range_days_selection ) == 'function') {check_conditions_for_range_days_selection( all_dates , bk_type);}
    
    // Help with range selection
    bkRangeDaysSelection(all_dates,   bk_type);
    // Conditional showing form elements
    // We are need to  get the dates from  the textarea and not from  all_dates variable
    // because in the range days selection  the dates can be changed
   if(typeof( check_condition_sections_in_bkform ) == 'function') {check_condition_sections_in_bkform( jQuery('#date_booking' + bk_type).val() , bk_type);}
    // HERE WE WILL DISABLE ALL OPTIONS IN RANGE TIME INTERVALS FOR SINGLE DAYS SELECTIONS FOR THAT DAYS WHERE HOURS ALREADY BOOKED
    bkDisableBookedTimeSlots( jQuery('#date_booking' + bk_type).val() , bk_type);
    //Calculate the cost and show inside of form
    if(typeof( showCostHintInsideBkForm ) == 'function') {  showCostHintInsideBkForm( bk_type); }
}
// Check if this IE and get version of IE otherwise setversion of IE to 0
var isIE_4_bk = (navigator.appName=="Microsoft Internet Explorer");
var IEversion_4_bk = navigator.appVersion;
if(isIE_4_bk) { IEversion_4_bk = parseInt(IEversion_4_bk.substr(IEversion_4_bk.indexOf("MSIE")+4));
} else { IEversion_4_bk = 0; }
// Make range select
function bkRangeDaysSelection(all_dates,   bk_type){
     var inst = jQuery.datepick._getInst(document.getElementById('calendar_booking'+bk_type));
     var td_class;
     if ( (bk_days_selection_mode == 'fixed') || (bk_days_selection_mode == 'dynamic') ) {  // Start range selections checking
        var internal_bk_1click_mode_days_num = bk_1click_mode_days_num;
        if ( all_dates.indexOf(' - ') != -1 ){                  // Dynamic selections
            var start_end_date = all_dates.split(" - ");
            var is_dynamic_startdayequal_to_last = true;
            if (inst.dates.length>1){
                if (bk_days_selection_mode == 'dynamic') { // Dinamic
                    is_dynamic_startdayequal_to_last = false;
                }
            }
            if ( ( start_end_date[0] == start_end_date[1] ) && (is_dynamic_startdayequal_to_last ===true)   ) {    // First click at day
              if(typeof( check_conditions_for_start_day_selection ) == 'function') {
                    var start_dynamic_date = start_end_date[0].split(".");
                    var real_start_dynamic_date=new Date();
                    real_start_dynamic_date.setFullYear( start_dynamic_date[2],  start_dynamic_date[1]-1,  start_dynamic_date[0] );    // get date of click                  
                    check_conditions_for_start_day_selection(bk_type, real_start_dynamic_date, 'start');
              }
              if (bk_2clicks_mode_days_start != -1) {             // Activated some specific week day start range selectiosn
                    var start_dynamic_date = start_end_date[0].split(".");
                    var real_start_dynamic_date=new Date();
                    real_start_dynamic_date.setFullYear( start_dynamic_date[2],  start_dynamic_date[1]-1,  start_dynamic_date[0] );    // get date of click
                    if (real_start_dynamic_date.getDay() !=  bk_2clicks_mode_days_start) {
                        var startDay = getAbsClosestValue(real_start_dynamic_date.getDay(), bk_2clicks_mode_days_start);
                        real_start_dynamic_date.setDate( real_start_dynamic_date.getDate() -  ( real_start_dynamic_date.getDay() - startDay )  );
                        all_dates = jQuery.datepick._formatDate(inst, real_start_dynamic_date );
                        all_dates += ' - ' + all_dates ;
                        jQuery('#date_booking' + bk_type).val(all_dates); // Fill the input box
            
                        if(typeof( check_conditions_for_range_days_selection ) == 'function') {check_conditions_for_range_days_selection( all_dates , bk_type);} // Highlight dates based on the conditions                
                        // check this day for already booked
                        var selceted_first_day = new Date;
                        selceted_first_day.setFullYear(real_start_dynamic_date.getFullYear(),(real_start_dynamic_date.getMonth()), (real_start_dynamic_date.getDate() ) );
                        i=0;
                        while(    ( i < bk_2clicks_mode_days_min ) ) {
                           
                           td_class =  (selceted_first_day.getMonth()+1) + '-' + selceted_first_day.getDate() + '-' + selceted_first_day.getFullYear();
                           if (   is_this_day_booked(bk_type, td_class, (i))   ) {
                                       inst.dates=[];
                                       jQuery.datepick._updateDatepick(inst);
                                       return false;   // check if day is booked
                           }
                           selceted_first_day.setFullYear(selceted_first_day.getFullYear(),(selceted_first_day.getMonth()), (selceted_first_day.getDate() + 1) );
                           i++;
                        }
                        // Selection of the day
                        inst.cursorDate.setFullYear(real_start_dynamic_date.getFullYear(),(real_start_dynamic_date.getMonth()), (real_start_dynamic_date.getDate() ) );
                        inst.dates=[inst.cursorDate];
                        jQuery.datepick._updateDatepick(inst);
                     }
              } else { // Set correct date, if only single date is selected, and possible press send button then.
                    var start_dynamic_date = start_end_date[0].split(".");
                    var real_start_dynamic_date=new Date();
                    real_start_dynamic_date.setFullYear( start_dynamic_date[2],  start_dynamic_date[1]-1,  start_dynamic_date[0] );    // get date of click
                    inst.cursorDate.setFullYear(real_start_dynamic_date.getFullYear(),(real_start_dynamic_date.getMonth()), (real_start_dynamic_date.getDate() ) );
                    inst.dates=[inst.cursorDate];
                    jQuery.datepick._updateDatepick(inst);
                    jQuery('#date_booking' + bk_type).val(start_end_date[0]);
              }
              if(typeof( check_conditions_for_start_day_selection ) == 'function') 
                check_conditions_for_start_day_selection(bk_type, '', 'end');              
              submit_bk_color = jQuery('#booking_form_div'+bk_type+' input[type="button"]').css('color');
              if (bk_2clicks_mode_days_min>1) {
                jQuery('#booking_form_div'+bk_type+' input[type="button"]').attr('disabled', 'disabled'); // Disbale the submit button
                jQuery('#booking_form_div'+bk_type+' input[type="button"]').css('color', '#aaa');
              }
              setTimeout(function ( ) {jQuery('#calendar_booking' + bk_type + ' .datepick-unselectable.timespartly.check_out_time,#calendar_booking' + bk_type + ' .datepick-unselectable.timespartly.check_in_time').removeClass('datepick-unselectable');} ,500);              
              return false;
            } else {  // Last day click
                    jQuery('#booking_form_div'+bk_type+' input[type="button"]').removeAttr('disabled');  // Activate the submit button
                    jQuery('#booking_form_div'+bk_type+' input[type="button"]').css('color',  submit_bk_color );
                    var start_dynamic_date = start_end_date[0].split(".");
                    var real_start_dynamic_date=new Date();
                    real_start_dynamic_date.setFullYear( start_dynamic_date[2],  start_dynamic_date[1]-1,  start_dynamic_date[0] );    // get date
                    var end_dynamic_date = start_end_date[1].split(".");
                    var real_end_dynamic_date=new Date();
                    real_end_dynamic_date.setFullYear( end_dynamic_date[2],  end_dynamic_date[1]-1,  end_dynamic_date[0] );    // get date
                    internal_bk_1click_mode_days_num = 1; // need to count how many days right now
                    var temp_date_for_count = new Date();
                    for( var j1=0; j1 < 365 ; j1++) {
                        temp_date_for_count = new Date();
                        temp_date_for_count.setFullYear(real_start_dynamic_date.getFullYear(),(real_start_dynamic_date.getMonth()), (real_start_dynamic_date.getDate() + j1) );
                        if ( (temp_date_for_count.getFullYear() == real_end_dynamic_date.getFullYear()) && (temp_date_for_count.getMonth() == real_end_dynamic_date.getMonth()) && (temp_date_for_count.getDate() == real_end_dynamic_date.getDate()) )  {
                            internal_bk_1click_mode_days_num = j1;
                            j1=1000;
                        }
                    }
                    internal_bk_1click_mode_days_num++;
                    all_dates =  start_end_date[0];
                    if (internal_bk_1click_mode_days_num < bk_2clicks_mode_days_min ) internal_bk_1click_mode_days_num = bk_2clicks_mode_days_min;
                    var is_backward_direction = false;
                    if (bk_2clicks_mode_days_specific.length>0) {              // check if we set some discreet dates
                        var is_discreet_ok = false;
                        while (  is_discreet_ok === false ) {
                            for (var di = 0; di < bk_2clicks_mode_days_specific.length; di++) {   // check if current number of days inside of discreet one
                                 if ( 
                                    ( (  internal_bk_1click_mode_days_num == bk_2clicks_mode_days_specific[di] )  ) &&
                                      (internal_bk_1click_mode_days_num <= bk_2clicks_mode_days_max) ) {
                                     is_discreet_ok = true;
                                     di = (bk_2clicks_mode_days_specific.length + 1);
                                 }
                            }
                            if (is_backward_direction === false)
                                if (  is_discreet_ok === false )
                                    internal_bk_1click_mode_days_num++;
                            // BackWard directions, if we set more than maximum days
                            if (internal_bk_1click_mode_days_num >= bk_2clicks_mode_days_max) is_backward_direction = true;
                            if (is_backward_direction === true)
                                if (  is_discreet_ok === false )
                                    internal_bk_1click_mode_days_num--;
                            if (internal_bk_1click_mode_days_num < bk_2clicks_mode_days_min )  is_discreet_ok = true;
                        }
                    } else {
                        if (internal_bk_1click_mode_days_num > bk_2clicks_mode_days_max) internal_bk_1click_mode_days_num = bk_2clicks_mode_days_max;
                    }
                    
            }
        } // And Range selections checking
        var temp_bk_days_selection_mode = bk_days_selection_mode ;
        bk_days_selection_mode = 'multiple';
        inst.dates = [];                                        // Emty dates in datepicker
        var all_dates_array;
        var date_array;
        var date;
        var date_to_ins;
        // Get array of dates
        if ( all_dates.indexOf(',') == -1 ) {all_dates_array = [all_dates];}
        else                                {all_dates_array = all_dates.split(",");}
        var original_array = [];
        var isMakeSelection = false;
        if ( temp_bk_days_selection_mode != 'dynamic' ) {
            // Gathering original (already selected dates) date array
            for( var j=0; j < all_dates_array.length ; j++) {                           //loop array of dates
                all_dates_array[j] = all_dates_array[j].replace(/(^\s+)|(\s+$)/g, "");  // trim white spaces in date string
                date_array = all_dates_array[j].split(".");                             // get single date array
                date=new Date();
                date.setFullYear( date_array[2],  date_array[1]-1,  date_array[0] );    // get date
                if ( (date.getFullYear() == inst.cursorDate.getFullYear()) && (date.getMonth() == inst.cursorDate.getMonth()) && (date.getDate() == inst.cursorDate.getDate()) )  {
                    isMakeSelection = true;
                    if(typeof( check_conditions_for_start_day_selection ) == 'function') 
                        check_conditions_for_start_day_selection(bk_type, inst.cursorDate, 'start');                    
                    if (bk_1click_mode_days_start != -1) {
                        var startDay = getAbsClosestValue(inst.cursorDate.getDay(), bk_1click_mode_days_start);
                        inst.cursorDate.setDate( inst.cursorDate.getDate() -  ( inst.cursorDate.getDay() - startDay )  );
      
                        bk_days_selection_mode = temp_bk_days_selection_mode;
                        if(typeof( check_conditions_for_range_days_selection_for_check_in ) == 'function') {check_conditions_for_range_days_selection_for_check_in( inst.cursorDate , bk_type);} // Highlight dates based on the conditions                                        
                        temp_bk_days_selection_mode = bk_days_selection_mode ;
                        bk_days_selection_mode = 'multiple';
                        internal_bk_1click_mode_days_num = bk_1click_mode_days_num;
                    }
                    if(typeof( check_conditions_for_start_day_selection ) == 'function') 
                        check_conditions_for_start_day_selection(bk_type, inst.cursorDate, 'end');
                    
                }
            }
        } else {
            isMakeSelection = true;                                                         // dynamic range selection
        }
        var isEmptySelection = false;
        if (isMakeSelection) {
            var date_start_range = inst.cursorDate;
            if ( temp_bk_days_selection_mode != 'dynamic' ) {
                original_array.push( jQuery.datepick._restrictMinMax(inst, jQuery.datepick._determineDate(inst, inst.cursorDate , null))  ); //add date
            } else {
                original_array.push( jQuery.datepick._restrictMinMax(inst, jQuery.datepick._determineDate(inst, real_start_dynamic_date , null))  ); //set 1st date from dynamic range
                date_start_range = real_start_dynamic_date;
            }
            var dates_array = [];
            var range_array = [];
            var td;
            // Add dates to the range array
            for( var i=1; i < internal_bk_1click_mode_days_num ; i++) {
                dates_array[i] = new Date();
                // dates_array[i].setDate( (date_start_range.getDate() + i) );
                dates_array[i].setFullYear(date_start_range.getFullYear(),(date_start_range.getMonth()), (date_start_range.getDate() + i) );
                td_class =  (dates_array[i].getMonth()+1) + '-'  +  dates_array[i].getDate() + '-' + dates_array[i].getFullYear();
                td =  '#calendar_booking'+bk_type+' .cal4date-' + td_class;
                 if (jQuery(td).hasClass('datepick-unselectable') ){ // If we find some unselect option so then make no selection at all in this range
                     jQuery(td).removeClass('datepick-current-day');
                     isEmptySelection = true;
                }
                //Check if in selection range are reserved days, if so then do not make selection
                if (   is_this_day_booked(bk_type, td_class, i)   ) isEmptySelection = true;
                /////////////////////////////////////////////////////////////////////////////////////
                date_to_ins =  jQuery.datepick._restrictMinMax(inst, jQuery.datepick._determineDate(inst, dates_array[i], null));
                range_array.push( date_to_ins );
            }
            // check if some dates are the same in the arrays so the remove them from both
            for( i=0; i < range_array.length ; i++) {
                for( j=0; j < original_array.length ; j++) {       //loop array of dates
                if ( (original_array[j] != -1) && (range_array[i] != -1) )
                    if ( (range_array[i].getFullYear() == original_array[j].getFullYear()) && (range_array[i].getMonth() == original_array[j].getMonth()) && (range_array[i].getDate() == original_array[j].getDate()) )  {
                        range_array[i] = -1;
                        original_array[j] = -1;
                    }
                }
            }
            // Add to the dates array
            for( j=0; j < original_array.length ; j++) {       //loop array of dates
                    if (original_array[j] != -1) inst.dates.push(original_array[j]);
            }
            for( i=0; i < range_array.length ; i++) {
                    if (range_array[i] != -1) inst.dates.push(range_array[i]);
            }
        }
        if (! isEmptySelection) isEmptySelection = checkIfSomeDaysUnavailable(inst.dates, bk_type);
        if (isEmptySelection) inst.dates=[];
        //jQuery.datepick._setDate(inst, dates_array);
        if ( temp_bk_days_selection_mode != 'dynamic' ) {
            jQuery.datepick._updateInput('#calendar_booking'+bk_type);
        } else {
           if (isEmptySelection) jQuery.datepick._updateInput('#calendar_booking'+bk_type);
           else {       // Dynamic range selections, transform days from jQuery.datepick
               dateStr = (inst.dates.length == 0 ? '' : jQuery.datepick._formatDate(inst, inst.dates[0])); // Get first date
                for ( i = 1; i < inst.dates.length; i++)
                     dateStr += jQuery.datepick._get(inst, 'multiSeparator') +  jQuery.datepick._formatDate(inst, inst.dates[i]);  // Gathering all dates
                jQuery('#date_booking' + bk_type).val(dateStr); // Fill the input box
           }
        }
        if ( ( is_dynamic_startdayequal_to_last === false ) && ( start_end_date[0] == start_end_date[1] ) )  {
            if ( inst.dates.length == 1 ) {
                inst.dates.push(inst.dates[0]);
                //jQuery.datepick._updateDatepick(inst);
            }            
        }
        jQuery.datepick._notifyChange(inst);
        jQuery.datepick._adjustInstDate(inst);
        jQuery.datepick._showDate(inst);
        bk_days_selection_mode = temp_bk_days_selection_mode ;
     }
 }
// Disable Booked Time Slots in selectbox
function bkDisableBookedTimeSlots(all_dates, bk_type){
    var inst = jQuery.datepick._getInst(document.getElementById('calendar_booking'+bk_type));
    var td_class;
    var time_slot_field_name = 'select[name="rangetime' + bk_type + '"]';
    var time_slot_field_name2 = 'select[name="rangetime' + bk_type + '[]"]';
    
    var start_time_slot_field_name = 'select[name="starttime' + bk_type + '"]';
    var start_time_slot_field_name2 = 'select[name="starttime' + bk_type + '[]"]';
    
    // HERE WE WILL DISABLE ALL OPTIONS IN RANGE TIME INTERVALS FOR SINGLE DAYS SELECTIONS FOR THAT DAYS WHERE HOURS ALREADY BOOKED
    //here is not range selections
    all_dates = get_first_day_of_selection(all_dates);
    if ( (bk_days_selection_mode == 'single') || (true) ) {   // Only single day selections here
        var current_single_day_selections  = all_dates.split('.');
        td_class =  (current_single_day_selections[1]*1) + '-' + (current_single_day_selections[0]*1) + '-' + (current_single_day_selections[2]*1);
        var times_array = [];
        jQuery( time_slot_field_name + ' option:disabled,' + time_slot_field_name2 + ' option:disabled,' + start_time_slot_field_name + ' option:disabled,' + start_time_slot_field_name2 + ' option:disabled').removeAttr('disabled');  // Make active all times
        if ( jQuery( time_slot_field_name+','+time_slot_field_name2 + ',' + start_time_slot_field_name+','+start_time_slot_field_name2 ).length == 0 ) return;  // WE DO NOT HAVE RANGE SELECTIONS AT THIS FORM SO JUST RETURN
        var range_time_object = jQuery( time_slot_field_name + ' option:first,'+time_slot_field_name2 + ' option:first,' + start_time_slot_field_name + ' option:first,'+start_time_slot_field_name2 + ' option:first' ) ;
        if (range_time_object == undefined) return;  // WE DO NOT HAVE RANGE SELECTIONS AT THIS FORM SO JUST RETURN
        // Get dates and time from aproved dates
        if(typeof(date_approved[ bk_type ]) !== 'undefined')
            if(typeof(date_approved[ bk_type ][ td_class ]) !== 'undefined') {
                if( ( date_approved[ bk_type ][ td_class ][0][3] != 0) ||  ( date_approved[ bk_type ][ td_class ][0][4] != 0) ) {
                    for ( i=0; i< date_approved[ bk_type ][ td_class ].length; i++){
                        h = date_approved[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
                        m = date_approved[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
                        s = date_approved[ bk_type ][ td_class ][i][5];if (s == 2) s = '02';
                        times_array[ times_array.length ] = [h,m,s];
                    }
                }
            }
        // Get dates and time from pending dates
        if(typeof( date2approve[ bk_type ]) !== 'undefined')
            if(typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined')
                if( ( date2approve[ bk_type ][ td_class ][0][3] != 0) ||  ( date2approve[ bk_type ][ td_class ][0][4] != 0) ) //check for time here
                {for ( i=0; i< date2approve[ bk_type ][ td_class ].length; i++){
                    h = date2approve[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
                    m = date2approve[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
                    s = date2approve[ bk_type ][ td_class ][i][5];if (s == 2) s = '02';
                    times_array[ times_array.length ] = [h,m,s];
                }
                }
                
       // Check about situations, when  we have end time without start  time (... - 09:00) or start  time without end time (21:00 - ...)
       times_array.sort();
       if (times_array.length > 0 ) {
           s = parseInt( times_array[0][2] );
           if ( s == 2 ) {
               times_array[ times_array.length ] = ['00','00','01'];
               times_array.sort();
           }
           s = parseInt( times_array[ ( times_array.length - 1 ) ][2] );
           if ( s == 1 ) {
               times_array[ times_array.length ] = ['23','59','02'];
               times_array.sort();
           }
       }
        var removed_time_slots   = is_time_slot_booked_for_this_time_array( bk_type, times_array );
        var my_time_value        = jQuery( time_slot_field_name + ' option,'+time_slot_field_name2 + ' option,' + start_time_slot_field_name + ' option,'+start_time_slot_field_name2 + ' option');
        for ( j=0; j< my_time_value.length; j++){
            if (  wpdev_in_array( removed_time_slots, j ) ) {
                jQuery( time_slot_field_name + ' option:eq('+j+'),'+time_slot_field_name2 + ' option:eq('+j+'),' +  start_time_slot_field_name + ' option:eq('+j+'),'+start_time_slot_field_name2 + ' option:eq('+j+')').attr('disabled', 'disabled'); // Make disable some options
                if(  jQuery( time_slot_field_name + ' option:eq('+j+'),'+time_slot_field_name2 + ' option:eq('+j+'),' + start_time_slot_field_name + ' option:eq('+j+'),'+start_time_slot_field_name2 + ' option:eq('+j+')' ).attr('selected')  ){  // iF THIS ELEMENT IS SELECTED SO REMOVE IT FROM THIS TIME
                    jQuery(  time_slot_field_name + ' option:eq('+j+'),'+time_slot_field_name2 + ' option:eq('+j+'),' + start_time_slot_field_name + ' option:eq('+j+'),'+start_time_slot_field_name2 + ' option:eq('+j+')' ).removeAttr('selected');
                    if (IEversion_4_bk == 7) { // Emulate disabling option in selectboxes for IE7 - its set selected option, which is not disabled
                        
                        var rangetime_element =  document.getElementsByName("rangetime" + bk_type );
                        if (typeof(rangetime_element) != 'undefined' && rangetime_element != null) {
                            set_selected_first_not_disabled_option_IE7(document.getElementsByName("rangetime" + bk_type )[0] );
                        }
                        
                        var start_element =  document.getElementsByName("starttime" + bk_type );
                        if (typeof(start_element) != 'undefined' && start_element != null) {
                            set_selected_first_not_disabled_option_IE7(document.getElementsByName("starttime" + bk_type )[0] );
                        }
                        
                    }
                }
            }
        }
        if (IEversion_4_bk == 7) { // Emulate disabling option in selectboxes for IE7 - its set grayed text options, which is disabled
            emulate_disabled_options_to_gray_IE7( "rangetime" + bk_type );
            emulate_disabled_options_to_gray_IE7( "starttime" + bk_type );
        }
    }
}
function checkIfSomeDaysUnavailable(selected_dates, bk_type) {
    var i, j, td_class;
    for ( j=0; j< selected_dates.length; j++){
         // Check among availbaility filters
         if (typeof( is_this_day_available ) == 'function') {
            var is_day_available = is_this_day_available( selected_dates[j], bk_type);
            if (! is_day_available) {return true;}
        }
       td_class =  (selected_dates[j].getMonth()+1) + '-' + selected_dates[j].getDate() + '-' + selected_dates[j].getFullYear();
       // Get dates and time from pending dates
       if(typeof( date2approve[ bk_type ]) !== 'undefined')
       if(typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined')
         if( ( date2approve[ bk_type ][ td_class ][0][3] == 0) &&  ( date2approve[ bk_type ][ td_class ][0][4] == 0) ) //check for time here
               {return true;} // day fully booked
       // Get dates and time from aproved dates
       if(typeof(date_approved[ bk_type ]) !== 'undefined')
       if(typeof(date_approved[ bk_type ][ td_class ]) !== 'undefined')
         if( ( date_approved[ bk_type ][ td_class ][0][3] == 0) &&  ( date_approved[ bk_type ][ td_class ][0][4] == 0) )
               {return true;} // day fully booked
    }
    return  false;
}
// IE7 select box emulate functions for disabling select boxes:
if (IEversion_4_bk == 7) {
            window.onload = function() {
                    if (document.getElementsByTagName) {
                            var s = document.getElementsByTagName("select");
                            if (s.length > 0) {
                                    window.select_current = new Array();
                                    for (var i=0, select; select = s[i]; i++) {
                                            select.onfocus = function(){ window.select_current[this.id] = this.selectedIndex; }
                                            select.onchange = function(){ set_selected_previos_selected_option_IE7(this); }
                                            emulate_disabled_options_to_gray_IE7(select.name);
                                    }
                            }
                    }
            }
            function set_selected_previos_selected_option_IE7(e) {
                    if (e.options[e.selectedIndex].disabled) {
                            e.selectedIndex = window.select_current[e.id];
                    }
            }
            function set_selected_first_not_disabled_option_IE7(e) {
                    if (e.options[e.selectedIndex].disabled) {
                        for (var i=0, option; option = e.options[i]; i++) {
                                if (! option.disabled) {
                                    e.selectedIndex = i;
                                    return 0;
                                }
                        }
                    }
                    return 0;
            }
            function emulate_disabled_options_to_gray_IE7(ename) {
                    
                    jQuery('select[name="'+ename+'"] option,select[name="'+ename+'[]"] option').each(function( index ) {
                        if (jQuery(this).prop('disabled')){
                            jQuery(this).css('color','graytext');
                        } else {
                            jQuery(this).css('color','menutext');
                        }
                    });                    
                    /*
                    for (var i=0, option; option = e.options[i]; i++) {
                            if (option.disabled) { option.style.color = "graytext";}
                            else {                 option.style.color = "menutext";}
                    }*/
            }
}
// Times
function isDayFullByTime(bk_type, td_class ) { 
   var times_array = [];
    var time_slot_field_name = 'select[name="rangetime' + bk_type + '"]';
    var time_slot_field_name2 = 'select[name="rangetime' + bk_type + '[]"]';
   // Get dates and time from aproved dates
   if(typeof(date_approved[ bk_type ]) !== 'undefined')
   if(typeof(date_approved[ bk_type ][ td_class ]) !== 'undefined') {
      for ( i=0; i< date_approved[ bk_type ][ td_class ].length; i++){
         if( ( date_approved[ bk_type ][ td_class ][0][3] != 0) ||  ( date_approved[ bk_type ][ td_class ][0][4] != 0) ) {
            h = date_approved[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
            m = date_approved[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
            s = date_approved[ bk_type ][ td_class ][i][5];if (s == 2) s = '02';
            times_array[ times_array.length ] = [h,m,s];
         }
     }
   }
   // Get dates and time from pending dates
   if(typeof( date2approve[ bk_type ]) !== 'undefined')
   if(typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined')
      for ( i=0; i< date2approve[ bk_type ][ td_class ].length; i++){
        if( ( date2approve[ bk_type ][ td_class ][0][3] != 0) ||  ( date2approve[ bk_type ][ td_class ][0][4] != 0) ) {
            h = date2approve[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
            m = date2approve[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
            s = date2approve[ bk_type ][ td_class ][i][5];if (s == 2) s = '02';
            times_array[ times_array.length ] = [h,m,s];
          }
       }
    times_array.sort();
    //Customization Bence - make day with start and end time - unavailable
    //var is_start_here = false;
    //var is_end_here = false;
    //for (var jj=0; jj< times_array.length; jj++){
    //    if (times_array[jj][2]=='01' ) is_start_here = true;
    //    if (times_array[jj][2]=='02' ) is_end_here = true;
    //}
    //if ( (is_start_here) && (is_end_here) ) return true;
// check here according time ranges selection
// and check all slots for reserVATION.
// IF ALL SLOTS ARE RESERVED, INSIDE OF times_array
// SO THEN RETURN TRUE
    var is_element_exist = jQuery( time_slot_field_name+','+time_slot_field_name2 ).length;
    if (is_element_exist) {
        var my_timerange_value = jQuery( time_slot_field_name + ' option,'+time_slot_field_name2 + ' option');
        var my_st_en_times;
        var my_temp_time;
        var times_ranges_array=[];
        for (var j=0; j< my_timerange_value.length; j++){
            my_st_en_times = my_timerange_value[j].value.split(' - ');
            my_temp_time = my_st_en_times[0].split(':');
            times_ranges_array[ times_ranges_array.length ] = [ my_temp_time[0], my_temp_time[1], '01' ]; //Start time
            my_temp_time = my_st_en_times[1].split(':');
            times_ranges_array[ times_ranges_array.length ] = [ my_temp_time[0], my_temp_time[1], '02' ]; //End time
        }
        // check if all time slots from the selectbox are the booked inside of this day. Simple checking for the same
        if (times_array.length ==  times_ranges_array.length) {
            var is_all_same = true;
            for ( var i=0; i< times_array.length; i++){
                 if (
                      ( times_array[i][0] != times_ranges_array[i][0] ) ||
                      ( times_array[i][1] != times_ranges_array[i][1] ) ||
                      ( times_array[i][2] != times_ranges_array[i][2] )
                    )
                  is_all_same = false;
            }
            if ( is_all_same) return true;
        }
        //Check may be its not possible to select any other time slots from the selectbox, because its already booked, sothen mark this day as booked.
        if ((my_timerange_value.length > 0 ) && ( bk_days_selection_mode=='single' )  ){  // Only if range selections exist and we are have single days selections
           var removed_time_slots = is_time_slot_booked_for_this_time_array( bk_type, times_array );
           var some_exist_time_slots = [];
           var my_time_value = jQuery( time_slot_field_name + ' option,'+time_slot_field_name2 + ' option');
           for ( j=0; j< my_time_value.length; j++){
               if (  wpdev_in_array( removed_time_slots, j ) ) {
               } else {
                   some_exist_time_slots[some_exist_time_slots.length] = j;
               }
           }
           if (some_exist_time_slots.length == 0 ) return true;
        }
    }
    for ( var i=0; i< times_array.length; i++){  // s = 2 - end time,   s = 1 - start time
       s = parseInt( times_array[i][2] );
       if  (i == 0)
            if  (s !== 2)  {return false;} // Its not start at the start of day
       if ( i > 0 ) {
            if ( s == 1 )
                if  ( !( ( times_array[i-1][0] == times_array[i][0] ) &&  ( times_array[i-1][1] == times_array[i][1] ) ) ) {
                        return false; // previos time is not equal to current so we have some free interval
                }
       }
       if (i == ( times_array.length-1))
               if (s !== 1)   {return false;} // Its not end  at the end of day
    }
    return true;
}
function is_time_slot_booked_for_this_time_array( bk_type, times_array ){
    var time_slot_field_name = 'select[name="rangetime' + bk_type + '"]';
    var time_slot_field_name2 = 'select[name="rangetime' + bk_type + '[]"]';
    
    var start_time_slot_field_name = 'select[name="starttime' + bk_type + '"]';
    var start_time_slot_field_name2 = 'select[name="starttime' + bk_type + '[]"]';
        times_array.sort();
        var my_time_value = '';var j; var bk_time_slot_selection = ''; var minutes_booked; var minutes_slot; var my_range_time;
        var removed_time_slots = [];
        for ( var i=0; i< times_array.length; i++){  // s = 2 - end time,   s = 1 - start time
           s = parseInt( times_array[i][2] );
           if ( i > 0 ) {
                if ( s == 2 )
                    {
                       my_range_time = times_array[i-1][0] + ':' + times_array[i-1][1] + ' - ' + times_array[i][0] + ':' + times_array[i][1]  ;
                       my_time_value = jQuery( time_slot_field_name + ' option,'+time_slot_field_name2 + ' option,' + start_time_slot_field_name + ' option,'+start_time_slot_field_name2 + ' option');
                       for ( j=0; j< my_time_value.length; j++){
                          if (my_time_value[j].value == my_range_time ) {  // Mark as disable this option
                            removed_time_slots[ removed_time_slots.length ] = j;
                            //return  true;
                          } else {
                              // We will recheck here if, may  be some interval here inside of already booked intervals, so then we need to disable it.
                              bk_time_slot_selection = my_time_value[j].value;
                              var is_time_range = bk_time_slot_selection.indexOf("-");
                              
                              if ( is_time_range > -1 ) { // Timeslots
                                    bk_time_slot_selection = bk_time_slot_selection.split('-');
                                    bk_time_slot_selection[0] = jQuery.trim(bk_time_slot_selection[0]);
                                    bk_time_slot_selection[1] = jQuery.trim(bk_time_slot_selection[1]);
                                    bk_time_slot_selection[0] = bk_time_slot_selection[0].split(':');
                                    bk_time_slot_selection[1] = bk_time_slot_selection[1].split(':');
                                    // Get only minutes
                                    minutes_booked = [ (parseInt(times_array[i-1][0]*60) +  parseInt(times_array[i-1][1] )) ,                  (parseInt( times_array[i][0]*60) +  parseInt(times_array[i][1] ) ) ] ;
                                    minutes_slot   = [ (parseInt(bk_time_slot_selection[0][0]*60) +  parseInt(bk_time_slot_selection[0][1] )), (parseInt(bk_time_slot_selection[1][0]*60) +  parseInt(bk_time_slot_selection[1][1] ) ) ] ;
                                    if (
                                         ( ( minutes_booked[0] >= minutes_slot[0] ) && ( minutes_booked[0] < minutes_slot[1] ) ) ||
                                         ( ( minutes_booked[1] > minutes_slot[0] ) && ( minutes_booked[1] <= minutes_slot[1] ) )
                                     ||
                                         ( ( minutes_slot[0] >= minutes_booked[0] ) && ( minutes_slot[0] < minutes_booked[1] ) ) ||
                                         ( ( minutes_slot[1] > minutes_booked[0] ) && ( minutes_slot[1] <= minutes_booked[1] ) )
                                       )
                                    {
                                        removed_time_slots[ removed_time_slots.length ] = j;
                                        //return  true;
                                    }
                              } else { // Just  some time (like start time)
                                    bk_time_slot_selection = bk_time_slot_selection.split(':');
                                  
                                    // Get only minutes
                                    minutes_booked = [ (parseInt(times_array[i-1][0]*60) +  parseInt(times_array[i-1][1] )) ,                  (parseInt( times_array[i][0]*60) +  parseInt(times_array[i][1] ) ) ] ;
                                    minutes_slot   = [ (parseInt(bk_time_slot_selection[0]*60) +  parseInt(bk_time_slot_selection[1] )) ] ;
                                    if (
                                         ( ( minutes_slot[0] >= minutes_booked[0] ) && ( minutes_slot[0] < minutes_booked[1] ) )
                                       )
                                    {
                                        removed_time_slots[ removed_time_slots.length ] = j;
                                        //return  true;
                                    }
                                  
                              }
                          }
                       }
                    }
           }
        }
    return  removed_time_slots ;
}
function hoverDayTime(value, date, bk_type) {
    if (date == null) return;
    var i=0 ;var h ='' ;var m ='' ;var s='';
    var td_class;
   // Gathering information hint for tooltips ////////////////////////////////
   var tooltip_time = '';
   var times_array = [];
   td_class =  (date.getMonth()+1) + '-' + date.getDate() + '-' + date.getFullYear();
   // Get dates and time from aproved dates
   if(typeof(date_approved[ bk_type ]) !== 'undefined')
   if(typeof(date_approved[ bk_type ][ td_class ]) !== 'undefined') {
     if( ( date_approved[ bk_type ][ td_class ][0][3] != 0) ||  ( date_approved[ bk_type ][ td_class ][0][4] != 0) ) {
         for ( i=0; i< date_approved[ bk_type ][ td_class ].length; i++){
            h = date_approved[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
            m = date_approved[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
            s = date_approved[ bk_type ][ td_class ][i][5];if (s == 2) s = '02';
            times_array[ times_array.length ] = [h,m,s];
         }
     }
   }
   // Get dates and time from pending dates
   if(typeof( date2approve[ bk_type ]) !== 'undefined')
   if(typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined')
     if( ( date2approve[ bk_type ][ td_class ][0][3] != 0) ||  ( date2approve[ bk_type ][ td_class ][0][4] != 0) ) //check for time here
       {for ( i=0; i< date2approve[ bk_type ][ td_class ].length; i++){
            h = date2approve[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
            m = date2approve[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
            s = date2approve[ bk_type ][ td_class ][i][5];if (s == 2) s = '02';
            times_array[ times_array.length ] = [h,m,s];
          }
       }
//alert(times_array);
   // Time availability
   if (typeof( hover_day_check_global_time_availability ) == 'function') {times_array = hover_day_check_global_time_availability( date, bk_type ,times_array);}
    times_array.sort();
// if (times_array.length>0) alert(times_array);
    for ( i=0; i< times_array.length; i++){  // s = 2 - end time,   s = 1 - start time
       s = parseInt( times_array[i][2] );
       if (s == 2) {if (tooltip_time == '') tooltip_time = '    ...    - ';}      // End time and before was no dates so its start from start of date
       if ( (tooltip_time == '') && (times_array[i][0]=='00') && (times_array[i][1]=='00') )
           tooltip_time = '    ...   ';  //start date at the midnight
       else if ( (i == ( times_array.length-1)) && (times_array[i][0]=='23') && (times_array[i][1]=='59') )
        tooltip_time += '     ... ';
       else {
        var hours_show = times_array[i][0];
        var hours_show_sufix = '';
        if (is_am_pm_inside_time) {
            if (hours_show>=12) {
                hours_show = hours_show - 12;
                if (hours_show==0) hours_show = 12;
                hours_show_sufix = ' pm';
            } else {
                hours_show_sufix = ' am';
            }
        }
//Customization of bufer time for DAN
if (times_array[i][2] == '02' ) {
    times_array[i][1] = ( times_array[i][1]*1)  + time_buffer_value ;
    if (times_array[i][1] > 59 ) {
        times_array[i][1] = times_array[i][1] - 60;
        hours_show = (hours_show*1) + 1;
    }
    if (times_array[i][1] < 10 ) times_array[i][1] = '0'+times_array[i][1];
}
        tooltip_time += hours_show + ':' + times_array[i][1] + hours_show_sufix;
       }
       if (s == 1) {tooltip_time += ' - ';if (i == ( times_array.length-1)) tooltip_time += '     ... ';}
       if (s == 2) {
           tooltip_time += get_additional_info_for_tooltip( bk_type , td_class , times_array[i][0] + ':' + times_array[i][1] );
           tooltip_time += '
';
       } /**/
    }
    // jQuery( '#calendar_booking'+bk_type+' td.cal4date-'+td_class )  // TODO: continue working here, check unshow times at full booked days
    if ( tooltip_time.indexOf("undefined") > -1 ) {tooltip_time = '';}
    else {
        if ( (tooltip_time != '') && (bk_highlight_timeslot_word !='') ) {
            tooltip_time = ''+bk_highlight_timeslot_word + '
' + tooltip_time ;
        }
    }
    if(typeof( getDayPrice4Show ) == 'function') {tooltip_time = getDayPrice4Show(bk_type, tooltip_time, td_class);}  
    if(typeof( getDayAvailability4Show ) == 'function') {tooltip_time = getDayAvailability4Show(bk_type, tooltip_time, td_class);}  
    //tooltip_time = 'Already booked time slots: ' + tooltip_time ;
    jQuery( '#calendar_booking'+bk_type+' td.cal4date-'+td_class ).attr('data-content', tooltip_time ) ;
    
    ////////////////////////////////////////////////////////////////////////
}
function get_additional_info_for_tooltip( bk_type , td_class , times_array ){
    
    if ( (bk_show_info_in_form == undefined) || (! bk_show_info_in_form) )
            return '';
    // TODO: stop working here according names in tooltips
    //var id_was_here = [];
    var return_variable = '';
    var posi = 0;
    var this_booking_end_time = '';
    for(var ik=0 ; ik< dates_additional_info[ bk_type ][ td_class ].length; ik++) {
        
        if (dates_additional_info[ bk_type ][ td_class ][ik][ 'endtime' ] != undefined ) {              // if ENDTIME shortcode is used in the Booking Form
            
            this_booking_end_time = dates_additional_info[ bk_type ][ td_class ][ik][ 'endtime' ];
           
        } else if (dates_additional_info[ bk_type ][ td_class ][ik][ 'rangetime' ] != undefined ) {     // if in Booking form was RANGETIME shortcode
            
            posi = dates_additional_info[ bk_type ][ td_class ][ik][ 'rangetime' ].indexOf( ' - ' );
            this_booking_end_time = dates_additional_info[ bk_type ][ td_class ][ik][ 'rangetime' ].substr(posi + 3 );
        }
            
        if ( this_booking_end_time == times_array ) {
           return_variable +=  ' - ';
           if (dates_additional_info[ bk_type ][ td_class ][ik][ 'name' ] != undefined)
                return_variable +=  dates_additional_info[ bk_type ][ td_class ][ik][ 'name' ] ;
           if (dates_additional_info[ bk_type ][ td_class ][ik][ 'secondname' ] != undefined)
                return_variable += ' ' + dates_additional_info[ bk_type ][ td_class ][ik][ 'secondname' ] ;
           if (dates_additional_info[ bk_type ][ td_class ][ik] [ 'details2' ] != undefined)
                return_variable +='
 ' + dates_additional_info[ bk_type ][ td_class ][ik] [ 'details2' ] + '';
            
           return_variable += ''
           return return_variable;
       }
       /* if ( ! wpdev_in_array(id_was_here, dates_additional_info[ bk_type ][ td_class ][ik] [ 'id' ] ) ) {
         id_was_here[id_was_here.length] =  dates_additional_info[ bk_type ][ td_class ][ik] [ 'id' ];
         tooltip_time +=  dates_additional_info[ bk_type ][ td_class ][ik] [ 'name' ] + '>' + dates_additional_info[ bk_type ][ td_class ][ik] [ 'endtime' ];
       }/**/
    }
    return '';
}
function isTimeTodayGone(myTime, sort_date_array){
    var date_to_check = sort_date_array[0];
    if (is_check_start_time_gone == false) {
        date_to_check = sort_date_array[ (sort_date_array.length-1) ];
    }
    
    if (parseInt(date_to_check[0]) < parseInt(wpdev_bk_today[0])) return true;
    if (( parseInt(date_to_check[0]) == parseInt(wpdev_bk_today[0])  ) && ( parseInt(date_to_check[1]) < parseInt(wpdev_bk_today[1])  ) )
        return true;
    if (( parseInt(date_to_check[0]) == parseInt(wpdev_bk_today[0])  ) && ( parseInt(date_to_check[1]) == parseInt(wpdev_bk_today[1])  ) && ( parseInt(date_to_check[2]) < parseInt(wpdev_bk_today[2])  ) )
        return true;
    if (( parseInt(date_to_check[0]) == parseInt(wpdev_bk_today[0])  ) &&
        ( parseInt(date_to_check[1]) == parseInt(wpdev_bk_today[1])  ) &&
        ( parseInt(date_to_check[2]) == parseInt(wpdev_bk_today[2])  )) {
        var mytime_value = myTime.split(":");
        mytime_value = mytime_value[0]*60 + parseInt(mytime_value[1]);
        var current_time_value = wpdev_bk_today[3]*60 + parseInt(wpdev_bk_today[4]);
        if ( current_time_value  > mytime_value ) return true;
    }
    return false;
}
var start_time_checking_index;
function checkTimeInside( mytime, is_start_time, bk_type ) {
        // Check time availability for global filters
        if(typeof( check_entered_time_to_global_availability_time ) == 'function') {if (! check_entered_time_to_global_availability_time(mytime, is_start_time, bk_type) ) return false;}
        var my_dates_str = document.getElementById('date_booking'+ bk_type ).value;                 // GET DATES From TEXTAREA
        return checkTimeInsideProcess( mytime, is_start_time, bk_type, my_dates_str );
}
function checkRecurentTimeInside( my_rangetime,  bk_type ) {
   var valid_time = true;
   var my_dates_str = document.getElementById('date_booking'+ bk_type ).value;                 // GET DATES From TEXTAREA
    // recurrent time check for all days in loop
    var date_array = my_dates_str.split(", ");
    if (date_array.length == 2) { // This recheck is need for editing booking, with single day
        if (date_array[0]==date_array[1]) {
            date_array = [ date_array[0] ];
        }
    }
    var temp_date_str = '';
    for (var i=0; i< date_array.length; i++) {  // Get SORTED selected days array
            temp_date_str = date_array[i];
            if ( checkTimeInsideProcess( my_rangetime[0], true, bk_type, temp_date_str ) == false )   valid_time = false;
            if ( checkTimeInsideProcess( my_rangetime[1], false, bk_type, temp_date_str ) == false )  valid_time = false;
    }
    return valid_time;
}
// Function check start and end time at selected days
function checkTimeInsideProcess( mytime, is_start_time, bk_type, my_dates_str ) {
    var date_array = my_dates_str.split(", ");
    if (date_array.length == 2) { // This recheck is need for editing booking, with single day
        if (date_array[0]==date_array[1]) {
            date_array = [ date_array[0] ];
        }
    }
    var temp_elemnt;var td_class;var sort_date_array = [];var work_date_array = [];var times_array = [];var is_check_for_time;
    for (var i=0; i< date_array.length; i++) {  // Get SORTED selected days array
        temp_elemnt = date_array[i].split(".");
        sort_date_array[i] = [ temp_elemnt[2], temp_elemnt[1] + '', temp_elemnt[0] + '' ]; // [2009,7,1],...
    }
    sort_date_array.sort();                                                                   // SORT    D a t e s
    for (i=0; i< sort_date_array.length; i++) {                                  // trnasform to integers
        sort_date_array[i] = [ parseInt(sort_date_array[i][0]*1), parseInt(sort_date_array[i][1]*1), parseInt(sort_date_array[i][2]*1) ]; // [2009,7,1],...
    }
    if (  ((is_check_start_time_gone) && (is_start_time)) || 
          ((! is_check_start_time_gone) && (! is_start_time)) ) {
        if ( isTimeTodayGone(mytime, sort_date_array) )  return false;
    }
    //  CHECK FOR BOOKING INSIDE OF     S E L E C T E D    DAY RANGE AND FOR TOTALLY BOOKED DAYS AT THE START AND END OF RANGE
    work_date_array =  sort_date_array;
    for (var j=0; j< work_date_array.length; j++) {
        td_class =  work_date_array[j][1] + '-' + work_date_array[j][2] + '-' + work_date_array[j][0];
        if ( (j==0) || (j == (work_date_array.length-1)) ) is_check_for_time = true;         // Check for time only start and end time
        else                                               is_check_for_time = false;
        // Get dates and time from pending dates
        if(typeof( date2approve[ bk_type ]) !== 'undefined') {
          if ( (typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined') ) {
             if (! is_check_for_time) {return false;} // its mean that this date is booked inside of range selected dates
             if( ( date2approve[ bk_type ][ td_class ][0][3] != 0) ||  ( date2approve[ bk_type ][ td_class ][0][4] != 0) ) {
                 // Evrything good - some time is booked check later
             } else {return false;} // its mean that this date tottally booked
          }
        }
        // Get dates and time from pending dates
        if(typeof( date_approved[ bk_type ]) !== 'undefined') {
          if ( (typeof( date_approved[ bk_type ][ td_class ]) !== 'undefined') ) {
             if (! is_check_for_time) {return false;} // its mean that this date is booked inside of range selected dates
             if( ( date_approved[ bk_type ][ td_class ][0][3] != 0) ||  ( date_approved[ bk_type ][ td_class ][0][4] != 0) ) {
                 // Evrything good - some time is booked check later
             } else {return false;} // its mean that this date tottally booked
          }
        }
    }  ///////////////////////////////////////////////////////////////////////////////////////////////////////
     // Check    START   OR    END   time for time no in correct fee range
     if (is_start_time ) work_date_array =  sort_date_array[0] ;
     else                work_date_array =  sort_date_array[sort_date_array.length-1] ;
     td_class =  work_date_array[1] + '-' + work_date_array[2] + '-' + work_date_array[0];
        // Get dates and time from pending dates
        if(typeof( date2approve[ bk_type ]) !== 'undefined')
          if(typeof( date2approve[ bk_type ][ td_class ]) !== 'undefined')
              for ( i=0; i< date2approve[ bk_type ][ td_class ].length; i++){
                h = date2approve[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
                m = date2approve[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
                s = date2approve[ bk_type ][ td_class ][i][5];
//Customization of bufer time for DAN
if (s == '02') {
    m = ( m*1 )  + time_buffer_value ;
    if (m > 59 ) {
        m = m - 60;
        h = (h*1) + 1;
    }
    if (m < 10 ) m = '0'+m;
}
                times_array[ times_array.length ] = [h,m,s];
              }
        // Get dates and time from pending dates
        if(typeof( date_approved[ bk_type ]) !== 'undefined')
          if(typeof( date_approved[ bk_type ][ td_class ]) !== 'undefined')
              for ( i=0; i< date_approved[ bk_type ][ td_class ].length; i++){
                h = date_approved[ bk_type ][ td_class ][i][3];if (h < 10) h = '0' + h;if (h == 0) h = '00';
                m = date_approved[ bk_type ][ td_class ][i][4];if (m < 10) m = '0' + m;if (m == 0) m = '00';
                s = date_approved[ bk_type ][ td_class ][i][5];
//Customization of bufer time for DAN
if (s == '02') {
    m = ( m*1 )  + time_buffer_value ;
    if (m > 59 ) {
        m = m - 60;
        h = (h*1) + 1;
    }
    if (m < 10 ) m = '0'+m;
}
                times_array[ times_array.length ] = [h,m,s];
              }
        times_array.sort();                     // SORT TIMES
        var times_in_day = [];                  // array with all times
        var times_in_day_interval_marks = [];   // array with time interval marks 1- stsrt time 2 - end time
        for ( i=0; i< times_array.length; i++){s = times_array[i][2];         // s = 2 - end time,   s = 1 - start time
           // Start close interval
           if ( (s == 2) &&  (i == 0) ) {times_in_day[ times_in_day.length ] = 0;times_in_day_interval_marks[times_in_day_interval_marks.length]=1;}
           // Normal
           times_in_day[ times_in_day.length ] = times_array[i][0] * 60 + parseInt(times_array[i][1]);
           times_in_day_interval_marks[times_in_day_interval_marks.length]=s;
           // End close interval
           if ( (s == 1) &&  (i == (times_array.length-1)) ) {times_in_day[ times_in_day.length ] = (24*60);times_in_day_interval_marks[times_in_day_interval_marks.length]=2;}
        }
        // Get time from entered time
        var mytime_value = mytime.split(":");
        mytime_value = mytime_value[0]*60 + parseInt(mytime_value[1]);
//alert('My time:'+ mytime_value + '  List of times: '+ times_in_day + '  Saved indexes: ' + start_time_checking_index + ' Days: ' + sort_date_array ) ;
        var start_i = 0;
        if (start_time_checking_index != undefined)
            if (start_time_checking_index[0] != undefined)
                if ( (! is_start_time) && (sort_date_array.length == 1) ) {start_i = start_time_checking_index[0]; /*start_i++;*/}
        i=start_i;
        // Main checking inside a day
        for ( i=start_i; i< times_in_day.length; i++){
            times_in_day[i] = parseInt(times_in_day[i]);
            mytime_value = parseInt(mytime_value);
            if (is_start_time ) {
                if ( mytime_value > times_in_day[i] ){
                    // Its Ok, lets Loop to next item
                } else if ( mytime_value == times_in_day[i] ) {
                    if (times_in_day_interval_marks[i] == 1 ) {return false;     //start time is begin with some other interval
                    } else {
                        if ( (i+1) <= (times_in_day.length-1) ) {
                            if ( times_in_day[i+1] <= mytime_value ) return false;  //start time  is begin with next elemnt interval
                            else  {                                                 // start time from end of some other
                                if (sort_date_array.length > 1)
                                    if ( (i+1) <= (times_in_day.length-1) ) return false;   // Its mean that we make end booking at some other day then this and we have some booking time at this day after start booking  - its wrong
                                start_time_checking_index = [i, td_class,mytime_value];
                                return true;
                            }
                        }
                        if (sort_date_array.length > 1)
                            if ( (i+1) <= (times_in_day.length-1) ) return false;   // Its mean that we make end booking at some other day then this and we have some booking time at this day after start booking  - its wrong
                        start_time_checking_index = [i, td_class,mytime_value];
                        return true;                                            // start time from end of some other
                    }
                } else if ( mytime_value < times_in_day[i] ) {
                    if (times_in_day_interval_marks[i] == 2 ){return false;     // start time inside of some interval
                    } else {
                        if (sort_date_array.length > 1)
                            if ( (i+1) <= (times_in_day.length-1) ) return false;   // Its mean that we make end booking at some other day then this and we have some booking time at this day after start booking  - its wrong
                        start_time_checking_index = [i, td_class,mytime_value];
                        return true;
                    }
                }
            } else {
                if (sort_date_array.length == 1) {
                   if (start_time_checking_index !=undefined)
                       if (start_time_checking_index[2]!=undefined)
                            if ( ( start_time_checking_index[2] == times_in_day[i] ) && ( times_in_day_interval_marks[i] == 2) ) {    // Good, because start time = end of some other interval and we need to get next interval for current end time.
                            } else if ( times_in_day[i] < mytime_value ) return false;                 // some interval begins before end of curent "end time"
                            else {
                                if (start_time_checking_index[2]>= mytime_value) return false;  // we are select only one day and end time is earlythe starttime its wrong
                                return true;                                                    // if we selected only one day so evrything is fine and end time no inside some other intervals
                            }
                } else {
                    if ( times_in_day[i] < mytime_value ) return false;                 // Some other interval start before we make end time in the booking at the end day selection
                    else                                  return true;
                }
            }
        }
        if (is_start_time )  start_time_checking_index = [i, td_class,mytime_value];
        else {
           if (start_time_checking_index !=undefined)
               if (start_time_checking_index[2]!=undefined)
                    if ( (sort_date_array.length == 1) && (start_time_checking_index[2]>= mytime_value) ) return false;  // we are select only one day and end time is earlythe starttime its wrong
        }
        return true;
}
function save_this_booking_cost(booking_id, cost){
    if (cost!='') {
            var ajax_bk_message = 'Updating...';
            
            document.getElementById('ajax_working').innerHTML =
            '\n\
                
'+ajax_bk_message+'
 \n\
                
\n\
                       

\n\
                
\n\
            
 ';
            var wpdev_ajax_path = wpdev_bk_plugin_url+'/' + wpdev_bk_plugin_filename ;
            var ajax_type_action='SAVE_BK_COST';
            jQuery.ajax({                                           // Start Ajax Sending
                // url: wpdev_ajax_path,
                url: wpbc_ajaxurl,
                type:'POST',
                success: function (data, textStatus){if( textStatus == 'success')   jQuery('#ajax_respond' ).html( data ) ;},
                error:function (XMLHttpRequest, textStatus, errorThrown){window.status = 'Ajax sending Error status:'+ textStatus;alert(XMLHttpRequest.status + ' ' + XMLHttpRequest.statusText);if (XMLHttpRequest.status == 500) {alert('Please check at this page according this error:' + ' http://wpbookingcalendar.com/faq/#ajax-sending-error');}},
                // beforeSend: someFunction,
                data:{
                    // ajax_action : ajax_type_action,
                    action : ajax_type_action,
                    booking_id : booking_id,
                    cost : cost,
                    wpbc_nonce: document.getElementById('wpbc_admin_panel_nonce').value 
                }
            });
            return false;
        }
        return true;
}
function sendPaymentRequestByEmail(payment_request_id , request_reason, wpdev_active_locale) {
 
            var ajax_bk_message = 'Sending...';
            document.getElementById('ajax_working').innerHTML =
            '\n\
                
'+ajax_bk_message+'
 \n\
                
\n\
                       

\n\
                
\n\
            
 ';
            var wpdev_ajax_path = wpdev_bk_plugin_url+'/' + wpdev_bk_plugin_filename ;
            var ajax_type_action='SEND_PAYMENT_REQUEST';
            jQuery.ajax({                                           // Start Ajax Sending
                // url: wpdev_ajax_path,
                url: wpbc_ajaxurl,
                type:'POST',
                success: function (data, textStatus){if( textStatus == 'success')   jQuery('#ajax_respond' ).html( data ) ;},
                error:function (XMLHttpRequest, textStatus, errorThrown){window.status = 'Ajax sending Error status:'+ textStatus;alert(XMLHttpRequest.status + ' ' + XMLHttpRequest.statusText);if (XMLHttpRequest.status == 500) {alert('Please check at this page according this error:' + ' http://wpbookingcalendar.com/faq/#ajax-sending-error');}},
                // beforeSend: someFunction,
                data:{
                    // ajax_action : ajax_type_action,
                    action : ajax_type_action,
                    booking_id : payment_request_id,
                    reason : request_reason,
                    wpdev_active_locale:wpdev_active_locale,
                    wpbc_nonce: document.getElementById('wpbc_admin_panel_nonce').value 
                }
            });
            return false;
}
// Chnage the booking status of booking
function chnage_booking_payment_status(booking_id, payment_status, payment_status_show) {
            var ajax_bk_message = 'Updating...';
            document.getElementById('ajax_working').innerHTML =
            '\n\
                
'+ajax_bk_message+'
 \n\
                
\n\
                       

\n\
                
\n\
            
 ';
            var wpdev_ajax_path = wpdev_bk_plugin_url+'/' + wpdev_bk_plugin_filename ;
            var ajax_type_action='CHANGE_PAYMENT_STATUS';
            jQuery.ajax({                                           // Start Ajax Sending
                // url: wpdev_ajax_path,
                url: wpbc_ajaxurl,
                type:'POST',
                success: function (data, textStatus){if( textStatus == 'success')   jQuery('#ajax_respond' ).html( data ) ;},
                error:function (XMLHttpRequest, textStatus, errorThrown){window.status = 'Ajax sending Error status:'+ textStatus;alert(XMLHttpRequest.status + ' ' + XMLHttpRequest.statusText);if (XMLHttpRequest.status == 500) {alert('Please check at this page according this error:' + ' http://wpbookingcalendar.com/faq/#ajax-sending-error');}},
                // beforeSend: someFunction,
                data:{
                    // ajax_action : ajax_type_action,
                    action : ajax_type_action,
                    booking_id : booking_id,
                    payment_status : payment_status,
                    payment_status_show: payment_status_show,
                    wpbc_nonce: document.getElementById('wpbc_admin_panel_nonce').value 
                }
            });
}