﻿/// <summary>
/// proj.js
/// </summary>
/// <author></author>
/// <company>informatix</company>


///////////////////////////////////////////////////////////////////////
//proj毎の各種ロード内容　
function projInitConfig(projConfObj){

    //JavaScriptのリスト
    projConfObj.jsFileList.push({path:"js/common/jsFileListCommon.js",key:"jsFileListCommon"});
    projConfObj.jsFileList.push({path:"js/default/jsFileListDefault.js",key:"jsFileListDefault"});
    projConfObj.jsFileList.push({path:"js/geogate/jsFileListGeogate.js",key:"jsFileListGeogate"});

    //JavaScriptのリスト　遅延ロード分
    projConfObj.jsFileListLazy.push({path:"js/common/jsFileListCommonLazy.js",key:"jsFileListCommonLazy"});
    projConfObj.jsFileListLazy.push({path:"js/default/jsFileListDefaultLazy.js",key:"jsFileListDefaultLazy"});
    projConfObj.jsFileListLazy.push({path:"js/geogate/jsFileListGeogateLazy.js",key:"jsFileListGeogateLazy"});


    //ConstObjファイル
    projConfObj.constObjList.push({key:"constObjDefault"});
    projConfObj.constObjList.push({key:"constObjGeogate"});

    //リソースファイル
    projConfObj.resList.push({key:"resListProj"});
    projConfObj.resList.push({key:"resListDefault"});
    projConfObj.resList.push({key:"resListGeogate"});

}

var layoutController;

function initLayout(){
    
    tabManager = new TabManager(60,60,0,0,"","","img/Tab/tabL.gif","img/Tab/tabR.gif",110,110);

    //UIObjManager 準備
    uiObjManager = new UIObjManager();

    layoutController = new LayoutController({});

//全体枠

    var lmbb = new BorderLayout(document.getElementById("LAYOUT"),null);
	lmbb.init();
	
    lmbb.addRegion("north",{"initialSize": 80,"isDisplay":true,"zIndex":20});
    lmbb.addRegion("west",{"initialSize": 250,"isDisplay":false,"isCollapse":true,"zIndex":10});
    
    //lmbb.addRegion("east",{"initialSize": 250,"isDisplay":false,"isCollapse":true,"zIndex":10});
    //lmbb.addRegion("south",{"initialSize": 30,"isDisplay":true,"zIndex":10});
    lmbb.addRegion("center",{"isDisplay":true,"zIndex":1});

	var lcbbN = new LayoutContainer({"curtain":true});
	var lcbbW = new LayoutContainer({"cssClassName":"lcbbW","curtain":true});
	//var lcbbE = new LayoutContainer();
	//var lcbbS = new LayoutContainer({"cssClassName":"lcbbS"});
	var lcbbC = new LayoutContainer();

	lmbb.addLayoutContainer("north",lcbbN);
	lmbb.addLayoutContainer("west",lcbbW);
	//lmbb.addLayoutContainer("east",lcbbE);
	//lmbb.addLayoutContainer("south",lcbbS);
	lmbb.addLayoutContainer("center",lcbbC);

    //詳細情報Region
	if(urlParam.datasetId != undefined 
	    && urlParam.datasetId != null
	    && urlParam.itemId != undefined
	    && urlParam.itemId != null){
        lmbb.showRegion("west");
    }
	
    //機能パネルRegion
	if(urlParam.fc || urlParam.adm){
        lmbb.showRegion("west");
    }

	lmbb.refresh();
	
	layoutController.addLayoutManager("bodyBorder",lmbb);


//地図と属性一覧と凡例
    var lmcb = new BorderLayout(lcbbC.getContentElm(),null);
	lmcb.init();

    lmcb.addRegion("center",{"isDisplay":true,"zIndex":1});
    lmcb.addRegion("south",{"initialSize": 250,"isDisplay":false,"isCollapse":true,"zIndex":10});	
    lmcb.addRegion("east",{"initialSize": 250,"isDisplay":false,"isCollapse":true,"zIndex":10});

	var lccbC = new LayoutContainer({"cssClassName":"lccbC","curtain":true});
	var lccbS = new LayoutContainer({"cssClassName":"lccbS","title":"属性一覧","margin":8,"marginTop":2,"curtain":true,"waiter":true});
	var lccbE = new LayoutContainer({"cssClassName":"lccbE","title":"凡例","margin":0,"marginTop":0,"curtain":true,"waiter":false,"iFrame":true});

	lmcb.addLayoutContainer("center",lccbC);
	lmcb.addLayoutContainer("south",lccbS);
	lmcb.addLayoutContainer("east",lccbE);
	lmcb.refresh();
	
	layoutController.addLayoutManager("centerBorder",lmcb);

    //borderレイアウトから機能パネルに通知
    lcbbW.addLayoutContainerListenerTransmitter(lmcb);

    //属性一覧Region
	if(urlParam.adm){
        lmcb.showRegion("south");
    }
    
    //凡例Region
	if(urlParam.lg != null && urlParam.lg != undefined){
        lmcb.showRegion("east");
    }


	//地図上構成
	var lmmp = new FlowLayout(lccbC.getContentElm(),{});
	lmmp.init();

	lmmp.addRegion("indexMap", {"valign":"top","halign":"left","hgap":4,"vgap":4,"isDisplay":true,"zIndex":10});
    // 背景地図選択
    lmmp.addRegion("bgMapSelector", {"valign":"top","halign":"right","hgap":4,"vgap":4,"width":165,"height":25,"isDisplay":true,"zIndex":10});
	lmmp.addRegion("mapDirMove", {"valign":"top","halign":"right","hgap":60,"vgap":58,"width":69,"height":72,"isDisplay":true,"zIndex":10});
	lmmp.addRegion("mapSlider", {"valign":"top","halign":"right","hgap":4,"vgap":25,"width":170,"height":30,"isDisplay":true,"zIndex":10});
	lmmp.addRegion("mapScaleBar", {"valign":"bottom","halign":"right","hgap":10,"vgap":4,"width":150,"height":20,"isDisplay":true,"zIndex":10});
	
	var lcmpIndexMap = new LayoutContainer();
	var lcmpBgMapSelector = new LayoutContainer();
	var lcmpMapDirMove = new LayoutContainer();
	var lcmpMapSlider = new LayoutContainer();
	var lcmpMapScaleBar = new LayoutContainer();

    lmmp.addLayoutContainer("indexMap",lcmpIndexMap);
	lmmp.addLayoutContainer("bgMapSelector",lcmpBgMapSelector);
	lmmp.addLayoutContainer("mapDirMove",lcmpMapDirMove);
	lmmp.addLayoutContainer("mapSlider",lcmpMapSlider);
	lmmp.addLayoutContainer("mapScaleBar",lcmpMapScaleBar);

    lmmp.refresh();

	layoutController.addLayoutManager("mapParts",lmmp);
	
    //borderレイアウトから機能パネルに通知
    lcbbW.addLayoutContainerListenerTransmitter(lmmp);



//West部上下
    var lmwb = new BorderLayout(lcbbW.getContentElm(),null);
	lmwb.init();

    lmwb.addRegion("north",{"isDisplay":true,"zIndex":1});	
    lmwb.addRegion("center",{"initialSize": 90,"isDisplay":true,"zIndex":10});

	var lcwbN = new LayoutContainer({"cssClassName":"lcwbN"});
	var lcwbC = new LayoutContainer({"cssClassName":"lcwbC"});

	lmwb.addLayoutContainer("north",lcwbN);
	lmwb.addLayoutContainer("center",lcwbC);
	
	lmwb.refresh();
	
	layoutController.addLayoutManager("westBorder",lmwb);

    //borderレイアウトから機能パネルに通知
    lcbbW.addLayoutContainerListenerTransmitter(lmwb);


    //機能パネル
	var lmfc = new CardLayout(lcwbN.getContentElm(),null);
	lmfc.init();
	
	lmfc.addRegion("search", {"isDisplay":false,"zIndex":10});
	lmfc.addRegion("layer", {"isDisplay":false,"zIndex":10});
	lmfc.addRegion("figure", {"isDisplay":false,"zIndex":10});
	lmfc.addRegion("measure", {"isDisplay":false,"zIndex":10});
	lmfc.addRegion("print", {"isDisplay":false,"zIndex":10});
		
	var lcfcSearch = new LayoutContainer({"cssClassName":"lcfc","title":"検索","margin":8,"marginTop":2}); 
	var lcfcLayer = new LayoutContainer({"cssClassName":"lcfc","title":"地図選択","margin":8,"marginTop":8});
	var lcfcFigure = new LayoutContainer({"cssClassName":"lcfc","title":"描画","margin":8,"marginTop":2});
	var lcfcMeasure = new LayoutContainer({"cssClassName":"lcfc","title":"計測","margin":8,"marginTop":2});
	var lcfcPrint = new LayoutContainer({"cssClassName":"lcfc","title":"印刷","margin":8,"marginTop":2});

	lmfc.addLayoutContainer("search",lcfcSearch);
	lmfc.addLayoutContainer("layer",lcfcLayer);
	lmfc.addLayoutContainer("figure",lcfcFigure);
	lmfc.addLayoutContainer("measure",lcfcMeasure);
	lmfc.addLayoutContainer("print",lcfcPrint);

    lmfc.refresh();

	layoutController.addLayoutManager("fcCard",lmfc);

    
    //borderレイアウトから機能パネルに通知
    lcbbW.addLayoutContainerListenerTransmitter(lmfc);
    
    
    //レイアウト　遅延ロード
    function initLayoutLazy(){
    
        //機能パネル_検索
	    var lmfcSearch = new TabLayout(lcfcSearch.getContentElm(),{"tabPosition":"top","tabsElmSize":28});
	    lmfcSearch.init();
        
	    lmfcSearch.addRegion("address", {"caption":"住 所","isDisplay":true,"tabSize":78});  
	    lmfcSearch.addRegion("landmark", {"caption":"目標物","isDisplay":false,"tabSize":78});
	    lmfcSearch.addRegion("area", {"caption":"周 辺","isDisplay":false,"tabSize":78});
	    
	    var lcfcSearchAddress = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    var lcfcSearchLandmark = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    var lcfcSearchArea = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    
	    lmfcSearch.addLayoutContainer("address",lcfcSearchAddress);
	    lmfcSearch.addLayoutContainer("landmark",lcfcSearchLandmark);
	    lmfcSearch.addLayoutContainer("area",lcfcSearchArea);
	    
	    layoutController.addLayoutManager("fcSearch",lmfcSearch);
        lcfcSearch.addLayoutContainerListenerTransmitter(lmfcSearch);


        //機能パネル_作図
	    var lmfcFigure = new TabLayout(lcfcFigure.getContentElm(),{"tabPosition":"top","tabsElmSize":28});
	    lmfcFigure.init();
        
	    lmfcFigure.addRegion("draw", {"caption":"作 図","isDisplay":true,"tabSize":117});  
	    lmfcFigure.addRegion("edit", {"caption":"変 更","isDisplay":false,"tabSize":117});
        
	    var lcfcFigureDraw = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    var lcfcFigureEdit = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
    	
	    lmfcFigure.addLayoutContainer("draw",lcfcFigureDraw);
	    lmfcFigure.addLayoutContainer("edit",lcfcFigureEdit);
	    
	    layoutController.addLayoutManager("fcFigure",lmfcFigure);
        lcfcFigure.addLayoutContainerListenerTransmitter(lmfcFigure);
      

        //機能パネル_計測
	    var lmfcMeasure = new TabLayout(lcfcMeasure.getContentElm(),{"tabPosition":"top","tabsElmSize":28});
	    lmfcMeasure.init();
        
	    lmfcMeasure.addRegion("line", {"caption":"距 離","isDisplay":false,"tabSize":117});  
	    lmfcMeasure.addRegion("area", {"caption":"面 積","isDisplay":false,"tabSize":117});
        
	    var lcfcMeasureLine = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    var lcfcMeasureArea = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
    	
	    lmfcMeasure.addLayoutContainer("line",lcfcMeasureLine);
	    lmfcMeasure.addLayoutContainer("area",lcfcMeasureArea);
    	
	    layoutController.addLayoutManager("fcMeasure",lmfcMeasure);
        lcfcMeasure.addLayoutContainerListenerTransmitter(lmfcMeasure);


        //機能パネル_印刷
	    var lmfcPrint = new TabLayout(lcfcPrint.getContentElm(),{"tabPosition":"top","tabsElmSize":28});
	    lmfcPrint.init();
	    
	    //画像印刷は公開時は表示しない。タブ幅も変える。
	    var printNormalTabWidth = 117;
	    var printDivisionTabWidth = 117;
        if(urlParam.adm){
	        printNormalTabWidth = 58;
	        printDivisionTabWidth = 88;
        }
	    lmfcPrint.addRegion("normal", {"caption":"印刷","isDisplay":true,"tabSize":printNormalTabWidth}); 
	    lmfcPrint.addRegion("division", {"caption":"分割印刷","isDisplay":false,"tabSize":printDivisionTabWidth});
        if(urlParam.adm){
	        lmfcPrint.addRegion("image", {"caption":"画像出力","isDisplay":false,"tabSize":88});
	    }

        var lcfcPrintImage;
        if(urlParam.adm){	            
	        lcfcPrintImage = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    }
	    var lcfcPrintNormal = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});
	    var lcfcPrintDivision = new LayoutContainer({"cssClassName":"lcfcTab","margin":5});

        if(urlParam.adm){
	        lmfcPrint.addLayoutContainer("image",lcfcPrintImage);
	    }  	
	    lmfcPrint.addLayoutContainer("normal",lcfcPrintNormal);
	    lmfcPrint.addLayoutContainer("division",lcfcPrintDivision);
    	
	    layoutController.addLayoutManager("fcPrint",lmfcPrint);
        lcfcPrint.addLayoutContainerListenerTransmitter(lmfcPrint);

        /////////////////////////////////////
        
	    browserWindow.addBrowserWindowListener(new BrowserWindowListener());

        function BrowserWindowListener(){
	        this.fireBrowserWindowResized = function(browserWidth,browserHeight){
                layoutController.refreshAll();
                mapWindowManager.resizeWindows();
	        }
	        this.getListenerName = function(){
		        return "Layout";
	        }
	    }
    }

    setTimeout(initLayoutLazy,1);

}


//コンポーネント　ロード
function initComponent(){
    ComponentAssembly.createDukeLayerPanel(layoutController.getLayoutManager("fcCard").getLayoutContainer("layer"));
    ComponentAssembly.createBackgroundMapSelector(layoutController.getLayoutManager("mapParts").getLayoutContainer("bgMapSelector"));
	ComponentAssembly.createHeaderPanel(layoutController.getLayoutManager("bodyBorder").getLayoutContainer("north"));

    initLayoutStatus();
}


//コンポーネント　遅延ロード
function initComponentLazy(){

    ComponentAssembly.createMapSlider(layoutController.getLayoutManager("mapParts").getLayoutContainer("mapSlider"),null,mapManager.getSelectedMapAssembly().getMapController());
    ComponentAssembly.createMapDirMove(layoutController.getLayoutManager("mapParts").getLayoutContainer("mapDirMove"),null,mapManager.getSelectedMapAssembly().getMapController());
    ComponentAssembly.createMapScaleBar(layoutController.getLayoutManager("mapParts").getLayoutContainer("mapScaleBar"),null,mapManager.getSelectedMapAssembly().getMapController());

    ComponentAssembly.createDetailInfoPanel(layoutController.getLayoutManager("westBorder").getLayoutContainer("center"));
    ComponentAssembly.createIndexMapPanel(layoutController.getLayoutManager("mapParts").getLayoutContainer("indexMap"));
    
    ComponentAssembly.createAddressSearchPanel(layoutController.getLayoutManager("fcSearch").getLayoutContainer("address"));
    //ComponentAssembly.createLandmarkSearchPanel(layoutController.getLayoutManager("fcSearch").getLayoutContainer("landmark"));    //旧目標物検索の場合
    ComponentAssembly.createItemSearchPanel(layoutController.getLayoutManager("fcSearch").getLayoutContainer("landmark"));          //キーワード検索の場合
    ComponentAssembly.createAreaSearchPanel(layoutController.getLayoutManager("fcSearch").getLayoutContainer("area"));

	//ComponentAssembly.createFooterPanel(layoutController.getLayoutManager("bodyBorder").getLayoutContainer("south"));

    if(urlParam.sck != "1"){    //sck : 自治体地図等モード
        ComponentAssembly.createFigureDrawPanel(layoutController.getLayoutManager("fcFigure").getLayoutContainer("draw"));
        ComponentAssembly.createFigureEditPanel(layoutController.getLayoutManager("fcFigure").getLayoutContainer("edit"));

        ComponentAssembly.createMeasureLinePanel(layoutController.getLayoutManager("fcMeasure").getLayoutContainer("line"));
        ComponentAssembly.createMeasureAreaPanel(layoutController.getLayoutManager("fcMeasure").getLayoutContainer("area"));
    }

    if(urlParam.adm){
        ComponentAssembly.createImagePrintPanel(layoutController.getLayoutManager("fcPrint").getLayoutContainer("image"));
    }
    ComponentAssembly.createNormalPrintPanel(layoutController.getLayoutManager("fcPrint").getLayoutContainer("normal"));
    ComponentAssembly.createDivisionPrintPanel(layoutController.getLayoutManager("fcPrint").getLayoutContainer("division"));
	
	if(urlParam.adm){
        ComponentAssembly.createTableViewPanel(layoutController.getLayoutManager("centerBorder").getLayoutContainer("south"));
    }
    
    ComponentAssembly.createLegendContent(layoutController.getLayoutManager("centerBorder").getLayoutContainer("east"));   
        
    ComponentAssembly.createUrlInfo();
    ComponentAssembly.createClientVectorsDetailInfo();
    ComponentAssembly.createClientVectorsItemSelectList();
    
    ComponentAssembly.createClientLayer();

    initLayoutStatus();
    
    //ヘッダ部と機能パネル部のカーテンを外す
    var lmbb = layoutController.getLayoutManager("bodyBorder");
    if(lmbb){
        var lcbbN = lmbb.getLayoutContainer("north");
        if(lcbbN)lcbbN.hideCurtain();
        var lcbbW = lmbb.getLayoutContainer("west");
        if(lcbbW)lcbbW.hideCurtain();
    }

    
    var lmcb = layoutController.getLayoutManager("centerBorder");
    if(lmcb){
        //地図部のカーテンを外す
        var lccbC = lmcb.getLayoutContainer("center");
        if(lccbC)lccbC.hideCurtain();
    }

}


//レイアウト状態更新
function initLayoutStatus(){

    var objHeaderPanel = uiObjManager.getObj("HeaderPanel");
    
    if(urlParam.adm && objHeaderPanel){
        objHeaderPanel.setButtonStatus("btnLayer",1);
        objHeaderPanel.setButtonStatus("btnTableView",1);
    }
    
    if(urlParam.lg != null && urlParam.lg != undefined){
        objHeaderPanel.setButtonStatus("btnLegend",1);
    }
    
    //URLパラメータで開く機能パネル
    if(urlParam.fc && objHeaderPanel){
        switch (urlParam.fc) {
            case "search":
                objHeaderPanel.setButtonStatus("btnSearch",1);
                break;
            case "layer":
                objHeaderPanel.setButtonStatus("btnLayer",1);
                break;
            case "figure":
                objHeaderPanel.setButtonStatus("btnFigure",1);
                break;
            case "measure":
                objHeaderPanel.setButtonStatus("btnMeasure",1);
                break;
            case "print":
                objHeaderPanel.setButtonStatus("btnPrint",1);
                break;
            default:
                break;
        }
    }
}


///////////////////////////////////////////////////////////////////////
//起動処理完了後
function onFinishProjLoading(){

    if(urlParam.adm){
        var tvp = uiObjManager.getObj("TableViewPanel");
        if(tvp){
            tvp.updateTableView(urlParam.datasetId);
        }
    }
    
    //属性一覧部のカーテンを外す
    var lmcb = layoutController.getLayoutManager("centerBorder");
    if(lmcb){
        var lccbS = lmcb.getLayoutContainer("south");
        if(lccbS) lccbS.hideCurtain();
    }

}

//起動処理と初回レンダー両方終わった時
function onFinishProjLoadingAndFirstRender(){

    //URLに詳細情報ＩＤ含まれていた場合　詳細情報を開く
	if(urlParam.datasetId != undefined 
	    && urlParam.datasetId != null
	    && urlParam.itemId != undefined
	    && urlParam.itemId != null){
        uiObjManager.getObj("DetailInfoPanel").sendDukeDatasetItemDetailInfoRequest(urlParam.datasetId,urlParam.itemId);
    }
    
    //レイヤを表示する場合はクライアントレイヤをリロードする
    if(urlParam.categoryId || urlParam.datasetId || urlParam.itemId){
        uiObjManager.getObj("ClientLayer").reload();
    }
    
}


///////////////////////////////////////////////////////////////////////
//unload時、Dispose前に実行する処理
function onBeforeUnload(){
    
    //cookieに現在の位置とスケールを書き込み
    if(!mapManager) return;
    var objMapAssembly = mapManager.getSelectedMapAssembly();
    if(!objMapAssembly) return;
    
    var objMapController = objMapAssembly.getMapController();
    if(!objMapController) return;

    var objSimpleMap = objMapAssembly.getSimpleMap();
    if(!objSimpleMap) return;

    setCookie("mpId",objMapController.getMapPatternId(),1);
    setCookie("scaleId",objMapController.getScaleId(),1);
    setCookie("center",objSimpleMap.getViewGenerator().getView().getRealCenter().toString(),1);

}


///////////////////////////////////////////////////////////////////////
//終了時Dispose処理　案件毎に必要な処理
function disposeProj(){
    
}


