/* 
 * jQuery.simpleTip.js
 * © 2011 kumagaiyusuke
*/

(function ($) {

  $.simpleTip = function (options) {
    
    // !変数
    
    var $document;
    var $simpleTip;
    
    var position = {
      x: 0,
      y: 0
    };
    
    var fps = $.simpleTip.FPS;

    var resistance = 1;

    var chaseX = 0;
    var chaseY = 0;
    
    var currentX = 0;
    var currentY = 0;
    
    var isShowTip = false;
    
    var interval = Math.floor(1000 / fps);
    
    var timer;
    
    
    // !初期化
    
    $document = $(document);
    $simpleTip = $("<div>");
    
    if (typeof options !== "undefined") {
      
      if (typeof options.position !== "undefined") {
        
        if (typeof options.position.x === "number") {
          position.x = options.position.x;
        }
        if (typeof options.position.y === "number") {
          position.y = options.position.y;
        }
        
      }
      
      if (typeof options.resistance === "number") {
        resistance = options.resistance;
      }
      
    }
    
    $simpleTip.css({
      position: "absolute",
      top: currentX,
      left: currentY,
      display: "none"
    });
    
    
    // !イベントハンドラ
    
    function onMouseMove(e) {
      
      chaseX = e.pageX + position.x;
      chaseY = e.pageY + position.y;
      
      if (currentX < 0 || currentY < 0) {
        currentX = chaseX;
        currentY = chaseY;
      }
    }
    
    function chaseCursor() {
      
      currentX += (chaseX - currentX) / resistance;
      currentY += (chaseY - currentY) / resistance;
      
      $simpleTip.css({
        top: currentY,
        left: currentX
      });

      timer = setTimeout(chaseCursor, interval);
    }
    
    
    // !パブリック
    
    $simpleTip.show = function (top, left) {
      
      if (isShowTip) {
        return;
      }
      
      isShowTip = true;
      
      $document.on("mousemove", onMouseMove);

      currentX = left;
      currentY = top;
      
      $simpleTip.css({
        display: "block",
        top: top,
        left: left
      });
      
      timer = setTimeout(chaseCursor, interval);
    };
    
    $simpleTip.hide = function () {
      
      if (!isShowTip) {
        return;
      }
      
      isShowTip = false;
      
      $document.off("mousemove", onMouseMove);
      
      $simpleTip.css({
        display: "none"
      });
      
      clearTimeout(timer);
    };
    
    
    return $simpleTip;
  };
  
  $.simpleTip.FPS = 30;

})(jQuery);

