// ============================================
// DFLS - JavaScript Module for DFLS Web Application ( Local Version )
// ============================================
// Copyright (c) 2008 Micronet Software Manila, Inc. All rights reserved.
// Last Update: 2008-12-11
// Created by: Balrog D Great
// ============================================

//--------------------
// For display purposes
//--------------------
var m_appName = navigator.appName.toUpperCase();
var m_browser = 0;
var m_lang = 'en';
var m_langStr;

if(m_appName.indexOf("EXPLORER")>=0){
  m_browser=0;   //IE.
  m_langStr = navigator.browserLanguage;
} else if(m_appName.indexOf("NETSCAPE")>=0 && navigator.appVersion.charAt(0)<5){
	m_langStr = navigator.language;
    m_browser=1;   //NS4.x.
} else {
    m_langStr = navigator.language;
 	m_browser=2;   //NS6 etc.
}
if(navigator.platform.toUpperCase().indexOf("MAC")>=0){
  	m_browser+=3; //Mac.
}
if(navigator.userAgent.indexOf("Opera",0) > 0){
    m_browser=2; //Opera and NS6 is the same
    //NS6 = 1;
}
if(m_langStr.indexOf('ja') > -1){
    m_lang = 'ja';
}

//--------------------
// For scripting purposes
//--------------------
var IE4 = (document.all)?1:0;
var NS4 = (document.layers)?1:0;
var NS6 = (document.getElementById&&!document.all)?1:0;

//-----------------------------------
// Declaration of Global Application Variables
//-----------------------------------
var m_imageList = [];    // IMAGELIST COLLECTION
var m_buttonPair = [];

var App = {                    // GLOBAL APP VARIABLE

    ReadyState: 0,
    LoadedState: 0,
    BusyState: 0,
    
    FLSMode: 0,
    EditMode: 0,
    ViewMode: 0,
    
    CameraPosX: -261,
    CameraPosY: 125,
    CameraPosZ: -180,
    
    CameraHeight:3,
    
    SelectedObject: ""
    
};

//----------------------------
// Initialization of Application
//----------------------------

addEvent(window,"load",initApplication); // ONLOAD

function initApplication(){
    
    //TOPNAV
    addNormalButton("butprint",0,butprint_mousedown);
    addNormalButton("butcapture",0,butcapture_mousedown);
    addNormalButton("butload",0,butload_mousedown);
    addNormalButton("butsave",0,butsave_mousedown);
    
    //CONTROL    
    setOperationButton("butwalk",1);
    setOperationButton("butobject",0);
    
    setEditButton("buthoriz",0);
    setEditButton("butvert",0);
    
    setViewButton("buttop",0);
    setViewButton("butfront",0);
    setViewButton("butside",0);
    
    addNormalButton("butdelete",0,butdelete_mousedown);
    addNormalButton("butcw",0,butcw_mousedown);
    addNormalButton("butccw",0,butccw_mousedown);
    
    setCameraButton();
    
    // PRESET OFFICE
    addNormalButton("butstandard",0,loadfls_mousedown);
    addNormalButton("butsales",0,loadfls_mousedown);
    addNormalButton("butproject",0,loadfls_mousedown);
    addNormalButton("butcreative",0,loadfls_mousedown);
    
    // SETTING BOX
    addNormalButton("butdefault",0,ApplyDefaultMaterial);
    addNormalButton("butcopy",0,CopyObject);
    addEvent(document.getElementById("chkcollision"),"click",setCollision2);
    addEvent(document.getElementById("butcollision"),"mousedown",setCollision);
    
    
    // FURNITURES
    initFurnList();
    setFurnItems();
    
    // MPP
    if(!initMPP()){
        setAppMask(true);
        TdxUpdateError();
        return;
    }
    
    App.ReadyState = 1;
    checkLoadedState();
    
}

function checkLoadedState(){
    if(App.ReadyState == 1 && App.LoadedState == 1){
        setUIMask(false);
    } else {
        setTimeout("checkLoadedState()", 100);
    }
}

//----------------------------
// FURN-ITEM FUNCTIONS
//----------------------------
function setFurnItems(){
    
    for(var i = 0;i<gFurnList.items.length;i++){
        var furn_item = gFurnList.items[i];
        var furn_id = "item-"+furn_item.name;
        var furn_obj = document.getElementById(furn_id);
        
        m_imageList[furn_item.name] = new Image();
        m_imageList[furn_item.name].src = "img/"+furn_item.name+".jpg";
        
        addEvent(furn_obj,"mouseover",furnitem_mouseover);
        addEvent(furn_obj,"mouseout",furnitem_mouseout);
        addEvent(furn_obj,"mousedown",furnitem_mousedown);
    }
    
}

function furnitem_mouseover(e){
    var obj = getObject(e);
    if(App.LoadedState == 0) return;
    obj.style.borderColor="#0086D1";
}

function furnitem_mouseout(e){
    var obj = getObject(e);
    if(App.LoadedState == 0) return;
    obj.style.borderColor="#CCCCCC";
}

function furnitem_mousedown(e){
    var obj = getObject(e);
    if(App.LoadedState == 0) return;
    
    var token = obj.id.split("-");
    var furn_name = token[1];
    
    setUIMask(true);
    
    AddObject(furn_name);
    App.SelectedObject = furn_name;
    
    ShowProperty();
}

function ShowProperty(){
    
    var tdx = document.getElementById("Control1");
    if(tdx.IsBusy()){
        
        setTimeout("ShowProperty()",200);
        
    } else {
    
    setUIMask(false);
    
    if(!App.SelectedObject) return;
    
    var thumbnail = document.getElementById("detail-image");
    thumbnail.src=m_imageList[App.SelectedObject].src;
    
    var collision = tdx.GetObjectCollision();
    document.getElementById("chkcollision").checked = collision;
    
    var XYZ = tdx.GetObjectSize();
    var token = XYZ.split(",");
    var x = parseFloat(token[0]);
    var y = parseFloat(token[1]);
    var z = parseFloat(token[2]);
    
    x = x*10;
    y = y*10;
    z = z*10;
    
    var txtwidth = document.getElementById("txtwidth");
    var txtheight = document.getElementById("txtheight");
    var txtdepth = document.getElementById("txtdepth");
    
    txtwidth.value = parseInt(x);
    txtheight.value = parseInt(y);
    txtdepth.value = parseInt(z);
    
    var furn_item = gFurnList.getItemByName(App.SelectedObject);
    if(furn_item){
        
        var txtname = document.getElementById("detail-name");
        txtname.innerHTML="<br>"+furn_item.desc;
        
        var tab1 = document.getElementById("sel-mat-01");
        var tab2 = document.getElementById("sel-mat-02");
        var tab3 = document.getElementById("sel-mat-03");
        var tab4 = document.getElementById("sel-mat-04");
        var tab5 = document.getElementById("sel-mat-05");
        var tab6 = document.getElementById("sel-mat-06");
        
        tab1.style.display=(furn_item.material_map==1)?"block":"none";
        tab2.style.display=(furn_item.material_map==2)?"block":"none";
        tab3.style.display=(furn_item.material_map==3)?"block":"none";
        tab4.style.display=(furn_item.material_map==4)?"block":"none";
        tab5.style.display=(furn_item.material_map==5)?"block":"none";
        tab6.style.display=(furn_item.material_map==6)?"block":"none";
        
    }
    
    var detail_panel = document.getElementById("dfls-detail");
    detail_panel.style.visibility="visible";
    
    }
}

function HideProperty(){
    var detail_panel = document.getElementById("dfls-detail");
    detail_panel.style.visibility="hidden";
}

function ApplyMaterial(key){
    var tdx = document.getElementById("Control1");
    
    var furn = gFurnList.getItemByName(App.SelectedObject);
    if(!furn) return;
    
    for(var i = 0;i<furn.attributes.length;i++){
        tdx.SetObjectTexture(furn.attributes[i],key+".jpg");
    }
    tdx.Redraw();
    
}

function ApplyDefaultMaterial(e){
    var tdx = document.getElementById("Control1");
    var furn = gFurnList.getItemByName(App.SelectedObject);
    if(!furn) return;
    
    var obj = getObject(e);
    if(furn.material_variation==0)return;
    obj.src = m_imageList[obj.id][2].src;
    
    for(var i = 0;i<furn.attributes.length;i++){
        tdx.SetObjectTexture(furn.attributes[i],furn.textures[i]);
    }
    tdx.Redraw();
    
}

function CopyObject(e){
    var tdx = document.getElementById("Control1");
    var furn = gFurnList.getItemByName(App.SelectedObject);
    
    if(!furn) return;
    
    var obj = getObject(e);
    obj.src = m_imageList[obj.id][2].src;
    
    var XYZ = tdx.GetObjectPosition();
    var token = XYZ.split(",");
    var px = parseFloat(token[0]);
    var py = parseFloat(token[1]);
    var pz = parseFloat(token[2]);
    
    XYZ = tdx.GetObjectRotation();
    token = XYZ.split(",");
    var rx = parseFloat(token[0]);
    var ry = parseFloat(token[1]);
    var rz = parseFloat(token[2]);
    
    var texture;
    if(furn.material_variation>0){
        texture = tdx.GetAttributeTexture(furn.attributes[0]);
    }
    
    tdx.AddObjectAt(furn.name+".3dx",px,py,pz,rx,ry,rz);
    if(furn.material_variation>0) {
        setTimeout("ApplyTextures('"+texture+"')",200);
    }
    
}

function ApplyTextures(texture){
    var tdx = document.getElementById("Control1");
    var furn = gFurnList.getItemByName(App.SelectedObject);
    if(!furn) return;
        
    for(var i = 0;i<furn.attributes.length;i++){
        tdx.SetObjectTexture(furn.attributes[i],texture);
    }
    tdx.Redraw();
}

function setCollision(e){
    var collision = document.getElementById("chkcollision");
    var tdx = document.getElementById("Control1");
    if(collision.checked){
        collision.checked=false;
        tdx.SetObjectCollision(false);
    } else {
        collision.checked=true;
        tdx.SetObjectCollision(true);
    }
}

function setCollision2(e){
    var tdx = document.getElementById("Control1");
    var obj = getObject(e);
    tdx.SetObjectCollision(obj.checked);   
}

//----------------------------
// BUTTON FUNCTIONS
//----------------------------
function loadfls_mousedown(e){
    var obj = getObject(e);
    var sfilename = "";
    switch(obj.id){
        case "butstandard":
            sfilename = "3dx/type_a.fls";
            break;
        case "butsales":
            sfilename = "3dx/type_b.fls";
            break;
        case "butproject":
            sfilename = "3dx/type_c.fls";
            break;
        default:
            sfilename = "3dx/type_d.fls";
    }
    
    //window.status=sfilename;
    
    setUIMask(true);
    ResetApplication();
    
    var tdx = document.getElementById("Control1");
    tdx.Reload(sfilename);
    setTimeout("checkLoadedState()",100);
    
}



function ResetApplication(){
    
    App.LoadedState = 0;
    
    var butwalk = document.getElementById("butwalk");
    butwalk.src = m_imageList["butwalk"][2].src;
    butwalk.tag = 1;
    
    var butobject = document.getElementById("butobject");
    butobject.src = m_imageList["butobject"][0].src;
    butobject.tag = 0;
    
    var buthoriz = document.getElementById("buthoriz");
    buthoriz.src = m_imageList["buthoriz"][0].src;
    buthoriz.tag = 0;
    
    var butvert = document.getElementById("butvert");
    butvert.src = m_imageList["butvert"][0].src;
    butvert.tag = 0;
    
    var buttop = document.getElementById("buttop");
    buttop.src = m_imageList["buttop"][0].src;
    buttop.tag = 0;
    
    var butfront = document.getElementById("butfront");
    butfront.src = m_imageList["butfront"][0].src;
    butfront.tag = 0;
    
    var butside = document.getElementById("butside");
    butside.src = m_imageList["butside"][0].src;
    butside.tag = 0;
    
    var tdx = document.getElementById("Control1");
    tdx.SetCameraMode(0);
    tdx.TranslationMode(0);
    
    App.FLSMode = 0;
    App.EditMode = 0;
    App.ViewMode = 0;
    
    App.CameraHeight = 3;
    App.SelectedObject = "";
    
    HideProperty();
}

function butcw_mousedown(e){
    if(App.LoadedState == 0) return;
    if(App.SelectedObject){
        RotateObject(-15);
    } else {
        alert("オブジェクトが選択されていません。");
    }
}

function butccw_mousedown(e){
    if(App.LoadedState == 0) return;
    if(App.SelectedObject){
        RotateObject(15);
    } else {
        alert("オブジェクトが選択されていません。");
    }
}

function butdelete_mousedown(e){
    if(App.LoadedState == 0) return;
    if(App.SelectedObject){
        DeleteObject();
    } else {
        alert("オブジェクトが選択されていません。");
    }
}

function butprint_mousedown(e){
    if(App.LoadedState == 0) return;
    Print();
}

function butcapture_mousedown(e){
    if(App.LoadedState == 0) return;
    Capture();
}

function butsave_mousedown(e){
    if(App.LoadedState == 0) return;
    setTimeout("msm_SaveFile()",200);
}

function butload_mousedown(e){
    setTimeout("msm_OpenFile()",200);
}


//----------------------------
// MASK FUNCTIONS
//----------------------------
function hideNoScript(){
    var panel = document.getElementById("mask-noscript");
    panel.style.display="none";
}

function setAppMask(flag){
    var panel_top = document.getElementById("mask-top");
    var panel_whole = document.getElementById("mask-whole");
    var panel_loader = document.getElementById("mask-loader");
    if(flag){
        panel_top.style.visibility = "visible";
        panel_whole.style.visibility = "visible";
        panel_loader.style.visibility = "hidden";
    } else {
        panel_top.style.visibility = "hidden";
        panel_whole.style.visibility = "hidden";
        panel_loader.style.visibility = "hidden";
    }
}

function setUIMask(flag){
    var panel_top = document.getElementById("mask-top");
    var panel_whole = document.getElementById("mask-whole");
    var panel_loader = document.getElementById("mask-loader");
    if(flag){
        panel_top.style.visibility = "visible";
        panel_whole.style.visibility = "visible";
        panel_loader.style.visibility = "visible";
    } else {
        panel_top.style.visibility = "hidden";
        panel_whole.style.visibility = "hidden";
        panel_loader.style.visibility = "hidden";
    }
}

// OTHER
function item_mouseover(obj){
    obj.style.borderColor="#0086D1";
}
function item_mouseout(obj){
    obj.style.borderColor="#F2F2F2";
}

//----------------------------
// CAMERA BUTTONS
//----------------------------
function setCameraButton(){
    var id = "butcamera";
    
    m_imageList[id] = new Array();
    
    m_imageList[id][0] = new Image();
    m_imageList[id][0].src = "img/"+id+"_00.jpg";
    
    m_imageList[id][1] = new Image();
    m_imageList[id][1].src = "img/"+id+"_01.jpg";
    
    m_imageList[id][2] = new Image();
    m_imageList[id][2].src = "img/"+id+"_02.jpg";
    
    m_imageList[id][3] = new Image();
    m_imageList[id][3].src = "img/"+id+"_10.jpg";
    
    m_imageList[id][4] = new Image();
    m_imageList[id][4].src = "img/"+id+"_20.jpg";
    
}

function butcamera_mouseover(index){
    if(App.LoadedState==0) return;
    var btn = document.getElementById("butcamera");
    if(index>0){
        btn.src = m_imageList[btn.id][3].src;
    } else {
        btn.src = m_imageList[btn.id][1].src;
    }
}
function butcamera_mouseout(){
    if(App.LoadedState==0) return;
    var btn = document.getElementById("butcamera");
    btn.src = m_imageList[btn.id][0].src;
}
function butcamera_mousedown(index){
    if(App.LoadedState==0) return;
    if(App.ViewMode>0) return;
    
    var btn = document.getElementById("butcamera");
    if(index>0){
        btn.src = m_imageList[btn.id][4].src;
        App.CameraHeight++;
        if(App.CameraHeight>6) App.CameraHeight = 6;
    } else {
        btn.src = m_imageList[btn.id][2].src;
        App.CameraHeight--;
        if(App.CameraHeight<0) App.CameraHeight = 0;
    }
    SetCameraHeight(App.CameraHeight);
}
function butcamera_mouseup(index){
    if(App.LoadedState==0) return;
    var btn = document.getElementById("butcamera");
    if(index>0){
        btn.src = m_imageList[btn.id][3].src;
    } else {
        btn.src = m_imageList[btn.id][1].src;
    }
}

//----------------------------
// TOGGLE BUTTONS
//----------------------------

function setOperationButton(id, default_state){
    var btn = document.getElementById(id);
    if(!btn) return;
    
    btn.tag = default_state;
    
    m_imageList[id] = new Array();
    m_imageList[id][0] = new Image();
    m_imageList[id][0].src = "img/"+id+"_0.jpg";
    m_imageList[id][1] = new Image();
    m_imageList[id][1].src = "img/"+id+"_1.jpg";
    m_imageList[id][2] = new Image();
    m_imageList[id][2].src = "img/"+id+"_2.jpg";
    
    addEvent(btn,"mouseup",butToggle_mouseup);
    addEvent(btn,"mousedown",butOperation_mousedown);
    addEvent(btn,"mouseover",butToggle_mouseover);
    addEvent(btn,"mouseout",butToggle_mouseout);
}

function setEditButton(id, default_state){
    var btn = document.getElementById(id);
    if(!btn) return;
    
    btn.tag = default_state;
    
    m_imageList[id] = new Array();
    m_imageList[id][0] = new Image();
    m_imageList[id][0].src = "img/"+id+"_0.jpg";
    m_imageList[id][1] = new Image();
    m_imageList[id][1].src = "img/"+id+"_1.jpg";
    m_imageList[id][2] = new Image();
    m_imageList[id][2].src = "img/"+id+"_2.jpg";
    
    addEvent(btn,"mouseup",butToggle_mouseup);
    addEvent(btn,"mousedown",butEdit_mousedown);
    addEvent(btn,"mouseover",butToggle_mouseover);
    addEvent(btn,"mouseout",butToggle_mouseout);
}


function setViewButton(id, default_state){
    var btn = document.getElementById(id);
    if(!btn) return;
    
    btn.tag = default_state;
    
    m_imageList[id] = new Array();
    m_imageList[id][0] = new Image();
    m_imageList[id][0].src = "img/"+id+"_0.jpg";
    m_imageList[id][1] = new Image();
    m_imageList[id][1].src = "img/"+id+"_1.jpg";
    m_imageList[id][2] = new Image();
    m_imageList[id][2].src = "img/"+id+"_2.jpg";
    
    addEvent(btn,"mouseup",butToggle_mouseup);
    addEvent(btn,"mousedown",butView_mousedown);
    addEvent(btn,"mouseover",butToggle_mouseover);
    addEvent(btn,"mouseout",butToggle_mouseout);
}

function butOperation_mousedown(e){
    if(App.LoadedState==0) return;
    
    var selected_btn = getObject(e);
    if(selected_btn.tag>0) return;
    selected_btn.src = m_imageList[selected_btn.id][2].src;
    selected_btn.tag = 1;
    
    if(selected_btn.id == "butwalk"){
    
        var butobj = document.getElementById("butobject");
        butobj.src = m_imageList[butobj.id][0].src;
        butobj.tag = 0;
        
        var buthoriz = document.getElementById("buthoriz");
        var butvert = document.getElementById("butvert");
        buthoriz.src = m_imageList[buthoriz.id][0].src;
        butvert.src = m_imageList[butvert.id][0].src;
        buthoriz.tag = 0;
        butvert.tag = 0;
        
        var buttop = document.getElementById("buttop");
        var butfront = document.getElementById("butfront");
        var butside = document.getElementById("butside");
        buttop.src = m_imageList[buttop.id][0].src;
        butfront.src = m_imageList[butfront.id][0].src;
        butside.src = m_imageList[butside.id][0].src;
        buttop.tag = 0;
        butfront.tag = 0;
        butside.tag = 0;
        
        SetFLSMode(0);
        if(App.ViewMode>0) SetDefaultCameraPos();
        
        App.FLSMode = 0;
        App.EditMode = 0;
        App.ViewMode = 0;
        
    } else if(selected_btn.id == "butobject") {
        var butwalk = document.getElementById("butwalk");
        butwalk.src = m_imageList[butwalk.id][0].src;
        butwalk.tag = 0;
        
        SetFLSMode(1);
        if(App.ViewMode>0) SetDefaultCameraPos();
        
        App.FLSMode = 1;
        App.ViewMode = 0;
    
        if(App.EditMode == 0){
            var buthoriz = document.getElementById("buthoriz");
            var butvert = document.getElementById("butvert");
            buthoriz.src = m_imageList[buthoriz.id][2].src;
            butvert.src = m_imageList[butvert.id][0].src;
            buthoriz.tag = 2;
            butvert.tag = 0;
            
            SetEditMode(0);
            
            App.EditMode = 1;
        }
        
        var buttop = document.getElementById("buttop");
        var butfront = document.getElementById("butfront");
        var butside = document.getElementById("butside");
        buttop.src = m_imageList[buttop.id][0].src;
        butfront.src = m_imageList[butfront.id][0].src;
        butside.src = m_imageList[butside.id][0].src;
        buttop.tag = 0;
        butfront.tag = 0;
        butside.tag = 0;
    }
    
    
}

function butEdit_mousedown(e){
    if(App.LoadedState==0) return;
    
    var selected_btn = getObject(e);
    if(selected_btn.tag>0) return;
    selected_btn.src = m_imageList[selected_btn.id][2].src;
    selected_btn.tag = 1;
    
    if(selected_btn.id == "buthoriz"){
        var butvert = document.getElementById("butvert");
        butvert.src = m_imageList[butvert.id][0].src;
        butvert.tag = 0;
        
        SetEditMode(0);
        
        App.EditMode = 1;
        
        if(App.FLSMode == 0){
            
            var butwalk = document.getElementById("butwalk");
            var butobj = document.getElementById("butobject");
            butwalk.src = m_imageList[butwalk.id][0].src;
            butobj.src = m_imageList[butobj.id][2].src;
            butwalk.tag = 0;
            butobj.tag = 1;
            
            App.ViewMode = 0;
            
        } 
        App.FLSMode = 1;
        
    } else if(selected_btn.id == "butvert"){
        var buthoriz = document.getElementById("buthoriz");
        buthoriz.src = m_imageList[buthoriz.id][0].src;
        buthoriz.tag = 0;
        
        SetEditMode(1);
        
        App.EditMode = 2;
        
        if(App.FLSMode == 0){
            
            var butwalk = document.getElementById("butwalk");
            var butobj = document.getElementById("butobject");
            butwalk.src = m_imageList[butwalk.id][0].src;
            butobj.src = m_imageList[butobj.id][2].src;
            butwalk.tag = 0;
            butobj.tag = 1;
            
            App.ViewMode = 0;
            
        }
        App.FLSMode = 1;
        
    }
    
    
}

function butView_mousedown(e){
    if(App.LoadedState==0) return;
    
    var selected_btn = getObject(e);
    if(selected_btn.tag>0) return;
    selected_btn.src = m_imageList[selected_btn.id][2].src;
    selected_btn.tag = 1;
    
    if(App.ViewMode == 0){
        var butobj = document.getElementById("butobject");
        butobj.src = m_imageList[butobj.id][0].src;
        butobj.tag = 0;
    }
    
    if(selected_btn.id == "buttop"){
        var butfront = document.getElementById("butfront");
        var butside = document.getElementById("butside");
        butfront.src = m_imageList[butfront.id][0].src;
        butside.src = m_imageList[butside.id][0].src;
        butfront.tag = 0;
        butside.tag = 0;
        
        SetViewMode(1);
        
        App.ViewMode = 1;
        
    } else if(selected_btn.id == "butfront"){
        var buttop = document.getElementById("buttop");
        var butside = document.getElementById("butside");
        buttop.src = m_imageList[buttop.id][0].src;
        butside.src = m_imageList[butside.id][0].src;
        buttop.tag = 0;
        butside.tag = 0;
        
        SetViewMode(2);
        
        App.ViewMode = 2;
        
    }else if(selected_btn.id == "butside"){
        var buttop = document.getElementById("buttop");
        var butfront = document.getElementById("butfront");
        buttop.src = m_imageList[buttop.id][0].src;
        butfront.src = m_imageList[butfront.id][0].src;
        buttop.tag = 0;
        butfront.tag = 0;
        
        SetViewMode(3);
        
        App.ViewMode = 3;
        
    }
    
    if(App.FLSMode == 0){
        var butwalk = document.getElementById("butwalk");
        butwalk.src = m_imageList[butwalk.id][0].src;
        butwalk.tag = 0;
        
        var buthoriz = document.getElementById("buthoriz");
        var butvert = document.getElementById("butvert");
        buthoriz.src = m_imageList[buthoriz.id][2].src;
        butvert.src = m_imageList[butvert.id][0].src;
        buthoriz.tag = 2;
        butvert.tag = 0;
        App.EditMode = 1;
        
    }
    App.FLSMode = 1;
    
}


function butToggle_mousedown(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    if(btn.tag>0) return;
    btn.src = m_imageList[btn.id][2].src;
}

function butToggle_mouseup(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    if(btn.tag>0) return;
    btn.src = m_imageList[btn.id][1].src;
}

function butToggle_mouseover(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    if(btn.tag>0) return;
    btn.src = m_imageList[btn.id][1].src;
}

function butToggle_mouseout(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    if(btn.tag>0) return;
    btn.src = m_imageList[btn.id][0].src;
}

//----------------------------
// NORMAL BUTTONS
//----------------------------

function addNormalButton(id, default_state, handler){
    var btn = document.getElementById(id);
    if(!btn) return;
    
    btn.tag = default_state;
    
    m_imageList[id] = new Array();
    m_imageList[id][0] = new Image();
    m_imageList[id][0].src = "img/"+id+"_0.jpg";
    m_imageList[id][1] = new Image();
    m_imageList[id][1].src = "img/"+id+"_1.jpg";
    m_imageList[id][2] = new Image();
    m_imageList[id][2].src = "img/"+id+"_2.jpg";
    
    addEvent(btn,"mousedown",handler);
    addEvent(btn,"mouseup",butNormal_mouseup);
    addEvent(btn,"mouseover",butNormal_mouseover);
    addEvent(btn,"mouseout",butNormal_mouseout);
    
}

function butNormal_mousedown(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    try{
        btn.src = m_imageList[btn.id][2].src;
    } catch(err){ 
        
    }
}

function butNormal_mouseup(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    try{
        btn.src = m_imageList[btn.id][1].src;
    } catch(err){
        
    }
}

function butNormal_mouseover(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    try{
        btn.src = m_imageList[btn.id][1].src;
    } catch(err){ 
        
    }
}

function butNormal_mouseout(e){
    if(App.LoadedState==0) return;
    var btn = getObject(e);
    try{
        btn.src = m_imageList[btn.id][0].src;
    } catch(err){ 
        
    }
}


//----------------------------
// UTILITY FUNCTIONS
//----------------------------
function addEvent(obj,event,handler){
    if(!obj) return;
    if(document.addEventListener){        
        obj.addEventListener (event,handler,false);
    } else if(document.attachEvent){
        obj.attachEvent ("on"+event,handler);
    } else if(document.captureEvents){
        eval("obj.captureEvents(Event."+event.toUpper()+")");
        eval("obj.on"+event+" = "+handler);
    } else {
        eval("obj.on"+event+"= "+handler);
    }
}

function findPosX(obj)
{
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj)
{
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}

function getObject(e){
    var elem = "";
    e = (e) ? e : ((window.event) ? window.event : "")
    if(e) {
        elem = (e.target) ? e.target : e.srcElement;
    }
    return elem;
}

function getMouseX(e){
    if(window.opera){
        return e.clientX
    } else if(document.all){   
        return document.body.scrollLeft+event.clientX
    } else if(document.layers||document.getElementById){
        if(!e) var e = window.event;
        return e.layerX;
    }
}

function getMouseY(e){
    if(window.opera){   
        return e.clientY
    } else if(document.all){ 
        return document.body.scrollTop+event.clientY
    }else if(document.layers||document.getElementById){
        if(!e) var e = window.event;
        return e.layerY;
    }
}

function getScrollX() {
    var scrOfX = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        //Netscape compliant
        scrOfX = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        //DOM compliant
        scrOfX = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE6 standards compliant mode
        scrOfX = document.documentElement.scrollLeft;
    }
    return scrOfX;
}

function getScrollY() {
    var scrOfY = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        //Netscape compliant
        scrOfY = window.pageYOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        //DOM compliant
        scrOfY = document.body.scrollTop;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
    }
    return scrOfY;
}

document.onkeydown=KeyDownProc;
function KeyDownProc(e)
{
	var shift, ctrl;
	
	// Mozilla(Firefox, NN) and Opera
	if (e != null) {
		keycode = e.which;
		ctrl    = typeof e.modifiers == 'undefined' ? e.ctrlKey : e.modifiers & Event.CONTROL_MASK;
		shift   = typeof e.modifiers == 'undefined' ? e.shiftKey : e.modifiers & Event.SHIFT_MASK;
		// イベントの上位伝播を防止
		//e.preventDefault();
		//e.stopPropagation();
	// Internet Explorer
	} else {
		keycode = event.keyCode;
		ctrl    = event.ctrlKey;
		shift   = event.shiftKey;
		// イベントの上位伝播を防止
		event.returnValue = false;
		event.cancelBubble = true;
	}
	
	// キーコードの文字を取得
	keychar = String.fromCharCode(keycode).toUpperCase();
	
	// 特殊キーコードの対応については次を参照
		// 27	Esc
		// 8 	BackSpace
		// 9 	Tab
		// 32	Space
		// 45	Insert
		// 46	Delete
		// 35	End
		// 36	Home
		// 33	PageUp
		// 34	PageDown
		// 38	↑
		// 40	↓
		// 37	←
		// 39	→
	// 処理の例
    //window.status=keycode;
	if (keycode == 38){
		
        if(App.FLSMode == 0){
            document.Control1.GoForward(10);
        } else {
            MoveObject(38);
        }
        
    } else if(keycode == 40){		
        
        if(App.FLSMode == 0){
            document.Control1.GoForward(-10);
        } else {
            MoveObject(40);
        }
        
	} else if(keycode == 37){		
        
        if(App.FLSMode == 0){
            document.Control1.TurnLeftRight(-10);
        } else {
            MoveObject(37);
        }
	} else if(keycode == 39){		
        
        if(App.FLSMode == 0){
            document.Control1.TurnLeftRight(10);
        } else {
            MoveObject(39);
        }
        
    } else if(keycode == 8 || keycode == 46){
        
        if(App.SelectedObject) {
            DeleteObject();
            return false;
        }
        
    }
}
/////

function MoveObject(keycode){
    var tdx = document.getElementById("Control1");
    if(App.SelectedObject){
        
        var XYZ = tdx.GetObjectPosition();
        var token = XYZ.split(",");
        var x = parseFloat(token[0]);
        var y = parseFloat(token[1]);
        var z = parseFloat(token[2]);
        
        if(App.EditMode == 1){
        
            if(keycode == 38){
                z-=5;
                tdx.SetObjectPosition(x,y,z);
            } else if(keycode == 40){
                z+=5;
                tdx.SetObjectPosition(x,y,z);
            } else if(keycode == 37){
                x-=5;
                tdx.SetObjectPosition(x,y,z);
            } else if(keycode == 39){
                x+=5;
                tdx.SetObjectPosition(x,y,z);
            }
            
        } else if(App.EditMode == 2 && App.ViewMode != 1){
        
            if(keycode == 38){
                y+=5;
                tdx.SetObjectPosition(x,y,z);
            } else if(keycode == 40){
                y-=5;
                tdx.SetObjectPosition(x,y,z);
            }
            
        }
        
        
    }
}

function GetProjectionDistance2(mode, width, height){
    
    var aspect = 597/347; // 3DX window size
    var fov = 45;
    
    // Room size
    var unitx = width;
    var unitz = height;
    
    var scalex = 1;
    var scalez = 1;
    
    var pdist;
    if(mode > 0){
        pdist = (unitz / 2 * scalez / aspect / Math.tan(fov / 2) + unitx / 2 * scalex);
    } else {
        pdist = -(unitx / 2 * scalex / aspect / Math.tan(fov / 2) + unitz / 2 * scalez);
    }
    
    return pdist;
}



// ---------------------------------------------------------------------
// FILE LOAD/SAVE FUNCTIONS
// ---------------------------------------------------------------------

function DialogObject(title,method,exist,callback)
{
    var tdx = document.getElementById("Control1");
    
    this.title        = title;
    this.method  = method;
    this.exist      = exist;
    this.callback  = callback;
    this.sceneinfo = tdx.GetSceneInfo();
    this.object  = window;
    return this;
}

function msm_OpenFile(){    

    if(m_browser == 0){
    
        var sParam = "dialogHeight:275px;dialogWidth:400px;center:yes;edge:raised;help:no;resizable:no;scroll:no;status:no;unadorned:yes;";
        var sArgs   = DialogObject("FLSを開く",0,true,"OpenFLS");    
        window.showModalDialog("3dx/dialog.htm",sArgs,sParam);
    
    } else {
    
        alert("この機能はウィンドウズのインターネットエクスプローラーにのみ対応しています。");

    }
    
}

function OpenFLS(file,path){
    LoadFLS(file);
}

function SaveFLS(file,path){
    //WriteFLS(path+file);
}

function msm_SaveFile(){
    
    if(m_browser == 0){
    
        var sParam = "dialogHeight:275px;dialogWidth:400px;center:yes;edge:raised;help:no;resizable:no;scroll:no;status:no;unadorned:yes;";
        var sArgs   = DialogObject("FLSを保存する",1,false,"SaveFLS");    
        window.showModalDialog("3dx/dialog.htm",sArgs,sParam);
    
    } else {
        
        alert("この機能はウィンドウズのインターネットエクスプローラーにのみ対応しています。");
        
    }
    
}

function LoadFLS(sFilename){
    
    //window.status=sFilename;
    
    setUIMask(true);
    ResetApplication();
    
    var tdx = document.getElementById("Control1");
    tdx.Reload("3dx/"+sFilename);
    setTimeout("checkLoadedState()", 100);
    
}

