//*******************************************************************
// Control管理スクリプト
//-------------------------------------------------------------------
// 初版  2009/05/26  asa
//*******************************************************************

var CmnControl = {};

CmnControl = function(){
    /**
     * イベントリスナーを登録する 
     * @param  actionDef：アクション定義
     */
    this.setAction = function( actionDef){
    
        Evt = new CmnControl_SD.Evt();
   
        try{
            //トップ画面以外は画面情報に該当する定義を取得する
            if (CmnVar.GmnNo != "top") {
                //ダム番号
                actionDef = actionDef["dam" + CmnVar.QueryParam["damno"]];
               
                //ページ番号
                var page = (CmnVar.QueryParam["page"] != undefined) ? CmnVar.QueryParam["page"] : 1;
                if (actionDef != undefined){
                    actionDef = actionDef["p" + page];
                }
                
                if (actionDef == undefined) return;
            }
            
            //アクション定義数ループ
            for (var id in actionDef){
            
                //イベント数ループ
                for (var event in actionDef[id]){
                
                    //イベント要素を取得する
                    var evtObj = actionDef[id][event];
                    
                    if(CmnLib.Elm.ID(id) != null) {
                        //イベントリスナーを登録する
                        this.addEventListener(CmnLib.Elm.ID(id), event, evtObj["func"], evtObj["property"]);
                    }
                }
            }       
        }
        catch (e){
            alert("ActionMaster定義不具合（id:" + id + "）の可能性があります");
        }   
    }
    
    /**
     * イベントリスナーを登録する
     * @param  elm　   ：対象オブジェクト
     * @param  evt　   ：イベントタイプ
     * @param  func    ：呼び出し関数
     * @param  propInfo：プロパティ情報
     */
    this.addEventListener = function( elm, evt, func, propInfo){
        //関数名に"()"がついている場合は、別関数を呼び出す
        if (func.indexOf("(") != -1){
            Evt.addEventListener(elm, evt, func, false);
            return;
        }
    
        //IE以外
        if (elm.addEventListener){
            elm.addEventListener(evt, this.getEventFunc(func, propInfo), false);
        }
        //IE対応
        else if (elm.attachEvent){
            elm.attachEvent('on' + evt, this.getEventFunc(func, propInfo));
        }       
    }
    
    /**
     * イベントリスナーを削除する
     * @param  elm　   ：対象オブジェクト
     * @param  evt　   ：イベントタイプ
     * @param  func    ：呼び出し関数
     * @param  propInfo：プロパティ情報
     */
    this.removeEventListener = function( elm, evt, func, propInfo){
        //IE以外
        if (elm.removeEventListener){
            elm.removeEventListener(evt, this.getEventFunc(func, propInfo), false);
        }
        //IE対応
        else if (elm.detachEvent){
            elm.detachEvent('on' + evt, this.getEventFunc(func, propInfo));
        }       
    }
    
    /**
     * 関数を作成する
     * @param  func　　：関数名
     * @param  propInfo：プロパティ情報
     * @return         ：関数定義を返す
     */
    this.getEventFunc = function(func, propInfo){
        
        //プロパティ情報を渡す関数名を作成
        if (func.indexOf(".") == -1){
            func = "CmnControl." + func;
        }
        func += (propInfo != undefined) ? "(propInfo)" : "()";
           
        //関数を生成
        return function(){ eval(func);};
    }

    //#####################################
    // 画面遷移関数 
    //#####################################
    this.ScreenAction = function(){
        /**
         * 遷移イベント
         * @param  propInfo：プロパティ情報
         */
        this.move = function(propInfo){
            try{
                location.href = this.makeUrl(propInfo);
            }catch(e){
                alert(e);
            }
        }
        
        /**
         * URLを作成する
         * @param  gmnNo：画面番号
         * @return      ：遷移先URLを返す
         */
        this.makeUrl = function( propInfo){
                     
            //画面番号取得
            var gmnNo = CmnVar.GmnNo;
            if (propInfo != undefined && propInfo["gmnno"] != undefined){
                gmnNo = propInfo["gmnno"];
            }
            
            //頁遷移情報（各パラメータのデフォルト値を設定）
            var paramInfo = new Array();
//090908.kamino 浦滝用 ダムNO不要のためコメント
//            paramInfo["damno"] = "0";
            paramInfo["page"] = "1";
            switch (gmnNo.substring(0, 3)){
                case "G22":     //データ表示
                case "G23":     //グラフ
                    paramInfo["span"] = "60";
                    break;
                case "G44":     //帳票
                    paramInfo["span"] = "24";
                    break;
                default:
                    paramInfo["span"] = "1";
                    break;
            }
//090908.kamino 浦滝用 更新不要のためコメント
//            paramInfo["reqtime"] = "";
//            paramInfo["reload"] = CmnVar.RELOAD_STATE;
            
            var param = "";
            if (gmnNo != "top"){
                //画面番号の先頭に"G"を付加する
                if (gmnNo.substring(0,1) != "G"){
                    gmnNo = "G" + gmnNo;
                }
                
                //定義情報をクエリーパラメータに格納する
                if (propInfo != undefined && propInfo["param"] != undefined){
                    CmnLib.UrlParam.getQueryParam(propInfo["param"]);
                }
                
                //遷移情報ループ（画面番号は除く）
                for (var key in paramInfo){
                  
                    //定義情報より取得
                    if (propInfo != undefined && propInfo[ key] != undefined){
                        //クリア定義の場合は初期値を使用する
                        if (propInfo[key] != "clear"){
                            delete paramInfo[ key];
                            paramInfo[ key] = propInfo[key];
                        }
                    }
                    //定義情報に存在しない場合はクエリー情報より取得
                    else if (CmnVar.QueryParam[ key] != undefined){
                        var queParam = CmnVar.QueryParam[ key];
                        
                        //クリア定義の場合は初期値を使用する
                        if (queParam != "clear"){
                            delete paramInfo[ key];
                            
                            //要求時刻の調整を行う
                            if (key == "reqtime"){
                                var reqTimeParam = queParam.split(",");
                                
                                if (queParam != ""){
                                    //正時の要求時刻は分を0に変更する
                                    if (paramInfo["span"] == "60"){
                                        reqTimeParam.splice(4, 1, "0");     //分を0に置換する
                                        queParam = reqTimeParam.join();     //カンマ区切りの文字列に変換する
                                    }
                                    //定時の最古時刻と比較する
                                    else if (paramInfo["span"] == "10"){                                    
                                        //最古時刻を取得する
                                        var oldest = Time.PopWin.getOldTime(gmnNo.substring(1, 5));
                                        
                                        //最古時刻以前を要求する場合は、最古時刻を要求する
                                        if (CmnLib.Time.changeArrToDate(reqTimeParam).getTime() < oldest.getTime()){
                                            queParam = CmnLib.Time.getDateParam(oldest, 5);
                                        }
                                    }
                                }
                            }
                            //頁情報は遷移先の画面が異なる場合は引き継がない
                            else if (key == "page"){
                                //遷移元と遷移先の画面番号が異なれば頁情報はクリア
                                if (gmnNo.substring(0, 5) != CmnLib.UrlParam.getThisPageName(true, 5)){
//090908.kamino 浦滝用 現況表示以外はページ引き継ぎするため
//                                    queParam = "1";
                                }
                            }
                            paramInfo[ key] = queParam;
                        }
                    }
                    
                    param = CmnLib.UrlParam.addQueryParam(key, paramInfo[key], param);
                }
            }
            return gmnNo + ".htm" + param;
        }
        
        /**
         * 最新
         */
        this.newTime = function(){
            //時刻パラメータを削除する
            //delete CmnVar.QueryParam["reqtime"];
            
//090910.kamino 浦滝用
//            //自動更新をONにする
//            CmnVar.AutoReloadFlag = CmnVar.RELOAD_STATE;
//            CmnVar.QueryParam["reload"] = CmnVar.RELOAD_STATE;
            
            //データ要求を行う
//090908.kamino 浦滝用
//            CmnControl.RequestAction.reqData();
            CmnControl.RequestAction.dispNewData();
        }
        
        /**
	     * 時間送り
	     */
	    this.nextTime = function(){
	        //要求時刻を取得する
	        CmnVar.QueryParam["reqtime"] = CmnLib.Time.getReqTime(1);
	        
	        //自動更新をOFFにする
            CmnVar.AutoReloadFlag = CmnVar.STOP_STATE;
            CmnVar.QueryParam["reload"] = CmnVar.STOP_STATE;

            //デモモードがONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                CmnControl.DemoReqData(1);
                return;
            }
	        
	        //データ要求を行う
	        CmnControl.RequestAction.reqData();
	    }

	    /**
	     * 時間戻し
	     */
	    this.prevTime = function(){
	        //要求時刻を取得する
	        CmnVar.QueryParam["reqtime"] = CmnLib.Time.getReqTime(-1);
	        
	        //自動更新をOFFにする
            CmnVar.AutoReloadFlag = CmnVar.STOP_STATE;
            CmnVar.QueryParam["reload"] = CmnVar.STOP_STATE;

            //デモモードがONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                CmnControl.DemoReqData(-1);
                return;
            }
	        
	        //データ要求を行う
	        CmnControl.RequestAction.reqData();
	    }
        
        /**
	     * 複数ページがある画面種別の場合、次ページへ遷移する
	     */
	    this.nextPage = function(){
            //頁番号を取得する
            CmnVar.QueryParam["page"] = this.getPageNo(1);

	        //画面を更新する
            CmnView.makeNewPage(true);

            //データ要求を行う
//090908.kamino 浦滝用
//            CmnControl.RequestAction.reqData();
            CmnControl.RequestAction.dispNewData();
	    }

	    /**
	     * 複数ページがある画面種別の場合、前ページへ遷移する
	     */
	    this.prevPage = function(){            
            //頁番号を取得する
            CmnVar.QueryParam["page"] = this.getPageNo(-1);

            //画面を更新する
            CmnView.makeNewPage(true);

            //データ要求を行う
//090908.kamino 浦滝用
//            CmnControl.RequestAction.reqData();
            CmnControl.RequestAction.dispNewData();
	    }
	    
	    /**
	     * 遷移先ページ番号を取得する
	     * @param  val：増減値
	     * @return    ：ページ情報を返す[ 連想配列 ]
	     */
	    this.getPageNo = function( val){
	        var pageNo = "1";
	        if (CmnVar.QueryParam["page"] != undefined){
	            pageNo = CmnVar.QueryParam["page"];
	        }
	        return Number(pageNo) + val;
	    }

        /**
         * 090827.kamino 浦滝用
         * 遷移イベント
         */
        this.moveHP = function(){
            try{
                window.open('http://www.water.go.jp/kanto/arakawa/');
            }catch(e){
                alert(e);
            }
        }

    }
    
    //#####################################
    // プルダウンメニュー関数
    //#####################################
    this.MenuAction = function(){
        /**
         * メニューを表示する
         */
 	    this.showMenu = function(num){
//		    PopUpManager.showmenu(num);
            showmenu(num);
	    }
        
        /**
         * メニューを非表示にする
         */
	    this.delayHideMenu = function(){
//		    PopUpManager.delayhidemenu();
            delayhidemenu();
	    }   
    }
    
    //#####################################
    // データ要求関数
    //#####################################
    this.RequestAction = function(){
    
        /**
         * データ要求を行う
         *
         */
        this.reqData= function(){

            //デモモードがONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                CmnControl.DemoReqData();
                return;
            }
        
            //パスを取得する
            var path = location.href;
            path = path.substring(0, path.indexOf("\G"));

            //クエリーパラメータを生成する
            var param = "";
            param = CmnLib.UrlParam.addQueryParam("jsonNo", this.getJsonFileName(), param);                  //JSONファイル番号
            
            //最新観測時刻と同じならreqtimeは送信しない
            if ( CmnVar.QueryParam["reload"].toString() == "true") {
                 delete CmnVar.QueryParam["reqtime"];
            }
            
            //要求時刻が最古以前なら最古時刻で要求する
            if (CmnVar.QueryParam["reqtime"] != undefined){
                CmnVar.QueryParam["reqtime"] = CmnLib.Time.getReqTime(0);
            }        

            param = CmnLib.UrlParam.addQueryParam("reqtime", CmnVar.QueryParam["reqtime"], param);           //データ要求時刻
            
            param = CmnLib.UrlParam.addQueryParam("span", CmnVar.QueryParam["span"], param);                 //データ収集間隔
            param = CmnLib.UrlParam.addQueryParam("renewid", CmnVar.RenewID, param);                         //更新ID
            param = CmnLib.UrlParam.addQueryParam("page", CmnVar.QueryParam["page"], param);                 //ページ番号
            param = CmnLib.UrlParam.addQueryParam("reload", CmnVar.QueryParam["reload"], param);             //自動更新フラグ

            var gmnNo = CmnVar.GmnNo;

            //スケール値設定
            if(!CmnVar.AutoScaleG1_L1){
                param = CmnLib.UrlParam.addQueryParam("scaleG1_L1", CmnVar.scaleG1_L1, param);                   //スケール値[ 左上 ]
                //雨量グラフ画面
                if( gmnNo.substring(0, 5) == "G2301"){
                    //表示数分スケールを送信
                    param = CmnLib.UrlParam.addQueryParam("scaleG2_L1", CmnVar.scaleG1_L1, param);               //雨量スケール値[ 左側２局目 ]
                    param = CmnLib.UrlParam.addQueryParam("scaleG3_L1", CmnVar.scaleG1_L1, param);               //雨量スケール値[ 左側３局目 ]
                    param = CmnLib.UrlParam.addQueryParam("scaleG4_L1", CmnVar.scaleG1_L1, param);               //雨量スケール値[ 左側４局目 ]
                }
            }
            if(!CmnVar.AutoScaleG1_R1){
                param = CmnLib.UrlParam.addQueryParam("scaleG1_R1", CmnVar.scaleG1_R1, param);                   //スケール値[ 右上 ]
                //雨量グラフ画面
                if( gmnNo.substring(0, 5) == "G2301"){
                    //表示数分スケールを送信
                    param = CmnLib.UrlParam.addQueryParam("scaleG2_R1", CmnVar.scaleG1_R1, param);               //雨量スケール値[ 右側２局目 ]
                    param = CmnLib.UrlParam.addQueryParam("scaleG3_R1", CmnVar.scaleG1_R1, param);               //雨量スケール値[ 右側３局目 ]
                    param = CmnLib.UrlParam.addQueryParam("scaleG4_R1", CmnVar.scaleG1_R1, param);               //雨量スケール値[ 右側４局目 ]
                }
            }
            if(!CmnVar.AutoScaleG2_L1){
                param = CmnLib.UrlParam.addQueryParam("scaleG2_L1", CmnVar.scaleG2_L1, param);                   //スケール値[ 左下 ]
            }
            if(!CmnVar.AutoScaleG2_R1){
                param = CmnLib.UrlParam.addQueryParam("scaleG2_R1", CmnVar.scaleG2_R1, param);                   //スケール値[ 右下 ]
            }
            param = CmnLib.UrlParam.addQueryParam("random", Math.floor(Math.random() * 100000000), param);   //乱数
                        
            try{
            
                //XMLHttpRwquestオブジェクトを生成する
                var request = this.makeXMLHttpReq();
                
                //データ作成要求実行(レスポンスに作成したファイル名が復帰される)
                request.open('GET', path + 'JsonReq.aspx' + param, false);
                request.send(null);
                if (request.status != 200) {
                    return;
                }
           
                //JSONファイル名を設定する
                this.setJsonFileName(request.responseText, "json");

            }
            catch(e){
                alert("データが取得できません");
                if( CmnVar.GmnNo.substring(0,3) == "G22"){
                    CmnView.makeNewPage(false);
                }else if( CmnVar.GmnNo.substring(0,3) == "G23"){
                    CmnView.delGraphNormal();
                }
                JsonData = undefined;
            }     
            
        }
        
        /**
         * 故障・警報履歴用初期表示用データ獲得関数(h.ikeda 2009.05.03)
         * @param prm {string} : Json取得パラメータ
         * @param detail {boolean} : 詳細PWか [ 詳細PW:true | 詳細PWではない:false ]
         */
        this.reqSearchData = function(prm, detail) {

            //デモモードがONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                var mode;
                if(detail) mode = 0;
                CmnControl.DemoReqData(mode);
                return;
            }
            
            //パスを取得する
            var url = location.href;
            var path = url.substring(0, url.indexOf("\G"));
            
            var param = "";
            //パラメータ指定がなければ初期表示
            if(!prm){
            
                //データ要求時刻生成
                if(typeof(CmnVar.Msg_Time_Para) == "string"){
                    //日付が文字列ならDate型にする
                    var dtArr = Time.PopWin.modDate(CmnVar.Msg_Time_Para);
                    CmnVar.Msg_Time_Para = CmnLib.Time.changeArrToDate(dtArr);
                }
                
                var strTime = CmnLib.Time.getDateParam(CmnVar.Msg_Time_Para, 6);
                                
                var msgJsonNo;
                if(CmnVar.QueryParam["span"] == "99"){
                    //故障警報履歴(発生中)
                    msgJsonNo = Search.SEARCH_JSON_NO1;
                }else{
                    //故障警報履歴
                    msgJsonNo = Search.SEARCH_JSON_NO2;
                }

                //クエリーパラメータを生成する
                param = CmnLib.UrlParam.addQueryParam("jsonNo",   msgJsonNo, param);                                //JSON番号
                param = CmnLib.UrlParam.addQueryParam("reqtime",  strTime, param);                                  //データ要求時刻
                param = CmnLib.UrlParam.addQueryParam("msglevel", CmnVar.Msg_Level_Para, param);                    //メッセージレベル
                param = CmnLib.UrlParam.addQueryParam("msgyouin", CmnVar.Msg_Youin_Para, param);                    //メッセージ要因
                param = CmnLib.UrlParam.addQueryParam("msgno",    CmnVar.Msg_No_Para, param);                       //事象番号
                param = CmnLib.UrlParam.addQueryParam("msgmess",  encodeURI(CmnVar.Msg_Mess_Para), param);          //検索文字列
                param = CmnLib.UrlParam.addQueryParam("msgnx",    CmnVar.Msg_Next_Para, param);                     //送りパラメータ
                param = CmnLib.UrlParam.addQueryParam("msgstid",  CmnVar.Msg_Stid_Para, param);                     //戻しパラメータ
                param = CmnLib.UrlParam.addQueryParam("random",   Math.floor(Math.random() * 100000000), param);    //乱数

            }else{
                param = prm;
            }

            try{
                //XMLHttpRwquestオブジェクトを生成する
                var request = this.makeXMLHttpReq();

                //データ作成要求実行(レスポンスに作成したファイル名が復帰される)
                request.open('GET', path + 'JsonReq.aspx' + param, false);
                request.send(null);
                if (request.status != 200) {
                    return;
                }
                
               //データJSONファイル名を設定する
               this.setJsonFileName(request.responseText, "json");
            }
            catch(e){
                alert("履歴データが取得できません");
            }
        }
        
        /**
         * 帳票データを要求する
         * @param  tyohyoNo：帳票番号
         * @param  sdate　 ：開始日時
         * @param  edate　 ：終了日時
         * @param  msgInfo ：異常判定帳票用メッセージ情報
         */
        this.reqTyohyoData = function(tyohyoNo, sdate, edate, msgInfo){
            
            //デモモードがONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                CmnControl.DemoReqData();
                return;
            }

            //パスを取得する
            var path = location.href;
            path = path.substring(0, path.indexOf("\G"));
            
            var param = "";
            param = CmnLib.UrlParam.addQueryParam("jsonNo",   "772200000", param);  //JSON番号（固定）
            param = CmnLib.UrlParam.addQueryParam("tyohyoNo", tyohyoNo, param);     //帳票番号
            param = CmnLib.UrlParam.addQueryParam("reqtime",  sdate, param);        //要求開始日時
            param = CmnLib.UrlParam.addQueryParam("endtime",  edate, param);        //要求終了日時
            //異常判定帳票用
            if (msgInfo != undefined){
                param = CmnLib.UrlParam.addQueryParam("msglevel", msgInfo["level"], param);                 //メッセージレベル
                param = CmnLib.UrlParam.addQueryParam("msgyouin", msgInfo["youin"], param);                 //メッセージ要因
            }
            param = CmnLib.UrlParam.addQueryParam("random", Math.floor(Math.random() * 100000000), param);  //乱数
            
            try{

                //XMLHttpRwquestオブジェクトを生成する
                var request = this.makeXMLHttpReq();
                

                //データ作成要求実行(レスポンスに作成したファイル名が復帰される)
                request.open('GET', path + 'JsonReq.aspx' + param, false);
                request.send(null);
                if (request.status != 200) {
                    return;
                }
                
                var jsonName = request.responseText;
                if (tyohyoNo == null) jsonName = "J4411.js";
                
                //JSONファイル名を設定する
                this.setJsonFileName(jsonName, "json");        
            }
            catch(e){
                alert("帳票データが取得できません");
            }
        }
        
        /**
         * 最新ファイルのデータを表示する
         *
         */
        this.dispNewData = function(){
            
            //JSONファイル名取得
            var jsonNo;
//090904.kamino 浦滝用 start.
//            //現況表示・流域水文図
//            if (CmnLib.UrlParam.getThisPageName(true, 3) == "G10"){
//                //現況表示
//                jsonNo = "J100000";
//                jsonNo += (CmnVar.GmnNo == "G1000000") ? "0" : "5";
//                jsonNo += CmnVar.QueryParam["damno"];
//                jsonNo += "1";
//            }
//            //故障警報履歴
//            else{
//                //故障警報最新メッセージ
//                if(CmnVar.QueryParam["span"] == "99"){
//                    //発生中
//                    jsonNo = "J" + Search.SEARCH_JSON_NO1_NEW;
//                }else{
//                    //履歴
//                    jsonNo = "J" + Search.SEARCH_JSON_NO2_NEW;
//                }
//            }
            if (CmnLib.UrlParam.getThisPageName(true, 3) == "G10"){
                //リアルタイム
                jsonNo = "J100000001";
            }else if (CmnLib.UrlParam.getThisPageName(true, 3) == "G11"){
                //放流状況図
                jsonNo = "J11000000" + CmnVar.QueryParam["page"];
            }else{
                //その他
                var gmnNo = CmnLib.UrlParam.getThisPageName(false, 4);
                var span = CmnVar.QueryParam["span"];
                span = (Number(span) < 10) ? "0" +  span : span;
                var page = CmnVar.QueryParam["page"];

                if(CmnLib.UrlParam.getThisPageName(false, 7) == "2204001"){
                    jsonNo = "J" + gmnNo + span + "10" + page;
                }else{
                    jsonNo = "J" + gmnNo + span + "00" + page;
                }
            }
//090904.kamino 浦滝用 end.

            //デモモードがONならONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                //JSONファイル名を設定する
                this.setJsonFileName(jsonNo + ".js", "demo_online");
                return;
            }
            
            //JSONファイル名を設定する
            this.setJsonFileName(jsonNo + ".js", "online");
        }
        
        /**
         * 090907.kamino
         * 浦滝用 放流状況図テロップ・画像Json読み込み
         */
        this.dispUratakiData = function(){
            
            //JSONファイル名取得
            var jsonNo;
            var page = CmnVar.QueryParam["page"];
            if(page == 1){
                jsonNo = "J110000501";
            }else{
                jsonNo = "J110000502";
            }

            //デモモードがONならONなら固定jsonを読む
            if(CmnVar.DEMO_MODE){
                //JSONファイル名を設定する
                this.setJsonFileName(jsonNo + ".js", "demo_json");
                return;
            }
            
            //JSONファイル名を設定する
            this.setJsonFileName(jsonNo + ".js", "json");
        }

        /**
         * 最新観測時刻を取得する
         * @return ：最新観測時刻を返す
         */
        this.getNewJikoku = function(){
            try{            

                //デモモードがONなら設定時刻を返す
                if(CmnVar.DEMO_MODE){
                        return new Date(2009,8 - 1,8,14,01,00);
                }

                //XMLHttpRwquestオブジェクトを生成する
                var request =  this.makeXMLHttpReq();
        
                //データ作成要求実行
                request.open('GET', 'json/newJikoku/newJikoku.js?time=' + Date.parse(new Date()), false);
                request.send(null);
                if (request.status != 200) {
                    return;
                }
               
                //JSONファイルより最新観測時刻情報を取得する
                var newTime = eval("(" + request.responseText + ")");
                
                //最新観測時刻キー
                try{
                    //最新観測時刻を取得する
                    return new Date( newTime[CmnVar.RenewID]);
                }
                catch(e){
                    return new Date();
                }     

            }
            catch(e){
                alert("最新観測時刻を取得できません");
                return new Date();
            }

        }
       
        /**
         * XMLHttpRequestオブジェクトを生成する
         * @return ：XMLHttpRequestオブジェクトを返す
         */
        this.makeXMLHttpReq = function(){
            var request;
            
            if (window.XMLHttpRequest) {
                //IE7, FireFox, safari, opera等
                request = new window.XMLHttpRequest();
            }
            else if (window.ActiveXObject) {
                try {
                    //IE6
                    request = new window.ActiveXObject('Msxml2.XMLHTTP');
                }
                catch (e) {
                    //IE5.5以前
                    request = new window.ActiveXObject('Microsoft.XMLHTTP');
                }
            }
            else {
                alert('XMLHttpRequest が　サポートされていません');
            }
            return request;
        }

        /**
         * JSONファイル番号を取得する
         * @return    ：JSONファイル番号を返す
         */
        this.getJsonFileName= function(){
       
            //ページ番号取得
            var pageNo = CmnVar.QueryParam["page"];
            if(pageNo == undefined) pageNo = 1;
            
            //ダム番号を付加する
            var damNo = (CmnVar.QueryParam["damno"] != undefined) ? CmnVar.QueryParam["damno"] : 0;
            pageNo = parseInt(damNo, 10) * 10 + parseInt(pageNo, 10);
            
            //桁数調整を行う
            if (pageNo < 10) pageNo = "00" + pageNo;
            else if (pageNo < 100) pageNo = "0" + pageNo;
           
            //収集間隔を取得する
            var span = CmnVar.QueryParam["span"];
            if(span == undefined) span = 0;
                
            //現況表示の場合は0
            if (span < 10) span = "00";
            
            return CmnLib.UrlParam.getThisPageName(false, 4) + span　+ pageNo;
        }
        
        /**
         * JSONファイル名をスクリプトソースに設定する
         * @param  jsonName：JSONファイル名
         * @param  id      ：ID（且つディレクトリ名）
         */
        this.setJsonFileName = function(jsonName, id){
            
            var nowDate = Date.parse(new Date());   
            
            //JSONファイル名を設定する
            if (CmnLib.Elm.ID(id)) {
                //タイマーセット(JSON読み込みエラー強制遷移用)
                //timer = setTimeout(CmnLib.TimeOutCallBack, 5000);

                //090915.kamino 浦滝用 Ff3がクエリ追加しても再読み込みしないため start
                //CmnLib.Elm.ID(id).src = "json/" + id + "/" + jsonName + "?time=" + nowDate;
		        if(navigator.userAgent.indexOf("MSIE") == -1){
                    var js = document.createElement("script");
                    js.setAttribute("type", "text/javascript");
                    //090907.kamino 浦滝用テスト
                    js.setAttribute("charset", "utf-8");

                    js.setAttribute("src", "json/" + id + "/" + jsonName + "?time=" + nowDate);
                    js.setAttribute("id", id);
                    var header = CmnLib.Elm.TAGNAME("head")[0];
                    header.appendChild(js);

                }else{
                    CmnLib.Elm.ID(id).src = "json/" + id + "/" + jsonName + "?time=" + nowDate;
                }
                //090915.kamino 浦滝用 Ff3がクエリ追加しても再読み込みしないため end

            }
            //JSON用のscriptタグが存在しない場合は生成する
            else{
	            var js = document.createElement("script");
	            js.setAttribute("type", "text/javascript");
//090907.kamino 浦滝用テスト
	            js.setAttribute("charset", "utf-8");

                js.setAttribute("src", "json/" + id + "/" + jsonName + "?time=" + nowDate);
                js.setAttribute("id", id);
	            var header = CmnLib.Elm.TAGNAME("head")[0];
	            header.appendChild(js);

            }       
        }
    }
    
    //#####################################
    // マウスアクション関数
    //#####################################
    this.MouseAction = function(){
        /**
	     * 前回保存されたオブジェクト情報(エレメント)
	     */
        this.saveElem  = undefined;

	    /**
	     * 前回保存されたオブジェクト情報(色)
	     */
        this.saveColor = undefined;
        
	    /**
	     * マウスオーバーイベントハンドラ
	     * @param  elem：対象エレメント
	     */
	    this.onElmMouseOver = function( elem){
		    if( this.saveElem != undefined){
		        this.saveElem.style.backgroundColor = this.saveColor;
		    }
		    if( this.saveElem != elem){
		        this.saveElem  = elem;
		        this.saveColor = elem.style.backgroundColor;
			    elem.style.backgroundColor ="#FFE794";
		    }
	    }

	    /**
	     * マウスアウトイベントハンドラ
	     * @param  elem：対象エレメント
	     */
	    this.onElmMouseOut = function( elem){
		    if( this.saveElem != undefined){
		        this.saveElem.style.backgroundColor = this.saveColor;
		        this.saveElem = undefined;
		    }
	    }   
    }
    /**
     * デモモードJSON設定
     * @param  mode：送り=1、戻し=-1、故障警報詳細PW=0
     */
    this.DemoReqData = function(mode){
        var gmnNo = CmnLib.UrlParam.getThisPageName(false, 4);
        var span = CmnVar.QueryParam["span"];
        span = (Number(span) < 10) ? "0" +  span : span;
        var page = CmnVar.QueryParam["page"];
        
        //JSONファイル名を設定する
        switch(gmnNo){
            //故障警報
            case "3210" :
                if (mode == 0){
                    this.RequestAction.setJsonFileName("J321000000.js", "demo_json");
                }else{
                    //発生中画面か、履歴画面か
                    page = (span == "99") ? "1" : "2";
                    //検索しているか、検索していないか
                    var searchMode = (CmnVar.Msg_Mess_Para != "") ? "1" : "0";
                    //検索結果=J32099011.js　検索なし=J32099001.js
                    this.RequestAction.setJsonFileName("J3210990" + searchMode + page + ".js", "demo_json");
                }
                break;
            //帳票
            case "4411" :
                this.RequestAction.setJsonFileName("J7722" + span + "000.js", "demo_json");
                break;
            //データ表示
            default :
                if (mode == -1){
                    //戻しデータ
                    this.RequestAction.setJsonFileName("J" + gmnNo + span + "00" + page + "_1.js", "demo_json");
                }else{
                    //最新データ
                    this.RequestAction.setJsonFileName("J" + gmnNo + span + "00" + page + ".js", "demo_json");
                }
                break;
        }
    }
}

var CmnControl_SD = function(){};

/**
 * CmnControl領域（仙台版）
 *
 */
CmnControl_SD.Evt = function(){
	    /**
	     * イベントリスナー登録
	     *
	     */
	    this.addEventListener = function(elm, evt, func, capt){
		    if(typeof(func) == "string"){
			    if(elm.attachEvent){
				    elm.attachEvent("on" + evt, function(){eval(func);});
			    }else if(elm.addEventListener){
				    elm.addEventListener(evt, function(){eval(func);}, capt);
			    }else{
				    elm["on" + evt] = function(){eval(func);};
			    }
		    }else{
			    if(elm.attachEvent){
				    elm.attachEvent("on" + evt, func);
			    }else if(elm.addEventListener){
				    elm.addEventListener(evt, func, capt);
			    }else{
				    elm["on" + evt] = func;
			    }
		    }
	    };
	    /**
	     * イベントリスナー削除
	     *
	     */
	    this.removeEventListener = function(elm, evt, func, capt){
		    if(typeof(func) == "string"){
			    if(elm.detachEvent){
				    elm.detachEvent("on" + evt, function(){eval(func);});
			    }else if(elm.removeEventListener){
				    elm.removeEventListener(evt, function(){eval(func);}, capt);
			    }else{
				    elm["on" + evt] = "";
			    }
		    }else{
			    if(elm.detachEvent){
				    elm.detachEvent("on" + evt, func);
			    }else if(elm.removeEventListener){
				    elm.removeEventListener(evt, func, capt);
			    }else{
				    elm["on" + evt] = "";
			    }
		    }
	    };
};

