//m_script.js 二世代目開発・単体動作

    var scriptVer = "ver1.01 [ FREE ] 20070206" //バージョン情報

//■■■■■  デフォルト情報  ■■■■■// (通常は変更する必要はありません)
    alphaS      = false    //アルファフィルタを使用する ( false / true )
    alphaLast   = 100      //アルファフィルタの待機値 (0=透明 ～ 100=不透明)
    alphaOver   = 100     //OnMouse状態のアルファフィルタ値
    DivLocationX = 0     //ＤＩＶ位置Ｘ [数値]px
    DivLocationY = 10     //ＤＩＶ位置Ｙ [数値]px
    timerIDtiming = 300   //移動検知時間軸（静止状態での検知） [数値]ns
    moveIDtiming  = 30    //移動タイミング時間軸               [数値]ns
    drawCount = 0.15      //移動動作速度指定(0 静止 0.1>移動 1=完全追従 (1以上の設定は不可) )
    XEnable = 0       //Ｘ座標方向動作可否
    YEnable = 1       //Ｙ座標方向動作可否
    LRmode       = 0      //基準位置（0=← 1=→)
    UDmode       = 0      //基準位置（0=↑ 1=↓)
//■■■■■■■■■■■■■■■■■■■//


//ブラウザチェック (is[ブラウザ] OK=true / NG= false )
    var VarUsrAgt = navigator.userAgent.toLowerCase();
    isMac = (navigator.appVersion.indexOf("Mac") != -1);
    isWin = (navigator.appVersion.indexOf("Win") != -1);
    isX11 = (navigator.appVersion.indexOf("x11") != -1);
    isNS4 = (document.layers) ? 1 : 0;
    isNS6 = VarUsrAgt.indexOf("netscape6") != -1;
    isNS7 = VarUsrAgt.indexOf("netscape/7.") != -1;
    isIE5 = VarUsrAgt.indexOf("msie 5.") != -1;
    isIE6 = VarUsrAgt.indexOf("msie 6.") != -1;
    isIE7 = VarUsrAgt.indexOf("msie 7.") != -1;
    isOP6 = VarUsrAgt.indexOf("opera 6.") != -1 || VarUsrAgt.indexOf("opera/6.") != -1;
    isOP7 = VarUsrAgt.indexOf("opera 7.") != -1 || VarUsrAgt.indexOf("opera/7.") != -1;
    isMZ1 = navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0)   == 5;

    isJS = ( (isIE5 && !isMac) || (isIE6 && !isMac) || isIE7 || isNS6 || isNS7 || isMZ1 || isOP7)

    //Operaのなりきりブラウザ対策
    if (isOP7) isNS4 = isNS6 = isNS7 = isIE5 = isIE6 = isMZ1 = false

    isIEtrue = (isIE5 || isIE6 || isIE7)


var div_data = "" , div_mini="" , divcheck=false
var divW , divH , MouseToDiv
var ScriptStart = false

//Mozillaブラウザは、スクロールバー数値分を加算します（右寄せ時）
var MozillaState =0
if (isNS6 || isNS7 || isMZ1) MozillaState = 15

//////////////////////////////////
//待機時動作ルーチン (timerID : timerIDtimingで呼出)
function divPreset(){
    alphaState() //アルファチャンネルの適応

    //座標移動を検出した場合に発動するルーチン
    if ( (DivLocat("X") - DivNow("X")) !=0 && XEnable || (DivLocat("Y") - DivNow("Y")) !=0 && YEnable){
        clearInterval(timerID); timerID = 0;
        timerID = setInterval("moveDiv()",moveIDtiming);
    }
}

//////////////////////////////////
//DIV動作ルーチン (timerID : moveIDtimingで呼出)
function moveDiv(){
    alphaState() //アルファチャンネルの適応

    //移動方向チェックルーチン
    tempX = DivLocat("X") - DivNow("X"); tempY = DivLocat("Y") - DivNow("Y"); 
    tx = parseInt((tempX - Math.abs(tempX)) / (Math.abs(tempX) * 2))
    ty = parseInt((tempY - Math.abs(tempY)) / (Math.abs(tempY) * 2))
    if (tx==0) tx=1;    if (ty==0) ty=1     //正方向移動時
    if (isNaN(tx) || drawCount==1) tx=0;if (isNaN(ty) || drawCount==1) ty=0 //DIV基準位置とイコール

    //DIV移動量計算代入ルーチン
    div_data.style.top  = DivNow("Y") + Math.ceil(tempY * drawCount) + ty
    div_data.style.left = DivNow("X") + Math.ceil(tempX * drawCount) + tx

    if (tx == 0 && ty == 0){ //DIV位置の移動が完了
        clearInterval(timerID); timerID = 0;
        timerID = setInterval("divPreset()",timerIDtiming);
    }
}


//////////////////////////////////
//DIVのあるべき位置を取得する
//ordinate(座標) "X" or "Y"
//戻り値 X or Y 座標
function DivLocat(ordinate){
    var LRstate=0,UDstate=0;
    if (isIEtrue || isOP7){ // mouseX ,Y 絶対座標
        mouseXm = document.body.scrollLeft
        mouseYm = document.body.scrollTop
    } else if (isNS6 || isNS7 || isMZ1) {
        mouseXm = self.pageXOffset;
        mouseYm = self.pageYOffset;
    }
    if (ordinate.toUpperCase() == "X"){        // X座標
        if(LRmode==1){
            return parseInt(WinSize("X") - DivSize("W") - DivLocationX + mouseXm - MozillaState)
        }   return DivLocationX + mouseXm
    } else if (ordinate.toUpperCase() == "Y"){ // Y座標
        if (UDmode==1){
            return parseInt(WinSize("Y") - DivSize("H") - DivLocationY + mouseYm - MozillaState)
        }   return DivLocationY + mouseYm
    }
}


//////////////////////////////////
//DIV現在位置を取得する
//ordinate(座標) "X" or "Y"
//戻り値 X or Y 座標
function DivNow(ordinate){
    if(!ScriptStart) return;
    if (ordinate.toUpperCase()=="X"){
        return parseInt(div_data.style.left)
    } else if (ordinate.toUpperCase()=="Y"){
        return parseInt(div_data.style.top)
    }
}


//////////////////////////////////
//Windowのサイズを取得する
//ordinate(座標) "X" or "Y"
//戻り値 X or Y 座標
//(DIV 標準位置によって返す値は変わります)
function WinSize(ordinate){
    if (ordinate.toUpperCase()=="X"){        //X座標
        if(isIEtrue || isOP7){
            return document.body.clientWidth
        } else if (isNS6 || isNS7 || isMZ1) {
            return innerWidth
        }
    } else if (ordinate.toUpperCase()=="Y"){ //Y座標
        if(isIEtrue || isOP7){
            return document.body.clientHeight
        } else if (isNS6 || isNS7 || isMZ1) {
            return innerHeight
        }
    }
}

//////////////////////////////////
//Divのサイズを取得する
//ordinate(座標) "W" or "H"
//戻り値 Width or Height 座標
function DivSize(ordinate){
    if (ordinate.toUpperCase()=="W"){        //X座標
        return div_data.offsetWidth
    } else if (ordinate.toUpperCase()=="H"){ //Y座標
        return div_data.offsetHeight;
    }
}

//////////////////////////////////
//アルファフィルタの適応
function alphaState(){
    if(!alphaS) return;
    a_state = alphaLast
    if(MouseToDiv) a_state=alphaOver
    if (isIEtrue){
        div_data.style.filter = "alpha(opacity="+a_state+",style=0)"
    } else if (isNS6 || isNS7 || isMZ1){
        div_data.style.MozOpacity= a_state/100
    } else if (isOP7){

    }
}


//////////////////////////////////
//マウスの状況調査 (マウスがDIV上の場合は MouseToDiv = true )
var LastDivMode = false
function mousemove(myEvents){
    if(!ScriptStart) return;
    if (isIEtrue || isOP7){ // mouseX ,Y 絶対座標
        mouseX  = window.event.clientX + document.body.scrollLeft; 
        mouseY  = window.event.clientY + document.body.scrollTop; 
    } else if (isNS6 || isNS7 || isMZ1) {
        mouseX  = myEvents.pageX; mouseY  = myEvents.pageY;
    }

    DivSize("W");DivSize("H")
    if ( mouseX >= DivNow("X") && ( DivNow("X") + DivSize("W") ) >= mouseX && mouseY >= DivNow("Y") && ( DivNow("Y")+DivSize("H") ) >= mouseY){
        if (LastDivMode == false) DivContents(maxMenu)
        MouseToDiv = LastDivMode = true
    } else {
        if (LastDivMode == true) DivContents(minMenu)
        MouseToDiv = LastDivMode = false
    }
}

//////////////////////////////////
//メニュー表示種の切り替え
function DivContents(menu_mode){
    if(!div_mini) return;
    if (menu_mode != div_data.innerHTML){
        div_data.innerHTML = menu_mode
    }
}

var minMenu,maxMenu
//////////////////////////////////
//初期動作ステータス作成
function startwindow(){
    if ( !document.getElementById("MoveDiv") || !isJS ) return;

    //グローバルで使用するDIV情報取得「div_data」の作成
    div_data = document.getElementById("MoveDiv");
    div_data.style.position="absolute"
    divcheck=true; //DIVの準備が完了

    if (document.getElementById("MoveDiv_min")){
        div_mini = document.getElementById("MoveDiv_min")
        maxMenu = div_data.innerHTML
        minMenu = div_mini.innerHTML
        div_mini.style.display = "none";
        div_mini.style.position= "absolute";
        div_data.innerHTML = minMenu
    }

    //DIVサイズの取得
    DivSize("W");
    DivSize("H");

    //ユーザーステータス読込
    for (i = 0 ; i <= 500; i ++){
        div_check = document.getElementsByTagName('div')[i];
        if (div_check){
            if(div_check.id.substr(0,8) =="setM_ID@"){
                ComponentsDivData(div_check.id) //ステータス読み込み
            }
        } else {
            break; //FOR終了
        }
    }

    //DIVを指定座標上に描画する
    div_data.style.top  = DivLocat("Y")
    div_data.style.left = DivLocat("X")

    alphaState()       //アルファフィルタ適応
    ScriptStart = true //スクリプト動作の許可

    timerID = setInterval("divPreset()",timerIDtiming); //基幹時間軸の生成

    //マウスの動作を追従
    if (isJS) document.onmousemove = mousemove;
}

//コンポーネント情報引き渡し用ＤＩＶ解析部 v1.0
checkData=""
function ComponentsDivData(data){
    for (di = 0 ; di <= data.length ; di++){
        if ( data.substr(di,1) == "@" || data.substr(di,1) == "," || data.substr(di,1) == ";"){
            checkData = data.substr(di+1,2)
            for (dk = di+1 ; dk <= data.length ; dk++){ //識別子チェッカー
                if ( data.substr(dk,1) == "=" || data.substr(dk,1) == ":" ) break;
                if ( data.substr(dk,1) == "@" || data.substr(dk,1) == "," || data.substr(dk,1) == ";"){
                     dk=0;break;
                }
            }
            numberData = parseInt(data.substr(dk+1,8))
            if (!isNaN(numberData)){
                switch (checkData){
                    case "aS":alphaS       = numberData;break
                    case "aL":alphaLast   = numberData;break
                    case "aO":alphaOver   = numberData;break
                    case "Dx":DivLocationX = numberData;break
                    case "Dy":DivLocationY = numberData;break
                    case "T1":timerIDtiming= numberData;break
                    case "T2":moveIDtiming = numberData;break
                    case "Xe":XEnable     = numberData;break
                    case "Ye":YEnable     = numberData;break
                    case "LR":LRmode      = numberData;break
                    case "UD":UDmode      = numberData;break
                    case "cD":
                        drawCount   = numberData/10;
                        if (drawCount>1) drawCount=1
                        break
                    default:break;
                }
            }
        }
    }
}
