$(document).ready(function(){ var next = true; var before = ''; var optionGroupBy = false; var parentCls = 'autocomplete-suggestions layout1'; var parentClsSingle = 'autocomplete-suggestions'; var logTimeout = null; optionGroupBy = true; parentCls = 'autocomplete-suggestions layout2'; // ログを保存する saveLog = function(suggestion , i){ if(suggestion){ var div = suggestion.poolDiv; if(div != 99 && div != 98){ var pool = suggestion.pool; var pick = suggestion.pick; var behavior = suggestion.behavior; var sugText = suggestion.text; var msf = suggestion.msf; var text = $('.ems_suggest_' + i).prevAll('.tag_icon_search_key').val(); if(sugText){ text = sugText; } var param = 'text=' + encodeURI(text); param += '&pool_div=' + div; param += '&pool=' + pool; if(pick){ param += '&pick=' + pick; } if(behavior){ param += '&search_behavior_div=' + behavior; } if(msf){ param += '&msf=' + msf; } $.ajax({ type:'POST', url:'./c-item-list/suggestPool?' + param, success :function(data) { } }); } } } chatListDisp = function(text){ var searchForm = $('from[name="ITEM_LIST_SEARCH_FORM"]'); if($(searchForm).length == 0){ window.location.href = './c-item-list?keyword=' + text; }else{ $(searchForm).find('input[name="keyword"]').val(text); $(searchForm).submit(); } } var chatStartRet = false; chatStart = function(ele){ var ajaxRes; if(chatStartRet){ return; } var query = $(ele).attr('data-text'); chatStartRet = true; ajaxRes = $.ajax({ type: 'POST', url: './c-item-list/suggest?search=' + encodeURI(query), success :function(data) { data = JSON.parse(data); answer($('#chat_box_area') , query); var html = chatHTML(data); $('#chat_box_area').html(html); chatBoxDelay(1); chatBottomGo(); var gtagLoad = $('#Ems_Gtag_Load').val(); if(gtagLoad == 1){ gtagSet(); } $('#chat_box_window').emsDialog('open'); clearTimeout(logTimeout); // クリックhidden $('#chat_box_area').prepend(''); chatStartRet = false; } }).fail(function(jqXHR, textStatus) { if (textStatus === 'abort') { return; } }); } chatClose = function(ele){ $('#chat_box_window').emsDialog('close'); } chatBottomGo = function(){ var size = $('.chat_box_area .chat_box:not(".none")').length; if(size > 0){ var fristEle = Math.abs($('.chat_box_area .chat_box').eq(0).offset().top); var endEle = Math.abs($('.chat_box_area .chat_box').eq(size -1).offset().top); var sc = fristEle + endEle; $('#chat_box_area').stop().animate({scrollTop:sc}, 1500 , "swing"); } } suggest = function(){ var ele = $('.tag_icon_search_key'); var old = false; if($(ele).length == 0){ ele = $('input[name="keyword"]'); // 旧 if($(ele).length > 0){ // 旧テンプは検索inputの親にdivがないので強制的に作成する var serachDiv = "
"; $(ele).wrap(serachDiv); old = true; } } // 要素無し if($(ele).length == 0){ return; } $(ele).each(function(i){ var append = $($(ele).eq(i)).parent('li.search_keyword'); if(old){ append = $($(ele).eq(i)).parent('.suggest_search'); } var ajaxRes; $($(ele).eq(i)).EmsAutocomplete({ lookup: function(query , done){ if(before != query){ before = query; } if(ajaxRes){ if(ajaxRes.readyState > 0 && ajaxRes.readyState < 4){ ajaxRes.abort(); } } next = true; ajaxRes = $.ajax({ type: 'POST', url: './c-item-list/suggest?search=' + encodeURI(query), success :function(data) { data = JSON.parse(data); done(data); clearTimeout(logTimeout); $(window).scrollTop(140); $('.autocomplete-suggestions').stop().animate({scrollTop:0},0 , "swing"); if(data.suggestions.length != 0){ logTimeout = setTimeout(function(){ var secondJson = { poolDiv : '50' ,pool : '' ,pick : '' }; //saveLog(secondJson , i); } , 3000); var readyFunc = data.suggestions[0].readyScript; if(readyFunc){ eval(readyFunc); } } // 遅延 chatBoxDelay(); } }).fail(function(jqXHR, textStatus) { if (textStatus === 'abort') { return; } }); }, deferRequestBy:300, appendTo: append, maxHeight: 'calc(100vh - 70px)', containerClass: parentCls + ' ems_suggest_' + i, groupBy: optionGroupBy, addSerial: i, onSelect: function(suggestion , index) { } }); }); } // ディレイをかける chatBoxDelay = function(bottom){ $('.chat_box:not(".delay_comp")').each(function(){ var attrDelay = $(this).attr('data-delay'); if(attrDelay){ var delayDom = $(this); setTimeout(function(){ $(delayDom).removeClass('none'); if(bottom){ chatBottomGo(); } } , attrDelay); } $(this).addClass('delay_comp'); }); } // チャットHTML追加 chatHTML = function(data){ var html = ''; var groupSet = ''; var index = $('.autocomplete-suggestion').length; var prevCls = ''; $.each(data.suggestions , function(i , suggestion){ var cls = suggestion.group; if(cls == 'ex'){ $('.chat_page_next').val(suggestion.next); return true; } if(optionGroupBy){ if(groupSet != suggestion.group || cls == 'msg'){ html += $.fn.EmsCreateChatBox( i , suggestion , prevCls); groupSet = suggestion.group; } } prevCls = cls; if(cls != 'msg' && cls != 'msg_text' && cls != 'chat_code'){ if(cls != 'more' && cls != 'dic' && cls != 'close'){ html += '
'; } html += suggestion.value; if(cls != 'more' && cls != 'dic' && cls != 'close'){ html += '
'; } } if(data.suggestions.length == (parseInt(i) + parseInt(1)) && optionGroupBy){ if(cls != 'more' && cls != 'dic' && cls != 'close'){ html += ''; // グループ閉じタグ if(cls != 'msg' && cls != 'msg_text' && cls != 'chat_code'){ html += ''; // グループ親 } } html += ''; // チャットボックス } }); return html; } answer = function(ele , text){ var answer = { group : 'msg' ,chatText : text ,icon: '0' ,iconHtml : '
' ,right: 1 }; var answerSugg = {suggestions : [answer]}; var answerHtml = chatHTML(answerSugg); $(ele).append(answerHtml); var gtagLoad = $('#Ems_Gtag_Load').val(); if(gtagLoad == 1){ gtagSet(); } } // もっと見る押下 suggestMore = function(query , thisEle , rep){ if(next){ var moreDiv = $(thisEle).attr('data-more-div'); var nsItem = $(thisEle).attr('ns-item'); var nsMall = $(thisEle).attr('ns-mall'); var bfChatId = $(thisEle).attr('data-before-chat'); var his = $(thisEle).attr('data-his'); var _url = './c-item-list/suggest?search=' + encodeURI(query) + '&more=1'; var text = $(thisEle).text(); var chatUrlParam = ''; if(text == ''){ text = query; if(rep){ text = rep; } } if(nsItem){ _url += '&ns_item=' + nsItem; } if(nsMall){ _url += '&ns_mall=' + nsMall; } if(moreDiv){ _url += '&more_div=' + moreDiv; } if(bfChatId){ _url += '&bf_chat_id=' + bfChatId; chatUrlParam += '&bf_chat_id=' + bfChatId; } if(his){ _url += '&his=' + his; chatUrlParam += '&his=' + his; } $(thisEle).closest('.chat_box').nextAll().remove(); // エンドユーザー回答 var chatArea = $('.' + parentClsSingle); if($(thisEle).closest('.chat_box_area').length > 0){ chatArea = $(thisEle).closest('.chat_box_area'); } answer( chatArea , text); // 選択肢のonclickを削除 var parentSelect = $(thisEle).closest('.suggest_select'); $(parentSelect).find('a').each(function(){ $(this).removeAttr('onclick'); }); // セレクト選択ならログ保存 if($(thisEle).hasClass('more_select')){ var suggestion = { poolDiv : -1 ,pool : '' ,pick : '' ,behavior: '2' ,text: text }; var searchNo = $(thisEle).closest('.autocomplete-suggestions').attr('data-serial'); saveLog(suggestion , searchNo); } $.ajax({ type: 'POST', url: _url, success :function(data) { // サジェストに直接追加するパターン data = JSON.parse(data); var html = chatHTML(data); $(chatArea).append(html); chatBoxDelay(1); chatBottomGo(); var gtagLoad = $('#Ems_Gtag_Load').val(); if(gtagLoad == 1){ gtagSet(); } if(moreDiv == 3){ // おすすめ商品 or カスタム選択肢 var msf = 0; if($('input[name="msf"]').length > 0){ msf = $('input[name="msf"]:checked').val(); } var pjaxParam = 'sort=5'; pjaxParam += chatUrlParam; var chatUse = '0'; if($('input[name="cu"]').length > 0){ chatUse = $('input[name="cu"]').val(); } pjaxParam += '&msf=' + msf + '&cu=' + chatUse; pageChange(false , 'c-item-list?' + pjaxParam , false); } } }); } } // トレンドセット setTrend = function(eleThis){ var setText = $(eleThis).attr('data-text'); var keyEle = $('input[name="keyword"]').eq(0); $(keyEle).val(setText); setTimeout(function(){$(keyEle).focus();} , 100); } // 表示辞書 dispUserDic = function(ele , base){ $(ele).closest('.chat_box').nextAll().remove(); var _url = './c-item-list/suggest?dic_disp=1&dic_base_text=' + encodeURI(base); ele.removeAttribute("onclick"); $.ajax({ type: 'POST', url: _url, success :function(data) { // サジェストに直接追加するパターン data = JSON.parse(data); var html = chatHTML(data); if($(ele).closest('.chat_box_area').length > 0){ $(ele).closest('.chat_box_area').append(html); }else{ $('.' + parentClsSingle).append(html); } chatBottomGo(); } }); } dispNextChat = function(ele){ var html = '
'; var disp = { group : 'dic' ,name : 'next' ,poolDiv : 3 ,value : html }; var nextHtml = chatHTML({suggestions : [disp]}); $(ele).closest('.chat_box').nextAll().remove(); if($(ele).closest('.chat_box_area').length > 0){ $(ele).closest('.chat_box_area').append(nextHtml); }else{ $('.' + parentClsSingle).append(nextHtml); } } nextChat = function(ele){ var keyword = $(ele).prev('.next_chat').val(); suggestMore(keyword , ele , keyword); } // ニックネーム保存 nickNameInsert = function(ele){ var nick = $(ele).prev('.nick_name').val(); var id = $(ele).attr('data-suggest-id'); var _url = './c-item-list/nickIinsert?nick_name=' + encodeURI(nick) + '&suggest_id=' + id; $.ajax({ type: 'POST', url: _url, success :function(data) { data = JSON.parse(data); var html = chatHTML(data); if($(ele).closest('.chat_box_area').length > 0){ $(ele).closest('.chat_box_area').append(html); }else{ $('.' + parentClsSingle).append(html); } chatBottomGo(); } }); } // 辞書登録 saveUserDic = function(ele){ var base = $(ele).attr('data-base'); var rep = $(ele).prev('.user_dic_rep').val(); if(typeof rep === 'undefined'){ rep = $(ele).text(); } var _url = './c-item-list/userDicInsert?base=' + encodeURI(base) + '&rep=' + encodeURI(rep); $.ajax({ type: 'POST', url: _url, success :function(data) { suggestMore(base , ele , rep); $(ele).closest('div').remove(); } }); } // 辞書削除 delUserDic = function(ele){ $(ele).closest('.chat_box').nextAll().remove(); var base = $(ele).attr('data-base'); var _url = './c-item-list/userDicDelete?base=' + encodeURI(base); $.ajax({ type: 'POST', url: _url, success :function(data) { suggestMore(base , ele); $(ele).closest('li').remove(); } }); } anchorLog = function(thisEle){ var pool = $(thisEle).closest('.save_ele').attr('data-pool'); var poolDiv = $(thisEle).closest('.save_ele').attr('data-pool-div'); var poolPick = ''; if(poolDiv == '2'){ poolPick = $(thisEle).closest('.save_ele').attr('data-pick'); } var suggestion = { poolDiv : poolDiv ,pool : pool ,pick : poolPick }; var searchNo = $(thisEle).closest('.autocomplete-suggestions').attr('data-serial'); saveLog(suggestion , searchNo); } $('#chat_box_window').emsDialog({ width: 'auto', height: 'auto', dialogClass: 'fix_dlg chat_dlg', closeCallback: function(event){ chatScrollRelease(); }, openCallback: function(){ chatScrollFix(); } }); // サジェスト発火(一旦休止) // suggest(); // 初期値が入っていたらチャットを起動する var chatBox = $('#chatSearchText').length; if(chatBox > 0 && $('#chatSearchText').val() != ''){ chatSearch($('#chatSearchText').val()); } var scrollFlg = false; var y = 0; $(document).on('mouseover' , '.chat_box_area' , function(e){ var sc = $(this).scrollTop(); var clickY = e.pageY ; var clientRect = this.getBoundingClientRect() ; var positionY = clientRect.top + window.pageYOffset; y = clickY - positionY; y = y + sc - parseInt(10); }); $(document).on('click' , '#chat_box_window .more_select.suggest_cmn_select , #chat_box_window .common_ok_btn' , function(e){ $('.ems_dlg_ele').stop().animate({scrollTop:y}, 900 , "swing"); }) $(document).on('click' , '.' + parentClsSingle + ' , .chat_box_area' , function(e){ var click = $(this).find('.chat_click').val(); if(click == 0){ // チャットエリアクリックフラグ更新 $(this).find('.chat_click').val(1); var keyword = $(this).find('.chat_keyword').val(); // ログを更新する var searchNo = $(this).attr('data-serial'); var suggestion = { poolDiv : -1 ,pool : '' ,pick : '' ,text : keyword ,behavior: '1' }; saveLog(suggestion , searchNo); } }); var chatBodyObj = $('body'); var chat_body_position; var chat_body_top; chatScrollFix = function() { chatBodyObj = $('body'); var bodyPosi = chatBodyObj.css('position'); if(!(typeof bodyPosi === 'undefined')){ chat_body_position = chatBodyObj.css('position').toLowerCase(); }else{ chat_body_position = ''; } if( chat_body_position != 'fixed') { chat_body_top = $(window).scrollTop(); chatBodyObj.css({ 'position': 'fixed', 'width': '100%' }); } } chatScrollRelease = function() { chatBodyObj.css({ 'position': '', 'width': '', 'top': '' }); //scroll位置復帰 $("html, body").scrollTop(chat_body_top); } $(document).on('keyup' , '.' + parentClsSingle + ' .next_chat' , function(e){ if(e.keyCode == 13){ // Enter key $(this).nextAll('.next_chat_send').trigger('click'); } }); });