$(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');
}
});
});