﻿/**
 * @fileoverview トップページのサインイン・サインアウト処理で使用するJavaScript。
 */


// サイドのユーザ情報
var s_login_name_id = null;
var s_signin_link_id = null;
var s_point_id = null;
var s_point_place_id = null;
var s_beginner_place_id = null;
var s_relogin_place_id = null;

/**
 * S_MasterPageのサインインまたはサインアウトボタンを押下した際に実行される関数。 
 * ノーマルCookieの有無により、サインインとサインアウトどちらの処理を実行するか判定する。
 */
function sign()
{
    // サインイン未
    if ((getRbCookie("rrbNORMAL") == null) || (getRbCookie("rrbNORMAL") == ""))
    {
        openSigninDialog();
    }
    // サインイン済
    else
    {
        signout();
    }
}

/**
 * トップページにオーバーレイによるサインイン画面を表示する。
 */
function openSigninDialog()
{
    var overlay_div = document.getElementById("signin_overlay");
    var overlay_table_div = document.getElementById("signin_overlay_table");
    var signin_frame = document.getElementById("signin_frame");

    if (overlay_div.style.visibility == "hidden")
    {
        overlay_div.style.position = "absolute";
        overlay_div.style.top = "0px";
        signin_frame.height = (document.documentElement.clientHeight - 100 > 373) ? document.documentElement.clientHeight - 100 + "px" : "373px";
        signin_frame.width = "800px";
        var signin_param  = "login_name_id=" + login_name_id;
        //signin_param += "&signin_button_id=" + signin_button_id;
        signin_param += "&signin_link_id=" + signin_link_id;
        signin_param += "&beginner_place_id=" + beginner_place_id;
        signin_param += "&point_id=" + point_id;
        signin_param += "&point_place_id=" + point_place_id;
        
        if(s_login_name_id != null)
        {
            signin_param += "&s_login_name_id=" + s_login_name_id;
            signin_param += "&s_signin_link_id=" + s_signin_link_id;
            signin_param += "&s_point_id=" + s_point_id;
            signin_param += "&s_point_place_id=" + s_point_place_id;
            signin_param += "&s_beginner_place_id=" + s_beginner_place_id;
            signin_param += "&s_relogin_place_id=" + s_relogin_place_id;
        }
        
        signin_frame.src = ddp_signin_url + "?" + signin_param;

        overlay_table_div.style.visibility = "visible";
        overlay_table_div.style.position = "absolute";
        overlay_table_div.style.top = "50px";
        overlay_table_div.style.width = getScrollWidth() + "px";

        overlay_div.style.visibility = "visible";
        overlay_div.style.height = getScrollHeight() + "px";
        overlay_div.style.width = (getScrollWidth() > 800) ? getScrollWidth() + "px" : "800px";
        
        hideSelectTags();
    }
}

/**
 * サインイン画面を非表示にする。
 */
function closeSigninDialog()
{
    var overlay_div = parent.document.getElementById("signin_overlay");
    var overlay_table_div = parent.document.getElementById("signin_overlay_table");

    if (overlay_div == null)
    {
        document.location = ddp_top_url;
        return;
    }
    if (overlay_div.style.visibility == "visible")
    {
        overlay_table_div.style.visibility = "hidden";
        overlay_div.style.visibility = "hidden";        
        showSelectTags();
    }    
}

/**
 * サインイン画面表示時にブラウザのサイズを変更した場合に表示位置を調整する。
 */
function resizeSigninDialog()
{
    var overlay_div = document.getElementById("signin_overlay");
    var overlay_table_div = document.getElementById("signin_overlay_table");
    
    if (overlay_div.style.visibility == "visible")
    {
        overlay_div.style.height = getScrollHeight() + "px";
        overlay_div.style.width = getScrollWidth() + "px";
        overlay_table_div.style.width = document.documentElement.clientWidth + "px";
    }
}

/**
 * サインイン処理を実行する。
 * JSONPによるサインインWebサービスを呼び出す。
 */
function signin()
{
    var user_id_obj = document.getElementById("UserID");
    var password_obj = document.getElementById("Password");
    var signin_obj = document.getElementById("DialogSignInButton");

    if ((!user_id_obj) || (user_id_obj.value == "") || (!password_obj) || (password_obj.value == ""))
    {
        alert("サインインに失敗しました。メールアドレスとパスワードを確認してください。");
        return;
    }
    
    var request_str  = rb_signin_url;
    request_str += "&u=" + encodeURIComponent(user_id_obj.value);
    request_str += "&p=" + SHA1(password_obj.value);
    request_str += "&url=" + ddp_top_url;
    request_str += "&ds=" + getUTCString();

    signin_obj.disabled = true;
    writeJsonpScript(request_str);    
}

/**
 * サインアウト処理を実行する。
 * サインイン状態を表すCookieを削除する。
 */
function signout()
{
    document.cookie = "rrbSTART=; domain=" + rb_cookie_domain + "; path=/";
    document.cookie = "rrbNORMAL=; domain=" + rb_cookie_domain + "; expires=Thu, 31-Dec-1998 15:00:00 GMT; path=/";
    document.cookie = "rrbSECURE=SESSIONID=; domain=" + rb_cookie_domain + "; path=/";
    document.cookie = "rrbANALYS=AnalysisNo=; domain=" + rb_cookie_domain + "; expires=Thu, 31-Dec-1998 15:00:00 GMT; path=/";

    var login_name = document.getElementById(login_name_id);
    //var signin_btn = document.getElementById(signin_button_id);
    var signin_link = document.getElementById(signin_link_id);
    var beginner_place = document.getElementById(beginner_place_id);
    var point_place = document.getElementById(point_place_id);

    login_name.innerHTML = "ゲスト";
    //signin_btn.src = "/common_001/images/header/btn-head-signin.gif";
    signin_link.innerHTML = "サインイン";
    beginner_place.style.display = "";
    point_place.style.display = "none";
    
    if(s_login_name_id != null)
    {
        var s_login_name = document.getElementById(s_login_name_id);
        var s_signin_link = document.getElementById(s_signin_link_id);
        var s_point = document.getElementById(s_point_id);
        var s_point_place = document.getElementById(s_point_place_id);
        var s_beginner_place = document.getElementById(s_beginner_place_id);
        var s_relogin_place = document.getElementById(s_relogin_place_id);
        
        s_login_name.innerHTML = "ゲスト";
        s_signin_link.innerHTML = "サインイン";
        s_point_place.style.display = "none";
        s_beginner_place.style.display = "";
        s_relogin_place.style.display = "none";
    }
    
//    if(document.getElementById('my_itinerary') != null)
//    {
//        doPostBackItinerary();
//    }
    
}

/**
 * サインインを表示した際に裏のSELECTタグを非表示にする。
 */
function hideSelectTags()
{

    SetSelectTagsVisibility( document,"hidden");
    
    // iframeのdocumentを取得
    for (j = 0; j < document.getElementsByTagName("iframe").length; j++)
    {
        var iframeDoc;
        if (document.all) 
        {
            iframeDoc= document.getElementsByTagName("iframe").item(j).contentWindow.document;
        }
        else
        {
            iframeDoc= document.getElementsByTagName("iframe").item(j).contentDocument;
        }
       
        SetSelectTagsVisibility(iframeDoc,"hidden");
    }
}

/**
 * サインイン画面を閉じた際に裏のSELECTタグを表示する。
 */
function showSelectTags()
{
    SetSelectTagsVisibility( parent.document,"visible");
    
    // iframeのdocumentを取得
    for (j = 0; j < parent.document.getElementsByTagName("iframe").length; j++)
    {
        var iframeDoc;
        if (document.all) 
        {
            iframeDoc= parent.document.getElementsByTagName("iframe").item(j).contentWindow.document;
        }
        else
        {
            iframeDoc= parent.document.getElementsByTagName("iframe").item(j).contentDocument;
        }
       
        SetSelectTagsVisibility(iframeDoc,"visible");
    }

}
/**
 * SELECTタグの表示・非表示を切り替える
 */
function SetSelectTagsVisibility(doc,value)
{
    for (i = 0; i < doc.getElementsByTagName("select").length; i++)
    {
        var selectTag = doc.getElementsByTagName("select").item(i);
        selectTag.style.visibility = value;
    }
}

/**
 * JSONP用スクリプトタグを追加する。
 * @param request_str サインインWebサービスを呼び出すためのリクエスト文字列
 */
function writeJsonpScript(request_str)
{
    var head_obj;
    var script_obj;

    var head_obj = document.getElementsByTagName("head").item(0);
    var script_obj = document.getElementById("JsonpScript");
    if (script_obj)
    {
        head_obj.removeChild(script_obj);
    }

    script_obj = document.createElement("script");
    script_obj.setAttribute("type", "text/javascript");
    script_obj.setAttribute("charset", "Shift_JIS");
    script_obj.setAttribute("src", request_str);
    script_obj.setAttribute("id", "JsonpScript");
    head_obj.appendChild(script_obj);
}

/**
 * サインインWebサービスのコールバック関数。
 * 綴りは誤りではない。
 * @param obj コールバック引数
 */
function member_Refulesh(obj)
{
    var login_name = parent.document.getElementById(login_name_id);
    var point = parent.document.getElementById(point_id);
    var point_place = parent.document.getElementById(point_place_id);
    //var parent_signin_btn = parent.document.getElementById(signin_button_id);
    var signin_link = parent.document.getElementById(signin_link_id);
    var beginner_place = parent.document.getElementById(beginner_place_id);
    var dialog_signin_btn = document.getElementById("DialogSignInButton");
    var member_info = eval(obj);

    // サインイン成功
    if (member_info["Rows"]["Count"] != "0")
    {
        if (login_name == null)
        {
            document.location = ddp_top_url;
            return;
        }

        if ( typeof(member_info["Rows"]["Injection"]) != "undefined" ){
            closeSigninDialog();
            var redirect_url = member_info["Rows"]["Injection"];
            parent.open(redirect_url, "_self");
            return;
        }

        // トップページの表示の書き換え
        login_name.innerHTML = member_info["Rows"]["LastName"];
        point.innerHTML = member_info["Rows"]["AllPoint"];
        point_place.style.display = "";
        //parent_signin_btn.src = "/common_001/images/header/btn-head-signout.gif";
        signin_link.innerHTML = "サインアウト";
        beginner_place.style.display = "none";
        
        if(s_login_name_id != null)
        {
            var s_login_name = parent.document.getElementById(s_login_name_id);
            var s_signin_link = parent.document.getElementById(s_signin_link_id);
            var s_point = parent.document.getElementById(s_point_id);
            var s_point_place = parent.document.getElementById(s_point_place_id);
            var s_beginner_place = parent.document.getElementById(s_beginner_place_id);
            var s_relogin_place = parent.document.getElementById(s_relogin_place_id);
            
            
            s_login_name.innerHTML = member_info["Rows"]["LastName"];
            s_point.innerHTML = member_info["Rows"]["AllPoint"];
            s_point_place.style.display = "";
            s_signin_link.innerHTML = "サインアウト";
            s_beginner_place.style.display = "none";
            s_relogin_place.style.display = "";
        }

        closeSigninDialog();
        
//        if(parent.document.getElementById('my_itinerary') != null)
//	    {
//	    	parent.document.getElementById('iti_member_login').click();
//	    }
	    
    }
    // サインイン失敗
    else if (member_info["Rows"]["ResultCode"] == "AB009520")
    {
    	var forget_url = document.getElementById("rb_forget_url");

        forget_url.innerHTML = "パスワードをお忘れの方（再設定）";
        
        alert("ログインエラーを10回繰り返したためロックされました。\n※解除にはパスワードの再設定が必要です。");
        dialog_signin_btn.disabled = false;
    }
    else
    {
    
        alert("サインインに失敗しました。メールアドレスとパスワードを確認してください。");
        dialog_signin_btn.disabled = false;
    }
}


/**
 * ブラウザのウィンドウ描画域の高さを取得する。
 * @return 描画域の高さのピクセル数
 */
function getScrollHeight()
{
    if (navigator.userAgent.indexOf("Safari") == -1)
    {
        return document.body.parentNode.scrollHeight;
    }
    else
    {
        return document.body.scrollHeight;
    }
}

/**
 * ブラウザのウィンドウ描画域の横幅を取得する。
 * @return 描画域の横幅のピクセル数
 */
function getScrollWidth()
{
    if (navigator.userAgent.indexOf("Safari") == -1)
    {
        return document.documentElement.clientWidth;
    }
    else
    {
        return window.innerWidth;
    }
}

// 現在時刻のUTC表記を取得

/**
 * 現在時刻のUTC表記を取得する。
 * @return 現在時刻のUTC表記
 */
function getUTCString()
{
    var date;
    var date_array;
    var utc_str;

    date = new Date();
    date_array = date.toUTCString().split(" ");
    
    utc_str = "";
    for (var i = 0; i < date_array.length; i++)
    {
        utc_str += date_array[i];
    }

    return utc_str;    
}

/**
 * 指定したキー名でCookieを取得する。
 * @param key Cookieのキー名
 */
function getRbCookie(key){
    if (document.cookie)
    {
        var cookies = document.cookie.split("; ");
        for (var i = 0; i < cookies.length; i++)
        {
            if (cookies[i].indexOf(key, 0) == 0)
            {
                return unescape(cookies[i]);
            }
        }
    }
    
    return null;
}
    
/**
 * SHA1用関数。
 */
function S(x, n)
{
    return ((x << n) | (x >>> (32-n)));
}

/**
 * SHA1用関数。
 */
function loop(V, w, t)
{
    V[0] = S(V[1],5) + V[5] + w;
    if (t < 20)
    {
        V[0] +=((V[2] & V[3]) | (~V[2] & V[4])) + 0x5A827999;
    }
    else if (t < 40)
    {
        V[0] +=(V[2] ^ V[3] ^ V[4]) + 0x6ED9EBA1;
    }
    else if (t < 60)
    {
        V[0] +=((V[2] & V[3]) | (V[2] & V[4]) | (V[3] & V[4])) + 0x8F1BBCDC;
    }
    else
    {
        V[0] +=(V[2] ^ V[3] ^ V[4]) + 0xCA62C1D6;
    }
    V.pop();
    V.unshift(0);
    V[3] = S(V[3], 30);
}

/**
 * SHA1用関数。
 */
function SHA1(message)
{
    var H =
    new Array(0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476,0xc3d2e1f0);
 
    var j = 0;
    var len = message.length;
    var W = new Array(16);
    var extended = 0;
    while (j <= len || extended != 3)
    {
        var V = new Array(0, H[0], H[1], H[2], H[3], H[4]);

        for (var i=0; i<16; i++)
        {
            var w=0;
            if (extended == 2 && i==15)
            {
                w = len * 8;
                extended = 3;
            }
            else if (extended != 1)
            {
                w = 0;
                for (var l=24; l>=0; l-=8)
                {
                    if (j<len)
                    {
                        w |= (message.charCodeAt(j) << l);
                        j++;
                    }
                    else if (j==len)
                    {
                        w |= 0x80 << l;
                        j++;
                        if (j % 64 <= 56)
                        {
                            extended = 2;
                        }
                        else
                        {
                            extended = 1;
                        }
                    }
                }
            }
            loop(V,w, i);
            W[i] = w;
        }
        if (extended != 3)
        {
            extended = 2;
        }

        for (var i=16; i<80; i++)
        {
            var n = i & 0xf;
            W[n] = S(W[(i-3)&0xf] ^ W[(i-8)&0xf] ^ W[(i-14)&0xf] ^ W[n], 1);
            loop(V, W[n], i);
        }

        for(var i=0; i<5; i++)
        {
            H[i] += V[i+1];
        }
    }
    return dump(H);
}

/**
 * SHA1用関数。
 */
function dump(H) {
    var line = "";
    for (var l=0; l<5; l++)
    {
        var right = (H[l] & 0xfffffff).toString(16);
        var left = (H[l]>>>28).toString(16);
        line+= left + "000000".substring(right.length-1) + right;
    }    
    return line;
}

/**
 * 日程表パネル非同期用ポストバックイベント。
 */
function doPostBackItinerary() {
    var idList = getTopIdList();
    var iti_panelId = idList["iti_panel"];
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm._doPostBack(iti_panelId, '');
}

function setPanelSignVariables(name,link,point,point_place,beginner,relogin)
{
     s_login_name_id = name;
     s_signin_link_id = link;
     s_point_id = point;
     s_point_place_id = point_place;
     s_beginner_place_id = beginner;
     s_relogin_place_id = relogin;
     
}

