//*******************************************************************
// メイン処理スクリプト
//-------------------------------------------------------------------
// 初版  2009/06/06  asa
//*******************************************************************

/**
 * LOADイベント
 *
 */
window.onload = function(){
    //*******************************
    // 0．インスタンスを生成する
    //*******************************
    makeInstance();
        
    //*******************************
    // 1．画面番号を取得する
    //*******************************
    CmnVar.GmnNo = CmnLib.UrlParam.getThisPageName(true);

    //*******************************
    // 2．クエリパラメータを解析する
    //*******************************    
    CmnLib.UrlParam.getQueryParam( location.search.substr(1));
    
    //*******************************    
    // 3．メニューボタンを設定する
    //    MENU = MenuMaster定義
    //*******************************
    if (typeof( MENU) != "undefined"){   
        MenuBtn.setMenu( MENU);
    }
    
    //*******************************
    // 4．名称を設定する
    //    NAME = NameMaster定義
    //*******************************
    if (typeof( NAME[CmnVar.GmnNo]) != "undefined"){
        CmnView.setName( NAME[CmnVar.GmnNo]);
    }
    
    //*******************************
    // 5．イベントリスナーを登録する
    //    ACTION = ActionMaster定義
    //*******************************
    if (typeof( ACTION[CmnVar.GmnNo]) != "undefined"){
        CmnControl.setAction( ACTION[CmnVar.GmnNo]);
    }
    
    //*******************************
    // 6．画面個別定義を取得する
    //    SCREEN = ScreenMaster定義
    //*******************************
    if (typeof( SCREEN) != "undefined"){
        //自動更新間隔を取得する
        var autoReload = SCREEN[CmnVar.GmnNo]["autoReload"];        
        
        //更新IDを取得する
        var newTimeObj = SCREEN[CmnVar.GmnNo]["newTimeKey"];
        CmnVar.RenewID = (typeof(newTimeObj) != "object") ? newTimeObj : newTimeObj[CmnVar.QueryParam["span"]];
    }
    
    //*******************************
    // 7．データの要求を行う
    //*******************************
    getDispData();
    
    //*******************************
    // 8．画面個別処理を行う
    //*******************************
    kobetuDisp();
    
    //*******************************
    // 9．データ部の自動更新を行う
    //*******************************
    if(CmnVar.DEMO_MODE) return;    //デモは自動更新しない
    if (!isNaN(autoReload) && autoReload != false){
        setInterval("checkReload()", autoReload * 1000);
    }
}

/**
 * 名前空間を使用する為のインスタンスを生成する
 *
 */
function makeInstance(){

    //CmnVarオブジェクト
    if (CmnVar != undefined){
        CmnVar = new CmnVar();
    }

    //CmnControlオブジェクト
    if (CmnControl != undefined){
        CmnControl = new CmnControl();
        CmnControl.ScreenAction = new CmnControl.ScreenAction();
        CmnControl.MenuAction = new CmnControl.MenuAction();
        CmnControl.RequestAction = new CmnControl.RequestAction();
        CmnControl.MouseAction = new CmnControl.MouseAction();
    }

    //CmnViewオブジェクト
    if (CmnView != undefined){
        CmnView = new CmnView();
    }

    //MenuBtnオブジェクト
    if (MenuBtn != undefined){
        MenuBtn = new MenuBtn();
    }
   
    //CmnLibオブジェクト
    if (CmnLib != undefined){
        CmnLib = new CmnLib();
        CmnLib.Time = new CmnLib.Time();
        CmnLib.Elm = new CmnLib.Elm();
        CmnLib.UrlParam = new CmnLib.UrlParam();
    }
    
//    //PopUpManagerオブジェクト
//    if (PopUpManager != undefined){
//        PopUpManager = new PopUpManager();
//    }
    
    //Searchオブジェクト
    if (Search != undefined){
        Search = new Search();
    }
    
    //Detailオブジェクト
    if (Detail != undefined){
        Detail = new Detail();
    }
    
    //TyohyoManagerオブジェクト
    if (TyohyoManager != undefined){
        TyohyoManager = new TyohyoManager();
    }
}

/**
 * データの要求を行う
 *
 */
function getDispData(){

    //トップメニュー画面はデータ要求を行わない
    if (CmnVar.GmnNo == "top"){
        return;
    }
    //現況表示・流域水文図、故障警報履歴画面
//090826.kamino 浦滝用に変更
//    else if (CmnLib.UrlParam.getThisPageName(true, 3) == "G10" || CmnVar.GmnNo == "G3210000"){
        CmnControl.RequestAction.dispNewData();
//090903.kamino 浦滝用に変更
//    }
//    //その他
//    else if ( CmnVar.GmnNo != "G4411000" && location.pathname.indexOf("search") == -1){
//     
//        CmnControl.RequestAction.reqData();
//    }
}

/**
 * 自動更新判定を行う
 *
 */
function checkReload(){
    
    //現況表示・流域水文図、故障警報履歴画面は無条件に自動更新を行う
    var gmnNo = CmnVar.GmnNo.substring(0,3);
    if (gmnNo != "G10" && gmnNo != "G32") {
	    
        //最新観測時刻の場合はreqtimeを送信しない
        if (!CmnVar.AutoReloadFlag || CmnVar.QueryParam["reload"].toString() == "false") return;
        
        //最新観測時刻を取得・設定する
        var newJikoku = CmnControl.RequestAction.getNewJikoku();

        //表示時刻を取得する
        if(CmnVar.QueryParam["reqtime"] == undefined ) return;
        var dispTime = CmnLib.Time.changeArrToDate( CmnVar.QueryParam["reqtime"].split(","));

        //最新観測時刻と表示時刻が同じならば、同データたので更新する必要なし 
        if (newJikoku.getTime() == dispTime.getTime()) return;
        
        CmnVar.QueryParam["reload"] = CmnVar.RELOAD_STATE;
    }
    
    //データ要求を行う
    getDispData();
}

/**
 * 個別処理を行う
 *
 */
function kobetuDisp(){

    //検索ポップアップ
    if (location.pathname.indexOf("search") != -1){
        Search.loadSearch(); 
    }
    //詳細ポップアップ
    else if (Detail != undefined){
        Detail.loadDetail();
    }
    //帳票画面
    else if (CmnVar.GmnNo == "G4411000"){
        TyohyoManager.loadTyohyo();
    }
    
    //現在時刻を表示する
    if (CmnLib.Elm.ID("nowTime")){
        setInterval("CmnLib.Time.dispNowTime()", 1000);
    }
}

//===========================================================================================
/**
 * JSONファイル読み込み終了後の処理
 *
 */
function LoadEndJson(){

    //*******************************
    // 1．観測時刻表示
    //*******************************
    if (CmnLib.Elm.ID("newTime") != undefined) {
        CmnView.setNewTime(JsonData.NewTime);
    }
    
    if( CmnVar.GmnNo.substring(0,3) == "G23"){
        CmnView.delGraphNormal();
    }
    //*******************************
    // 2．NormalAllデータ表示
    //*******************************
    if (JsonData.NormalAll != undefined){
        CmnView.dispNormalData();
    }
    
    //*******************************
    // 3．GraphAllデータ表示
    //*******************************
    if (JsonData.GraphAll != undefined) {
        CmnView.dispGraphData(JsonData.GraphAll);
    }
    //グラフ画像複数表示用
    for(var i = 0; i < 4; i++ ){
        var parts = "GraphAll" + i.toString() ;
        if (JsonData[parts] != undefined) {
            CmnView.dispGraphData(JsonData[parts]);  
        }
     }
    
    //*******************************
    // 4．HyoAllデータ表示
    //*******************************
    if (JsonData.HyoAll != undefined){
        CmnView.dispHyoData();
    }
    else if( CmnVar.GmnNo.substring(0,3) == "G22"){
        //TSAMデータ取得失敗時
        CmnView.makeNewPage(false);
    }
    
    //*******************************
    // 5．ExcelDisplaypartsデータ表示
    //*******************************
    if (JsonData.ExcelDisplayParts != undefined) {
        CmnView.dispExcelData();
    }
    else if( CmnVar.GmnNo.substring(0,3) == "G44" && JsonData.ExcelDisplayParts == undefined){
        //帳票取得失敗時
        alert("帳票の取得に失敗しました");
    }
    
    //*******************************
    // 6．NoDispHyoデータ(日時)取得
    //*******************************
    if (JsonData.NoDispHyo != undefined) {
        CmnVar.Msg_Time_Para = JsonData.NoDispHyo[0].TrDataList[0].FullDate;
        Search.MainJsonData = JsonData; //メインのJsonDataの保持
    }
    else if( CmnVar.GmnNo.substring(0,3) == "G32" && JsonData.NoDispNormal == undefined){
        //TSAMデータ取得失敗時
        CmnView.delSearchTbl();
    }
    
    //*******************************
    // 7．更新状態を画面に表示する
    //*******************************
    if (CmnLib.Elm.ID("state") != undefined) {
        var state = (CmnVar.QueryParam["reload"].toString() == "true") ? CmnVar.RELOAD_STATE : CmnVar.STOP_STATE;
        CmnView.dispReloadState(state);
    }
    
    //*******************************
    // 8．浦滝用個別 (090907.kamino)
    //*******************************
    if( CmnVar.GmnNo.substring(0,3) == "G11"){
        //放流状況図Json読み込み
        CmnControl.RequestAction.dispUratakiData();
    }
}

/**
 * JSONファイル読み込み終了後の処理【故障警報履歴】
 *
 */
function LoadEndJson_Warning(){
    try{
        //最新メッセージのJsonを取得
        Search.HoldJsonData = JsonData;
        LoadEndJson();
        
        //最新メッセージ更新時にメインメッセージも更新する
        if (Search.HoldNewId != Number(JsonData.NoDispNormal[0].StartId)){

            //最新メッセージが更新されたためIDを保持
            Search.HoldNewId = Number(JsonData.NoDispNormal[0].StartId);
            
            //検索してなければ更新する
            if(!Search.searchChk()){
                //メインメッセージデータを取得
                CmnControl.RequestAction.reqSearchData();
            }
        }
    }catch(e){
        //alert("データが取得できません");
    }
    
    /* onclick処理の追加用関数をonload時に読み込むと、
     * jsonファイルの読み込み時に処理を消してしまうので、データ読み込み終了時に
     * onclick処理を追加する c.kikuchi add setEvent();
     */
    Search.setEvent();
}

/**
 * JSONファイル読み込み終了後の処理【詳細ポップアップ情報】
 *
 */
function LoadEndJson_Detail(){
    try{
        var NoDspDt;
        if(Search.Row_prm == 22){

            //最新メッセージはNomalAllのため
            var Normal = Search.HoldJsonData.NormalAll;
            Search.DetailPrm["phaseNo"] = Normal[1].PropertyList[0].Value;     //事象番号
            Search.DetailPrm["phaseLevel"] = Normal[2].PropertyList[0].Value;  //事象レベル
            Search.DetailPrm["phaseState"] = Normal[3].PropertyList[0].Value;  //状態
            Search.DetailPrm["phaseCont"] = Normal[4].PropertyList[0].Value;   //内容

            NoDspDt = Search.HoldJsonData.NoDispNormal[0].TrDataList[0];

        }else{
        
            var Hyo = Search.MainJsonData.HyoAll[0].ColumnList;
            Search.DetailPrm["phaseNo"] = Hyo[1].CellList[Search.Row_prm].PropertyList[0].Value;       //事象番号
            Search.DetailPrm["phaseLevel"] = Hyo[2].CellList[Search.Row_prm].PropertyList[0].Value;    //事象レベル
            Search.DetailPrm["phaseState"] = Hyo[3].CellList[Search.Row_prm].PropertyList[0].Value;    //状態
            Search.DetailPrm["phaseCont"] = Hyo[4].CellList[Search.Row_prm].PropertyList[0].Value;     //内容

            NoDspDt = Search.MainJsonData.NoDispHyo[0].TrDataList[Search.Row_prm];
        }

        Search.DetailPrm["happendTime"] = NoDspDt.FullDate;    //年月日時分
        Search.DetailPrm["phaseCode"] = NoDspDt.FullCode;      //詳細コード

        NoDspDt = JsonData2.MsgDetail[0].PropertyList;
        for (var i = 0; i < NoDspDt.length; i++){
            Search.DetailPrm[NoDspDt[i].Name] = NoDspDt[i].Value;  //詳細固定文字列表示
        }
        
        Search.openWin();
    }catch(e){
        alert("データが取得できません");
    }
}


/**
 * JSONファイル読み込み終了後の処理【浦滝用】090907.kamino
 *
 */
function LoadEndJson_Urataki(){
    try{
        //*******************************
        // 2．NormalAllデータ表示
        //*******************************
        if (JsonData.NormalAll != undefined){
            CmnView.dispNormalData();
        }        
    }catch(e){
        alert("データが取得できません");
    }
}

