if (typeof itsmo == 'undefined') { var itsmo = {}; } if (typeof itsmo.vars == 'undefined') { itsmo.vars = {}; } // ローカルストレージ if (typeof itsmo.util === 'undefined') { itsmo.util = {}; } itsmo.util.LocalStorage = function() { this.storage = null; if (typeof localStorage == 'undefined') { } else { this.storage = localStorage; } }; itsmo.util.LocalStorage.prototype.canUse = function() { return null != this.storage; }; itsmo.util.LocalStorage.prototype.getItem = function(key) { if (!this.canUse()) { return null; } var n = this.storage.getItem(key); if (null == n) { return null; } var ret = JSON.parse(n); return ret; }; itsmo.util.LocalStorage.prototype.setItem = function(key, item) { if (!this.canUse()) { return false; } if (null != item) { item = JSON.stringify(item); } var flg = this.removeItem(key); this.storage.setItem(key, item); }; itsmo.util.LocalStorage.prototype.removeItem = function(key) { if (!this.canUse()) { return false; } return this.storage.removeItem(key); }; itsmo.util._local_storage_instance = null; itsmo.util.getLocalStorage = function() { if (null == itsmo.util._local_storage_instance) { itsmo.util._local_storage_instance = new itsmo.util.LocalStorage(); } return itsmo.util._local_storage_instance; }; itsmo.hair = function() {}; itsmo.hair.STR_PLEASE_SELECT = '選択してください'; itsmo.hair.initSearch = function() { $.getScript('/js/jquery.lazyload.min.js', function() { $('img.lazy').lazyload({ threshold:200, effect: "fadeIn" }); $(window).trigger('scroll'); }); // チェックボックス選択パラメータの取得 // ----------< beauty ドメイン変更対応 start >---------- //var workURL = window.location.pathname; // 例:'/beauty/hair/13/area2/area3/hf00/' // // 例:'/beauty/hair/13/area2/area3/hf00/p2/' //if (workURL.substr(workURL.length - 1, 1) == '/') { // // 末尾が / だったら予め除外 // workURL = workURL.substr(0, workURL.length - 1); //} // //var splitList = workURL.split('/'); //var flags = splitList[splitList.length - 1]; // 上記例の'hf00'ないし'p2'が入る //if (flags.match(/^p[0-9]+$/)) { // // URL末端がページ指定の場合は、その手前がチェックボックスパラメータ // flags = splitList[splitList.length - 2]; //} // 階層変更があっても耐えられるよう正規表現でフラグを取得するよう変更 var flags = '', url = window.location.pathname; if (url.match(/^[\s\S]+([\/]{1}[hf0-9_\-]+[\/]?)[\/]?[\s\S]+$/g)) { flags = RegExp.$1.replace('/', ''); } // ----------< beauty ドメイン変更対応 end >---------- // 絞り込み条件を調整 e = $('tr.conditionList'); e.find('input:checked').attr('checked', false); e.find('input:checkbox').each(function() { var f = $(this); var i = f.val(); if (i.length >= 1 && flags.indexOf(i) >= 0) { f.attr('checked', true); } }); // 最近見た店舗の更新 itsmo.hair.showHistoryShop(); }; itsmo.hair.cond_form_submit = function() { var url = itsmo.hair.makeSubmitUrl(); window.location.href = url; return false; }; itsmo.hair.cond_link_submit = function(id, useGenreID) { if (null == useGenreID || undefined == useGenreID) { // 条件設定 var elm = $("div.c-search-tbl-area #" + id).find('input:hidden'); var set_val = 0; if (elm.val() == 0) { elm.val(1); } else if (elm.val() == 1) { elm.val(0); } } else if (useGenreID == 'facet_tod') { $('#ajax_tod_num').val(id); $('#ajax_area_num').val(''); $('#ajax_station_num').val(''); } else if (useGenreID == 'facet_area') { $('#ajax_area_num').val(id); $('#ajax_station_num').val(''); } else if (useGenreID == 'facet_station') { $('#ajax_station_num').val(id); } var url = itsmo.hair.makeSubmitUrl(); window.location.href = url; return false; }; itsmo.hair.makeSubmitUrl = function(addParam, useGenreID) { var params = {}; var flgs = []; var urlparam = {}; var tod_cd = itsmo.lib.document_getvalue('ajax_tod_num'); if ('' != tod_cd && 'facet_tod' != useGenreID) { urlparam['tod_cd'] = tod_cd; } else { urlparam['tod_cd'] = 'area1'; } // 都道府県情報を取得。 do { urlparam['diareacd'] = 'area2'; urlparam['iareacd'] = 'area3'; if ('facet_area' == useGenreID || 'facet_tod' == useGenreID) { break; } var diareacd = $('#ajax_area_num').val(); if ('' != diareacd && undefined != diareacd) { urlparam['diareacd'] = diareacd; } if ('facet_station' == useGenreID) { break; } var iareacd = $('#ajax_station_num').val(); if ('' != iareacd && undefined != iareacd) { urlparam['iareacd'] = iareacd; } } while(false); // 検索フラグなどを取得。 $("div.BeautySearchBox tr.conditionList input:checked:visible").each(function() { var e = $(this); flgs.push(e.val()); }); if (params['rowcnt'] == '20') { params['rowcnt'] = null; } // URL の名称部とパラメータ部を作成。 var areas = []; for (i in urlparam) { areas.push(encodeURIComponent(urlparam[i])); } areas = areas.join('/'); var p = []; if (undefined != addParam) { p.push(addParam); } for (i in params) { if (null != params[i]) { p.push(i + '=' + encodeURIComponent(params[i])); } } p = p.join('&'); // ----------< beauty ドメイン変更対応 start >---------- //var url = '/beauty/hair/' + areas + '/'; var url = '/hair/' + areas + '/'; // ----------< beauty ドメイン変更対応 end >---------- flgs = flgs.join('_'); if (flgs) url += flgs + '/'; if ('' != p) { url += '?' + p; } return url; }; itsmo.hair.isNoneDisplayElement = function(e) { //while (!!e && e != g_document) { if (null == e) { return true; } e = e.parents(':hidden'); for (var i = 0; i < e.length; ++i) { if ('none' == e.eq(i).css('display')) { return true; } } return false; }; itsmo.hair.cond_toggle_icon = function(e, forceoff) { e = $(e); if (null == forceoff || undefined == forceoff) { forceoff = []; } else if (typeof forceoff == 'string') { forceoff = [ forceoff ]; } var cl = e.find('span:first').attr('class'); var isOn = ('-off' != cl.substring(Math.max(0, cl.length - 4)).toLowerCase()); if (isOn) { e.find('span:first').attr('class', cl + '-off').find('input:hidden').val('0'); e.find('span:last').removeClass('joken-on').addClass('joken-off'); } else { e.find('span:first').attr('class', cl.substring(0, cl.length - 4)).find('input:hidden').val('1'); e.find('span:last').removeClass('joken-off').addClass('joken-on'); $.each(forceoff, function() { e = $('#' + this); if ('1' == e.find('input:hidden').val()) { e.parent().click(); } }); } return false; }; itsmo.hair.cnt_select_ajax_id = null; itsmo.hair.cnt_select_ajax = function(type, id, e) { var t = $('#ajax_' + itsmo.hair.cnt_select_ajax_id + '_div'); var isShow = t.is(':visible'); itsmo.hair.cnt_select_close(); if (null != e && $(e).hasClass('box-s-off')) { return false; } if (isShow) { return false; } itsmo.hair.cnt_select_ajax_id = id; var t = $('#ajax_' + itsmo.hair.cnt_select_ajax_id + '_div'); if (id == 'facet_tod') { t.fadeIn('fast'); return false; } var url = itsmo.hair.makeSubmitUrl('xml=' + type, id); url = url.split('?'); url[1] = 'xml=' + type; itsmo.hair.cnt_show_loading(); itsmo.lib.XMLHttpRequest2_send(url[0], itsmo.hair.cnt_select_ajax_callback, 'GET', url[1]); return false; }; itsmo.hair.cnt_select_ajax_callback = function(result) { itsmo.hair.cnt_hide_loading(); var e = $('#ajax_' + itsmo.hair.cnt_select_ajax_id + '_div'); result = $(result); result = result.find('data'); if (itsmo.hair.cnt_select_ajax_id == 'facet_area') { e.find('#ajax_facet_area_seltitle').text($('#ajax_facet_tod_selbox').text()); } else if (itsmo.hair.cnt_select_ajax_id == 'facet_station') { e.find('#ajax_facet_station_seltitle').text($('#ajax_facet_area_selbox').text()); } e.find('ul').hide(); do { if (result.length <= 0) { e.find('ul:eq(1)').show(); break; } var lis = ''; result.each(function(i, domEle) { domEle = $(domEle); var nm = domEle.find('nm').text(); var val = domEle.find('val').text(); var cnt = domEle.find('cnt').text(); var vals = val.split(':'); var elm = e.find('#li_0').clone(true); elm.find('a').attr('name', nm).attr('href', '#' + val).find('span').html(nm + '(' + cnt + ')'); lis += '
  • ' + $(elm).html() + '
  • '; }); e.find('ul:first').html(lis).show(); break; } while(false); itsmo.hair.cnt_select_close(); e.fadeIn('fast'); }; itsmo.hair.cnt_select_close = function() { var names = [ 'ajax_facet_gnr1_divs' , 'ajax_facet_gnr2_divs' , 'ajax_facet_gnr3_divs' ]; $.each(names, function(i, n) { $("[name='" + n + "']").fadeOut('fast'); }); $('div.content').hide(); return false; }; itsmo.hair.cnt_show_loading = function() { $('#ajax_search_loading').fadeIn(300); }; itsmo.hair.cnt_hide_loading = function() { $('#ajax_search_loading').fadeOut(300); }; itsmo.hair.cnt_select_submit = function(id, e, val, prm) { if (null == e) { itsmo.hair.cnt_select_submit_clear(id); itsmo.hair.cnt_select_close(); return false; } if ((typeof e) == 'object') { e = $(e); if (undefined == prm) { prm = e.attr('href').split('#').pop(); } if (undefined == val) { val = e.attr('name'); if (undefined == val || '' == val) { val = e.attr('title'); } if (undefined == val) { val = ''; } } } itsmo.hair.cnt_select_close(); if ('facet_tod' == id) { $('#ajax_facet_tod_selbox').text(val); $('#ajax_facet_area_selbox' ).removeClass('box-s-off').addClass('box-s').text(itsmo.hair.STR_PLEASE_SELECT); $('#ajax_facet_area_selbox' ).next().removeClass('box-s-r-off').addClass('box-s-r'); $('#ajax_facet_area_selbox' ).prev().removeClass('box-s-l-off').addClass('box-s-l'); $('#ajax_facet_station_selbox' ).removeClass('box-s').addClass('box-s-off').text(''); $('#ajax_tod_num').val(prm); $('#ajax_area_num, #ajax_station_num').val(''); return false; } if ('facet_station' == id) { itsmo.lib.document_setvalue('ajax_facet_station_selbox', itsmo.hair.limitString(val, 10)); $('#ajax_station_name').val(val); itsmo.lib.document_setvalue('ajax_station_num', prm); return false; } // facet_area itsmo.lib.document_setvalue('ajax_facet_area_selbox', itsmo.hair.limitString(val, 10)); itsmo.lib.document_setvalue('ajax_area_num', prm); $('#ajax_facet_station_selbox').removeClass('box-s-off').addClass('box-s').text(itsmo.hair.STR_PLEASE_SELECT); $('#ajax_facet_station_selbox').next().removeClass('box-s-r-off').addClass('box-s-r'); $('#ajax_facet_station_selbox').prev().removeClass('box-s-l-off').addClass('box-s-l'); $('#ajax_station_num, #ajax_station_name').val(''); return false; }; itsmo.hair.cnt_select_submit_clear = function(id) { if ('facet_tod' == id) { $('#ajax_facet_tod_selbox').text(itsmo.hair.STR_PLEASE_SELECT); $('#ajax_facet_area_selbox' ).removeClass('box-s').addClass('box-s-off').text(''); $('#ajax_facet_area_selbox' ).next().removeClass('box-s-r').addClass('box-s-r-off'); $('#ajax_facet_area_selbox' ).prev().removeClass('box-s-l').addClass('box-s-l-off'); $('#ajax_facet_station_selbox' ).removeClass('box-s').addClass('box-s-off').text(''); $('#ajax_facet_station_selbox' ).next().removeClass('box-s-r').addClass('box-s-r-off'); $('#ajax_facet_station_selbox' ).prev().removeClass('box-s-l').addClass('box-s-l-off'); $('#ajax_tod_num').val(''); $('#ajax_area_num, #ajax_station_num').val(''); return false; } if ('facet_area' == id) { $('#ajax_facet_area_selbox').text(itsmo.hair.STR_PLEASE_SELECT); $('#ajax_facet_station_selbox' ).removeClass('box-s').addClass('box-s-off').text(''); $('#ajax_facet_station_selbox' ).next().removeClass('box-s-r').addClass('box-s-r-off'); $('#ajax_facet_station_selbox' ).prev().removeClass('box-s-l').addClass('box-s-l-off'); $('#ajax_facet_area_num').val(''); $('#ajax_station_num').val(''); return false; } $('#ajax_facet_station_selbox').text(itsmo.hair.STR_PLEASE_SELECT); $('#ajax_station_num').val(''); return false; }; itsmo.hair.cnt_select_close = function() { var names = [ 'ajax_facet_gnr1_divs' , 'ajax_facet_gnr2_divs' , 'ajax_facet_gnr3_divs' ]; $.each(names, function(i, n) { $("[name='" + n + "']").fadeOut('fast'); }); $('div.content').hide(); return false; }; itsmo.hair.onClickAreaChange = function(e) { e = $(e); var url = e.attr('href'); // 条件部分を削除。 url = url.replace('/hf[0-9]{2}(_hf[0-9]{2})*\/?$/', ''); // 条件を取得。 var flgs = []; $("div.BeautySearchBox tr.conditionList input:checked:visible").each(function() { var e = $(this); flgs.push(e.val()); }); flgs = flgs.join('_'); if (flgs.length >= 1) { url += encodeURIComponent(flgs) + '/'; } e.attr('href', url); }; itsmo.hair.limitString = function(s, n) { if (s.length < n) { return s; } return s.substring(0, n) + '...'; }; // コンテンツ表示 itsmo.hair.cnt_select = function(id, e) { var t = $('#ajax_' + id + '_div'); var isShow = t.is(':visible'); itsmo.hair.cnt_select_close(); if (null != e && $(e).hasClass('box-s-off')) { return false; } if (isShow) { return false; } t.fadeIn('fast'); return false; }; itsmo.hair.initTop = function() { // 最近見た店舗の更新 itsmo.hair.showHistoryShop(); }; itsmo.hair.showHistoryShop = function() { var n = itsmo.hair.getLastDetailID(); if (false != n && n.length >= 1) { n = encodeURIComponent(n.join(',')); // ----------< beauty ドメイン変更対応 start >---------- //itsmo.lib.XMLHttpRequest2_send('/beauty/hair/ajax/getdetail', itsmo.hair.callbackGetDetail, 'GET', 'pc=1&id=' + n, 'json'); itsmo.lib.XMLHttpRequest2_send('/hair/ajax/getdetail', itsmo.hair.callbackGetDetail, 'GET', 'pc=1&id=' + n, 'json'); // ----------< beauty ドメイン変更対応 end >---------- } }; itsmo.hair.callbackGetDetail = function(result) { if (result.length >= 1) { $('#idLastDetail ul').html(result); $('#idLastDetail').show(); } }; itsmo.hair.initDetail = function() { var id = $('#idDetailID'); if (id.length >= 1) { id = id.val(); itsmo.hair.addLastDetailID(id); if ($('#idRecommend').length >= 1) { itsmo.hair.getRecommend(id); } } // 最近見た店舗の更新 itsmo.hair.showHistoryShop(); }; // 詳細画面の地図タブでスクロール地図。 itsmo.hair.g_map_obj = null; itsmo.hair.initDetailTabMap = function() { if (typeof ZDC === 'undefined' || typeof ZDC.Map === 'undefined') { return; } var e = $('#idMap'); var s = e.attr('name').split('_'); var lat = parseInt(s[1], 10) / (60 * 60 * 1000); var lon = parseInt(s[2], 10) / (60 * 60 * 1000); var latlon = new ZDC.LatLon(lat, lon); var lvl = 15; ZDC._TILE_PATHS["4"] = ZDC._TILE_PATHS["24"]; itsmo.hair.g_map_obj = new ZDC.Map( e.get(0), { mapType: ZDC.MAPTYPE_COLOR, latlon: latlon, zoom: lvl } ); itsmo.hair.g_map_obj.dragOn(); itsmo.hair.g_map_obj.zoomOn(); // クリック地点を地図の中心点として移動 ZDC.addListener(itsmo.hair.g_map_obj, ZDC.MAP_CLICK, function(){ var latlon = itsmo.hair.g_map_obj.getClickLatLon(); itsmo.hair.g_map_obj.moveLatLon(latlon); }); e = new ZDC.UserWidget(latlon, { size: new ZDC.WH(22, 34), html: '', offset: new ZDC.Pixel(-10, -29) }); itsmo.hair.g_map_obj.addWidget(e); e.open(); var sz = new ZDC.WH(44, 44); e = new ZDC.StaticUserWidget({ top: 8, left: 8}, { html: '
    ', size: sz }); itsmo.hair.g_map_obj.addWidget(e); e.open(); e = new ZDC.StaticUserWidget({ top: 51, left: 8}, { html: '
    ', size: sz }); itsmo.hair.g_map_obj.addWidget(e); e.open(); }; // 履歴 itsmo.hair.KEY_LAST_ID_MAX_NUM = 5; itsmo.hair.KEY_LAST_ID = 'hpb_ids'; itsmo.hair.getLastDetailID = function() { var storage = itsmo.util.getLocalStorage(); if (!storage.canUse()) { return false; } var n = storage.getItem(itsmo.hair.KEY_LAST_ID); if (false == n || null == n || undefined == n) { n = []; } return n; }; itsmo.hair.addLastDetailID = function(id) { var n = itsmo.hair.getLastDetailID(); if (false === n) { return; } if ('' == id || null == id || false == id) { return; } n = $.map(n, function(v, i) { return id == v || '' == v ? null : v; }); n.unshift(id); while (n.length > itsmo.hair.KEY_LAST_ID_MAX_NUM) { n.pop(); } var storage = itsmo.util.getLocalStorage(); storage.setItem(itsmo.hair.KEY_LAST_ID, n); }; // 駅選択 itsmo.hair.initSelectStation = function() { var e = $('section.station-list'); e.find('h1 input:checkbox').click(itsmo.hair.selectStationClickRailway); e.find('ul input:checkbox').click(itsmo.hair.selectStationClickStation); }; // 路線名をクリック itsmo.hair.selectStationClickRailway = function(ev) { var bl = $(ev.target).attr('checked'); $('section.station-list li input:checkbox').attr('checked', !!bl); }; // 駅をクリック itsmo.hair.selectStationClickStation = function(ev) { var e = $('section.station-list'); var f = e.find('h1 input:checkbox'); e = e.find('li input:checkbox'); var num = e.length; e = e.filter(':checked').length; if (e <= 0) { // 全部チェックが外れたら路線名のチェックも外す。 f.attr('checked', false); } if (num == e) { // 全部チェックをつけたら路線名にもチェックを。 f.attr('checked', true); } }; itsmo.hair.selectStationSubmit = function() { var e = $('section.station-list li input:checkbox:checked'); if (e.length <= 0) { alert('駅を選択してください。'); return false; } if (e.length > itsmo.hair.maxStationNum) { alert('選択できる駅は' + itsmo.hair.maxStationNum + 'つまでです。'); return false; } var url = []; e.each(function() { url.push($(this).val()); }); url = url.join(','); url = $('#idBaseUrl').val().replace('___', 'st' + url); window.location.pathname = url; }; itsmo.hair.maxStationNum = 3; // 駅の最大指定数 itsmo.hair.selectStationClick = function() { var e = $('section.station-list li input:checkbox'); if (e.filter(':checked').length >= itsmo.hair.maxStationNum) { e.filter(':not(:checked)').attr('disabled', true); } else { e.attr('disabled', false); } }; itsmo.hair.getRecommend = function(id) { var latlon = $('#idRecommend').attr('latlon'); var prm = 'pc=1&id=' + id; if (latlon.length >= 3) { prm += '&latlon=' + latlon; } // ----------< beauty ドメイン変更対応 start >---------- //itsmo.lib.XMLHttpRequest2_send('/beauty/hair/ajax/getrecommend', itsmo.hair.callbackGetRecommend, 'GET', prm, 'html'); itsmo.lib.XMLHttpRequest2_send('/hair/ajax/getrecommend', itsmo.hair.callbackGetRecommend, 'GET', prm, 'html'); // ----------< beauty ドメイン変更対応 end >---------- }; itsmo.hair.callbackGetRecommend = function(result) { result = $.trim(result); if (result.length >= 1) { $('#idRecommend').html(result).show(); } };