/**
*** ポップアップのDIVを扱う
**/
var PopupDiv  = function()  {
  var fInit_  = false;
  var base_;
  var basePos_;

  var dragMode_ = false;
  var dragStartDlsPos_;
  var dragStartMosPos_;

  //ドラッグ解除
  function releaseDrag()  {
    if( dragMode_ ) {
      //window.status = 'releaseDrag';
      dragMode_ = false;
      MouseCapture.ReleaseMouseCB( PopupDiv );
    }
  }

  //マウスドラッグ処理
  function dragUp( evt )  {
    if( Event.isLeftClick( evt ) )  {
      releaseDrag();
    }
  }
  function dragMove( evt )  {
    mpos                = MouseCapture.GetMousePos();
    basePos_.x          = dragStartDlgPos_.x + ( mpos.x - dragStartMosPos_.x );
    basePos_.y          = dragStartDlgPos_.y + ( mpos.y - dragStartMosPos_.y );
    base_.style.left    = basePos_.x + 'px';
    base_.style.top     = basePos_.y + 'px';
    //
    Event.stop( evt );
  }

  //マウスDOWN処理
  function mouseDownEvent( evt )  {
    if( !dragMode_ && MouseCapture.IsMouseEvent() )  {
      evt = (evt) ? evt : ((window.event) ? event : null );
      if( Event.isLeftClick( evt ) )  {
        mpos              = MouseCapture.GetMousePos();
        //
        dragStartDlgPos_  = { x: basePos_.x, y: basePos_.y };
        dragStartMosPos_  = { x: mpos.x, y: mpos.y }; //コピーしないといけない
        if( MouseCapture.SetMouseCB( PopupDiv, null, dragUp, dragMove ) ) {
          dragMode_ = true;
        }
      }
      //
      Event.stop( evt );
    }
  }

  return  {
    //初期化
    Init: function( baseObj ) {
      if( !fInit_ ) {
        base_ = baseObj;
        //
        MouseCapture.Init();
        //
        fInit_  = true;
      }
    },
    //ポップアップ開始
    Popup: function( baseInit ) {
      if( !fInit_ ) return;
      var mosPos  = MouseCapture.GetMousePos();
      basePos_  = { x: mosPos.x, y: mosPos.y };
      if( !baseInit( base_, mosPos ) ) return;
      base_.style.left      = basePos_.x + 'px';
      base_.style.top       = basePos_.y + 'px';
      //イベントの追加
      Event.observe( base_, 'mousedown', mouseDownEvent, true );  //子より先行で受け取る
      //表示
      base_.style.display   = '';
    },
    //ポップアップ基準位置の設定
    SetBasePos: function( xpos, ypos )  {
      basePos_  = { x: xpos, y: ypos };
    },
    /** ポップアップ消去 */
    Close: function() {
      base_.style.display = 'none';
      Event.stopObserving( base_, 'mousedown', mouseDownEvent, true );
      //D&Dから解除
      releaseDrag();
    }
  }
}();
