/* ****************************************************************************
    Rewrite functions
 */


function htmlspecialchars(string){
  var table = [
    [/&/g, '&amp;'],
    [/</g, '&lt;'],
    [/>/g, '&gt;'],
    [/"/g, '&quot;'],
    [/'/g, '&#039;']
  ];
  for (var i in table) {
    string = string.replace(table[i][0], table[i][1]);
  }
  return string;
}


/*
    Rewrite library login area ( <div id="login"> .. </div> )
*/
function library_login(l,u) {
    var _url = htmlspecialchars(location.href);
    //alert(_url);
    f = 'LB';
    if (l == '1') {
        document.getElementById('login').innerHTML =
          'ようこそ' + '&nbsp;' + '<b>' + u + '</b>' + '&nbsp;' + 'さん' + '<br>' +
          '<a href="' + user_url(f,_url) + '">' + '会員情報変更' + '</a>' + '&nbsp;｜&nbsp;' +
          '<a href="' + logout_url(f,_url) + '">' + 'ログアウト' + '</a>';
    }
    else {
        document.getElementById('login').innerHTML =
          '<b>ゲスト</b>&nbsp;さん<br>' +
          '<a href=http://passport.vector.co.jp/>' + '新規登録' + '</a>' + '&nbsp;｜&nbsp;' +
          '<a href="' + login_url(f,_url) + '">' + 'ログイン'+ '</a>';
    }
}


/*
    Rewrite shop login area ( <div id="login"> .. </div> )
*/
function shop_login(l,u) {
    var _url = htmlspecialchars(location.href);
    f = 'RG';
    if (l == '1') {
        document.getElementById('login').innerHTML =
          'ようこそ' + '&nbsp;' + '<b>' + u + '</b>' + '&nbsp;' + 'さん' + '<br>' +
          '<a href="' + user_url(f,_url) + '">' + '会員情報変更' + '</a>' + '&nbsp;｜&nbsp;' +
          '<a href="' + logout_url(f,_url) + '">' + 'ログアウト' + '</a>';
    }
    else {
        document.getElementById('login').innerHTML =
          '<b>ゲスト</b>&nbsp;さん<br>' +
          '<a href=http://passport.vector.co.jp/>' + '新規登録' + '</a>' + '&nbsp;｜&nbsp;' +
          '<a href="' + login_url(f,_url) + '">' + 'ログイン'+ '</a>';
    }
}

/*
    Rewrite games login area ( <div id="login"> .. </div>, <div id="user_name"> .. </div> )
*/
function games_login(l,u) {
    var _url = htmlspecialchars(location.href);
    f = 'GM';
    if (l == '1') {
        document.getElementById('user_name').innerHTML =
          'ようこそ' + '&nbsp;' + '<b>' + u + '</b>' + '&nbsp;' + 'さん';

        document.getElementById('login').innerHTML = 
          '<a href="' + logout_url(f,_url) +
          '" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'logout\',\'\',\'/games/commonimages/headder/hd_vpass_logout_b.gif\',0)">' +
          '<img src="/games/commonimages/headder/hd_vpass_logout.gif" alt="ログアウト" name="logout" width="84" height="28" border="0">' +
          '</a>';
    }
    else {
        document.getElementById('login').innerHTML = 
          '<a href="' + login_url(f,_url) +
          '" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'login\',\'\',\'/games/commonimages/headder/hd_vpass_login_b.gif\',0)">' +
          '<img src="/games/commonimages/headder/hd_vpass_login.gif" alt="ログイン" name="login" width="84" height="28" border="0">' +
          '</a>';
    }
}


/* ****************************************************************************
    URL functions
 */

/*
    Return passport login url

    @param f service id
    @param v return url
*/
function login_url(f,v)
{
  return 'http://passport.vector.co.jp/passport/passport.php?p=VP_PROC_LOGIN_ENTRY' +
         '&f=' + f +
         '&v=' + v;
}

/*
    Return passport profile url

    @param f service id
    @param v return url
*/
function user_url(f,v)
{
  return 'https://passport.vector.co.jp/passport/passport.php?p=VP_PROC_MODIFY_MENU' +
         '&f=' + f +
         '&v=' + v;
}

/*
    Return passport logout url

    @param f service id
    @param v return url
*/
function logout_url(f,v)
{
  return 'http://passport.vector.co.jp/passport/passport.php?p=VP_PROC_LOGOUT' +
         '&f=' + f +
         '&v=' + v;
}

/* ****************************************************************************
    Sync(SSI) functions
 */

/*
    Passport login status check

    @param f service id
    @param l login status
    @oaram u uid
*/
function login_check(f,l,u) { vp_check(f,l,u); }
function vp_check(f,l,u)
{
    switch (f) {
    case 'LB':
        library_login(l,u);
        break;

    case 'GM':
        games_login(l,u);
        break;

    case 'RG':
        shop_login(l,u);
        break;
    }
}

/* ****************************************************************************
    Async functions
 */

var req = '';
var cb = '';

/*
    Passport login status check in async

    @param cb_func callback function ( eval(cb_func(login,uid)) )
*/
function vp_async_check(cb_func) {
    cb = cb_func;
    url = location.hostname == 'shop.vector.co.jp'
          ? 'http://shop.vector.co.jp/service/servlet/System.getUID'
          : '';
    if (url != '') {
        loadXMLDoc(url);
    }
}

/*
    Method handler: getUID

    @param res (uid);
*/
function getUID(res)
{
    req = '';
    if (cb != '') {
        u = res;
        l = res != ''? '1': '0';
        eval(cb + '(l,u)');
    }
}


/*
    Load XML document in async
*/
function loadXMLDoc(url)
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open('GET', url, true);
        req.setRequestHeader('Cookie', document.cookie);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject('Microsoft.XMLHTTP');
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open('GET', url, true);
            req.setRequestHeader('Cookie', document.cookie);
            req.send();
        }
    }
}

/*
    Event handler : onreadystatechange
*/
function processReqChange()
{
//  alert (req.readyState);
    // only if req shows "complete"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            response = req.responseXML.documentElement;
            if (response != null) {
                method = "";
                result = "";
                node = response.getElementsByTagName('method')[0].firstChild;
                if (node != null) {
                    method = node.data;
                    node = response.getElementsByTagName('result')[0].firstChild;
                    if (node != null) {
                        result = node.data;
                    }
                    eval(method + '(result)');
                }
            }
            else {
//             alert("There was a problem pasing the XML data:\n");
            }
        } else {
//          alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}

