﻿function GrabAndDrop() { 
   //移動レート（増やすとちょっと動かしたらいっぱい動く） 
   this.moveRate      = 1.0; 
   //初期状態でグラブするかしないか 
   this.defaultGrab   = true; 

   this.enabledGandD   = false; 
   this.drag         = false; 
   this.lastSX         = 0; 
   this.lastSY         = 0; 
   this.lastMX         = 0; 
   this.lastMY         = 0; 
   this.target         = null; 
   this.observer       = null;

   this._init(); 
} 

GrabAndDrop.prototype._init = function() { 
   var self = this; 
   this.observer = document.getElementById("observer");
   addEvent(this.observer, 'mousemove', function(evt) { self.onMouseMove(evt); }); 
   addEvent(this.observer, 'mouseup', function() { self.onMouseUp(); }); 
   addEvent(this.observer, 'mousedown', function(evt) { self.onMouseDown(evt); }); 
   if (this.defaultGrab == true) { 
      this.observer.style.cursor = 'move'; 
      this.enabledGandD = true; 
   } 
} 
GrabAndDrop.prototype._setDragPosition = function(obj, evt) { 
   this.lastSX = obj.scrollLeft; 
   this.lastSY = obj.scrollTop; 
   this.lastMX = obj.scrollLeft + evt.clientX; 
   this.lastMY = obj.scrollTop + evt.clientY; 
} 
GrabAndDrop.prototype.onMouseDown = function(evt) { 
   var obj; 
   if (window.event) {
      if (!evt) var evt = window.event;
      obj = event.srcElement; 
   }
   else {
      obj = evt.target; 
   }
   if (this.enabledGandD == false) { 
      return; 
   } 
   this.target = document.getElementById("calendarContents"); 
   this._setDragPosition(this.target, evt); 
   this.drag = true; 

   if (window.event) {
      event.returnValue = false; 
   }
} 
GrabAndDrop.prototype.onMouseUp = function() { 
   this.drag = false; 
} 
GrabAndDrop.prototype.onMouseMove = function(evt) { 
   if (window.event) {
      if (!evt) var evt = window.event;
   }
   if (this.drag) { 
      if (this.target != null) { 
         var X = this.target.scrollLeft + evt.clientX; 
         var Y = this.target.scrollTop + evt.clientY; 
         this.target.scrollLeft   = this.lastSX - (X - this.lastMX) * this.moveRate; 
         this._setDragPosition(this.target, evt); 
      } 
      if (window.event) {
         event.returnValue = false; 
      }
   } 
} 
