geisha/public/js/functions/functions.js

2440 lines
92 KiB
JavaScript
Raw Normal View History

2026-07-18 21:44:11 +02:00
// エラー処理ステータス定数
var ERROR_NOT_PROCESSED = 0;
var ERROR_MESSAGE_SHOWN = 1;
// タイムアウト(ミリ秒)
var TIMEOUT = 60000;
var isUserOperationEnabled;
var isAjaxFailToCloseInThisPage;
// メニューバーのBボタン押下時描画反転反映のための時間。
var MENUBAR_B_BOUNCE = 300;
// price functions
function isPositivePrice(price){
if(price != null){
if(price.match(/^[0-9]+[\.]?[0-9]*$/) !== null){
return true;
}
}
return false;
}
function isNegativePrice(price){
if(price != null){
if(price.match(/^-[0-9]+[\.]?[0-9]*$/) !== null && !isZeroPrice(price)){
return true;
}
}
return false;
}
function isZeroPrice(price){
if(price != null){
return price.match(/^[-]?[0]+[\.]?[0]*$/) !== null;
}else{
return false;
}
}
function priceAbs(price){
if(isZeroPrice(price)){
return price;
}else if(isPositivePrice(price)){
return price;
}else if(isNegativePrice(price)){
return price.slice(1);
}else{
return null;
}
}
function getDecimalPoint(price){
if(price.indexOf(".")>=0)
return (price.length-1) - price.indexOf(".");
return 0;
}
function getPaddingInt(price, digit_point){
var res = price.replace('.','');
for(var i=0; i<digit_point; i++){
res += '0';
}
return parseInt(res, 10);
}
function addDot(price, decimal_point){
var price_abs = priceAbs(price);
var res = price_abs;
if(decimal_point>0){
if(price_abs.length <= decimal_point){
var top = '0.';
for(var i=0; i<(decimal_point-price_abs.length); i++){
top += '0';
}
res = top + price_abs;
}else{
var idx = price_abs.length - decimal_point;
res = price_abs.substring(0,idx) + '.' + price_abs.substring(idx);
}
}
if(isNegativePrice(price)){
res = '-' + res;
}
return res;
}
function priceAdd(price1, price2){
p1_abs = priceAbs(price1);
p2_abs = priceAbs(price2);
if(p1_abs == null || p2_abs == null)
return null;
p1_negative = isNegativePrice(price1);
p2_negative = isNegativePrice(price2);
var digits1 = getDecimalPoint(p1_abs);
var digits2 = getDecimalPoint(p2_abs);
var max_digits = Math.max(digits1, digits2);
// 小数点を消し、桁を揃えた整数を作る
var p1_pad_int = getPaddingInt(p1_abs.replace('.',''), max_digits-digits1);
var p2_pad_int = getPaddingInt(p2_abs.replace('.',''), max_digits-digits2);
var result_int = ((p1_negative)?-1:1)*p1_pad_int + ((p2_negative)?-1:1)*p2_pad_int;
var result_str = String(result_int);
// 結果に小数点を付けて返す
result_str = addDot(result_str, max_digits);
return result_str;
}
function priceSub(price1, price2){
var price2_inv;
if(isNegativePrice(price2)){
price2_inv = price2.slice(1);
}else if(isPositivePrice(price2)){
price2_inv = '-' + price2;
}
if(price2_inv !== undefined){
return priceAdd(price1, price2_inv);
}else{
return null;
}
}
//クイックソート
function quickSort(order_arr,left,right){
var i = left;
var j = right;
var pivot = order_arr[Math.floor((left + right) / 2)];
var temp;
while(true){
while (order_arr[i] < pivot) i++;
while (pivot < order_arr[j]) j--;
if (i >= j) break;
temp = order_arr[i];
order_arr.splice(i,1,order_arr[j]);
order_arr.splice(j,1,temp);
i++;
j--;
}
if(left<i-1) quickSort(order_arr,left,i-1);
if(j+1<right) quickSort(order_arr,j+1,right);
return order_arr.join(',');
}
//メニューバー
function MenuBar(screen_type,ref,replace_flg){
"use strict";
//表示メニュー出しわけ
/**
* @param screen_type
* 1,指定なし => デフォルト
* 2 => トップページ
* 3 => メニュー
* 4 => 残高
* 5 => 検索
* 6 => 購入
* @param ref
* リファラーURL
* @param replace_flg
* true => ジャンプ時に履歴を残さないようにする
*/
var self = this;
this.referrer =undefined;
if(ref!==undefined){
self.referrer = ref;
}
var type = screen_type;
var x_btn = true;
var y_btn = true;
var b_btn = true;
var plus_btn = true;
var minus_btn = true;
this.init = function(type){
//タップイベント初期化
$('#top_link_01 > div').unbind();
$('#top_link_03 > div').unbind();
$('#top_link_02 > div').unbind();
$('#top_link_03 > div').unbind();
$('#top_link_04 > div').unbind();
$('#top_link_05 > div').unbind();
$('#top_link_07 > div').unbind();
$('#top_link_07').unbind();
switch(type){
case 1:
//デフォルト(その他)
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').show();
$('#top_link_06').hide();
$('#top_link_07').hide();
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_02, #top_link_03, #top_link_04').removeClass('off');
$('#top_link_02 > div').data('href','always01_01.html').addClass('se');
$('#top_link_03 > div').data('href', '').addClass('se');
$('#top_link_04 > div').data('href','always02_01.html').addClass('se');
break;
case 2:
//トップページ
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').hide();
$('#top_link_06').show();
$('#top_link_07').hide();
$('#top_link_01').removeClass('off').addClass('on');
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_01 > div').removeAttr('data-href').removeClass('se');
x_btn = false;
b_btn = false;
break;
case 3:
//メニュー
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').show();
$('#top_link_06').hide();
$('#top_link_07').hide();
$('#top_link_02').removeClass('off').addClass('on');
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_02 > div').removeAttr('data-href').removeClass('se');
y_btn = false;
break;
case 4:
//残高
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').show();
$('#top_link_06').hide();
$('#top_link_07').hide();
$('#top_link_02, #top_link_04').removeClass('on').addClass('off');
$('#top_link_03').removeClass('off').addClass('on');
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_02 > div').removeAttr('data-href').removeClass('se');
$('#top_link_03 > div').removeAttr('data-href').removeClass('se');
$('#top_link_04 > div').removeAttr('data-href').removeClass('se');
y_btn = false;
plus_btn = false;
minus_btn = false;
break;
case 5:
//検索
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').show();
$('#top_link_06').hide();
$('#top_link_07').hide();
$('#top_link_04').removeClass('off').addClass('on');
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_04 > div').removeAttr('data-href').removeClass('se');
minus_btn = false;
break;
case 6:
//同じページ中でメニューボタンを書き替えて無効にした場合、
//aタグのタッチエフェクトが残ってしまう問題があるため、
//メニューのhtmlを挿入し直すことで暫定対処する。
$('#sel_menu_bar').html($('#sel_menu_bar').html());
//購入
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').show();
$('#top_link_06').hide();
$('#top_link_07').hide();
$('#top_link_02, #top_link_03, #top_link_04').removeClass('on').addClass('off');
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_02 > div').removeAttr('data-href').removeClass('se');
$('#top_link_03 > div').removeAttr('data-href').removeClass('se');
$('#top_link_04 > div').removeAttr('data-href').removeClass('se');
y_btn = false;
plus_btn = false;
minus_btn = false;
break;
case 7:
//閉じる
$('#top_link_01').hide();
$('#top_link_02').hide();
$('#top_link_03').hide();
$('#top_link_04').hide();
$('#top_link_05').hide();
$('#top_link_06').hide();
$('#top_link_07').show();
$('#ft_navi').removeAttr('id');
x_btn = false;
y_btn = false;
plus_btn = false;
minus_btn = false;
break;
case 8:
//購入完了
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').hide();
$('#top_link_06').show();
$('#top_link_07').hide();
$('#top_link_02, #top_link_03, #top_link_04').removeClass('on').addClass('off');
$('#sel_menu_bar').children().attr('id','ft_navi');
$('#top_link_02 > div').removeAttr('data-href').removeClass('se');
$('#top_link_03 > div').removeAttr('data-href').removeClass('se');
$('#top_link_04 > div').removeAttr('data-href').removeClass('se');
y_btn = false;
plus_btn = false;
minus_btn = false;
b_btn = false;
break;
default:
//デフォルト(その他)
$('#top_link_01').show();
$('#top_link_02').show();
$('#top_link_03').show();
$('#top_link_04').show();
$('#top_link_05').show();
$('#top_link_06').hide();
$('#top_link_07').hide();
$('#sel_menu_bar').children().attr('id','ft_navi');
break;
}
// Mii画像のセット
var ninja = getNinjaSession();
var mii = ninja ? ninja.mii : null;
if (mii && mii.icon_url) {
$('#top_link_02 img').attr('src', mii.icon_url);
}
//閉じるボタンに対するサウンドイベントのセット
if(type===7){
$('#top_link_07').buttonAClick().click(function(){
if(isWiiU) {
wiiuSound.playSoundByName('SE_WAVE_BACK', 1);
}
});
}
//残高取得
getBalance();
//あなただけ割引アテンションを表示
var $attention_area = $('#ft_navi .menu span');
if ($.sessionStorage().getItem('has_unread_owned_coupon') === 'true') {
$attention_area.addClass('attention-mark');
} else {
$attention_area.removeClass('attention-mark');
}
if(x_btn) {
$('#top_link_01 > div').click(function(e){
e.preventDefault();
location.href = $(this).data('href');
});
}
if(y_btn) {
$('#top_link_02 > div').click(function(e){
e.preventDefault();
if(replace_flg){
location.replace($(this).data('href'));
}else{
location.href = $(this).data('href');
}
});
}
//残高ボタンをメニューから直接押した場合は、リファラ情報を消す(BTS-895)
if(plus_btn){
$('#top_link_03 > div').click(function(e){
$.sessionStorage().removeItem('buying_section');
$.sessionStorage().removeItem('money_referrer');
e.preventDefault();
if(replace_flg){
location.replace("money01_01.html");
}else{
location.href = "money01_01.html";
}
});
}
if(minus_btn) {
$('#top_link_04 > div').click(function(e){
e.preventDefault();
if(replace_flg){
location.replace($(this).data('href'));
}else{
location.href = $(this).data('href');
}
});
}
//ボタンイベント
$('body').buttonX(function() {
if(x_btn) {
if(isWiiU) {
wiiuSound.playSoundByName('SE_WAVE_HWKEY_MENU_TRG', 1);
}
$('#top_link_01 > div').click();
}
}).buttonY(function() {
if(y_btn) {
if(isWiiU) {
wiiuSound.playSoundByName('SE_WAVE_HWKEY_MENU_TRG', 1);
}
$('#top_link_02 > div').click();
}
}).buttonPlus(function() {
if(plus_btn) {
if(isWiiU) {
wiiuSound.playSoundByName('SE_WAVE_HWKEY_MENU_TRG', 1);
}
$('#top_link_03 > div').click();
}
}).buttonMinus(function() {
if(minus_btn) {
if(isWiiU) {
wiiuSound.playSoundByName('SE_WAVE_HWKEY_MENU_TRG', 1);
}
$('#top_link_04 > div').click();
}
});
};
//戻るボタンイベント
this.initBackEvt = function(ref){
if(!b_btn) {
return;
}
function navigate() {
//戻る先がリファラーの場合
if (ref!==undefined) {
location.replace(ref);
} else {
historyBack();
}
}
var self = this;
var $back = $('#top_link_05 > div').unbind();
$('body').buttonB(function() {
if(isWiiU) {
wiiuSound.playSoundByName('SE_WAVE_HWKEY_MENU_TRG', 1);
wiiuSound.playSoundByName('SE_WAVE_BACK', 1);
}
self.applyButtonBEffect(navigate);
});
$back.click(function(e){
e.preventDefault();
self.applyButtonBEffect(navigate);
});
this.setTouchEvents();
};
this.changeBackEvt = function(callback, arg){
var self = this;
var $body = $('body');
var $back = $('#top_link_05').removeClass('on');
$body.unbind('keydown').buttonB(function() {
self.applyButtonBEffect();
});
self.init(self.type);
self.setTouchEvents();
return callback(arg);
};
// Bボタン押下時の反転描画
// legal07_02、money04_01など、changeBackEvtでBボタンをカスタマイズしてる場合にも呼び出し。
this.applyButtonBEffect = function(callback) {
var $back = $('#top_link_05').addClass('on');
setTimeout(function() {
$back.removeClass('on');
if (typeof callback === 'function') {
callback();
}
}, MENUBAR_B_BOUNCE);
};
// メニューバーは空間ナビを当てないため、clickイベントなどの付与が必要。
this.setTouchEvents = function() {
var self = this;
var buttons = $('#sel_menu_bar').find('[data-href]');
buttons.each(function(i, button) {
var $el = $(button);
$el.on('click', function(e) {
$el.parent().addClass('on');
var url = $el.data('href');
if (url && url !== '#') {
location.href = url;
}
}).on('touchstart', function(e) {
$el.parent().addClass('on');
wiiuSound.playSoundByName('SE_WAVE_HWKEY_MENU_TRG', 1);
}).on('touchend', function(e) {
$el.parent().removeClass('on');
});
});
};
this.init(type);
this.initBackEvt(self.referrer);
}
/**
* function getBalance
* 残高取得保存
*
* @param {object} element jQueryセレクター
*
*/
function getBalance(element, async_flg) {
if ($.sessionStorage().getItem('balance') != null && $.sessionStorage().getItem('balance_raw') != null) {
var balance = $.sessionStorage().getItem('balance');
//メキシコ$の場合はスペースを挿入
var amount;
if(country==='MX'){
amount = balance.replace('MX$','MX$ ');
}else{
amount = balance;
}
$('#balance').text(amount);
if (element) {
var selector = element;
selector.text(amount);
}
} else {
var async = true;
if(async_flg !== undefined){
async = async_flg;
}
// 残高表示
$.ajaxExt({
url : ninjaBase + 'ws/my/balance/current',
type : 'GET',
data : {'lang' : lang},
async : async,
dataType : 'xml',
xhrFields: {
withCredentials: true
},
error: function(xhr, text){
var error_code = $(xhr.responseText).find('code').text();
var error_msg = $(xhr.responseText).find('message').text();
setErrorHandler(prefixNinja, error_code, error_msg);
},
success : function(xml, status) {
if (status != 'success') return;
var amount;
//メキシコ$の場合はスペースを挿入
if(country==='MX'){
amount = $(xml).find('amount').text().replace('MX$','MX$ ');
}else{
amount = $(xml).find('amount').text();
}
$.print('SUCCESS getBalance() async='+async);
$.sessionStorage().setItem('balance', amount);
$.sessionStorage().setItem('balance_raw', $(xml).find('raw_value').text());
$('#balance').text($.sessionStorage().getItem('balance'));
if (element) {
var selector = element;
selector.text(amount);
}
}
});
}
}
function split_print(str){
// wiiuDebug.print での出力文字数制限回避
var temp_str = str;
var NUM = 200;
while (temp_str){
$.print(temp_str.substr(0, NUM));
temp_str = temp_str.substr(NUM);
}
}
//ninjaセッション保持
function sessionKeepAlive(){
//更新頻度
var interval = 3600000;//ミリ秒
//更新フラグ
var update_flg = false;
//現在日時取得
var current_time = new DateWrapper().getUTC();
//更新判定
if($.sessionStorage().getItem('keep_alive_modified')!==null){
//前回更新有
var last_time = Number($.sessionStorage().getItem('keep_alive_modified'));
if((current_time-last_time) > interval){
update_flg = true;
}
}else{
//初回更新
update_flg = true;
}
if(update_flg){
//残高更新
$.sessionStorage().removeItem('balance');
$.sessionStorage().removeItem('balance_raw');
getBalance();
$.print('session keep alive update');
//更新日時を保存
$.sessionStorage().setItem('keep_alive_modified', String(current_time));
}
}
//切断やタイムアウトのなどの共通エラーハンドリングを行うajax関数のラッパー
var ajax_request_aborted = false; //エラーを2回以上表示させないためのフラグ
var ignore_ajax_error = false;
$.ajaxExt = function(obj){
var error_func = obj.error;
//Ajax中にページ遷移が発生した場合はリクエストを全てabortする
obj.beforeSend = function(xhr) {
$(window).bind('beforeunload', function(){
$.print('[Ajax Warning] request cancelled by user operation. url='+obj.url);
xhr.abort();
});
};
obj.error = function(xhr, text){
$.print("handleAjaxError(old) called:");
$.print(" - xhr.readyState: " + xhr.readyState);
$.print(" - text: " + text);
$.print(" - statusText: " + xhr.statusText);
$.print(" - url: " + obj.url);
$.print(" - data: " + JSON.stringify(obj.data));
//ユーザキャンセルによりabortした後で稀に発生する場合がある。このエラーは無視する。
if(xhr.readyState===0 && text==='abort'){
$.print('[Ajax Error] request aborted: url=' + obj.url + ' text='+text+' statusText=' + xhr.statusText);
xhr.abort();
//タイムアウトまたは接続断
}else if(xhr.readyState===0){
if(text==='timeout'){
//タイムアウト
$.print('[Ajax Error] Timeout occurred: url=' + obj.url + ' text='+text+' statusText=' + xhr.statusText);
}else{
//接続断などでブラウザ側でキャンセルされた場合
$.print('[Ajax Error] request cancelled: url=' + obj.url + ' text='+text+' statusText=' + xhr.statusText);
}
//初回起動シーケンスでタイムアウト系エラーが発生した場合はアプリを終了する
if(isAjaxFailToCloseInThisPage === true){
// エラー終了
$.showError(errorCodeCloseApplication);
if(isWiiU) {
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
wiiuBrowser.jumpToHomeButtonMenu();
}
return;
}
//タイムアウト系エラーは2回以上連続表示させない
if(!ajax_request_aborted && !ignore_ajax_error){
$.showError(errorCodeRetriable);
}
//ホームボタンが禁止されている場合があるので解除する
enableHomeButton();
//トップ遷移前に他のボタンを押されないようにユーザ操作を禁止する
disableUserOperation();
location.href='./#top';
ajax_request_aborted = true;
xhr.abort();
//残りの処理が実行されて問題が起きないように、例外を発生させてスクリプトの実行を停止する
throw new Error('Exception to stop the script in this page.');
//503エラー
}else if(xhr.status === 503){
$.showError(errorCodeUnderMaintenance);
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
wiiuBrowser.jumpToHomeButtonMenu();
}else{
error_func(xhr, text);
}
};
$.ajax(obj);
}
$.getXml = function(obj,flg){
var defer = $.Deferred();
var url;
var type;
var data;
var async;
url = obj.url;
type = obj.type;
data = obj.data;
if(flg){
async = true;
}else{
async = false;
}
var isNinja = url.indexOf(ninjaBase) === 0;
$.ajaxExt({
url:url,
type:type,
data : data,
dataType:'xml',
async: async,
success: defer.resolve,
xhrFields: {
withCredentials: isNinja
},
error: defer.reject,
complete: obj.complete
});
return defer.promise();
};
/**
*
* JS拡張のエラーチェックを行うエラーが起きたら終了する
*
* @param resultObject js拡張のレスポンスのJSONオブジェクトエラー時はerror.codeが存在する
*/
function processJsxError(resultObject) {
if(resultObject===undefined){
return;
}
if(isWiiU && resultObject.error) {
enableHomeButton();
enableUserOperation();
var error_code = resultObject.error.code;
// 特定のコードではダイアログを出さない
// SEE #10890
if (error_code === 1050606 || // 追加コンテンツが壊れているため
// 登録が出来ません。
error_code === 1114640 // 同じソフトのほかの追加コンテンツが
// インストールに失敗しているため、
) {
return;
}
$.showError(error_code);
/**
* 特定のコードではダイアログを出した後にそのまま進める
* SEE #4997
*/
if (error_code === 1114550) {
return;
}
/** JS
* 正しいくつかのエラーコードに関しては特別に history back する
* レスポンスの retriable フラグでこれを判別しようという話も
* あったが使われ無さそうという事で無くなった
* SEE #3573
*/
$.print('processJsxError: error=' + error_code);
var shutdown = true;
if (
error_code === 1114641 || // このソフトの別の追加コンテンツが
// インストール準備中かインストール中
error_code === 1114692 || // 登録済みタスクがエラー
error_code === 1114693 // このソフトの別の追加コンテンツが
// インストール準備中かインストール中
) {
shutdown = false;
}
if (shutdown) {
wiiuBrowser.jumpToHomeButtonMenu();
} else {
historyBack();
}
}
}
// JS 拡張の結果オブジェクトを受け取って、AOC破損を表す
// エラーかどうかを判定する。SEE #10890, #11202
function isAOCBroken(response) {
if (!response || !response.error) {
$.print('isAOCBroken: false');
return false;
}
if (response.error.code === 1050606 ||
response.error.code === 1114640) {
$.print('isAOCBroken: true');
return true;
}
$.print('isAOCBroken: false');
return false;
}
/**
* リトライ可能判定付きのJS拡張のエラーチェックを行う
* リトライ不可エラーが起きたら終了するリトライ可能エラーが起きたらtrueを返す
*
* @param resultObject js拡張のレスポンスのJSONオブジェクトエラー時はerror.codeが存在する
* @return リトライ可能エラーの場合 true
*/
function processJsxRetriableError(resultObject) {
if(resultObject===undefined){
return true;
}
if(isWiiU && resultObject.error) {
enableHomeButton();
enableUserOperation();
$.showError(resultObject.error.code);
if(resultObject.retry) {
return true;
} else {
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
wiiuBrowser.jumpToHomeButtonMenu();
}
}
return false;
}
/**
* エラーのメッセージ表示処理を行う
*
* @param prefix 3桁のサーバエラーのprefixcodeを7桁指定する場合は無視される
* @param code エラーコード (4桁のサーバエラーコードまたは7桁のエラーコード)
* @param msg エラーメッセージ
* @param callback エラー表示後に処理を返すcallback関数引数に処理ステータスが入る
*
*/
function setErrorHandler(prefix,code,msg,callback){
$.print('[setErrorHandler]prefix='+prefix+',code='+code+',msg='+msg);
var error_code = code;
var error_msg = msg;
var prefix_code;
if(prefix!==undefined){
prefix_code = prefix;
}else{
prefix_code = prefixOther;
}
if(code!==undefined && code.length == 7){
//7桁のエラーコードはJS拡張エラーとしてprefixをつけない
prefix_code = '';
}
var top_redirector = function() {
location.href = 'index.html#top';
throw new Error('error top_redirector stopper');
};
/*
* [error_type]
* 1 -> 汎用2
* 2 -> 専用2
* [code_display]
* 0 -> 非表示
* 1 -> 表示
* [dialog_type]
* 1 -> ボタン付きダイアログ(confirm) -> callbackに処理させる
* 2 -> 通常ダイアログ(showerror)
*/
var difine_code = [];
difine_code['3011'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['3021'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3025'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3026'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3027'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3028'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3051'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3052'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3053'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3054'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3055'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3056'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3057'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3058'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3100'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3101'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3102'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3103'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3104'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3105'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3106'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3107'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3108'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3109'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3110'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3111'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3112'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3113'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3114'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3115'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3116'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3117'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3118'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3120'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3121'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2};
difine_code['3122'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2};
difine_code['3123'] = {'error_type': 1, 'code_display': 0, 'dialog_type': 2};
difine_code['3124'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 1};
difine_code['3125'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['3150'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3151'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3152'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3153'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3154'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2};
difine_code['3155'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2};
difine_code['3160'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3161'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3170'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['3171'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2};
difine_code['3180'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['3190'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 1};
difine_code['3191'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3200'] = {'error_type': 1, 'code_display': 0, 'dialog_type': 2};
difine_code['3210'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3260'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3261'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3262'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3263'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3264'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3265'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3266'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3267'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3268'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3271'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3301'] = {'error_type': 2, 'code_display': 0, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['3278'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['3279'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['5997'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['6542'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6561'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6568'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6591'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['6635'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['6644'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['6804'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6805'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6810'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['6811'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6812'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6813'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6814'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['6815'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6830'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['6831'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['6834'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6835'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6836'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6837'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6838'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6941'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6942'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6943'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['6989'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7401'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7402'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['7403'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7499'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7501'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7503'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7506'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['7507'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7509'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['7510'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['7511'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7514'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7515'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['7516'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7519'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7530'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7532'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['7534'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['7535'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['7536'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['7537'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9001'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9003'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9006'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9007'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9009'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['9010'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['9011'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9014'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9015'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9019'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9030'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9032'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9034'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9035'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2, 'common_callback': top_redirector};
difine_code['9036'] = {'error_type': 2, 'code_display': 1, 'dialog_type': 2};
difine_code['9037'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9600'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9601'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9610'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9611'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9612'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9613'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9614'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9615'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9620'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9621'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9630'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9631'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9632'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9640'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9641'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
difine_code['9642'] = {'error_type': 1, 'code_display': 1, 'dialog_type': 2};
//エラーパターン取得
var define = difine_code[error_code];
if(define !== undefined){
if(define.dialog_type === 1) {
// 2択の場合は共通処理でボタンテキストを処理できないので、呼び出し元に任せる
// この場合callbackの指定は必須
return callback(ERROR_NOT_PROCESSED);
}
if(define.code_display===1){
// エラーコード表示なのでshowErrorを使う
if((error_code!=='' && error_code!==undefined)){
if((error_msg!=='' && error_msg!==undefined)){
$.showError(prefix_code+error_code,error_msg);
}else{
$.showError(prefix_code+error_code);
}
if(define.common_callback!==undefined){
//共通のコールバックがある場合はそちらを実行する
return define.common_callback(ERROR_MESSAGE_SHOWN);
}else if(callback!==undefined) {
return callback(ERROR_MESSAGE_SHOWN);
}else {
return;
}
}else{
//エラーコード表示なのに2択だったりエラーコードがないのは、予期しない状態なのでエラー終了する
$.print('[ERROR] error code is not defined.');
$.showError(errorCodeCloseApplication);
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
wiiuBrowser.jumpToHomeButtonMenu();
}
}else{
// エラーコードは出さないので無視する
if((error_msg!=='' && error_msg!==undefined)){
if(callback!==undefined) {
//エラーコード非表示のエラー表示は呼び出し元に任せる
return callback(ERROR_NOT_PROCESSED);
}else {
return;
}
}else{
//エラーメッセージがないのは予期しない状態なのでエラー終了する
$.print('[ERROR] error message is not defined.');
$.showError(errorCodeCloseApplication);
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
wiiuBrowser.jumpToHomeButtonMenu();
}
}
}
//定義済みエラーパターンに該当しない場合 (終了するエラー)
$.print('[ERROR] error code is not defined.(error code not display)');
if(error_code === '3010'){
//セッション切れエラー
error_msg = $('#dialog_msg_invalid_session').text();
if(error_msg != '') {
$.showError(prefix_code+error_code, error_msg);
} else {
// エラーメッセージがとれずにこのエラーが発生することがあるらしいので、workaround
$.showError(errorCodeCloseApplication);
}
}else if((error_code!=='' && error_code!==undefined) && (error_msg!=='' && error_msg!==undefined)){
// エラーコード、エラーメッセージがセットで指定されるパターン
$.showError(prefix_code+error_code,error_msg);
}else if((error_code!=='' && error_code!==undefined) && (prefix_code !== prefixSamurai && prefix_code !== prefixNinja)){
// エラーコードのみ、メッセージはエラービューアもち、のパターン
$.showError(prefix_code+error_code);
}else{
$.showError(errorCodeCloseApplication);
}
if(isWiiU){
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
// 古いクライアント1.6NUP以前)がアクセスしてく可能性があるので、
// jumpToHomeButtonMenu が無い場合には closeApplication する
if (wiiuBrowser.jumpToHomeButtonMenu) {
wiiuBrowser.jumpToHomeButtonMenu();
} else {
wiiuBrowser.closeApplication();
}
}else{
//セッション切れエラーはトップに行っても無限ループしてしまうので止める
if(error_code != '3010') {
location.href="./#top";
}
}
}
function setPlaceholder(elm,str){
var element = elm;
var placeholder = str;
if($(element).is('input[type="text"]')){
$(element).attr('value',placeholder);
$(element).focus(function (){
if ( $(this).val() === placeholder ) {
$(this).val('');
}
});
$(element).blur(function (){
if ( $(this).val() === '' ) {
$(this).val(placeholder);
}
});
}
}
/*
* 同一HTML上で画面を切替える
* 引数に画面id名を配列で指定する
* 切り替える画面要素はidで指定すること
*/
function SwitchScreen(array){
var self = this;
this.screen = [];
if($.isArray(array) && array.length >0){
$.each(array,function(key,value){
self.screen[key] = value;
});
}
this.change = function(name){
$.each(self.screen,function(key,value){
if(value==name){
$('#'+name).show();
}else{
$('#'+value).hide();
}
});
$('html,body').animate({ scrollTop: $('html,body').offset().top }, 0);
};
}
// メッセージ差し込み
function localize(resourceKey, enable_uo) {
if(enable_uo === undefined){
enable_uo = true;
}
$.ajaxExt({
type : 'GET',
url : './message/messages-' + resourceKey + '.xml',
dataType : 'xml',
async: false,
error: function(xhr, text) {
if(enable_uo) {
enableUserOperation();
enableHomeButton();
}
if(xhr.readyState===0 && text!=='timeout'){
xhr.abort();
} else {
enableUserOperation();
//メッセージがとれないのは予期しない状態なのでエラー終了にする
$.showError(errorCodeCloseApplication);
if(isWiiU) {
// functions.js内はTimeout入れた挙動が呼び出し元に依存するため、入れない
wiiuBrowser.jumpToHomeButtonMenu();
}
}
},
success : function(data) {
$('entry', data).each(function() {
$('[data-message="' + $(this).attr('key') + '"]', document).html($(this).text());
});
$('#wrap').show();
if(enable_uo){
enableUserOperation();
enableHomeButton();
}
}
});
}
//ショップ用リージョン取得
function getShopRegion(){
setCountryInfo();
var region;
if(country === 'AU' || country === 'NZ'){
return 'AUS';
}
if(isWiiU) {
var res = wiiuSystemSetting.getRegion();
processJsxError(res);
return res.code;
} else { // 非Wii Uでは適当なリージョンを返す
if(country === 'JP'){
return 'JPN';
}else if(country === 'US' || country === 'CA' || country == "MX" || country == "BR"){
return 'USA';
}else{
return 'EUR';
}
}
}
/**
* 言語に対応するリソースキーを取得するリソースキーはリージョン別言語の処理に利用する
* @param country ISO国コード
* @param lang ISO言語コード
*/
function getResourceKey(country, lang) {
//TODO 中韓台対応 (2nd以降)
var region = getShopRegion();
if (region == "USA") {
resourceKey = lang + "_US";
} else if (region === 'AUS' && lang === 'en') {
resourceKey = lang + "_AU";
} else {
resourceKey = lang;
}
return resourceKey;
}
//関数処理時間計測
function functionTimeLog(script){
var time_start;
var time_stop;
var total_time;
var res;
time_start = new Date();
eval(script);
time_stop = new Date();
total_time = (parseFloat(time_stop.getMinutes())*60000
+ parseFloat(time_stop.getSeconds()*1000)
+ parseFloat(time_stop.getMilliseconds()) )
-( parseFloat(time_start.getMinutes())*60000
+ parseFloat(time_start.getSeconds()*1000)
+ parseFloat(time_start.getMilliseconds()) );
res = Math.round(total_time);
//log
$.print(script+' : '+res + '[ms]');
}
/**
* function setParamsURL encode有
*
* @param {array} params URLパラメータ値
* @return {string} QueryString ?以降のURLパラメータ
*/
function setParamsEncodeURL(params){
var str = '', amp = '';
if(!params) return '';
for( i in params){
str = str + amp + i + '=' + encodeURI(params[i]);
amp = '&';
}
return str;
}
function setParamsEncodeCURL(params){
var str = '', amp = '';
if(!params) return '';
for( i in params){
str = str + amp + i + '=' + encodeURIComponent(params[i]);
amp = '&';
}
return str;
}
function setParamsURL(params){
var str = '', amp = '';
if(!params) return '';
for( i in params){
str = str + amp + i + '=' + params[i];
amp = '&';
}
return str;
}
//URLパラメータ取得
function parseParam(){
var hash = [];
var param;
if(param = location.search){
var parray = param.replace('?','').split('&');
for(var i=0;i<parray.length;i++){
var n = parray[i].split('=');
hash[n[0]] = n[1];
}
}else{
return false;
}
return hash;
}
//フォーム系のSE
function commonSE(){
if(isWiiU) {
$(document).on('click', '.se', function() {
if($(this).data('se-label')!==undefined){
wiiuSound.playSoundByName($(this).data('se-label'), 1);
}
return true;
}).on('touchstart', '.se', function() {
wiiuSound.playSoundByName('SE_WAVE_DRC_TOUCH_TRG', 1);
return true;
}).on('touchstart', 'input[type="submit"]', function() {
wiiuSound.playSoundByName('SE_WAVE_DRC_TOUCH_TRG', 1);
}).on('click', 'input[type="submit"]', function() {
wiiuSound.playSoundByName('SE_WAVE_OK', 1);
}).on('touchstart', 'input[type="reset"]', function() {
wiiuSound.playSoundByName('SE_WAVE_DRC_TOUCH_TRG', 1);
}).on('click', 'input[type="reset"]', function() {
wiiuSound.playSoundByName('SE_WAVE_RESET', 1);
}).on('click', 'input[type="checkbox"]:not(:checked)', function() {
wiiuSound.playSoundByName('SE_WAVE_CHECKBOX_UNCHECK', 1);
}).on('click', 'input[type="checkbox"]:checked', function() {
wiiuSound.playSoundByName('SE_WAVE_CHECKBOX_CHECK', 1);
}).on('touchstart', 'label:has(input[type="radio"])', function() {
wiiuSound.playSoundByName('SE_WAVE_DRC_TOUCH_TRG', 1);
}).on('click', 'label:has(input[type="radio"])', function() {
wiiuSound.playSoundByName('SE_WAVE_RADIOBUTTON_CHECK', 1);
});
}
}
//BGM
function setBGM(seq){
if(isWiiU) {
if(seq!=null){
var seq_name = seq;
switch(seq_name){
case'main':
wiiuSound.playSoundByName('BGM_WAVE_MAIN', 3);
break;
case'setting':
wiiuSound.playSoundByName('BGM_WAVE_SETTING', 3);
break;
case'boot':
wiiuSound.playSoundByName('BGM_WAVE_BOOT_0', 3);
break;
default:
wiiuSound.playSoundByName('BGM_WAVE_MAIN', 3);
break;
}
}
}
}
//容量変換
function convertSize(title_size){
var res = {};
var unit = null;
var size = parseInt(title_size, 10);
// 小数第二位まで表現可能な値
var second_decimal_integer = 0;
//容量単位変換
if (size <= 10239948) { // 9999.949… KB 以下
// (size / 1024.0) * 100.0
second_decimal_integer = Math.floor(size / 10.24);
unit = 'KB';
// 最低 1.0 KB
if (second_decimal_integer < 100) {
second_decimal_integer = 100;
}
} else if (size <= 10485707571) { // 9999.949… MB 以下
// (size / 1024.0 / 1024.0) * 100.0
second_decimal_integer = Math.floor(size / 10485.76);
unit = 'MB';
} else {
// (size / 1024.0 / 1024.0 / 1024.0) * 100.0
second_decimal_integer = Math.floor(size / 10737418.24);
unit = 'GB';
}
// 小数第二位を四捨五入。XXX += 0.05
second_decimal_integer += 5;
if (second_decimal_integer > 999999){
// 計算誤差で整数部が 5 桁以上になる場合は無理やり 9999.9 にする
second_decimal_integer = 999999;
}
second_decimal_integer /= 10;
size = Math.floor(second_decimal_integer / 10) + "." +
Math.floor(second_decimal_integer % 10);
res.size = size;
res.unit = unit;
// 小数点は言語で分かれる
// ピリオド日本、US英語、スペイン語、EU英語、ポルトガル語
// カンマUSフランス、ポルトガル語、EUフランス、スペイン、ドイツ、イタリア、オランダ、ロシア語
var REGION_PREFIX = {
JPN: 'JP_',
USA: 'US_',
EUR: 'EU_',
AUS: 'EU_' // AUSはEU扱いする
};
var prefix = REGION_PREFIX[getShopRegion()];
var region_lang = prefix + lang;
if (!/(JP_ja|US_en|US_es|EU_en|EU_pt)/.test(region_lang)) {
res.size = res.size.replace(".", ",");
}
return res;
}
//購入フロー情報初期化
function initPurchaseInfo() {
"use strict";
$.sessionStorage().removeItem('buying_title_id');
$.sessionStorage().removeItem('buying_coupon_instance_code');
$.sessionStorage().removeItem('buying_type');
$.sessionStorage().removeItem('buying_section');
$.sessionStorage().removeItem('buying_aoc');
$.sessionStorage().removeItem('buying_ticket');
$.sessionStorage().removeItem('buying_shortfall');
$.sessionStorage().removeItem('get_common_info');
$.sessionStorage().removeItem('get_title_info');
$.sessionStorage().removeItem('get_aoc_info');
$.sessionStorage().removeItem('get_ticket_info');
$.sessionStorage().removeItem('get_demo_info');
$.sessionStorage().removeItem('buying_seq_rating');
$.sessionStorage().removeItem('buying_seq_attention');
$.sessionStorage().removeItem('buying_seq_size');
$.sessionStorage().removeItem('buying_seq_balance');
$.sessionStorage().removeItem('buying_seq_purchase');
$.sessionStorage().removeItem('money_referrer');
$.sessionStorage().removeItem('addr_referrer');
$.sessionStorage().removeItem('title_name');
$.sessionStorage().removeItem('title_icon');
$.sessionStorage().removeItem('rating_flg');
$.sessionStorage().removeItem('rating_age');
$.sessionStorage().removeItem('rating_sys');
$.sessionStorage().removeItem('notes_flg');
$.sessionStorage().removeItem('title_size_unit');
$.sessionStorage().removeItem('title_size_str');
$.sessionStorage().removeItem('title_dl_media');
$.sessionStorage().removeItem('title_display_size_str');
$.sessionStorage().removeItem('title_display_size_unit');
$.sessionStorage().removeItem('title_free_flg');
$.sessionStorage().removeItem('size_over_flg');
$.sessionStorage().removeItem('title_dl_items');
$.sessionStorage().removeItem('title_redl_flg');
$.sessionStorage().removeItem('title_release_date');
$.sessionStorage().removeItem('title_in_app_purchase');
$.sessionStorage().removeItem('title_pre_order_flg');
$.sessionStorage().removeItem('titile_owned_coupon_flg');
$.sessionStorage().removeItem('title_lowest_price');
$.sessionStorage().removeItem('current_balance');
$.sessionStorage().removeItem('current_balance_str');
$.sessionStorage().removeItem('post_balance');
$.sessionStorage().removeItem('post_balance_str');
$.sessionStorage().removeItem('title_price_str');
$.sessionStorage().removeItem('title_discount_price_id');
$.sessionStorage().removeItem('title_regular_price_id');
$.sessionStorage().removeItem('title_tax');
$.sessionStorage().removeItem('title_tax_str');
$.sessionStorage().removeItem('title_taxin_price');
$.sessionStorage().removeItem('title_taxin_price_str');
var aoc_id = [];
if($.sessionStorage().getItem('aoc_id_list')!==null){
aoc_id = $.sessionStorage().getItem('aoc_id_list').split(',');
$.each(aoc_id,function(key,value){
$.sessionStorage().removeItem('aoc_name_'+value);
$.sessionStorage().removeItem('aoc_size_unit_'+value);
$.sessionStorage().removeItem('aoc_size_str_'+value);
$.sessionStorage().removeItem('aoc_free_flg_'+value);
$.sessionStorage().removeItem('aoc_price_'+value);
$.sessionStorage().removeItem('aoc_price_str_'+value);
$.sessionStorage().removeItem('aoc_tax_str_'+value);
$.sessionStorage().removeItem('aoc_taxin_price_str_'+value);
$.sessionStorage().removeItem('aoc_redl_flg_'+value);
$.sessionStorage().removeItem('_nsig_aoc_taxin_price_'+value);
});
}
$.sessionStorage().removeItem('aoc_id_list');
$.sessionStorage().removeItem('aocs_free_flg');
$.sessionStorage().removeItem('aocs_dl_media');
$.sessionStorage().removeItem('aocs_total_size');
$.sessionStorage().removeItem('aocs_total_size_str');
$.sessionStorage().removeItem('aocs_total_size_unit');
$.sessionStorage().removeItem('aocs_price_str');
$.sessionStorage().removeItem('aocs_price_id');
$.sessionStorage().removeItem('aocs_discount_id');
$.sessionStorage().removeItem('aocs_tax');
$.sessionStorage().removeItem('aocs_tax_str');
$.sessionStorage().removeItem('aocs_taxin_price');
$.sessionStorage().removeItem('aocs_taxin_price_str');
$.sessionStorage().removeItem('aoc_dl_items');
$.sessionStorage().removeItem('aoc_same_variation_items');
$.sessionStorage().removeItem('aoc_update_flg');
$.sessionStorage().removeItem('aocs_all_redl_flg');
$.sessionStorage().removeItem('buying_aoc_id_list');
$.sessionStorage().removeItem('ticket_id');
$.sessionStorage().removeItem('ticket_name');
$.sessionStorage().removeItem('ticket_free_flg');
$.sessionStorage().removeItem('ticket_price_str');
$.sessionStorage().removeItem('ticket_price_id');
$.sessionStorage().removeItem('ticket_regular_price_id');
$.sessionStorage().removeItem('ticket_discount_price_id');
$.sessionStorage().removeItem('ticket_tax');
$.sessionStorage().removeItem('ticket_tax_str');
$.sessionStorage().removeItem('ticket_taxin_price');
$.sessionStorage().removeItem('ticket_taxin_price_str');
$.sessionStorage().removeItem('demo_id');
$.sessionStorage().removeItem('demo_name');
$.sessionStorage().removeItem('demo_icon');
$.sessionStorage().removeItem('demo_dl_items');
$.sessionStorage().removeItem('size_over_flg');
$.sessionStorage().removeItem('demo_dl_media');
$.sessionStorage().removeItem('demo_size_str');
$.sessionStorage().removeItem('demo_size_unit');
$.sessionStorage().removeItem('demo_display_size_str');
$.sessionStorage().removeItem('demo_display_size_unit');
$.sessionStorage().removeItem('pin_code_checked_money');
$.sessionStorage().removeItem('withdrawal_agreed');
$.sessionStorage().removeItem('auto_billing_contract_id');
$.sessionStorage().removeItem('auto_billing_title_id');
$.sessionStorage().removeItem('coupon_code');
}
//クレカ残高追加フローのセッション情報初期化
function initCardInfo(){
"use strict";
$.sessionStorage().removeItem('addbal_cc');
$.sessionStorage().removeItem('addbal_cc_str');
$.sessionStorage().removeItem('ccard_registration');
$.sessionStorage().removeItem('cc_pass');
$.sessionStorage().removeItem('cc_type');
$.sessionStorage().removeItem('postal_code');
$.sessionStorage().removeItem('request_id');
$.sessionStorage().removeItem('application_id');
$.sessionStorage().removeItem('credit_card_update');
}
/**
* title_id=>nsUid変換
* エラーコードは4桁で設定されるエラービューアに渡す時はninja用のprefixを設定すること
*
* @param title_id カンマ区切りのtitleId
* @return ns_uidの配列またはサーバエラーオブジェクト(error.code_no, error_message)
*/
function convertTitleidToNsuid(title_id){
var res = {};
//変換
var req_obj = {
url : ninjaBase + 'ws/titles/id_pair',
type : 'GET',
data : {
'title_id[]' : title_id,
'lang' : lang
}
};
$.getXml(req_obj)
.done(
function(xml){
res.ns_uid = [];
$(xml).find('title_id_pair').each(function(i){
res.ns_uid[i] = $(this).children('ns_uid').text();
});
}
)
.fail(
function(xml){
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
res.error.code_no = error_code;
res.error.message = error_msg;
}
);
return res;
}
/**
* nsUid=>title_id変換
* エラーコードは4桁で設定されるエラービューアに渡す時はninja用のprefixを設定すること
*
* @param ns_uid カンマ区切りのnsUid
* @return ns_uidの配列またはサーバエラーオブジェクト(error.code_no, error_message)
*/
function convertNsuidToTitleid(ns_uid){
var res = {};
//変換
var req_obj = {
url : ninjaBase + 'ws/titles/id_pair',
type : 'GET',
data : {
'ns_uid[]' : ns_uid,
'lang' : lang
}
};
$.getXml(req_obj)
.done(
function(xml){
res.title_id = [];
$(xml).find('title_id_pair').each(function(i){
res.title_id[i] = $(this).children('title_id').text();
});
}
)
.fail(
function(xml){
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
res.error.code_no = error_code;
res.error.message = error_msg;
}
);
return res;
}
/**
* title_id, version, content_size 取得
* エラーコードは4桁で設定されるエラービューアに渡す時はninja用のprefixを設定すること
*
* @param nsuid タイトルのnsUid
* @return ns_uidの配列またはサーバエラーオブジェクト(error.code_no, error_message)
*/
function getTitleEcInfo(nsuid){
var res = {};
var req_obj = {
url : ninjaBase + 'ws/' + country + '/title/'+ nsuid +'/ec_info',
type : 'GET',
data : {'lang':lang}
};
//ajax
$.getXml(req_obj)
.done(
function(xml){
var $info = $(xml).find('title_ec_info');
res.title_id = $info.children('title_id').text();
res.content_size = $info.children('content_size').text();
res.title_ver = $info.children('title_version').text();
}
)
.fail(
function(xml){
res.error = {};
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
res.error.code_no = error_code;
res.error.message = error_msg;
}
);
return res;
}
//追加コンテンツ用nsuid=>title_id変換ver取得
function convertAOCNsuidToTitleid(nsuid){
var res = {};
var info = [];
var req_obj = {
url : ninjaBase + 'ws/' + country + '/title/'+ nsuid +'/datatitlesVersion',
type : 'GET',
data :{'lang':lang}
};
//ajax
$.getXml(req_obj)
.done(
function(xml){
$(xml).find('title_ec_info').each(function(i){
info[i] = {'title_id':$(this).children('title_id').text(),'title_ver':$(this).children('title_version').text()};
});
res = info;
}
)
.fail(
function(xml){
res.error = {};
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
res.error.code_no = error_code;
res.error.message = error_msg;
}
);
return res;
}
//戻る処理
var backCount = 0;
function historyBack(disable_uo){
if(backCount == 0){
if(disable_uo === true) disableUserOperation();
backCount++;
if(isWiiU){
var res = wiiuBrowser.canHistoryBack();
if(res===true){
history.back();
throw new Error('functions.js#historyBack stopper');
}else{
location.replace('./#top');
throw new Error('functions.js#historyBack stopper');
}
}else{
history.back();
throw new Error('functions.js#historyBack stopper');
}
}
}
//国設定保存
function setCountryInfo(){
if($.sessionStorage().getItem('max_cash_str')===null ||
$.sessionStorage().getItem('max_cash')===null ||
$.sessionStorage().getItem('loyalty_system_available')===null ||
$.sessionStorage().getItem('prepaid_card_available')===null ||
$.sessionStorage().getItem('credit_card_available')===null ||
$.sessionStorage().getItem('nfc_available')===null ||
$.sessionStorage().getItem('coupon_available')===null ||
$.sessionStorage().getItem('my_coupon_available')===null ||
$.sessionStorage().getItem('legal_payment_message_required')===null ||
$.sessionStorage().getItem('legal_business_message_required')===null ||
$.sessionStorage().getItem('time_based_restrictions')===null ||
$.sessionStorage().getItem('tax_excluded_country')===null){
$.ajaxExt({
url : ninjaBase + 'ws/country/'+country,
type : 'GET',
data :{'lang':lang},
async : false,
dataType : 'xml',
xhrFields: {
withCredentials: true
},
error : function(xhr, text) {
var error_code = $(xhr.responseText).find('code').text();
var error_msg = $(xhr.responseText).find('message').text();
setErrorHandler(prefixNinja, error_code, error_msg, function(){});
},
success : function(xml) {
var $country = $(xml).find('country_detail');
$.sessionStorage().setItem('max_cash_str',$country.children('max_cash').children('amount').text());
$.sessionStorage().setItem('max_cash',$country.children('max_cash').children('raw_value').text());
$.sessionStorage().setItem('loyalty_system_available',$country.children('loyalty_system_available').text());
$.sessionStorage().setItem('prepaid_card_available',$country.children('prepaid_card_available').text());
$.sessionStorage().setItem('credit_card_available',$country.children('credit_card_available').text());
$.sessionStorage().setItem('nfc_available',$country.children('nfc_available').text());
$.sessionStorage().setItem('coupon_available',$country.children('coupon_available').text());
$.sessionStorage().setItem('my_coupon_available',$country.children('my_coupon_available').text());
$.sessionStorage().setItem('legal_payment_message_required', $country.children('legal_payment_message_required').text());
$.sessionStorage().setItem('legal_business_message_required', $country.children('legal_business_message_required').text());
$.sessionStorage().setItem('tax_excluded_country', $country.children('tax_excluded_country').text());
var items = [];
$(xml).find('time_based_restriction').each(function(){
var item = {'rating_system_id':$(this).children('rating_system_id').text(),
'rating_id':$(this).children('rating_id').text(),
'age':$(this).children('age').text(),
'start_time':$(this).children('start_time').text(),
'end_time':$(this).children('end_time').text()};
items.push(item);
});
$.sessionStorage().setItem('time_based_restrictions',JSON.stringify(items));
}
});
}
}
function applyTaxText(element, price) {
// see#7349 #8366 内税対象に税無も含まれるため対象国を除外
// JPは税込非表示とする
// Wood.DomUtil.applyTaxTextの旧コード対応
// (税込)表示判定
if ($.sessionStorage()
.getItem('tax_excluded_country') === 'false' &&
country !== 'NZ' &&
country !== 'RU' &&
country !== 'TR' &&
country !== 'JP') {
// AUのみメッセージを変更
if (country === 'AU') {
element.html(price + ' ' + $('#str_tax_included_au').html());
} else {
element.html(price + ' ' + $('#str_tax_included').html());
}
} else {
element.text(price);
}
}
// device order list を同期処理で更新する
// SEE #3786
function reloadDeviceOrderList(option) {
var async = false;
var order_arr = [];
var device_order_list = [];
var device_order_list_rvc = [];
var req_obj_order = {
url : ninjaBase+'ws/my/shared_title_ids',
type : 'GET'
};
//ajax
$.getXml(req_obj_order, async)
.done(
function(xml){
var eshop = $('eshop', xml);
var owned_titles = $('owned_titles', eshop);
var owned_wii_titles = $('owned_wii_titles', eshop);
$('owned_title', owned_titles).each(function(i) {
device_order_list.push($(this).attr('id'));
});
$('owned_title', owned_wii_titles).each(function(i) {
device_order_list_rvc.push($(this).attr('id'));
});
$.localStorage().setItem('device_order_list'
, device_order_list.join(','));
$.localStorage().setItem('device_order_list_rvc'
, device_order_list_rvc.join(','));
// 更新日時を保存
var current_time = (new Date()).getTime().toString();
$.localStorage().setItem('device_order_list_modified'
, current_time);
//ホームボタン禁止
disableHomeButton();
// 購入の電源禁止区間からくることがあるので
// その場合は save しない SEE #4837
var no_save = (option && option.no_save && isWiiU);
if (!no_save) {
$.save();
}
// ホームボタン禁止解除
// no_enable_home が指定されていたら HOME ボタンを復帰させない
if (!option || !option.no_enable_home) {
enableHomeButton();
}
$.print('SUCCESS :localStorage() device order list saved!');
}
)
.fail(
function(xml){
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
setErrorHandler(prefixNinja, error_code, error_msg);
}
);
}
// 与えられた ns_uid を自分が持っているかどうか判定する
// 旧 checkTitleOwnedBySelf含む getOrderList
function isTitleOwnedBySelf(ns_uid) {
var owned = false;
var req_obj = {
url : ninjaBase + 'ws/my/title/' + ns_uid + '/owned_status',
type : 'GET',
data : { owned_by : 'SELF' },
dataType : 'xml',
xhrFields : { withCredentials: true }
};
$.getXml(req_obj)
.done(
function(xml) {
var flag = $(xml).find('is_owned').text();
owned = (flag === "true");
}
)
.fail(
function(xml) {
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
setErrorHandler(prefixNinja, error_code, error_msg
, function(){ location.replace('./#top'); });
}
);
return owned;
}
//クラニン利用国チェック
function checkLoyalty(){
"use strict";
var chk_flg = true;
setCountryInfo();
if($.sessionStorage().getItem('loyalty_system_available')==='false'){
chk_flg = false;
}
return chk_flg;
}
//クレカ利用国チェック
function checkCCard(){
"use strict";
var chk_flg = true;
setCountryInfo();
if($.sessionStorage().getItem('credit_card_available')==='false'){
chk_flg = false;
}
return chk_flg;
}
//プリカ利用国チェック
function checkPCard(){
"use strict";
var chk_flg = true;
setCountryInfo();
if($.sessionStorage().getItem('prepaid_card_available')==='false'){
chk_flg = false;
}
return chk_flg;
}
//外税チェック
function checkTaxExcluded(){
"use strict";
var chk_flg = true;
setCountryInfo();
if($.sessionStorage().getItem('tax_excluded_country')==='false'){
chk_flg = false;
}
return chk_flg;
}
// NFC利用可能か
function isNfcAvailable(){
setCountryInfo();
return $.sessionStorage().getItem('nfc_available')==='true';
}
// クーポンが利用可能か
function isCouponAvailable(){
setCountryInfo();
return $.sessionStorage().getItem('coupon_available')==='true';
}
// クーポンが利用可能か
function isMyCouponAvailable(){
setCountryInfo();
return $.sessionStorage().getItem('my_coupon_available')==='true';
}
// クーポンが利用可能か
function isOwnedCouponAvailable(){
setCountryInfo();
return true; // TODO API対応がきたら置き換える SEE #29774
}
function getParentalControlForEShopIsLocked() {
//ペアレンタルロックがかかっているか
var is_locked = false;
if(isWiiU){
var res = wiiuSystemSetting.getParentalControlForEShop();
processJsxError(res);
is_locked = res.isLocked;
}else{
is_locked = true; // 非Wii Uではとりあえずロック
}
return is_locked;
}
// ペアレンタルチェック(残高)
function checkParentalControlForEShop(){
if(!getParentalControlForEShopIsLocked()){
return true;
}
//すでにPINコード入力に成功したか
if($.sessionStorage().getItem('pin_code_checked_for_eshop') == 'true'){
return true;
}
return false;
}
function getParentalControlForGamePlay() {
if (isWiiU) {
var res = wiiuSystemSetting.getParentalControlForGamePlay();
processJsxError(res);
return res;
} else {
return {
'isLocked': true,
'age': '18' //PC版は18歳を返す
};
}
}
// ペアレンタルチェック(年齢)
function checkParentalControlForGamePlay(rating_age){
//rating_ageが空文字またはNaNの場合、レーティング未定義としてチェックOKにする
if(rating_age === undefined || rating_age === null || rating_age === '' || isNaN(rating_age)){
return true;
}
//ペアレンタルロックがかかっているか
var is_locked = false;
var res = getParentalControlForGamePlay();
$.print('PARENTAL CHECK(AGE) rating:'+rating_age+', age:'+res.age);
is_locked = res.isLocked;
var parental_age = parseInt(res.age,10);
//CTRとWiiUのレーティング仕様に違いがあるため
//AU,NZのレーティング「M」が13の場合は14に変更する
if((country === 'AU' || country === 'NZ') &&
parental_age===13 ){
parental_age = 14;
}
if(parseInt(rating_age,10) <= parental_age){
//レーティングの年齢制限よりペアレン設定年齢が上ならロックしない
is_locked = false;
}
if(!is_locked){
return true;
}
//すでにPINコード入力に成功したか
if($.sessionStorage().getItem('pin_code_checked') == 'true'){
return true;
}
return false;
}
//AGEゲート
function checkAgeGate(buy_method, rating_sys_id, rating_age, title_id){
//rating_ageが空文字またはNaNの場合、レーティング未定義としてチェックOKにする
if(rating_age === null || rating_age === '' || isNaN(rating_age)){
return true;
}
var chk_flg = true;
var do_check_rating = false;
var age = $.sessionStorage().getItem('age');
// リージョン情報取得
var region = getShopRegion();
switch(buy_method){
case 0: // buyから来ていない
if(region == "JPN" || region == "AUS" || region == "USA"){
do_check_rating = true;
}else if(region == "EUR"){
do_check_rating = false;
}
break;
case 1: // 購入
if(region == "EUR" || region == "USA"){
do_check_rating = false;
}else if(region == "JPN" || region == "AUS"){
do_check_rating = true;
}
break;
case 2: // 再受信
if(region == "JPN" || region == "EUR" || region == "USA"){
do_check_rating = false;
}else if(region == "AUS"){
// 豪州では年齢チェックを行う
do_check_rating = true;
}
break;
case 3: // 引き換え
if(region == "JPN" || region == "EUR" || region == "USA"){
do_check_rating = false;
}else if(region == "AUS"){
do_check_rating = true;
}
break;
}
if(do_check_rating){
if((rating_sys_id == '201' && rating_age == '18') || // CERO_Z
(rating_sys_id == '202' && rating_age == '17') || // ESRB_M
(rating_sys_id == '202' && rating_age == '18') || // ESRB_AO
((rating_sys_id == '208' || rating_sys_id == '308') && rating_age == '18')) // OFLC(AGCB)_R18
{
if(parseInt(age,10) < parseInt(rating_age,10)){
chk_flg = false;
}
} else if( ((rating_sys_id == '209' || rating_sys_id == '309') && rating_age == '15')) {
//OFLC.NZのみR13R18のレーティングが18歳未満閲覧不可
if(parseInt(age,10) < 18){
chk_flg = false;
}
}
}
return chk_flg;
}
function checkUnderAge(){
// 日本版かどうか
setCountryInfo();
if(country != 'JP'){
return 0; // OK
}
// アカウントの年齢が18歳以上か
if(Number($.sessionStorage().getItem('age')) >= 18){
return 0; // OK
}
// ペアレンタルロックがかかっているか
var is_locked = false;
if(isWiiU){
var res = wiiuSystemSetting.getParentalControlForEShop();
processJsxError(res);
is_locked = res.isLocked;
}else{
is_locked = true; // 非Wii Uではとりあえずロック
}
if(!is_locked){
return 1; // ペアレン非設定
}
// カード情報が登録済みか
var has_credit_card = false;
var req_obj = {
url : ninjaBase+'ws/my/credit_card',
type : 'GET'
};
//ajax
$.getXml(req_obj)
.done(
function(xml){
has_credit_card = true;
}
)
.fail(
function(xml){
var error_code = $(xml.responseText).find('code').text();
var error_msg = $(xml.responseText).find('message').text();
if(error_code !== '3180'){
setErrorHandler(prefixNinja, error_code, error_msg, function(){
location.href('./#top');
});
}
}
);
if(!has_credit_card){
return 2; // クレジットカード未登録
}
return 0; // OK
}
/*
* 未成年ユーザチェック
*/
function routeViaCheckUnderAge(url, success_fn) {
var res_underage = checkUnderAge();
if(res_underage === 1){
$.alert($('#dialog_msg_parental').text(), $('#dialog_ok').text());
historyBack();
}else if(res_underage === 2){
var seq = encodeURIComponent(url.attr('file')+'?'+url.attr('query'));
location.replace('legal01_01.html?seq='+seq+'#underage');
throw new Error('redirect to legal01_01#underage');
}else if (success_fn) {
success_fn();
}
}
function getCouponCodeUrlQuery() {
// sessionStorageに保存しているクーポンコードから buy01_01のURLパラメータを作成
// 追加する前提なので&をつけて返す
var coupon_code = $.sessionStorage().getItem('coupon_code');
if (coupon_code) {
return '&coupon_code=' + encodeURIComponent(coupon_code);
}
var coupon_ins = $.sessionStorage().getItem('buying_coupon_instance_code');
if (coupon_ins) {
return '&coupon_ins=' + encodeURIComponent(coupon_ins);
}
return '';
}
//ホームボタン禁止解除
function enableHomeButton() {
if(isWiiU){
wiiuBrowser.lockHomeButtonMenu(false);
}
}
//ホームボタン禁止
function disableHomeButton() {
if(isWiiU){
wiiuBrowser.lockHomeButtonMenu(true);
}
}
// 電源ボタン禁止
function disablePowerButton() {
if (isWiiU) {
wiiuBrowser.lockPowerButton(true);
}
}
//ユーザ操作禁止解除
function enableUserOperation() {
$.print('[ Enable User Operation ]');
//未ロック状態で解除しようとするとチラつきが発生するため、ロックされているか判定する
//(ページ遷移前からロックされている場合は判別できないので、同ページ内で明示的にロックされていた場合だけ)
if(isWiiU && isUserOperationEnabled !== true){
wiiuBrowser.lockUserOperation(false);
}
isUserOperationEnabled = true;
}
//ユーザ操作禁止
function disableUserOperation() {
$.print('[ Disable User Operation ]');
if(isWiiU && isUserOperationEnabled !== false){
wiiuBrowser.lockUserOperation(true);
}
isUserOperationEnabled = false;
}
// 電源ボタン禁止解除
function enablePowerButton() {
if (isWiiU) {
wiiuBrowser.lockPowerButton(false);
}
}
function showLoadingIcon() {
if (isWiiU) {
wiiuBrowser.prohibitLoadingIcon(false);
}
}
function hideLoadingIcon() {
if (isWiiU) {
wiiuBrowser.prohibitLoadingIcon(true);
}
}
// DRCが接続されている場合はtrue、それ以外はfalseが返ります。
function isDrc() {
if (isWiiU) {
return wiiuDevice.isDrc();
} else {
return true;
}
}
function curtainOpen() {
$.print('[ curtainOpen ]');
if (isWiiU && typeof wiiuCurtain !== 'undefined') {
wiiuCurtain.open();
}
}
function curtainClose() {
$.print('[ curtainClose ]');
if (isWiiU && typeof wiiuCurtain !== 'undefined') {
wiiuCurtain.close();
}
}
// DRCが接続されていることを確認する。
// 接続されておらず、ダイアログで「やめる」を選んだ場合はback_urlに戻る
// 接続されていることを確認したらtrueを返す
function checkConnectitonOfDrc(back_url) {
if (!isDrc()) {
// DRCが接続されていないとき
var is_ok = $.confirm(
$('#dialog_msg_drc').text(),
$('#dialog_cancel').text(),
$('#dialog_msg_ok').text());
if (is_ok) {
// OK を押した後、再度DRCが接続されているか確認する
return checkConnectitonOfDrc(back_url);
} else {
$.print('back_url: ' + back_url);
if (back_url) {
location.replace(back_url);
} else {
historyBack();
}
return false;
}
}
return true;
}
// ページを開いているとき、「Wii U GamePadで入力を進めてください。」の画像を表示する SEE #14207
function showRequestDrc(back_url) {
// 遷移先画面が見えるのを防ぐ SEE #14846
$('body').addClass('display_cover');
if (checkConnectitonOfDrc(back_url)){
curtainOpen();
$('body').removeClass('display_cover');
$(window).on('beforeunload', function(e) {
curtainClose();
return undefined; // onbeforeunload イベントのダイアログを出さないようにする
});
}
}
//バージョン取得
function getWoodVersion(){
var varsion_str = window.navigator.userAgent;
var m = varsion_str.match(/wood\/([0-9]\.[0-9])/);
if(m!==null && m.length === 2){
$.print("getVersion=" + parseFloat(m[1]));
return parseFloat(m[1]);
}else{
return 0;
}
}
//日付関数の誤差を修正するラッパークラス
function DateWrapper(){
var self = this;
var utc_time, utc_offset;
var date = new Date();
if(isWiiU){
var isOldVersion = (wiiuSystemSetting.getLocalTime !== undefined) && (getWoodVersion() < 1.1);
system_utc = wiiuSystemSetting.getUTC();
processJsxError(system_utc);
if(isOldVersion){
//旧バージョンの場合は9時間足す
utc_time = parseInt(system_utc.epochMilliSeconds,10) + 9*60*60*1000;
//getUTCとgetLocalTimeの差分からUTCオフセットを計算
var system_localtime = wiiuSystemSetting.getLocalTime();
processJsxError(system_localtime);
utc_offset = parseInt(system_utc.epochMilliSeconds-system_localtime.epochMilliSeconds, 10);
}else{
utc_time = parseInt(system_utc.epochMilliSeconds,10);
utc_offset = date.getTimezoneOffset() * 60 * 1000; //ミリ秒に変換
}
}else{
utc_time = date.getTime();
utc_offset = date.getTimezoneOffset() * 60 * 1000;
}
this.getUTC = function(){
return utc_time;
};
this.getUTCOffset = function(){
return utc_offset;
};
this.getUTCHours = function(){
var d = new Date(utc_time);
return d.getUTCHours();
};
this.getUTCMinutes = function(){
var d = new Date(utc_time);
return d.getUTCMinutes();
};
this.getLocalTime = function(){
return self.getUTC() - self.getUTCOffset();
};
this.getHours = function(){
var d = new Date(self.getLocalTime());
return d.getUTCHours();
};
this.getMinutes = function(){
var d = new Date(self.getLocalTime());
return d.getUTCMinutes();
};
this.getSeconds = function(){
var d = new Date(self.getLocalTime());
return d.getUTCSeconds();
};
// $.print('getUTC=' + this.getUTC());
// $.print('getUTCOffset=' + this.getUTCOffset());
// $.print('getUTCHours=' + this.getUTCHours());
// $.print('getUTCMinutes=' + this.getUTCMinutes());
// $.print('getLocalTime=' + this.getLocalTime());
// $.print('getHours=' + this.getHours());
// $.print('getMinutes=' + this.getMinutes());
}
//独自のlazyload関数
function lazyload(selector){
"use strict";
$(selector).on("error", function(){
if($(this).data('placeholder')!==undefined){
$(this).attr('src',$(this).data('placeholder'));
}
});
$(selector).each(function(){
if($(this).data('loaded') === undefined || $(this).data('loaded') === 'placeholder'){
var self = this;
setTimeout(function(){
var old_url = $(self).attr('src');
var new_url = 'placeholder';
if($(self).data('original') !== undefined && $(self).data('original')!== ''){
new_url = $(self).data('original');
$(self).attr('src', new_url);
$(self).data('placeholder', old_url);
}
$(self).data('loaded', new_url);
},0);
}
});
}
function criticalAction(fn) {
if (isWiiU) {
wiiuBrowser.lockHomeButtonMenu(true);
wiiuBrowser.lockPowerButton(true);
}
fn();
if (isWiiU) {
wiiuBrowser.lockHomeButtonMenu(false);
wiiuBrowser.lockPowerButton(false);
}
}
function getNinjaSession() {
return JSON.parse($.sessionStorage().getItem('ninja_session'));
}
function clearLocalStorageWithPrefix(prefix) {
var storage = isWiiU ? wiiuLocalStorage : window.localStorage;
var length = isWiiU ? storage.length() : storage.length;
$.print('clearLocalStorageWithPrefix: ' + length);
for (var i = 0; i < length; i++) {
var key = storage.key(i);
$.print('key: ' + key);
if (key && key.match('^' + prefix)) {
$.print(' - remove: ' + key);
storage.removeItem(key);
}
}
}
/**
* Get Dirctory Param
* [memo] wood/modules/controller/base/beacon.js getDirectoryBeaconParam
* @method getDirctoryParam
* @return {Object} Dirctory Param
*/
function getDirctoryParam() {
var beacon_str = $.url().param('beacon');
if (beacon_str) {
var beacon = JSON.parse(decodeURIComponent(beacon_str));
return beacon.directory;
}
return null;
}