$(function () { 'use strict'; if( !$('#main').hasClass('step1') ) return; var base_path = location.pathname.replace(/\/+$/, '') + '/'; var max_city_word = location.pathname.replace(/\/+$/, '').replace(/.*\//, ''); var $contact = $('#main .contact'); // 都市の選択肢毎に $('#cities_wrapper li > a').each(function () { var $link = $(this); // 次のURL(都市コードXX-YY-ZZZのZZZをアンダーバーで連結した文字列:rom_bcn) var next_uri = []; $link.children('b').each(function () { next_uri.push($(this).data('code').split('-')[2]); }); // URLセット this.href = base_path + next_uri.join('_').toLowerCase() + '#tab_wrapper'; }); // 都市コード組み合わせ全パターン取得、都市の選択肢毎にツアーがあるかどうかAPI検査 // 選択肢の都市コードが含まれる組み合わせが1つでもツアーあれば他の組み合わせは検査不要 // APIコールができるだけ少なくなるよう考慮する $(window).load(function() { //var count = 0; //var start = (new Date).getTime(); $.get(API_CITIES_COMBINATIONS + max_city_word, function (combinations) { console.log('ぜんぶで', combinations.length, '通りの組み合わせがあります'); // 全組み合わせの中から指定の都市コード(複数)を持つ組み合わせを抽出 var combinations_filter = function (codes) { var filterd = []; for (var i = combinations.length; i--;) { if (ArrayContain(codes, combinations[i])) { filterd.unshift(combinations[i]); } } return filterd; }; // ツアー検索結果 var results = {}; // 都市の選択肢毎に $('#cities_wrapper li > a').each(function () { var $link = $(this); // 都市コード var codes = []; $link.children('b').each(function () { codes.push($(this).data('code')); }); // 都市コードを含む周遊ツアーがあるかどうかAPI検査 var result; $link.on('toursearch', function () { result = null; // 自身のコードを含む組み合わせについて $.each(combinations_filter(codes), function () { var combination = this; var combination_codes = combination.join(','); if (combination_codes in results) { // API検査開始済み result = results[combination_codes]; if (result.ajax) { // API検査中、終了 return false; } else if (result.enable) { // ツアーあり、終了 return false; } else if (result.disable) { //console.log(combination_codes,'ツアーなかったので次の組み合わせを調べます'); return true; } //console.log(combination_codes,'ツアーがあるかないかわかりません'); return true; } //console.log(combination_codes,'ツアーがあるかどうかAPIで調べます'); result = {}; (function (result) { var query = '?' + makeQueryString(tourSearchQuery(combination)); var url = API_TOUR_SEARCH_DEPARTURES + query; result.ajax = $.ajax({ url: url, success: function (deps) { // API結果保存 if (deps.length) { // ツアーあり result.enable = true; } else { // ツアーなし result.disable = true; } }, complete: function () { result.ajax = null; //var time = (new Date).getTime() - start; //console.log(++count +'回目API完了 '+ (time/1000) + ' s ('+ query +')'); // 全体再チェック $('#cities_wrapper li > a').trigger('toursearch'); } }); })(result); results[combination_codes] = result; return false; }); if (result) { if (result.ajax) { //console.log(codes.join(','),'API検査中待機...'); } else if (result.enable) { //console.log(codes.join(','),'ツアーありました'); } else if (result.disable) { //console.log(codes.join(','),'ツアーありませんでした'); if( !$link.parent().hasClass('disable') ){ $link.removeAttr('href').parent().addClass('disable').append($contact.clone()); } } } }).trigger('toursearch'); }); }); }); });