$(function() {
var cookieNameFavorite = 'favorite_onsen_ids';
var cookieNameHistory = 'history_onsen_ids';
var cookieExpiresOnsenIds = 365; // お気に入り、履歴cookie有効期限
var favoriteMax = 20; // お気に入り最大件数
var historyMax = 20; // 履歴最大件数
// Cookieに温泉IDがあるかを判定
var hasOnsenId = function(targetCookie, onsenId) {
var result = false;
var targetCookieValue = $.cookie(targetCookie);
if (targetCookieValue && onsenId) {
result = (targetCookieValue.indexOf(onsenId) >= 0);
}
return result;
}
// Cookieから温泉ID削除
var removeOnsenId = function(targetCookie, onsenId, expires) {
var targetCookieValue = $.cookie(targetCookie);
if (targetCookieValue && onsenId) {
$.cookie(targetCookie, targetCookieValue.replace(new RegExp('(,|)' + onsenId), '').replace(/^,/, ''), { path: '/', expires: expires });
}
}
// 最後クッキー削除場合お気に入りポップの内容セット処理
var setFavoriteContentToFavoritePopup = function(onsenId, $this) {
var favoriteCookieData = $.cookie(cookieNameFavorite);
if (favoriteCookieData === onsenId) {
$(".ui-popup .ui-card-heading-text").text("★お気に入りを利用する方へ");
$(".ui-popup .uiCardBodyContents").html("ログインするとお気に入りの施設を登録できます。会員登録がまだの方は会員登録をしてお気に入りを登録しましょう。");
$("#headerFavoriteBtn").addClass("disabled");
if (!$this.hasClass('saved')) { // 保存前
$('[data-add-favorite]').addClass('saved').text('お気に入りに登録済み');
}
else { // 保存済み
$('[data-add-favorite]').removeClass('saved').text('お気に入りに追加');
/* ToDo お気に入りから削除処理 */
}
}
}
// Cookieへ温泉ID追加
var addOnsenId = function(targetCookie, onsenId, expires, max) {
if (onsenId) {
// 対象cookieを一度削除
removeOnsenId(targetCookie, onsenId, cookieExpiresOnsenIds);
var targetCookieValue = $.cookie(targetCookie);
// お気に入り
if (targetCookie === cookieNameFavorite) {
// 末尾に追加
targetCookieValue = ((targetCookieValue) ? targetCookieValue + ',' : '') + onsenId;
// 上限超えた場合の制御、追加不可
if (targetCookieValue.split(',').length > favoriteMax) {
alert('お気に入りに登録できるのは' + favoriteMax + '件までです。');
return false;
}
}
// 最近の履歴
else if (targetCookie === cookieNameHistory) {
// 先頭に追加
targetCookieValue = onsenId + ((targetCookieValue) ? ',' + targetCookieValue : '');
if (targetCookieValue.split(',').length > historyMax) {
// 末尾からID除去
targetCookieValue = targetCookieValue.replace(new RegExp('(,|)[^,]+$'), '');
}
}
// cookie値更新
$.cookie(targetCookie, targetCookieValue, { path: '/', expires: expires });
return true;
}
return false;
}
// お気に入りajax
var favoriteManagerRegist = function(favoriteType, onsenId, updateFlag) {
var favoriteManagerUrl = "";
var paramUpdateFlag = "";
if (updateFlag) {
paramUpdateFlag = "&updateFlag=" + updateFlag;
}
if (favoriteType !== null && onsenId !== null) {
favoriteManagerUrl = "/parts/api/my-page/api_regist_favorite_manager.jsp?"
+ "favoriteType=" + favoriteType
+ "&onsenId=" + onsenId
+ paramUpdateFlag;
$.ajax({
type: "POST",
url: favoriteManagerUrl,
}).done(function(data) {
if (data.result == "1") {
if (favoriteType == "1") {
$('.ui-popup.modal-favorite').fadeIn();
}
} else if (data.result == "5") {
$(".ui-popup#modal-favorite-max-failed").fadeIn();
} else {
if (favoriteType == "1") {
$(".ui-popup#modal-add-favorite-failed").fadeIn();
} else {
$(".ui-popup#modal-delete-favorite-failed").fadeIn();
}
}
}).fail(function(jqXHR, textStatus, errorThrown){
if (favoriteType == "1") {
$(".ui-popup#modal-add-favorite-failed").fadeIn();
} else {
$(".ui-popup#modal-delete-favorite-failed").fadeIn();
}
});
}
}
// お気に入りの値チェック
var checkFavoriteCookiesValue = function(){
var favoriteCookieDatas = $.cookie(cookieNameFavorite);
if (favoriteCookieDatas && favoriteCookieDatas != null
&& favoriteCookieDatas != "" && favoriteCookieDatas != '""') {
return true;
}
return false;
}
// 履歴追加
$('[data-add-history]').each(function(e) {
var onsenId = $(this).attr('data-id');
if (onsenId) {
addOnsenId(cookieNameHistory, onsenId, cookieExpiresOnsenIds, historyMax);
}
});
// お気に入り登録ボタン
var cookieNameFavoriteValue = $.cookie(cookieNameFavorite);
if (cookieNameFavoriteValue) {
var cookieNameFavoriteArray = cookieNameFavoriteValue.split(",");
for (var i = 0; i <= cookieNameFavoriteArray.length; i++) {
$("[data-add-favorite][data-id='" + cookieNameFavoriteArray[i] + "']").addClass('saved');
$("[data-add-favorite][data-id='" + cookieNameFavoriteArray[i] + "']").html('お気に入りに登録済み');
}
}
// ユーザーのお気に入り登録済み判定
var favoritedListAuthValue = $("#favoritedListAuth").val();
if (favoritedListAuthValue) {
$("#headerFavoriteBtn").hasClass("disabled") ? $("#headerFavoriteBtn").removeClass("disabled") : "";
var favoritedArray = favoritedListAuthValue.split(",");
for (var i = 0; i <= favoritedArray.length; i++) {
$("[data-add-favorite-auth][data-id='" + favoritedArray[i] + "']").addClass('saved');
$("[data-add-favorite-auth][data-id='" + favoritedArray[i] + "']").html('お気に入りに登録済み');
}
}
$(document).on('click', '[data-add-favorite]', function(e) {
var onsenId = $(this).attr('data-id');
if (onsenId) {
// お気に入り登録
if (!$(this).hasClass('saved')) {
// パータン:ログインしていない方、かつ、お気に入りデータがある:
if (checkFavoriteCookiesValue()) {
if (addOnsenId(cookieNameFavorite, onsenId, cookieExpiresOnsenIds, favoriteMax)) {
$(".loginRedirectPage").attr("href", "/login/?ref=" + encodeURIComponent(document.URL));
$('.ui-popup.modal-favorite').fadeIn();
}
}
// パータン: ログインしたことがある方の未ログイン状態 / ログインしていない方、かつ、お気に入りデータが無い:
else {
$(".loginRedirectPage").attr("href", "/login/?ref=" + encodeURIComponent(document.URL));
$('.ui-popup.modal-favorite').fadeIn();
}
}
// お気に入りから削除
else {
// 最後クッキー削除場合お気に入りポップの内容セット
setFavoriteContentToFavoritePopup(onsenId, $(this));
removeOnsenId(cookieNameFavorite, onsenId, cookieExpiresOnsenIds);
}
}
return false;
});
// お気に入りから削除ボタン
$(document).on('click', '[data-remove-favorite]', function(e) {
var dataId = $(this).attr('data-id');
if (dataId) {
// 最後クッキー削除場合お気に入りポップの内容セット
setFavoriteContentToFavoritePopup(dataId, $(this));
removeOnsenId(cookieNameFavorite, dataId, cookieExpiresOnsenIds);
}
return false;
});
// ポップアップを消す
$('.favorite-popup-close').click(function(){
$(this).closest(".ui-popup").fadeOut();
});
// お気に入りの失敗ポップアップ閉じるボタン
$(".favoriteFailedClose").on("click", function () {
location.reload();
});
// ユーザーのお気に入りポップアップのお気に入り追加ボタン
$("[data-add-favorite-auth]").on("click", function () {
var onsenId = $(this).attr('data-id');
if (onsenId) {
// お気に入り登録
if (!$(this).hasClass('saved')) {
favoriteManagerRegist("1", onsenId, "1");
}
// お気に入りから削除
else {
favoriteManagerRegist("2", onsenId, "");
}
}
});
});