/*
 * jQuery delta.resizeEvents v1.0
 * ウィンドウのリサイズ開始時と終了時のイベントを取得できるようになるプラグイン
*/

/* オプション
 * 
 * interval: ミリ秒
 * ウィンドウがリサイズ中か否かのチェックする処理の間隔を調節する事ができます。
 * デフォルトでは200ミリ秒に1回判断する処理を行います。
*/

/*　使用例
  
var $window = $(window);

// 呼び出し元でイベントをアクティブにしている事を明確にするため、
// 一度関数を実行しなければならない設計にしました。

$.delta.resizeEvents($window, { interval: 200 });


// 関数を実行したあとは、$(window)に対して
// 以下の2種類のイベントタイプが利用可能になります。

$window.bind("resizestart", onResizeStart);
$window.bind("resizeend", onResizeEnd);

function onResizeStart(e) {
// リサイズ開始時の処理
}

function onResizeEnd(e) {
// リサイズ終了時の処理
}

*/

(function ($) {

  if (typeof $.delta == "undefined") {
    $.delta = {};
  }

  $.delta.resizeEvents = function ($window, options) {
  
    // 既にプラグインが有効になっていた場合は中断
    if ($.delta.resizeEvents.active) {
      return;
    }
    
    var settings = $.extend({
      interval: 200
    }, options);
  
    var checkTimer;
    var currentSize = {};
    var isResize = false;
    
    
    // !初期化
    $.delta.resizeEvents.active = true;
    $window.bind("resize", onResizeWindow);
    
    
    // !イベントハンドラ
    function onResizeWindow(e) {
    
      if (!isResize) {
  
        isResize = true;
  
        currentSize.width = $window.width();
        currentSize.height = $window.height();
  
        clearTimeout(checkTimer);
        checkTimer = setTimeout(resizeCheck, settings.interval);
  
        $window.unbind("resize", onResizeWindow);
        $window.trigger("resizestart");
      }
  
    }
    
    // !プライベート関数
    function resizeCheck() {
      
      var windowSize = {
        width: $window.width(),
        height: $window.height()
      };
      
      if (
        currentSize.width === windowSize.width &&
        currentSize.height === windowSize.height
      ) {
        isResize = false;
        $window.bind("resize", onResizeWindow);
        $window.trigger("resizeend");
      }
      else {
        currentSize.width = windowSize.width;
        currentSize.height = windowSize.height;
        checkTimer = setTimeout(resizeCheck, settings.interval);
      }
    }

  };
  
  $.delta.resizeEvents.active = false;
  
})(jQuery);

