/** * ... * @author hazuki */ //------------------------------------------------------PGM var PGM = function() { var that = this; $.when(this.ready()).then($.proxy(this.run, this)); }; PGM.NOT_LOGGED_IN = 0; PGM.INTERIM_REGISTERED = 1; PGM.REGISTERED = 2; PGM.NEWS_COUNT = 10; PGM.pageStartedAt = new Date().getTime(); PGM.setMain = function(func) { PGM.main = func }; PGM.PREFS = ["北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県","茨城県","栃木県","群馬県","埼玉県","千葉県","東京都","神奈川県","新潟県","富山県","石川県","福井県","山梨県","長野県","岐阜県","静岡県","愛知県","三重県","滋賀県","京都府","大阪府","兵庫県","奈良県","和歌山県","鳥取県","島根県","岡山県","広島県","山口県","徳島県","香川県","愛媛県","高知県","福岡県","佐賀県","長崎県","熊本県","大分県","宮崎県","鹿児島県","沖縄県","その他(国外)"] PGM.GORA_DEVELOPPER_ID = "4becc85d323c5d4172d43961de653a36"; PGM.GORA_API_URL = "http://api.rakuten.co.jp/rws/3.0/json?developerId="+PGM.GORA_DEVELOPPER_ID+"&operation=GoraGolfCourseDetail&version=2010-06-30&golfCourseId="; PGM.prototype = { status:0, ticket:"", run: function() { if (PGM.main) $.proxy(PGM.main, this)(); }, ready: function() { var dfd = $.Deferred(); var that = this; this.data = null; this.state = PGM.NOT_LOGGED_IN; this.level = PGM.NOT_LOGGED_IN; var req = $.get('/?p=mypage.profile.js_prf_get') .success(function(data) { $.proxy(that._setState, that)(data); }) .error(function(e) { }).complete(function() { }); dfd.resolve(); $(".cg_selected").change(function(){ var targetArray = $(this).val().split("_"); var targetType = targetArray[0]; var targetId = targetArray[1]; var targetURL = targetArray[2]; var link = ""; switch(targetType) { case 'area': switch(parseInt(targetId)){ case 1: link = "https://www.pacificgolf.co.jp/hokkaido/"; break; case 2: link = "https://www.pacificgolf.co.jp/tohoku/"; break; case 3: link = "https://www.pacificgolf.co.jp/kanto/"; break; case 4: link = "https://www.pacificgolf.co.jp/tokai_hokuriku/"; break; case 5: link = "https://www.pacificgolf.co.jp/kansai/"; break; case 6: link = "https://www.pacificgolf.co.jp/chugoku/"; break; case 7: link = "https://www.pacificgolf.co.jp/shikoku/"; break; case 8: link = "https://www.pacificgolf.co.jp/kyusyu/"; break; } break; case 'pref': break; case 'cc': link = "/guide/"+targetId+".html"; break; case 'other': var url = $(this).attr('url'); link = url+targetId; break; } if(link=="")return false; location.href = link; }); var param = PGM.Utils.getUrlVars(location); if(!!param["p"] && param["p"].match(/mypage/))this.setMypageHeader(param["p"]); $(".js-logout").click(function(){ that.logOut(); }); return dfd.promise(); }, _setState: function(data) { var that = this; this.data = data; if(!!$("#is_logedon").get(0))$("#is_logedon").val(1); if (!data) { if(!!$("#is_logedon").get(0))$("#is_logedon").val(0); this.state = PGM.NOT_LOGGED_IN; } else if (data.user_gender == '0') { this.state = PGM.INTERIM_REGISTERED; } else if (!!data.is_favorite && data.is_favorite == '1') { this.state = 3; } else { this.state = PGM.REGISTERED; } this.status = this.state; }, _setTicket:function(ticket){ var that = this; this.ticket = ticket; }, getTicket:function(){ return this.ticket; }, getApi: function(api, param, callback, reloadOnError) { return this._callApi('/', 'get', api, param, callback, reloadOnError); }, postApi: function(api, param, callback, reload_on_error) { return this._callApi('/', 'post', api, param, callback, reload_on_error); }, _callApi: function(url, method, api, param, callbacks, reloadOnError) { var that = this; var data = this.data; if (!$.isArray(callbacks)) callbacks = [callbacks]; var errorHandler = function(error) { that.showDialog(error, { ok: function () { if (reloadOnError) location.reload(); }}); }; if (typeof reloadOnError == 'function') errorHandler = reloadOnError; if (data) if (!!data.token) param.token = data.token; return $.ajax({ type: method, url: url + '?p=' + api, data: param, dataType: 'json', success: function(data) { var error = that._getApiError(data); if (error) { errorHandler(error); } else { for(var i = 0; i < callbacks.length; i++) { if(callbacks[i])(callbacks[i]).apply(that, [data]); } } }, error: function (xhr, status) { // console.log(status); if (api == 'mypage.profile.js_prf_get') { return; } var res = xhr.responseText; var data = (new Function("return " + res))(); if (api == 'mypage.profile.js_prf_update' || api == 'mypage.profile.js_pw_update' || api == 'mypage.escort.js_list_add' || api == 'reserve.js_escort') { errorHandler(data); }else{ var error = that._getApiError(data); if (error) { errorHandler(error); }else{ errorHandler(PGM.Text.get('error.load_error')); } } } }); }, _getApiError: function(result) { if (!!result && result.error) { for (var i in result.error.details || {}) { return result.error.details[i]; } } return null; }, getJson: function(json, subdir, callback, reload_on_error) { return this._callJson('/json', 'get', json, subdir, callback, reload_on_error); }, _callJson: function(url, method, json, subdir, callbacks, reload_on_error) { var that = this; var data = this.data; if (!$.isArray(callbacks)) callbacks = [callbacks]; var errorHandler = function(error) { that.showDialog(error, { ok: function () { if (reloadOnError) location.reload(); }}); }; if (typeof reloadOnError == 'function') errorHandler = reloadOnError; return $.ajax({ type: method, url: url + "/" + subdir + json, data: {}, dataType: 'json', success: function(data) { var error = that._getJsonError(data); if (error) { // console.log(api) errorHandler(error); } else { for(var i = 0; i < callbacks.length; i++) { (callbacks[i]).apply(that, [data]); } } }, error: function (xhr, status) { if(xhr.status == '404'){ callbacks[0].apply(that, []); } return; } }); }, _getJsonError: function(result) { if (result.error) { for (var i in result.error.details || {}) { return result.error.details[i]; } } return null; }, getGoraApi: function(api, param, callback, reloadOnError) { return this._callGoraApi('/', 'get', api, param, callback, reloadOnError); }, _callGoraApi: function(url, method, api, param, callbacks, reloadOnError) { var that = this; var data = this.data; if (!$.isArray(callbacks)) callbacks = [callbacks]; var errorHandler = function(error) { that.showDialog(error, { ok: function () { if (reloadOnError) location.reload(); }}); }; if (typeof reloadOnError == 'function') errorHandler = reloadOnError; return $.ajax({ type: method, url: api, data: param, dataType: 'jsonp', jsonp : 'jsoncallback', success: function(data) { var error = that._getJsonError(data); if (error) { // console.log(api) errorHandler(error); } else { for(var i = 0; i < callbacks.length; i++) { (callbacks[i]).apply(that, [data]); } } }, error: function (xhr, status) { var res = xhr.responseText; var data = (new Function("return " + res))(); // console.log(xhr); // console.log(data); } }); }, showDialog: function(text, option) { text = text.replace(/\\n/g, '\n'); option = option || {}; var body = $('
'); $.each(text.split('\n'), function (index, text) { var p = $('').appendTo(body); if (option.auto_link) { text = text.replace(/((?:\r|\n|.)*?)(s?https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]*[-_!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#])/g, function (match, plain, link) { p.append($('').text(plain), $('').attr({ href:link }).text(link)); return ''; }); } p.append($('').text(text)); }); if (!document.querySelectorAll) { $.each(['ok', 'back', 'register', 'close', 'confirm'], function (index, type) { if(option[type] != undefined && type=="confirm") { if(window.confirm(text)){ if ($.isFunction(option[type])) { (option[type])(); return false; } } else{ return false; } } else if(option[type] != undefined && type!="confirm") { window.alert(text); if ($.isFunction(option[type])) { (option[type])(); return false; } else{ return false; } } }); } if (!document.querySelectorAll) { return false; } var buttons = $('').appendTo(body); var hasButton = false; $.each(['ok', 'back', 'register', 'close', 'confirm'], function (index, type) { if(option[type] != undefined) { if (option[type] && type!="confirm") { hasButton = true; $('') .text(type) .addClass('dialog-' + type) .appendTo(buttons) .click(function () { $.unblockUI(); if ($.isFunction(option[type])) { (option[type])(); } }); }else if(option[type] && type=="confirm"){ hasButton = true; $('') .text("はい") .addClass('dialog-yes') .appendTo(buttons) .click(function () { $.unblockUI(); if ($.isFunction(option[type])) { (option[type])(); } }); $('') .text("いいえ") .addClass('dialog-no') .appendTo(buttons) .click(function () { $.unblockUI(); if ($.isFunction(option["no"])) { (option["no"])(); } }); } } }); var dialog = $('').append(body).appendTo(document.body); $.blockUI({ message:dialog, css:{ 'border-style':'none', background:'transparent', cursor:'default', top:'50%', 'margin-top':dialog.height() * -0.5 } }); if (!hasButton) { setTimeout(function () { $.unblockUI(); }, 2200); } }, showCouponDialog: function(text, option) { text = text.replace(/\\n/g, '\n'); option = option || {}; var body = $(''); $.each(text.split('\n'), function (index, text) { var p = $('').appendTo(body); if (option.auto_link) { text = text.replace(/((?:\r|\n|.)*?)(s?https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]*[-_!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#])/g, function (match, plain, link) { p.append($('').text(plain), $('').attr({ href:link }).text(link)); return ''; }); } p.append($('').text(text)); }); if (!document.querySelectorAll) { $.each(['ok', 'back', 'register', 'close', 'confirm'], function (index, type) { if(option[type] != undefined && type=="confirm") { if(window.confirm(text)){ if ($.isFunction(option[type])) { (option[type])(); return false; } } else{ return false; } } else if(option[type] != undefined && type!="confirm") { window.alert(text); if ($.isFunction(option[type])) { (option[type])(); return false; } else{ return false; } } }); } if (!document.querySelectorAll) { return false; } var buttons = $('').appendTo(body); var hasButton = false; $.each(['ok', 'back', 'register', 'close', 'confirm'], function (index, type) { if(option[type] != undefined) { if (option[type] && type!="confirm") { hasButton = true; $('') .text(type) .addClass('dialog-' + type) .appendTo(buttons) .click(function () { $.unblockUI(); if ($.isFunction(option[type])) { (option[type])(); } }); }else if(option[type] && type=="confirm"){ hasButton = true; $('') .text("同意して予約する") .addClass('dialog-yes') .appendTo(buttons) .click(function () { $.unblockUI(); if ($.isFunction(option[type])) { (option[type])(); } }); $('') .text("戻る") .addClass('dialog-no') .appendTo(buttons) .click(function () { $.unblockUI(); if ($.isFunction(option["no"])) { (option["no"])(); } }); } } }); var dialog = $('').append(body).appendTo(document.body); $.blockUI({ message:dialog, css:{ 'border-style':'none', background:'transparent', cursor:'default', top:'50%', 'margin-top':dialog.height() * -0.5 } }); if (!hasButton) { setTimeout(function () { $.unblockUI(); }, 2200); } }, showPopup: function(dialog, callback) { var th = this; $.blockUI({ message: dialog, css:{ width: '440px', 'border-style': 'none', background: 'transparent', cursor: 'default', top:'50%', 'margin-top':-20 }}); $('.dialog-close', dialog).unbind().click(function () { th.hidePopup(dialog); }); $('.dialog-no', dialog).unbind().click(function () { th.hidePopup(dialog); }); $('.dialog-ok', dialog).unbind().click(function () { th.hidePopup(dialog); if (callback) { callback(); } }); $('.dialog-yes', dialog).unbind().click(function () { th.hidePopup(dialog); if (callback) { callback(); } }); }, hidePopup: function() { location.hash = ''; $.unblockUI(); }, getStatus: function() { return this.status; }, setMypageHeader: function(param) { var _param = param.replace("mypage.","navi-"); if(_param == "navi-tpoint"){ _param = "navi-ypoint"; } for(var i=0; i < 9; i++) { var li = $("#g-navi li").get(i); if(!!li && _param.indexOf(li.id) >= 0) { $("#"+(li.id)).children('a').wrap(''); break; } } return; }, logOut: function(){ this.getApi('js_logout', {}, [], function (error) { that.showDialog(error, { ok: function() {} }); } ).complete(function() { location.href = "/"; }); } }; //--------------------------------------------------- PGM.Utils PGM.Utils = { /** * スタイルアイコン取得 */ getStyleIcnImage: function(type, is_enabled) { var _is_enabled = is_enabled == 1 ? "on" : "off"; var url = '/images/common/icn_' + type + '_' + _is_enabled + '.gif'; return url; }, /** * 数値のカンマ区切り */ parseNumber: function(target) { var num = new String(target).replace(/,/g, ""); while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); return num; }, /** * 数値を指定した数分左に0埋め * @usage zeroFill( 1, "3" ) // 001 */ zeroFill: function(number,digits) { var num = ("0" + parseInt(number)).slice(digits*-1); return num; }, /** * クエリの取得 */ getUrlVars: function(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i