//var API_KEY = "db6e7683455ed41ad984e32d21416a04c"; //d
var API_KEY = "p286b393ea55d4665877a44369653e221"; //p
var FUNCKEY = "";
var canStamp = false; // prevent duplicated stamping
var waiting = false;
var RESULT;
var COUPON_MODE = false;
var VERIFY_MODE = false;
var CARD_COUPON_CODE;
var MKTG_COUPON_CODE;
var MKTG_COUPON_INFO;
var COUPON_LIST_INDEX;
var COUPONS;
var SHOP_COUPON_INFO_SMOKING
var SHOP_COUPON_INFO_NOSMOKING
var MCNT_LIST;
var AREA = {
"A01":{ "area_name":"新松戸エリア", "lat":"35.8254725", "lon":"139.920711", "zoom":15 }
};
$(document).on("ready", function () {
var hSize = $(window).height();
$(".full").height(hSize); // ブラウザの縦のサイズを取得
});
$(window).on("resize", function () { // ページをリサイズした時の処理
var hSize = $(window).height();
$(".full").height(hSize); // ブラウザの縦のサイズを取得
});
$(window).on("load", function () {
showLoading();
buttonReactioner();
$.get("api/getMcntList/", function(result){
MCNT_LIST = JSON.parse(result);
$.get("api/getCouponList/",function(r){
SHOP_COUPON_INFO_SMOKING = JSON.parse(r).A;
SHOP_COUPON_INFO_NOSMOKING = JSON.parse(r).B;
rakluIdInit(
true,
function(){
echoss.initialize(API_KEY, echoss.REGION_CODE_TYPE.JAPAN);
hideLoading();
//addToHomescreen({skipFirstVisit:false,displayPace:500});
},
function(){
window.location.href = "/theme/jt/snslogin/";
}
);
});
});
});
window.addEventListener('load', function() {
window.setTimeout(function() {
var bubble = new google.bookmarkbubble.Bubble();
var parameter = 'bmb=1';
bubble.hasHashParameter = function() {
//return false;
return window.location.hash.indexOf(parameter) != -1;
};
bubble.setHashParameter = function() {
if (!this.hasHashParameter()) {
window.location.hash += parameter;
}
};
bubble.getViewportHeight = function() {
window.console.log('Example of how to override getViewportHeight.');
return window.innerHeight;
};
bubble.getViewportScrollY = function() {
window.console.log('Example of how to override getViewportScrollY.');
return window.pageYOffset;
};
bubble.registerScrollHandler = function(handler) {
window.console.log('Example of how to override registerScrollHandler.');
window.addEventListener('scroll', handler, false);
};
bubble.deregisterScrollHandler = function(handler) {
window.console.log('Example of how to override deregisterScrollHandler.');
window.removeEventListener('scroll', handler, false);
};
bubble.showIfAllowed();
}, 1000);
}, false);
echoss.initializeSuccess = function () {
//if(CUST_ID == "WuFEVsg4LzzKktV8SKbd9A.."){window.location.href="/theme/jt/index2.html";}
echoss.setLanguageCode(echoss.Common.LANGUAGE_CODE_TYPE.JAPANESE);
if (typeof (DISABLEICON) == "undefined") {
echoss.Icon.init();
echoss.Icon.disableIcon(true);
echoss.Icon.setOtpData(
{
aprvData: "1" + "," + CUST_ID + "," + FUNCKEY,
funcCd: echoss.Icon.OTP_FUNC_CODE.STAMP_CARD,
isuDivCd: echoss.Icon.OTP_ISSUE_TYPE.COLLECT,
cntYn: "N",
}
, otpSuccess
, otpFailed
);
}
echoss.Stamp.init(
function (locUseTyp) {
//$("#echossIcon").click(function () { callOtp(); });
//callOtp();
if(IS_SMOKING){
$("#smoking_mode").html("喫煙者用");
COUPONS = SHOP_COUPON_INFO_SMOKING;
FUNCKEY = "V00A010B001S0005FSC001";
}else{
$("#smoking_mode").html("非喫煙者/未成年者用");
COUPONS = SHOP_COUPON_INFO_NOSMOKING;
FUNCKEY = "V00A010B001S0005FSC002";
}
if(IS_VERIFIED || !IS_SMOKING){
getDetailinfo();
}else{
$(".wrapper").hide();
doAgeVerify();
}
},
function (errorCode, errorMsg) {
logError(CUST_ID, errorCode, errorMsg, "echoss.Stamp.init()",false);
doAlert(errorCodeToMsg(errorMsg));
}
);
};
function buttonReactioner(){
$(".button").on("touchstart mousedown",function(){
$(this).addClass("mousedown");
});
$(".button").on("touchend mouseup",function(){
$(this).removeClass("mousedown");
});
}
function doAgeVerify(){
$("#age-verify").show();
//$(".age-verify-wrapper").animate({top:0},400);
VERIFY_MODE = true;
}
async function ageVerifyComplete(){
await setProfileVerified(CUST_ID);
window.location.reload();
}
function clearTempProfile(){
Cookies.remove("raklu-jt-profile", { path: ""});
window.location.reload();
clearProfile();
}
function getDetailinfo(callback = null) {
echoss.Stampcard.addAndGetDetailinfo({
id: CUST_ID,
funckey: FUNCKEY
}, function (result) {
RESULT = result;
if (callback) { callback(); }
reloadBranchStampInfo();
}, function (errorCode, errorMessage) {
logError(CUST_ID, errorCode, errorMessage, "getDetailinfo()",false);
doAlert(errorCodeToMsg(code));
});
}
function reloadBranchStampInfo() {
var stampCount = 1;
$(".stamp-history").removeClass("stampon");
$(".select-coupon-button").removeClass("select-coupon-button-enable");
$(".select-coupon-button").removeClass("button");
$(".select-coupon-button").off("click");
RESULT.accuList.forEach(function(accu){
$("#stamp" + stampCount).addClass("stampon");
if( $("#select-coupon-button" + stampCount).length > 0 ){
$("#select-coupon-button" + stampCount).addClass("select-coupon-button-enable");
$("#select-coupon-button" + stampCount).addClass("button");
$("#select-coupon-button" + stampCount).click(function(){
CARD_COUPON_CODE = RESULT.cardCpnList[this.dataset.cpnindex].code;
showCouponSelector(this.dataset.cpnindex);
});
}
stampCount++;
});
buttonReactioner();
hideLoading();
return;
}
function showStamping(){
$("#stamping").show();
$("#stamping").animate({top:0},200,function(){
canStamp=true;
});
}
function closeStamping(){
canStamp=false;
$("#stamping").animate({top:"100vh"},200,function(){
$("#stamping").hide();
$(".stamping-stamp-area").removeClass("stampon-big");
});
}
async function showCouponSelector(idx){ //idxがnullの場合は利用店舗マップにして表示させる。
if(idx != null){
$(".coupon-list").show();
$("#selector-title").show();$("#shopmap-title").hide();
$("#map").removeClass("fullmap");$("#map").addClass("compactmap");
canStamp = false;
COUPON_MODE = true;
COUPON_LIST_INDEX = idx;
if(typeof (COUPONS[COUPON_LIST_INDEX]) == "undefined"){
//doAlert("選択できるクーポンがありません");
closeCouponSelector();
return;
}
}else{
$(".coupon-list").hide();
$("#selector-title").hide();$("#shopmap-title").show();
$("#map").removeClass("compactmap");$("#map").addClass("fullmap");
COUPON_LIST_INDEX = null;
}
await initMap();
var areaSelectorHtml = "";
Object.keys(AREA).forEach(function(area){
areaSelectorHtml += '
' + AREA[area].area_name + '
';
});
$(".area-selector-box").html(areaSelectorHtml);
$("#coupon-selector").show();
$("#coupon-selector").scrollTop(0);
$("#coupon-selector").animate({left:'0'},300,function(){
$(".wrapper").hide();
$(".area-selector-box").children(0).click();
});
buttonReactioner();
}
function closeCouponSelector(){
canStamp = false;
COUPON_MODE = false;
CARD_COUPON_CODE = null;
stopStampAnimation();
hideCoupon();
$(".wrapper").show();
$("#coupon-selector").animate({left:'100vw'},300, function(){
$("#coupon-selector").hide();
});
getDetailinfo();
}
async function changeArea(area){
showLoading();
var cpnHtml = "";
var smoke = IS_SMOKING ? "喫煙者用" : "非喫煙者用";
console.log(COUPONS);
if(COUPON_LIST_INDEX){
for(shopIdx in COUPONS[COUPON_LIST_INDEX][area]){
var showShopName = true;
for(cpnIdx in COUPONS[COUPON_LIST_INDEX][area][shopIdx]){
var cpnCode = COUPONS[COUPON_LIST_INDEX][area][shopIdx][cpnIdx];
var couponDetails = await getCouponDetail(cpnCode);
if(showShopName){
//cpnHtml += '' + shopIdx + '
';
showShopName = false;
}
cpnHtml += '';
}
}
}
pointShops(AREA[area].lat, AREA[area].lon, AREA[area].zoom);
$(".coupon-list").html(cpnHtml);
$(".area-selector").removeClass("area-selected");
$("#" + area).addClass("area-selected");
buttonReactioner();
hideLoading();
}
async function showCoupon(cpnCode) {
var cpnDetail = await getCouponDetail(cpnCode);
console.log(cpnDetail);
viewCouponDetail({
"name":cpnDetail.result.coupons[0].name,
"imgDetailUrl":cpnDetail.result.coupons[0].detailImageUrl,
"shopname":cpnDetail.result.brands[0].stores[0].name
});
$("#coupon-detail").show();
$("#coupon-detail").animate({left:'0'},300,function(){
$("#coupon-selector").hide();
});
MKTG_COUPON_CODE = cpnCode;
}
function hideCoupon(){
$("#coupon-selector").show();
$("#coupon-detail").animate({left:"100vw"},300, function(){
$("#coupon-detail").hide();
});
}
function getCouponDetail(id){
return new Promise(resolve =>{
$.get(
"api/getCouponInfo/?couponid=" + id,
function(r){
var result = JSON.parse(r);
if(result.result){
resolve(result);
}else{
logError(CUST_ID, "", "不正な操作が行われました。", "getCouponDetail()",false);
doAlert("不正な操作が行われました。");
}
}
);
});
}
function viewCouponDetail(obj) {
$(".coupon-detail-img img").attr("src", obj.imgDetailUrl);
$(".coupon-image img").attr("src", obj.imgDetailUrl);
$(".coupon-detail-title").html(obj.name);
$(".coupon-detail-shop-info-name").html(obj.shopname);
}
function showCouponStampBox(){
doAlert(
"クーポンを使用すると" + RESULT.accuCount + "ポイントが
すべて消費されます。
よろしいですか?",
"","images/logo-mini.svg",true,
"はい","いいえ",
function(){
$("#use-coupon").show();
$("#use-coupon").animate({top:'0'},300);
$(".coupon-used").hide();
canStamp = true;
}
);
}
function closeCouponStampBox(){
$("#use-coupon").animate({top:"100vh"},300,function(){
$("#use-coupon").hide();
});
}
/******************************************************
* ECHOSS ICON
******************************************************/
var OTP_DIV_CODE_SAVE_UP = "1";
var OTP_DIV_CODE_CANCEL_SAVING_UP = "2";
var OTP_DIV_CODE_USE_COUPON = "3";
function makeEchossServiceApproveKey(otpStampType, custNo, funcKey, issuedCouponNo) {
// 구분코드,고객번호,매장키,쿠폰발행번호
// 구분코드 : 1:적립, 2:적립취소, 3:쿠폰사용
var key = otpStampType + "," + custNo + "," + funcKey;
if (issuedCouponNo != undefined) {
key += ("," + issuedCouponNo);
} else {
key += ("," + "0");
}
console.log("Echoss Approve Key : " + key);
return key;
}
var otpSuccess = function () {
console.log("otpSuccess");
echoss.Icon.clseGuideView();
$(".popup_coupon_complete").show();
//echoss.Icon.hideIcon();
showLoading();
getDetailinfo();
}
var otpFailed = function (code, message) {
console.log("otpFailed : " + code + " " + message);
}
function callOtp() {
$(".img_logo_echoss").attr("src", "../images/opt-logo.png");
$(".step_part_subtitle").text("ワンタイムパスコード");
$(".part01_remain_time_sub").text("有効時間内にスタッフにご提示ください。")
$("#echossIcon").click();
$(".btn_step_part_confirm.change_color.otp_back_color.btn_receive_number.default.delay4").click();
$("#echoss_icon_otp_description").text("以下のワンタイムパスコードをスタッフにご提示ください。");
$(".btn_step_part_confirm").css("width", "90vw");
$(".btn_step_part_confirm.otp_number").css("font-size", "22vw");
$(".btn_step_part_confirm.otp_number").css("font-weight", "600");
$(".btn_step_part_confirm.otp_number").css("height", "30vw");
$(".btn_step_part_confirm.otp_number").css("line-height", "30vw");
}
/******************************************************
* STAMPING
******************************************************/
echoss.Stamp.onError = function (code, message) {
console.log(message);
logError(CUST_ID, code, message, "echoss.Stamp.onError()",false);
if(code == "ES08"){
alert("画面を縦にしてご利用ください。横画面では正常に動作しません。");
}else{
doAlert(errorCodeToMsg(code));
}
}
echoss.Stamp.onStamp = async function (stampParams) {
if(VERIFY_MODE && IS_SMOKING){
stopStampAnimation();
$(".age-verify-stamp-area").addClass("ageverified");
setTimeout(function(){
$(".health-alert-wrapper").show();
},1000);
return;
}
if(waiting == true){ doAlert("スタンプを連打しないでください。
2秒以上の間隔を開けでください。"); return;}
if(canStamp == false && COUPON_MODE == false && VERIFY_MODE == false){ doAlert("「スタンプを押す」ボタンを押してからスタンプしてください。") }
if(canStamp == false){ return; }
startStampAnimation();
canStamp = false;
if(COUPON_MODE){
var targetCpnIssueNo = null;
if(RESULT.custCpnList.length > 0){
targetCpnIssueNo = RESULT.custCpnList[0].issueNo;
}else{
await echossIssueCouponManually(CUST_ID, FUNCKEY, CARD_COUPON_CODE);
var detailInfo = await echossStampcardGetDetailInfo(CUST_ID, FUNCKEY);
targetCpnIssueNo = detailInfo.custCpnList[0].issueNo;
}
var mktgCpnIssueResult = await echossMktgCouponIssue(targetCpnIssueNo, MKTG_COUPON_CODE);
if(mktgCpnIssueResult.result.list.length > 0){
var mktgCpnUseResult = await echossMktgCouponUse(targetCpnIssueNo, mktgCpnIssueResult.result.list[0].couponNo, stampParams);
if(mktgCpnUseResult.length){
var cancelResult = await echossCancelCouponManually(CUST_ID, FUNCKEY, targetCpnIssueNo);
doAlert("この店舗では利用できないクーポンです。");
}else{
var cancelResult = await echossCancelCouponManually(CUST_ID, FUNCKEY, targetCpnIssueNo);
echoss.Stampcard.removeStampcard(
{id: CUST_ID, funckey: FUNCKEY},
function(result){ console.log(result);},
function(code, msg){logError(CUST_ID, code, msg, "echoss.Stampcard.removeStampcard()",true);}
);
$(".coupon-used").show();
}
stopStampAnimation();
hideCoupon();
closeCouponSelector();
setTimeout(function(){
closeCouponStampBox();
},1000);
}
console.log(targetCpnIssueNo);
}else{
if(RESULT.accuList.length == 9){
doAlert("これ以上スタンプできません。
クーポンに引き換えてください");
canStampWait();
stopStampAnimation();
canStamp = false;
return;
}
echoss.Stampcard.collect({
id: CUST_ID,
funckey: FUNCKEY,
stampParams: stampParams
}, function (result) {
canStamp = false;
stopStampAnimation();
chkDailyStamps(
result,
function(){
logError(CUST_ID, "", "当日中は同じ店舗でスタンプはできません。", "chkDailyStamps()",false);
doAlert("当日中は同じ店舗でスタンプはできません。");
getDetailinfo();
closeStamping();
},
function(){
$(".stamping-stamp-area").addClass("stampon-big");
canStampWait();
showLoading();
getDetailinfo();
setTimeout(function(){
closeStamping();
},1000);
}
);
}, function (code, message) {
stopStampAnimation();
canStampWait();
logError(CUST_ID, code, message, "echoss.Stampcard.collect()",false);
doAlert(errorCodeToMsg(code));
closeStamping();
});
}
}
function chkDailyStamps(result, isStampedCallback, noStampCallback){
var lastStampedMcntId = result.accuList[result.accuList.length-1].accuMcntId;
var today = moment().format("YYYYMMDD");
var isStampedToday = false;
result.accuList.forEach(function(accu){
if(accu.accuNo < result.allStampAccuCnt){
if(accu.accuDate == today && accu.accuMcntId == lastStampedMcntId){
isStampedToday = true;
}
}
});
//noStampCallback();
//return;
if(isStampedToday){
echoss.Stampcard.cancelCollectingByMerchant(
{
id: CUST_ID,
funckey: FUNCKEY,
merchant: lastStampedMcntId
},
function(r){
isStampedCallback();
},
function(c,m){
logError(CUST_ID, c, m, "echoss.Stampcard.cancelCollectingByMerchant()");
console.log(c + " / " + m);
}
);
}else{
noStampCallback();
}
}
function canStampWait(){
waiting = true;
setTimeout(function(){
waiting = false;
},2000);
}
function echossIssueCouponManually(id, funckey, cpncode){
return new Promise(resolve =>{
echoss.Stampcard.issueCouponManually(
{id: id, funckey: funckey, coupon: cpncode },
function(result){ resolve(result); },
function(code,msg){
logError(CUST_ID, code, msg, "echossIssueCouponManually()",true);
closeCouponSelector();
}
);
});
}
function echossCancelCouponManually(id, funckey, issueno){
return new Promise(resolve =>{
echoss.Stampcard.cancelCouponManually(
{
id: id,
funckey: funckey,
issueNo: issueno
},
function(result){
resolve(result);
},
function(code,msg){
logError(CUST_ID, code, msg, "echossCancelCouponManually()",true);
closeCouponSelector();
}
);
});
}
function echossStampcardGetDetailInfo(id, funckey){
return new Promise(resolve =>{
echoss.Stampcard.getDetailInfo(
{id: id, funckey: funckey},
function(result){ resolve(result); },
function(code, msg){
logError(CUST_ID, code, msg, "echossStampcardGetDetailInfo()",true);
closeCouponSelector();
}
);
});
}
function echossStampcardUseCoupon(id, funckey, issueNo, stampParams){
return new Promise(resolve =>{
echoss.Stampcard.useCoupon(
{id: id, issueNo: issueNo, funckey: funckey, type: "1",stampParams: stampParams},
function(result){
$.get(
"api/useCoupon/?custid=" + issueNo
+ "&cpnno=" + MKTG_COUPON_INFO.result.list[0].couponNo
+ "&merchant=" + result.merchant,
function(result2){
resolve(JSON.parse(result2));
},
);
},
function(code, msg){
logError(CUST_ID, code, msg, "echossStampcardUseCoupon()",true);
closeCouponSelector();
}
);
});
}
function echossMktgCouponUse(id, cpnno, stampParams){
return new Promise(resolve =>{
echoss.MarketingCoupon.useCoupon({
userId: id,
couponNo: cpnno,
stampParams: stampParams
}, function (result) {
resolve(result);
}, function (code, msg) {
logError(CUST_ID, code, msg, "echossMktgCouponUse()",true);
resolve(code);
});
});
}
function echossMktgCouponIssue(id, cpnCode){
return new Promise(resolve =>{
$.get(
"api/issueCoupon/?custid=" + id + "&cpncode=" + cpnCode,
function(result){ resolve(JSON.parse(result)); },
);
});
}
function echossMktgCouponCancel(cpnno){
return new Promise(resolve =>{
$.get(
"api/cancelCoupon/?cpnno=" + cpnno,
function(result){ resolve(JSON.parse(result)); },
);
});
}
function echossMktgCouponUseByMerchant(id, cpnno, merchant){
return new Promise(resolve =>{
$.get(
"api/useCoupon/?custid=" + id + "&cpnno=" + cpnno + "&merchant=" + merchant,
function(result){ resolve(JSON.parse(result)); },
);
});
}
function setProfileVerified(id){
return new Promise(resolve =>{
$.get(
"api/setAgeVerified/?encid=" + id,
function(result){
if(result == "err"){
logError(CUST_ID, "", "年齢認証できませんでした", "setProfileVerified()",false);
doAlert("年齢認証できませんでした");
clearFromStorage(ENCID_KEY);
window.location.reload();
}else{
resolve();
}
},
);
});
}
function logError(id,code,msg,func,doAlert=false){
$.get(
"api/errorLog/?userid=" + id + "&code=" + code + "&msg=" + msg + "&func=" + func
);
if(doAlert){
doAlert("再度読み込みを行ってからお試しください。("+code+")","エラーが発生しました。")
}
}
function clearProfile(){
doAlert(
"アカウント削除をすると溜めたスタンプやプロフィール情報は全て消去されます。よろしいですか?",
"","images/logo-mini.svg",true,
"はい","いいえ",
function(){
$.get(
"api/deleteProfile/?id=" + CUST_ID,
function(result){
clearFromStorage(ENCID_KEY);
window.location.reload();
}
);
}
);
}
function clearBrowser(){
clearFromStorage(ENCID_KEY);
window.location.reload();
}
function errorCodeToMsg(code){
switch(code){
case "A001":
return "スタンプを正しく認識できませんでした。画面内にゆっくりとスタンプを押してください(A001)";
case "ES06":
return "スタンプを正しく認識できませんでした。画面内にゆっくりとスタンプを押してください(ES06)";
}
return "エラーが発生しました(" + code + ")";
}