//=====================================================================
//  SYSTEM      :  DragableFloat DIV
//  PROGRAM     : É¥Ã¥Ç¤Æ¡í¡¼Ë¤Ï²Ì¤Î¸Ö¤ß¤DIV
//  FILE NAME   :  jsgt_dragfloat.js
//  CALL FROM   :  HTML
//  AUTHER      :  Toshirou Takahashi http://jsgt.org/mt/01/
//  SUPPORT URL :  http://jsgt.org/mt/archives/01/000419.html
//  CREATE      :  2005.7.8
//  UPDATE      :  2005.11.20 v08 ì¥¯È¤Ç¤Ê¤Ê¤Î¤document.onmousemovereturn falseò¥³¥È¥
//  UPDATE      :  2005.9.26 v07 floatEnabled boundEnabled setBounds chkBoundsÉ²
//  UPDATE      :  2005.9.22 v06 getTOP getLEFT getMouseX getMouseYdivÎ¥×¥Ñ¥Æ¥
//  UPDATE      :  2005.8.12 v05É¥Ã¥ieÈ¯selectonselectstartÇ¥ó¥»¥
//  UPDATE      :  2005.8.10 v04É¥Ã¥iframeÇ¥Ù¥È¤ò½¦¤Ê¤Î¤Â¿Þ¤
//  UPDATE      :  2005.8.8  dbg_echo()É²
//  UPDATE      :  2005.8.8  bodyÌµÑ¥ß¡bodyÏ¤É²Ã¡
//  UPDATE      :  2005.7.8 DOCTYPE É¸â¡¼É¤Ð±
//                    http://otd8.jbbs.livedoor.jp/877597/bbs_tree?base=9322&range=1
//
//
// Î¥Ï²Ñ¤â¾¦Ñ¤â¼«Í³Ç¤
// Î¼Í³ë¤¿î¸¢Þ¤
//---------------------------------------------------------------------
// â¶¶Ð»Ï¯ (Toshirou Takahashi http://jsgt.org/mt/01/) 2005.7.8

/*
//=====================================================================
// Ê² ×¥

<-- é¥¤Ö¥  jsgt_dragfloat.js-->
<script type    = 'text/javascript'
        charset = 'UTF-8'
        src     = 'jsgt_dragfloat.js'></script>
<script type='text/javascript'>
<!--

////
// Æ°î³«
//
// Ú¡É¹ß»Æ°î³«
//
window.onload = function (){
    setDragableFloat();			//
}

////
// 
//
// @syntax oj = dragableFloat("DIVIDÌ¾",X,Y)
//
// @sample              div1 = dragableFloat("aaa",100,200) //
// @sample              div1.innerHTML=""         //HTML
// @sample              div1.style.backgroundColor='orange' //CSSÇ½
// @sample              doDragableFloat()                   //
//    
function setDragableFloat(){
    //É¥Ã¥Ö¥Õ¥í¡¼DIV
    div1 = dragableFloat("aaa",100,200);
    div2 = dragableFloat("fff",200,300);
    div3 = dragableFloat("ddd",250,300);
    
    //DIVHTML
    div1.innerHTML="aaaaaaaa";
    div2.innerHTML="fffffff";
    div3.innerHTML="xx";

    //CSSÇ½
    div1.style.backgroundColor ="orange";
    div2.style.fontSize  ="18px";

    //
    doDragableFloat();
}

//-->
</script>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
// ×¥ë¤³Þ¤
//=====================================================================
 */


////
// í¡¼Ð¥Ñ¿
//
// @var    zcount             É¥Ã¥Ö¥DIVÇ¸ß¤zindex
// @var    clickElement       ß¥É¥Ã¥DIVIDÌ¾
// @var    canvas             document.body DOCTYPEÉ¸â¡¼Ð±
// @array  dragableFloatId    É¥Ã¥Ö¥DIVIDÌ¾Ç¼
//
var zcount = 0          ;
var clickElement = ""   ;
if(document.getElementsByTagName('BODY').length==0)document.write('<body>');			//ß¡body
var canvas = document[ 'CSS1Compat' == document.compatMode ? 'documentElement' : 'body'];
var dragableFloatId=[];
var recx1,recy1,recx2,recy2,recxOffset,recyOffset;


////
// ê¤µì¤¿É¥Ã¥Ö¥DIVò³«»
//
//
function doDragableFloat(){ 

  for(i in dragableFloatId){ 
    var oj = document.getElementById(dragableFloatId[i]);
																						//alert("dragableFloatId[i] = "+dragableFloatId[i]);
    if(oj.floatEnabled){

      if(!(is.safari || is.khtml)){
        //í¡¼Æ°
        window.onscroll = function(e){
            moveDiv(oj,oj.style.left,oj.style.top);
        }
      }else{
        aaa=setInterval(function(){
          moveDiv(oj,oj.style.left,oj.style.top);
        },100)
      }
    }
  }
}

//É¥Ã¥Ö¥DIVÎ¥Õ¥í¡¼È¤ò¥¹¥
function startDragableFloat(){
    for(i in dragableFloat ){
        var oj = document.getElementById(dragableFloat[i].id);
        moveDiv(oj,oj.style.left,oj.style.top);
    }
}

//DIVâ¤«    
function moveDiv (oj,ofx,ofy){
  if(oj.draging)return;				//É¥Ã¥Ìµ
  if(oj.dragcnt == 0 ){ 
      ofx = parseInt(ofx,10);
      ofy = parseInt(ofx,10);
      oj.dragcnt++;
  }else{					//É¥Ã¥Î»Ö¤Õ¥Ã¥
      ofx = parseInt(oj.pageOffLeft,10);
      ofy = parseInt(oj.pageOffTop,10);
  }
  var l = parseInt(canvas.scrollLeft,10);
  var t = parseInt(canvas.scrollTop,10);
  oj.style.left = l + ofx+"px";
  oj.style.top  = t + ofy+"px";
}


////
//Ö¥é¥¦È½
//
// @sample               alert(is.ie)
//
var is = 
{
    ie     : !!document.all ,
    mac45  : navigator.userAgent.indexOf('MSIE 4.5; Mac_PowerPC') != -1 ,
    opera  : !!window.opera ,
    safari : navigator.userAgent.indexOf('Safari') != -1 ,
    khtml  : navigator.userAgent.indexOf('Konqueror') != -1 
}

////
// É¥Ã¥Ö¥Õ¥í¡¼DIV
//
// @sample          div1 = dragableFloat("aaa",100,200)
//

function dragableFloat(id,x,y){
    if(!!dragableFloatId[id]) return document.getElementById(id);

    ////
    // DIV
    // @param  id             DIVIDÌ¾
    //
    this.mkDiv = function (id){
        var canvas = document[ 'CSS1Compat' == document.compatMode ? 'documentElement' : 'body'];
        var doc   = document                           ; // documentÖ¥
        var body  = doc.body                           ;
        var elem  = doc.createElement("DIV")           ; //DIVÇ¤
        var div   = body.appendChild(elem);
            div.setAttribute("id",id)                   ;
            div.style.position = "absolute"           ;
            div.style.left     = x + "px"             ;
            div.style.top      = y + "px"             ;
            div.innerHTML      = ""                   ;
            div.offLeft        = 0                    ;
            div.offTop         = 0                    ;
            div.pageOffLeft    = x-parseInt(canvas.scrollLeft,10)+ "px";
            div.pageOffTop     = y-parseInt(canvas.scrollTop,10) + "px";
            div.dragcnt        = 0                    ;
            div.draging        = false                ;
            div.getTOP         = getTOP               ;
            div.getLEFT        = getLEFT              ;
            div.getMouseX      = getMouseX            ;
            div.getMouseY      = getMouseY            ;
            recx1              = x
            recy1              = y
            div.floatEnabled   = true                 ; //Õ¥í¡¼È²Ç½ true|false
            div.boundEnabled   = false              ; //Æ°Ç½Î°è¤¢ true|false
            div.setBounds      = function (a,b,c,d){
                div.minX=a;div.minY=b;div.maxX=c;div.maxY=d;
                div.boundEnabled = true;
            }
            div.onmouseout     = function (e){ 

                if(!clickElement) return;
                selLay=document.getElementById(clickElement);

                //xyé¡¼xyÃ¥
                x =  recx2+=recxOffset;
                y =  recy2+=recyOffset;
                dofollow(x,y);
                x =  recx2+=recxOffset;
                y =  recy2+=recyOffset;
                setTimeout('"dofollow('+x+','+y+')"',10);

                //follow(e);
                //dbg.innerHTML += getMouseX(e)+"--"+getMouseY(e)+"<br>";
                div.style.zIndex = zcount++;
                return false;
            }
            div.onselectstart  = function (e){ return false; }
            div.onmouseover    = function (e){ return false; }
            div.onmousedown    = function (e){
                div.draging = true;
                div.dragcnt++;
                selLay = div;
                clickElement = selLay.id;

                //DIVleft,topé¥«Ö¤Þ¤Ç¤Î¥Õ¥Ã¥È¤ò¥­¥×¥
                if (selLay){
                    selLay.offLeft = getMouseX(e) - getLEFT(selLay.id);
                    selLay.offTop  = getMouseY(e) - getTOP(selLay.id);
                }
                return false;
            }

        dragableFloatId[div.id] = div.id;				//windowÏ¿
														//alert("dragableFloatId[div.id] = "dragableFloatId[div.id]);
        div.index++;
        return div;
    }

    //Þ¥Æ°Æ°
    document.onmousemove  = function (e){
        recTimeOffset(e);						//rec
        follow(e);
        //return false;
    }
    
    //Þ¥Ã¥×»Æ°
    document.onmouseup  = function (e){
        if(!clickElement) return;
        selLay=document.getElementById(clickElement);

        //É¥Ã¥Ê¤Î¤Ë¤Ï¤Ã¤
        follow(e);

        //É¥Ã¥
        selLay.draging   = false;
        selLay.style.zIndex = zcount++;

        //Î¥Õ¥Ã¥left,topÖ¤ò¥­¥×¥
        if(selLay){
            var sl = parseInt(canvas.scrollLeft,10);
            var st = parseInt(canvas.scrollTop,10);
            selLay.pageOffLeft = getLEFT(selLay.id)-sl;
            selLay.pageOffTop  = getTOP(selLay.id)-st;
            // ß¤Ã¤É²Ê¬20090106
            mySetCookie(clickElement,selLay.pageOffLeft + "\t" + selLay.pageOffTop,1);	
            // ß¤Ã¤É²Ê¬20090106
        }
        return false;
    }

    //É¥Ã¥Ô»
    function follow(e){
        if(!clickElement) return;
        selLay=document.getElementById(clickElement);

        //Þ¥Ö¼
        var x = getMouseX(e);
        var y = getMouseY(e);

        //xyé¡¼xyÃ¥
        x = (x == -1)? recx2+=recxOffset : x ;
        y = (y == -1)? recy2+=recyOffset : y ;
        if(x == -1 && y == -1)setTimeout('follow('+e+')',100);

        dofollow(x,y);
    }

    //Þ¥
    function dofollow(x,y){
        if(!clickElement) return;
        selLay=document.getElementById(clickElement);
        if(!chkBounds(selLay)){
          return;
        }else{
          if(selLay.draging){
            //Õ¥Ã¥È¤É¿
            movetoX = x - selLay.offLeft;
            movetoY = y - selLay.offTop;
            selLay.style.left = parseInt(movetoX,10) +"px";
            selLay.style.top  = parseInt(movetoY,10) +"px";
          }
        }
       // window.status = selLay.style.left;
    }

    //Þ¥Ö¤Ï¿
    function recTimeOffset(e){
        if(x == -1 || y == -1)return ;
        recx2= recx1;
        recy2= recy1;
        recx1= getMouseX(e);
        recy1= getMouseY(e);
        recxOffset= recx1 - recx2;
        recyOffset= recy1 - recy2;
    }
    
    //Î°â¤«É¤Ã¥
    function chkBounds(oj){

      var layName = oj.id;
      if(oj.boundEnabled){
        //Ö¼ß°
        var nowX = getLEFT(layName);
        var nowY = getTOP(layName);
        //Ã¥
        if( 
          nowX >= oj.minX &&
          nowY >= oj.minY &&
		  nowX <= oj.maxX &&
          nowY <= oj.maxY
        ){
          return true;					//Î°Ê¤true
        }else{
          returnPOS(nowX,nowY,oj);
          return false;
        }
      }else{
        return true;
      }
    }

    //Î°á¤¹
    function returnPOS(nowX,nowY,oj){
      if(nowX < oj.minX) oj.style.left = oj.minX +"px";
      if(nowY < oj.minY) oj.style.top  = oj.minY +"px";
      if(nowX > oj.maxX) oj.style.left = oj.maxX +"px";
      if(nowY > oj.maxY) oj.style.top  = oj.maxY +"px";
    }

    //Þ¥XÉ¸get 
    function getMouseX(e){
        if(document.all)				//e4,e5,e6
            return canvas.scrollLeft+event.clientX
        else if(document.getElementById)		//n6,n7,m1,o7,s1
            return e.pageX;
    }

    //Þ¥YÉ¸get 
    function getMouseY(e){
        if(document.all)				//e4,e5,e6
            return canvas.scrollTop+event.clientY
        else if(document.getElementById)		//n6,n7,m1,o7,s1
            return e.pageY;
    }


    //ì¥¤ÝºXÉ¸get 
    function getLEFT(layName){
        //Ç¥Ð¥Ã¥
        //document.getElementById('aaa').innerHTML+=layName+'<BR>';

        if(document.all)						//e4,e5,e6,o6,o7
            return document.all(layName).style.pixelLeft
        else if(document.getElementById)				//n6,n7,m1,s1
            return (document.getElementById(layName).style.left!="")
                ?parseInt(document.getElementById(layName).style.left):"";
    }

    //ì¥¤Ý¾YÉ¸get 
    function getTOP(layName){
        if(document.all)						//e4,e5,e6,o6,o7
            return document.all(layName).style.pixelTop
        else if(document.getElementById)				//n6,n7,m1,s1
            return (document.getElementById(layName).style.top!="")
                    ?parseInt(document.getElementById(layName).style.top):"";
    }

    //Ç¥Ð¥Ã¥
    function dbg_echo(){
            ////////dbg.innerHTML += selLay.draging+"<br>";
            
        var debugDIV  = document.createElement("DIV");			//DIVÇ¤
        var dbg   = document.body.appendChild(debugDIV);
            dbg.setAttribute("id","dbg");
            dbg.style.position = "absolute";
            dbg.style.left     = "400px";
            dbg.style.top      = "0px";
            dbg.innerHTML      = "dbg";
            return dbg;
    }  //dbg = dbg_echo();

    // ß¤Ã¤É²Ê¬20090106
    /* Ã¥Ï¿Ñ´Ø¿ */
    /*  : mySetCookie(Ã¥Ì¾,,Í­) */
    /*  : Ê¤(void) */
    function mySetCookie(myCookie,myValue,myDay){
        myExp = new Date();
        myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000));
        myItem = "@" + myCookie + "=" + escape(myValue) + ";";
        myExpires = "expires="+myExp.toGMTString();
        document.cookie = myItem + myExpires;
    }
    // ß¤Ã¤É²Ê¬20090106

    function db1(e){
      dbg.innerHTML += getMouseX(e)+"-1000-"+getMouseY(e)+"<br>";
    }
    return this.mkDiv(id);
}

// ß¤Ã¤É²Ê¬20090106
/* Ã¥Ñ´Ø¿ */
/*  : myGetCookie(Ã¥Ì¾) */
/*  : (string) null:Ê¤ */
function myGetCookie(myCookie){
  myCookie = "@" + myCookie + "=";
  myValue = null;
  myStr = document.cookie + ";" ;
  myOfst = myStr.indexOf(myCookie);
  if (myOfst != -1){
    myStart = myOfst + myCookie.length;
    myEnd = myStr.indexOf(";" , myStart);
    myValue = unescape(myStr.substring(myStart,myEnd));
  }
  return myValue;
}
// ß¤Ã¤É²Ê¬20090106
