//-------------------------------------------------------------------------
// TMSDK 汎用javascriptモジュール
// Var 1.3
//
// TMSDKと連動して動作する画面遷移javascript関数をまとめた物です。
//-------------------------------------------------------------------------
// 備考 :
//
// 本番に配布する際は、以下のサイトで難読化を行ってください。
// ※tanomailソリューションの物は難読化済み
// http://labs.gueschla.com/jsjuicer/
//
//-------------------------------------------------------------------------

//-------------------------------------------------------------------------
// グローバル定数
//-------------------------------------------------------------------------
//ページ遷移POST用hidden項目の名前
var $G_SYS_MODE_VALUE_KEY           = 'mode';           //モード用
var $G_SYS_URL_VALUE_KEY            = 'url';            //URL用
var $G_SYS_QUERYSTRING_VALUE_KEY    = 'queryString';    //クエリストリング用
var $G_SYS_ROUTE_VALUE_KEY          = 'routeid';        //遷移ルート用
var $G_SYS_ROUTE_NEW_KEY            = 'newRoute';       //新ルート生成判定用

var $G_SYS_MODE_PAGEMOVE            = 'pagemove';       //ページ遷移モード
var $G_SYS_MODE_PAGEPOPUP           = 'pagepopup';      //ポップアップモード

//ページ遷移POST用form項目の名前
var $G_SYS_PAGEMOVE_POST_FORM_NAME = 'pagemovepostingform';

//POSTを受け取るHttpHandlerの名前
//***************************************************************
// ※web.configのHttpHandlerセクションに、
//   path="PageViewManager.aspx"
//   と登録して、TMSDKのPageMoveHttpHandlerと関連付けてください。
//***************************************************************
var $G_SYS_PAGEMOVEHANDLER_NAME = 'PageViewManager.aspx';

//画面遷移ルートIDの名前
var $G_SYS_ROUTE_ID_QUERY_STRING_NAME = 'routeId';

//画面遷移ルートID
var $G_SYS_PAGEMOVE_ROUTE_ID = $GetRouteId();

//-------------------------------------------------------------------------

//-------------------------------------------------------------------------
// ページ遷移実行
//-------------------------------------------------------------------------
// ARG1 : ViewIdもしくは静的ページのurl
// ARG2 : クエリストリング
// ret  : true=成功 : false=失敗
//-------------------------------------------------------------------------
// 備考 :
//
//  htm等静的ページの画面間遷移を行う場合でも、本メソッドを使用して下さい。
//  本メソッドを使用しない場合、静的ページは遷移履歴の管理から外れますので、
//  戻る制御が出来なくなります。
//-------------------------------------------------------------------------
// 例   :
//
//  <input id="ToStatic" type="button" value="静的ページへ" language="javascript"
//   onclick="return PageMove('/Contents/Static/def.htm','');" />
//
//  <input id="ToAspx" type="button" value="動的ページへ" language="javascript"
//   onclick="return PageMove('VIEWID001000','?querystring=val');" />
//-------------------------------------------------------------------------
function PageMove(id_or_url, queryString)
{
    //bodyが存在するか
    if ( document.body == null ) {
        //存在しない場合終了
        return false;
    } else {
        //存在する場合、オブジェクト取得
        var obj = document.body;
    }

    //変数初期化
    var route  = '';
    var hidden = '';

    //遷移ルートを設定
    if ( $G_SYS_PAGEMOVE_ROUTE_ID != null ) {

        route += '<input type="hidden" name="' + $G_SYS_ROUTE_VALUE_KEY + '" value="' + $G_SYS_PAGEMOVE_ROUTE_ID + '" />';

    }

    //ページ遷移として送信するidを設定
    hidden = '<input type="hidden" name="' + $G_SYS_MODE_VALUE_KEY + '" value="' + $G_SYS_MODE_PAGEMOVE + '" />' +
             '<input type="hidden" name="' + $G_SYS_URL_VALUE_KEY + '" value="' + id_or_url + '" />' +
             '<input type="hidden" name="' + $G_SYS_QUERYSTRING_VALUE_KEY + '" value="' + queryString + '" />';

    //document.allが使えるか
    if ( document.all != null ) {

        //タグ設定
        var formtag = '<form name="' + $G_SYS_PAGEMOVE_POST_FORM_NAME + '"' +
                      ' method="post"' +
                      ' action="' + $GetPageMoveHandlerUrl() + '"' +
                      ' id="' + $G_SYS_PAGEMOVE_POST_FORM_NAME + '"' +
                      ' enctype="multipart/form-data" >' + hidden + route + '</form>';

        // タグが存在するか(多重実行検出用)
        if (!(document.forms.item($G_SYS_PAGEMOVE_POST_FORM_NAME))) {

            // タグが存在しない場合、追加
            obj.insertAdjacentHTML('beforeEnd', formtag);

        }

        // 送信
        document.forms.item($G_SYS_PAGEMOVE_POST_FORM_NAME).submit();
        
        //成功
        return true;

    } else {

        //document.allが使えないのでcreateElementを使用

        //formエレメント作成
        var formobj = document.createElement('form');

        //タグ追加
        formobj.innerHTML = hidden + route;

        //formパラメータ設定
        formobj.action = $GetPageMoveHandlerUrl();
        formobj.id     = $G_SYS_PAGEMOVE_POST_FORM_NAME;
        formobj.name   = $G_SYS_PAGEMOVE_POST_FORM_NAME;
        formobj.method = 'post';

        //オブジェクト追加
        obj.appendChild( formobj );

        //送信
        formobj.submit();

        //成功
        return true;
    }
}

//-------------------------------------------------------------------------
// URLもしくはViewIDを指定してポップアップウィンドウを開く
//-------------------------------------------------------------------------
// ARG1 : ViewIdもしくは静的ページのurl
// ARG2 : クエリストリング
// ARG3 : ポップアップしたいウィンドウの名前
// ARG4 : ウィンドウサイズ等の指定 (例:"width=210,height=160,resizable=yes")
//        ウィンドウサイズを指定する場合、location 及び status パラメータは
//        指定しないようにして下さい。(固定で表示する仕様のため)
// ARG5 : エントリ(新しいウィンドウをブラウザの履歴に入れる=false/入れない=true)
//        (Default=True)
// ARG6 : ポップアップしたウィンドウに対し、独立して履歴管理を行うか否か
//        true=独立して遷移履歴管理を行う(Default) : false=通常の履歴管理
//        trueを設定すると、ポップアップしたウィンドウを開始として
//        履歴管理を独立して行い、親ウィンドウとは独立して戻る制御が可能になります。
//        ※本引数を指定しない場合、独立履歴管理モードでポップアップします。
//
//        独立履歴管理指定ポップアップ
//        PopupWindow('VIEWID001000','?querystring=val','','',true,true);
//        引数を指定しない場合も、独立履歴管理になります
//        PopupWindow('VIEWID001000','?querystring=val','','',true);
//
//        通常履歴管理指定ポップアップ
//        PopupWindow('VIEWID001000','?querystring=val','','',true,true,false);
//
//        通常は独立履歴管理でポップアップしてください。
//
// ret  : openしたwindow
//-------------------------------------------------------------------------
// 備考 :
//
//  動的ページをポップアップする場合は必ず本メソッドを使用して下さい。
//-------------------------------------------------------------------------
// 例   :
//
//  //新規履歴管理モードでポップアップ
//  <input id="PopupAspx" type="button" value="動的ページポップアップ"
//   language="javascript"
//   onclick="return PopupWindow('VIEWID001000','?querystring=val','','');" />
//
//  //新規履歴管理モードでポップアップ
//  <input id="PopupStatic" type="button" value="静的ページポップアップ"
//   language="javascript"
//   onclick="return PopupWindow('/Contents/Static/def.htm','','','');" />
//
//-------------------------------------------------------------------------
function PopupWindow($id_or_url, $queryString, $name, $features, $replace)
{
    //遷移先があるか
    if ( $id_or_url == null || $id_or_url == '') {
        //テスト用
        //alert("遷移先URLが不正です")
        return false
    }

    //サイズの指定があるか
    if ( $features == null || $features == '') {
        var vorh;
        vorh = $id_or_url.indexOf(".htm",0);
        if(vorh == -1){
            //デフォルトのサイズを指定(動的画面)
            $features = "menubar=no,toobar=yes,location=yes,status=yes,scrollbars=yes,resizable=yes,width=810,height=550";
        }else{
            //デフォルトのサイズを指定(静的画面)
            $features = "menubar=no,toobar=yes,location=yes,status=yes,scrollbars=yes,resizable=yes,width=810,height=550";
        }
    } else {
        //サイズ指定があった場合にステータスバー、アドレスバーを表示する
        $features = $features + ",location=yes,status=yes";
    }

    //replaceがnullか
    if ( $replace == null ) {
        //デフォルトの動作として、ブラウザの履歴に入れないように設定
        $replace = true;
    }

    //新ルート生成フラグON
    var $newRoot = true;

    //子ウィンドウ用
    var $child = null;

    //子ウィンドウをblankでオープン
    $child = window.open( '/r/common/dummy.html', $name, $features, $replace );

    //子ウィンドウが存在するか、閉じられて居ないか
    if ( ($child != null) && ($child.closed == false) ) {
        if ( ($id_or_url != '') && ($id_or_url != null) ) {
            //子ウィンドウにフォーカスを合わせる
            $child.focus();

            var $formtag = '';
            $formtag += '<form name="form1" method="post"';
            $formtag += ' action="' + $GetPageMoveHandlerUrl() + '" id="' + $G_SYS_PAGEMOVE_POST_FORM_NAME + '"';
            $formtag += ' enctype="multipart/form-data" >';

            //子ウィンドウにPOST用フォームを書き込む(write、もしくはwritelnで逐次書き込む必要があります)
            with ( $child.document ) {
                writeln('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
                writeln('<html xmlns="http://www.w3.org/1999/xhtml" >');
                writeln('<head>');
                writeln('<title>...</title>');
                writeln('<script language="javascript" type="text/javascript">');
                writeln('<!--');
                writeln('function popupOnload(){');
                writeln('document.getElementById( "' + $G_SYS_PAGEMOVE_POST_FORM_NAME + '" ).submit();');
                writeln('}');
                writeln('-->');
                writeln('</script>');
                writeln('</head>');
                writeln('<body onload="popupOnload();">');
                writeln($formtag);
                writeln('<input type="hidden" name="' + $G_SYS_MODE_VALUE_KEY + '" value="' + $G_SYS_MODE_PAGEPOPUP + '" />');
                writeln('<input type="hidden" name="' + $G_SYS_URL_VALUE_KEY + '" value="' + $id_or_url + '" />');
                writeln('<input type="hidden" name="' + $G_SYS_QUERYSTRING_VALUE_KEY + '" value="' + $queryString + '" />');
                writeln('<input type="hidden" name="' + $G_SYS_ROUTE_NEW_KEY + '" value="' + $newRoot + '" />');
                writeln('</form>');
                writeln('</body>');
                writeln('</html>');
                close();
            }
        }

        //開いた子ウィンドウを返す
        return $child;
    }
}

//-------------------------------------------------------------------------
// 画面遷移ルートID取得
//-------------------------------------------------------------------------
// ARG1 : なし
// ret  : 画面遷移ルートID(ない場合はnull)
//-------------------------------------------------------------------------
function $GetRouteId()
{
    //routeid取得
    return $GetQueryStringValue($G_SYS_ROUTE_ID_QUERY_STRING_NAME);
}

//-------------------------------------------------------------------------
// クエリストリングの値取得
//-------------------------------------------------------------------------
// ARG1 : 取得したいクエリストリング項目名
// ret  : クエリストリングの値
//-------------------------------------------------------------------------
function $GetQueryStringValue($name)
{
    var $query = window.location.search.substring(1);
    var $vars = $query.split("&");

    for ( var i = 0 ; i < $vars.length ; i++ ) {
        var $pair = $vars[i].split("=");

        if ( $pair[0] == $name ) {

            return $pair[1];

        }
    }

    return null;
}

//-------------------------------------------------------------------------
// POSTを受け取るHttpHandlerの名前を取得します。
//-------------------------------------------------------------------------
// ret  : POST先URL
//-------------------------------------------------------------------------
function $GetPageMoveHandlerUrl()
{
    var pathname = window.location.pathname;

    //パス名からルート部分を取得
    var root = pathname.substring(0, pathname.indexOf("/", 1) + 1)

    return root + $G_SYS_PAGEMOVEHANDLER_NAME;
}
