Advertisement
Guest User

Untitled

a guest
Apr 4th, 2012
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function RangeSelector(product_id) {
  2.     this.product_id = product_id;
  3.     this.start_point = "#from_" + product_id;
  4.     this.end_point = "#to_" + product_id;
  5.    
  6.     this.cal = new Calendar(1);
  7.     this.cal.events.push(new Event(1,new Date("04/01/2012 13:00"),new Date("04/05/2012 08:00")));
  8.     this.cal.events.push(new Event(1,new Date("04/06/2012 17:00"),new Date("04/07/2012 09:00")));
  9.     this.cal.events.push(new Event(1,new Date("04/29/2012 08:00"),new Date("05/15/2012 14:00")));
  10. }
  11.  
  12. RangeSelector.prototype.build = function() {
  13.     $(this.start_point)
  14.         .attr("readonly", "true")
  15.         .datetimepicker({
  16.             hour: 8,
  17.             minute: 0,
  18.             hourMin: 7,
  19.             hourMax: 18,
  20.             hourGrid: 1,
  21.             showButtonPanel: false,
  22.             numberOfMonths: 3,
  23.             showMinute : false,
  24.             dateFormat : 'dd.mm.yy',
  25.             timeFormat: 'hh:mm',
  26.             showWeek: true,
  27.             weekHeader: "Kw.",
  28.             minDate: Date.today().add(7).hours(),
  29.             maxDate: Date.today().add(1).years(),
  30.             beforeShowDay: this.unavailableFrom,
  31.             onSelect: function(selectedDateTime){
  32.                 var endDateTextBox = $(this.end_point);
  33.                 var date = Date.parse(selectedDateTime);
  34.  
  35.                 preventTimeOverlappingWithEvents(date,this.start_point);
  36.  
  37.                 var testStartDate = $(this).datetimepicker('getDate');
  38.                 if (endDateTextBox.val() != '') {
  39.                     var testEndDate = Date.parse(endDateTextBox.val());
  40.  
  41.                     if (testEndDate < testStartDate) {
  42.                         $(this.start_point).datetimepicker('setTime', testEndDate);
  43.                         show_error();
  44.                     }
  45.                     else {
  46.                         correctMinMaxDateTo(testStartDate);
  47.                     }
  48.                 }
  49.                 else {
  50.                     correctMinMaxDateTo(testStartDate);
  51.                 }
  52.             }
  53.         });
  54.            
  55.     $(this.end_point)
  56.         .attr("readonly", "true")
  57.         .datetimepicker({
  58.             dateFormat : 'dd.mm.yy',
  59.             timeFormat: 'hh:mm',
  60.             showMinute : false,
  61.             showButtonPanel: false,
  62.             hour: 8,
  63.             minute: 0,
  64.             hourMin: 7,
  65.             hourMax: 18,
  66.             hourGrid: 1,
  67.             numberOfMonths: 3,
  68.             showWeek: true,
  69.             weekHeader: "Kw.",
  70.             minDate: Date.today().add(0).hours(),
  71.             maxDate: Date.today().add(1).years(),
  72.             beforeShowDay: this.unavailableTo,
  73.             onSelect: function(selectedDateTime){
  74.                 var startDateTextBox = $(this.start_point);
  75.                 var testEndDate = $(this.end_point).datetimepicker('getDate');
  76.                 var date = Date.parse(selectedDateTime);
  77.            
  78.                 preventTimeOverlappingWithEvents(date,this.end_point);
  79.            
  80.                 if (startDateTextBox.val() != '') {
  81.                     var testStartDate = Date.parse(startDateTextBox.val());
  82.                
  83.                     if (testStartDate > testEndDate) {
  84.                         $(this.end_point).datetimepicker('setTime', testStartDate);
  85.                         show_error();
  86.                     }
  87.                     else {
  88.                         correctMinMaxDateFrom(testEndDate);
  89.                     }
  90.                
  91.                 }
  92.                 else {
  93.                     correctMinMaxDateFrom(testEndDate);
  94.                 }
  95.             }
  96.         });
  97.    
  98. }
  99.  
  100.  
  101. RangeSelector.prototype.unavailable = function(date) {
  102.     result = [true, "green", "Book Now"];
  103.    
  104.     $.each(this.cal.events, function(key, myEvent) {
  105.        
  106.         if(myEvent.surrounds(date)) {
  107.             result = [false,"red","Vermietet"];
  108.         }
  109.        
  110.         if(myEvent.equalsStartDay(date)) {
  111.             result = [true,"equals_start_day","Ab " + myEvent.getStartTime() + " Uhr vermietet"];  
  112.         }
  113.        
  114.         if(myEvent.equalsEndDay(date)) {
  115.             result = [true,"equals_end_day","Bis " + myEvent.getEndTime() + " Uhr vermietet"]; 
  116.         }
  117.     });
  118.    
  119.     return result;
  120. }
  121. RangeSelector.prototype.unavailableTo = function(date) {
  122.     var start_point = $(this.start_point).datepicker( "getDate" );
  123.     var maxDate = $(this.end_point).datepicker("option","maxDate");
  124.    
  125.     if (maxDate < date && !date.onSameDay(maxDate)) {
  126.         return [false,"",""];
  127.     }
  128.     if (start_point != null && date < start_point && !date.onSameDay(start_point)) {
  129.         return [false,"",""];
  130.     }
  131.     else {
  132.         return this.unavailable(date);
  133.     }
  134. }
  135.  
  136.  
  137. RangeSelector.prototype.unavailableFrom = function(date) {
  138.     var end_point = $(this.end_point).datepicker( "getDate" );
  139.     var minDate = $(this.start_point).datepicker("option","minDate");
  140.  
  141.     if (minDate > date && !date.onSameDay(minDate)) {
  142.         return [false,"",""];
  143.     }
  144.     else if (end_point != null && date > end_point && !date.onSameDay(end_point)) {
  145.         return [false,"",""];
  146.     }
  147.     else {
  148.         return this.unavailable(date); 
  149.     }
  150. }
  151.  
  152.  
  153.  
  154.  
  155. RangeSelector.prototype.preventTimeOverlappingWithEvents = function(date, selector) {
  156.    
  157.     $.each(this.cal.events, function(key, myEvent) {
  158.        
  159.         if(myEvent.equalsStartDay(date)) {
  160.            
  161.             if(date > myEvent.start_point) {
  162.                 $(selector).datetimepicker('setTime', myEvent.start_point);
  163.                 show_error();
  164.             }
  165.         }
  166.  
  167.         if(myEvent.equalsEndDay(date)) {
  168.            
  169.             if(date < myEvent.end_point) {
  170.                 $(selector).datetimepicker('setTime', myEvent.end_point);
  171.                 show_error();
  172.             }
  173.         }
  174.     });
  175. }
  176.  
  177. RangeSelector.prototype.correctMinMaxDateTo = function(date) {
  178.     var nextEvent = this.cal.getNextEvent(date);
  179.                        
  180.     if (nextEvent != null) {
  181.         $(this.end_point).datetimepicker('option', 'maxDate', nextEvent.start_point );
  182.     }
  183.     $(this.end_point).datetimepicker('option', 'minDate', date );  
  184. }
  185.    
  186. RangeSelector.prototype.correctMinMaxDateFrom = function(date) {
  187.     var prevEvent = this.cal.getPrevEvent(date);
  188.                    
  189.     if (prevEvent != null) {
  190.         $(this.start_point).datetimepicker('option', 'minDate', prevEvent.end_point );
  191.     }
  192.     $(this.start_point).datetimepicker('option', 'maxDate', date );
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement