PageSourceSearch

https://fida.org.ng/wp-content/plugins/chatbot/js/qcld-wp-chatbot-plugin.js?ver=8.8.0

js fida.org.ng collected 2026-10-02 05:50:45 UTC 211,037 bytes, 3,722 lines download raw bytes

1/*
2 * Project:      wpwBot jQuery Plugin
3 * Description:  wpwBot AI based Chatting functionality are handled .
4 * Author:       QuantumCloud
5 * Version:      1.0
6 */
7var wpwKits;
8(function($) {
9    /*
10     * Global variable as object will beused to handle
11     * wpwbot chatting initialize, tree change transfer,
12     * changing tree steps and cookies etc.
13     */
14    var globalwpw={
15        initialize:0,
16        settings:{},
17        wildCard:0,
18        wildcards:'',
19        wildcardsHelp:['start','support','reset', 'search', 'email'],
20        productStep:'asking',
21        orderStep:'welcome',
22        supportStep:'welcome',
23		formStep: 'welcome',
24        formfieldid:'',
25        formid:'',
26        formentry:0,
27        hasNameCookie:$.cookie("shopper"),
28        shopperUserName:'',
29        shopperEmail:'',
30        shopperMessage:'',
31        emptymsghandler:0,
32        repeatQueryEmpty:'',
33        wpwIsWorking:0,
34        ai_step:0,
35        df_status_lock:0,
36		counter:0
37    };
38    /*
39     * wpwbot welcome section coverd
40     * greeting for new and already visited shopper
41     * based the memory after asking thier name.
42     */
43    var wpwWelcome={
44        greeting:function () {
45            //generating unique session id.
46            if(!localStorage.getItem('botsessionid')){
47                var number = Math.random() // 0.9394456857981651
48                number.toString(36); // '0.xtis06h6'
49                var id = number.toString(36).substr(2); // 'xtis06h6'
50                localStorage.setItem('botsessionid', id);
51            }
52         //   console.log(globalwpw.settings.obj.skip_wp_greetings=='1')
53            if((globalwpw.settings.obj.skip_wp_greetings=='1') || (globalwpw.settings.obj.skip_greetings_and_menu =='1') ){
54            }else{
55                //Very begining greeting.
56                if(globalwpw.settings.obj.re_target_handler==0){
57                var botJoinMsg="<strong>"+wpwMsg.oncommand_filter(globalwpw.settings.obj.agent)+" </strong> "+wpwKits.randomMsg(globalwpw.settings.obj.agent_join);
58                wpwMsg.single(botJoinMsg);
59                }
60                //Showing greeting for name in cookie or fresh shopper.
61                setTimeout(function(){
62                    var firstMsg=wpwKits.randomMsg(globalwpw.settings.obj.hi_there)+' '+wpwKits.randomMsg(globalwpw.settings.obj.welcome)+" <strong>"+globalwpw.settings.obj.host+"!</strong> ";
63                    var secondMsg=wpwKits.randomMsg(globalwpw.settings.obj.asking_name);
64                        wpwMsg.double(firstMsg,secondMsg);
65                }, globalwpw.settings.preLoadingTime*2);
66            }
67           
68            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
69            if(globalwpw.settings.obj.skip_greetings_and_menu != 0){
70              wpwMsg.single(serviceOffer);
71            }
72            if( ( globalwpw.settings.obj.show_menu_after_greetings!=0 ) && ( globalwpw.wildcards !='' ) ){
73				wpwMsg.double_nobg(serviceOffer, globalwpw.wildcards);
74            } if( ( globalwpw.settings.obj.skip_wp_greetings !=0 ) && ( globalwpw.wildcards !='' ) ){
75                wpwMsg.double_nobg(serviceOffer, globalwpw.wildcards);
76            } else{
77                //wpwMsg.single(serviceOffer);
78            }
79        }
80    };
81    function qcldPushAiContext(role, content) {
82        if (typeof globalwpw === 'undefined') return;
83        if (typeof globalwpw.aiContext === 'undefined') {
84            globalwpw.aiContext = [];
85        }
86        if (!content) return;
87        
88        var cleanContent = content;
89        if (role === 'assistant') {
90            cleanContent = cleanContent.replace(/<[^>]*>?/gm, '').trim();
91        } else if (role === 'user') {
92            var lower = content.toLowerCase().trim();
93            var titles = (typeof qcld_chatbot_obj !== 'undefined' && qcld_chatbot_obj.ai_form_titles) ? qcld_chatbot_obj.ai_form_titles : ((typeof wp_chatbot_obj !== 'undefined' && wp_chatbot_obj.ai_form_titles) ? wp_chatbot_obj.ai_form_titles : []);
94            if (titles && titles.length) {
95                for (var t = 0; t < titles.length; t++) {
96                    var title = titles[t];
97                    if (lower === title || lower.indexOf(title) !== -1 || title.indexOf(lower) !== -1) {
98                        globalwpw.active_ai_action = title;
99                        globalwpw.qcld_ai_form_persisted_state = true;
100                        break;
101                    }
102                }
103            }
104        }
105        
106        globalwpw.aiContext.push({role: role, content: cleanContent});
107        if (globalwpw.aiContext.length > 30) {
108            globalwpw.aiContext.shift();
109        }
110    }
111
112    function qcldIsAiFormInProgress() {
113        if (typeof globalwpw !== 'undefined' && (globalwpw.active_ai_action || globalwpw.qcld_ai_form_persisted_state)) {
114            return true;
115        }
116        var titles = (typeof qcld_chatbot_obj !== 'undefined' && qcld_chatbot_obj.ai_form_titles) ? qcld_chatbot_obj.ai_form_titles : ((typeof wp_chatbot_obj !== 'undefined' && wp_chatbot_obj.ai_form_titles) ? wp_chatbot_obj.ai_form_titles : []);
117        if (!titles || !titles.length || typeof globalwpw === 'undefined' || !globalwpw.aiContext) {
118            return false;
119        }
120        
121        var hasFormTrigger = false;
122        for (var i = 0; i < globalwpw.aiContext.length; i++) {
123            var msg = globalwpw.aiContext[i];
124            if (msg.role === 'user') {
125                var content = (msg.content || '').toLowerCase().trim();
126                for (var t = 0; t < titles.length; t++) {
127                    var title = titles[t];
128                    if (content === title || content.indexOf(title) !== -1 || title.indexOf(content) !== -1) {
129                        hasFormTrigger = true;
130                        globalwpw.active_ai_action = title;
131                    }
132                }
133            }
134            if (msg.role === 'assistant') {
135                var assistantContent = (msg.content || '').toLowerCase();
136                if (msg.content && (msg.content.indexOf('__AI_FORM_DATA__') !== -1 || msg.content.indexOf('ai-form-summary-card') !== -1 || assistantContent.indexOf('thank you for providing the information') !== -1 || assistantContent.indexOf('successfully submitted') !== -1)) {
137                    hasFormTrigger = false;
138                    globalwpw.active_ai_action = '';
139                }
140            }
141        }
142        
143        return hasFormTrigger || !!(globalwpw.active_ai_action);
144    }
145    //Append the message to the message container based on the requirement.
146    var wpwMsg={
147        oncommand_filter:function(msg){
148            var str = msg;
149            if(typeof(str) === 'string'){
150                str = str.replace(/on[a-zA-Z]+\s*=/g, "");
151                str = str.replace(/__AI_FORM_IN_PROGRESS__/g, "");
152                
153                // Matches __AI_FORM_DATA__{...}__AI_FORM_DATA_END__ or html-wrapped variations (e.g. from Markdown Parsedown)
154                var formRegex = /(?:<[^>]+>)*\s*(?:__|<strong>|<b>)?AI_FORM_DATA(?:__|<\/strong>|<\/b>)?[\s\S]*?(?:__|<strong>|<b>)?AI_FORM_DATA_END(?:__|<\/strong>|<\/b>)?\s*(?:<\/[^>]+>)*/gi;
155                
156                if (formRegex.test(str)) {
157                    str = str.replace(formRegex, function(match) {
158                        try {
159                            var jsonMatch = match.match(/\{[\s\S]*\}/);
160                            if (jsonMatch) {
161                                var jsonStr = jsonMatch[0];
162                                var data = JSON.parse(jsonStr.trim());
163                                
164                                // Save form entry via AJAX
165                                var postData = {
166                                    'action': 'qcld_save_ai_form',
167                                    'data': jsonStr,
168                                    'nonce': (typeof qcld_chatbot_obj !== 'undefined' ? qcld_chatbot_obj.nonce : '')
169                                };
170                                var ajaxUrl = (typeof qcld_chatbot_obj !== 'undefined' && qcld_chatbot_obj.ajax_url) ? qcld_chatbot_obj.ajax_url : (typeof wpbot_ajax !== 'undefined' ? wpbot_ajax.ajax_url : (typeof ajaxurl !== 'undefined' ? ajaxurl : ''));
171                                if (ajaxUrl) {
172                                    jQuery.post(ajaxUrl, postData);
173                                }
174                                
175                                if (typeof globalwpw !== 'undefined') {
176                                    globalwpw.aiContext = [];
177                                    globalwpw.active_ai_action = '';
178                                    globalwpw.qcld_ai_form_persisted_state = false;
179                                }
180                                
181                                var html = '<div class="ai-form-summary-card" style="background: #f4f6f9; border-left: 4px solid #0073aa; padding: 12px 14px; margin: 10px 0; border-radius: 4px; font-size: 13px; line-height: 1.5; color: #333;">';
182                                if (data.form_title) {
183                                    html += '<div style="font-weight: 600; color: #0073aa; margin-bottom: 8px; text-transform: capitalize; font-size: 14px;">' + data.form_title + '</div>';
184                                }
185                                if (data.data && typeof data.data === 'object') {
186                                    html += '<table style="width: 100%; border-collapse: collapse; margin-top: 4px;">';
187                                    for (var key in data.data) {
188                                        if (data.data.hasOwnProperty(key)) {
189                                            var cleanKey = key.replace(/[-_]/g, ' ');
190                                            html += '<tr><td style="padding: 3px 6px 3px 0; color: #555; font-weight: 600; width: 42%; vertical-align: top;">' + cleanKey + ':</td><td style="padding: 3px 0; color: #222; vertical-align: top;">' + data.data[key] + '</td></tr>';
191                                        }
192                                    }
193                                    html += '</table>';
194                                }
195                                html += '</div>';
196                                return html;
197                            }
198                        } catch(e) {
199                            console.error('AI Form parse error:', e);
200                        }
201                        return '';
202                    });
203                }
204            }
205            return str;
206        },
207        open_new_tab: function(msg){
208            if(wp_chatbot_obj.open_links_newtab == '1'){
209                var temp = document.createElement('div');
210                temp.innerHTML = msg;
211                let links = temp.querySelectorAll('a');
212                links.forEach(link => {
213                    link.setAttribute('target', '_blank');
214                });
215                let temps = temp.innerHTML;
216                return temps;
217            }else{
218                return msg;
219            }
220        },
221        single_openai:function (msg) {
222            msg = wpwMsg.open_new_tab(msg);
223            globalwpw.wpwIsWorking=1;
224            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
225                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
226            }
227            
228            //Scroll to the last message
229            wpwKits.scrollTo();
230            setTimeout(function(){
231                $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').text( msg );
232                //If has youtube link then show video
233                wpwKits.videohandler();
234                //scroll to the last message
235                wpwKits.scrollTo();
236                //Enable the editor
237                wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
238                //keeping in history
239                wpwKits.wpwHistorySave();
240
241            }, globalwpw.settings.preLoadingTime);
242        },
243        single:function (msg) {
244            msg = wpwMsg.open_new_tab(msg);
245            globalwpw.wpwIsWorking=1;
246            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
247                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
248            }
249            //Scroll to the last message
250            wpwKits.scrollTo();
251            oncommand_filter = wpwMsg.oncommand_filter(msg);
252            
253            setTimeout(function(){
254                $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html( '<div class="wp-chatbot-textanimation">' + oncommand_filter + '</div>');
255                //If has youtube link then show video
256                wpwKits.videohandler();
257                //scroll to the last message
258                wpwKits.scrollTo();
259                //Enable the editor
260                wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
261                //keeping in history
262                wpwKits.wpwHistorySave();
263            }, globalwpw.settings.preLoadingTime);
264        },
265        single_nobg:function (msg) {
266            msg = wpwMsg.open_new_tab(msg);
267            globalwpw.wpwIsWorking=1;
268            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
269                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
270            }
271            //Scroll to the last message
272            oncommand_filter = wpwMsg.oncommand_filter(msg);
273            wpwKits.scrollTo();
274            setTimeout(function(){
275                $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').parent().addClass('wp-chatbot-msg-flat').html( '<div class="wp-chatbot-textanimation">' + oncommand_filter + '</div>');
276                //scroll to the last message
277                wpwKits.scrollTo();
278                //Enable the editor
279                wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
280                //Keeping the chat history in localStorage
281                wpwKits.wpwHistorySave();
282                // disabled editor
283                // wpwKits.disableEditor('Please choose an option.');
284            }, globalwpw.settings.preLoadingTime);
285        },
286        double:function (fristMsg,secondMsg) {
287            fristMsg = wpwMsg.open_new_tab(fristMsg);
288            secondMsg = wpwMsg.open_new_tab(secondMsg);
289            globalwpw.wpwIsWorking=1;
290            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
291                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
292            }
293            oncommand_fristMsg_filter = wpwMsg.oncommand_filter(fristMsg);
294            oncommand_secondMsg_filter = wpwMsg.oncommand_filter(secondMsg);
295            //Scroll to the last message
296            wpwKits.scrollTo();
297            setTimeout(function(){
298                $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html('<div class="wp-chatbot-textanimation">' + oncommand_fristMsg_filter + '</div>');
299                //Second Message with interval
300                if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
301                    $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
302                }
303                //Scroll to the last message
304                wpwKits.scrollTo();
305                setTimeout(function(){
306                    $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html('<div class="wp-chatbot-textanimation">' + oncommand_secondMsg_filter + '</div>');
307                    //Scroll to the last message
308                    wpwKits.scrollTo();
309                    //Enable the editor
310                    wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
311                    //keeping in history
312                    wpwKits.wpwHistorySave();
313                }, globalwpw.settings.preLoadingTime*2);
314            }, globalwpw.settings.preLoadingTime);
315        },
316        double_nobg:function (fristMsg,secondMsg) {
317            fristMsg = wpwMsg.open_new_tab(fristMsg);
318            secondMsg = wpwMsg.open_new_tab(secondMsg);
319            oncommand_fristMsg_filter = wpwMsg.oncommand_filter(fristMsg);
320            oncommand_secondMsg_filter = wpwMsg.oncommand_filter(secondMsg);
321          
322            globalwpw.wpwIsWorking=1;
323            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
324                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
325            }
326            //Scroll to the last message
327            wpwKits.scrollTo();
328            setTimeout(function(){
329                $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html('<div class="wp-chatbot-textanimation">' + oncommand_fristMsg_filter + '</div>');
330                //Second Message with interval
331                if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
332                    $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
333                }
334                //Scroll to the last message
335                wpwKits.scrollTo();
336                setTimeout(function(){
337                    if( globalwpw.wildCard>0 && ((globalwpw.settings.obj.disable_back_to_start != '1' && global
337wpw.settings.obj.skip_greetings_and_menu != 1)) ){
338                        $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').parent().addClass('wp-chatbot-msg-flat').html(oncommand_secondMsg_filter).append('<span class="qcld-chatbot-wildcard"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
339                    }else{
340                        $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').parent().addClass('wp-chatbot-msg-flat').html('<div class="wp-chatbot-textanimation">' + oncommand_secondMsg_filter + '</div>');
341                    }
342                    //scroll to the last message
343                    wpwKits.scrollTo();
344                    //Enable the editor
345                    if(globalwpw.wildCard==1 && globalwpw.supportStep=='welcome'){
346                        //wpwKits.disableEditor('Support');
347						wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
348                    }else{
349                        wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
350                    }
351                    //keeping in history
352                    wpwKits.wpwHistorySave();
353                    // disabled editor
354                    // wpwKits.disableEditor('Please choose an option.');
355                }, globalwpw.settings.preLoadingTime*2);
356            }, globalwpw.settings.preLoadingTime);
357        },
358		triple_nobg:function (fristMsg,secondMsg,thirdMsg) {
359            fristMsg = wpwMsg.open_new_tab(fristMsg);
360            secondMsg = wpwMsg.open_new_tab(secondMsg);
361            oncommand_fristMsg_filter = wpwMsg.oncommand_filter(fristMsg);
362            oncommand_secondMsg_filter = wpwMsg.oncommand_filter(secondMsg);
363			globalwpw.wpwIsWorking=1;
364            $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
365            //Scroll to the last message
366            wpwKits.scrollTo();
367            setTimeout(function(){
368                $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html('<div class="wp-chatbot-textanimation">' + oncommand_fristMsg_filter + '</div>');
369                wpwKits.videohandler();
370                //Second Message with interval
371                if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
372                    $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
373                }
374                //Scroll to the last message
375                wpwKits.scrollTo();
376                setTimeout(function(){
377                    $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html('<div class="wp-chatbot-textanimation">' +  oncommand_secondMsg_filter + '</div>');
378                    wpwKits.videohandler();
379                    if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
380                        $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
381                    }
382                    //Scroll to the last message
383                    wpwKits.scrollTo();
384                    setTimeout(function(){
385                        if(globalwpw.wildCard>0 && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
386                            $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').parent().addClass('wp-chatbot-msg-flat').html(thirdMsg).append('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
387                        }else{
388                            $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').parent().addClass('wp-chatbot-msg-flat').html('<div class="wp-chatbot-textanimation">' + thirdMsg + '</div>');
389                        }
390                        //scroll to the last message
391                        wpwKits.scrollTo();
392                        wpwKits.videohandler();
393                        //Enable the editor
394                        if(globalwpw.wildCard==1 && globalwpw.supportStep=='welcome'){
395                            //wpwKits.disableEditor('Support');
396                        }else{
397                            wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
398                        }
399                        //keeping in history
400                        wpwKits.wpwHistorySave();
401                        // disabled editor
402                        // wpwKits.disableEditor('Please choose an option.');
403                    }, globalwpw.settings.preLoadingTime);
404                }, globalwpw.settings.preLoadingTime);
405            }, globalwpw.settings.preLoadingTime);
406        },
407        shopper:function (shopperMsg) {
408            $(globalwpw.settings.messageContainer).append(wpwKits.shopperMsgDom(shopperMsg));
409            //scroll to the last message
410            wpwKits.scrollTo();
411            //keeping in history
412            wpwKits.wpwHistorySave();
413        },
414        shopper_choice:function (shopperChoice) {
415            $(globalwpw.settings.messageLastChild).fadeOut(globalwpw.settings.preLoadingTime);
416            $(globalwpw.settings.messageContainer).append(wpwKits.shopperMsgDom(shopperChoice));
417            //scroll to the last message
418            wpwKits.scrollTo();
419            //keeping in history
420            wpwKits.wpwHistorySave();
421        }
422    };
423    //Every tiny tools are implemented  in wpwKits as object literal.
424    wpwKits={
425        enableEditor:function(placeHolder){
426            if(globalwpw.settings.editor_handler==0){
427				if($(window).width()>380){
428                    $("#wp-chatbot-editor").attr('disabled',false).focus();
429                }else{
430					$("#wp-chatbot-editor").attr('disabled',false)
431				}
432                $("#wp-chatbot-editor").attr('placeholder',placeHolder);
433                $("#wp-chatbot-send-message").attr('disabled',false);
434            }
435        },
436        disableEditor:function (placeHolder) {
437            if(globalwpw.settings.editor_handler==0){
438                $("#wp-chatbot-editor").attr('placeholder',placeHolder);
439                $("#wp-chatbot-editor").attr('disabled',true);
440                $("#wp-chatbot-send-message").attr('disabled',true);
441            }
442            //Remove extra pre loader.
443            if($('.wp-chatbot-messages-container').find('.wp-chatbot-comment-loader').length>0){
444                $('.wp-chatbot-messages-container').find('.wp-chatbot-comment-loader').parent().parent().hide();
445            }
446        },
447        htmlEntities:function(str) {
448            return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
449        },
450        wpwHistorySave:function () {
451            globalwpw.wpwIsWorking=0;
452            var wpwHistory= $(globalwpw.settings.messageWrapper).html();
453            localStorage.setItem("wpwHitory", wpwHistory);
454            if(localStorage.getItem('botsessionid')){
455                if(!localStorage.getItem('shopperemail')){
456                    var useremail = '';
457                }else{
458                    var useremail = localStorage.getItem('shopperemail');
459                }
460                if(globalwpw.hasNameCookie){
461                    var shopper=globalwpw.hasNameCookie;
462                } else{
463                    var shopper=globalwpw.settings.obj.shopper_demo_name;
464                }
465                if(localStorage.getItem('shopperphone')){
466                    var shopperphone = localStorage.getItem('shopperphone');
467                }else{
468                    var shopperphone = '';
469                }
470                var data = {'action':'qcld_wb_chatbot_conversation_save','session_id': localStorage.getItem('botsessionid'),'name':shopper,'email':useremail, 'phone':shopperphone, 'conversation':wpwKits.htmlEntities(wpwHistory), 'security':globalwpw.settings.obj.ajax_nonce, 'user_id': globalwpw.settings.obj.current_user_id};
471                if( globalwpw.settings.obj.is_chat_session_active == 1 ){
472                    wpwKits.ajax(data).done(function (response) {
473                        //console.log(response);
474                    })
475                }
476            }
477            //}
477,globalwpw.settings.wildcardsShowTime);
478        },
479        decodehtml: function(str) {
480            var doc = new DOMParser().parseFromString(str, "text/html");
481            
482            return doc.body.firstChild.data || "";
483          
484        },
485        randomMsg:function(arrMsg){
486            var index=Math.floor(Math.random() * arrMsg.length);
487            var msg = arrMsg[index];
488            if (typeof msg === 'string' && msg.indexOf('%%username%%') !== -1) {
489                var shopperName = localStorage.getItem('shopper') || (globalwpw.settings.obj.display_name || '');
490                msg = msg.replace(/%%username%%/g, shopperName);
491            }
492            return msg;
493        },
494        ajax:function (data) {
495            return jQuery.post(globalwpw.settings.obj.ajax_url, data);
496        },
497		dailogAIOAction:function(text){
498            if(globalwpw.settings.obj.df_api_version=='v1'){
499                return  jQuery.ajax({
500                    type : "POST",
501                    url :"https://api.dialogflow.com/v1/query?v=20170712",
502                    contentType : "application/json; charset=utf-8",
503                    dataType : "json",
504                    headers : {
505                        "Authorization" : "Bearer "+globalwpw.settings.obj.ai_df_token
506                    },
507                    data: JSON.stringify( {
508                        query: text,
509                        lang : globalwpw.settings.obj.df_agent_lan,
510                        sessionId: localStorage.getItem('botsessionid')?localStorage.getItem('botsessionid'):'wpwBot_df_2018071'
511                    } )
512                });
513            }else{
514               
515                return jQuery.post(globalwpw.settings.obj.ajax_url, {
516					'action': 'qcld_wp_df_api_call',
517                    'dfquery': text,
518                    'nonce': globalwpw.settings.obj.ajax_nonce,
519                    'sessionid': localStorage.getItem('botsessionid')?localStorage.getItem('botsessionid'):'wpwBot_df_2018071'
520                });
521            }
522        },
523        responseIsOk(response){
524            if(globalwpw.settings.obj.df_api_version=='v1'){
525                if(response.status.code==200 || response.status.code==206){
526                    return true;
527                }else{
528                    return false;
529                }
530            }else{
531                if(typeof response.responseId !== "undefined"){
532                    return true;
533                }else{
534                    return false;
535                }
536            }
537        },
538        getIntentName(response){
539            if(globalwpw.settings.obj.df_api_version=='v1'){
540                return response.result.metadata.intentName;
541            }else{
542                return response.queryResult.intent.displayName;
543            }
544        },
545        getParameters(response){
546            if(globalwpw.settings.obj.df_api_version=='v1'){
547                return response.result.parameters;
548            }else{
549                return response.queryResult.parameters;
550            }
551        },
552        getFulfillmentText(response){
553            if(globalwpw.settings.obj.df_api_version=='v1'){
554                return response.result.fulfillment.messages;
555            }else{
556                return response.queryResult.fulfillmentText;
557            }
558        },
559        getFulfillmentSpeech(response){
560            if(globalwpw.settings.obj.df_api_version=='v1'){
561                return response.result.fulfillment.speech;
562            }else{
563                return response.queryResult.fulfillmentText;
564            }
565        },
566        getScore(response){
567            if(globalwpw.settings.obj.df_api_version=='v1'){
568                return response.result.score;
569            }else{
570                return response.queryResult.intentDetectionConfidence;
571            }
572        },
573        getAction(response){
574            if(globalwpw.settings.obj.df_api_version=='v1'){
575                return response.result.action;
576            }else{
577                if(typeof response.queryResult.action !=="undefined"){
578                    return response.queryResult.action;
579                }else{
580                    return '';
581                }
582            }
583        },
584        queryText(response){
585            if(globalwpw.settings.obj.df_api_version=='v1'){
586                return response.result.resolvedQuery;
587            }else{
588                return response.queryResult.queryText;
589            }
590        },
591        isActionComplete(response){
592            if(globalwpw.settings.obj.df_api_version=='v1'){
593                if(!response.result.actionIncomplete){
594                    return true;
595                }else{
596                    return false;
597                }
598            }else{
599                return response.queryResult.allRequiredParamsPresent;
600            }
601        },
602        isConversationEnd(response){
603            if(globalwpw.settings.obj.df_api_version=='v1'){
604                if(typeof(response.result.metadata.endConversation)!=="undefined" && response.result.metadata.endConversation){
605                    return true;
606                }else{
607                    return false;
608                }
609            }else{
610                if(typeof response.queryResult.diagnosticInfo !=="undefined"){
611                    if(typeof response.queryResult.diagnosticInfo.end_conversation !== "undefined"){
612                        return response.queryResult.diagnosticInfo.end_conversation;
613                    }else{
614                        return false;
615                    }
616                }else{
617                    return false;
618                }
619            }
620        },
621        sugestCat:function () {
622            var productSuggest=wpwKits.randomMsg(globalwpw.settings.obj.product_suggest);
623            var data={'action':'qcld_wb_chatbot_category'};
624            var result=wpwKits.ajax(data);
625            result.done(function( response ) {
626                wpwMsg.double_nobg(productSuggest,response);
627                if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.df_status_lock==0){
628                    globalwpw.wildCard=0;
629                    globalwpw.ai_step=1;
630                    localStorage.setItem("wildCard",  globalwpw.wildCard);
631                    localStorage.setItem("aiStep", globalwpw.ai_step);
632                }
633            });
634        },
635        subCats:function (parentId) {
636            var subCatMsg=wpwKits.randomMsg(globalwpw.settings.obj.product_suggest);
637            var data={'action':'qcld_wb_chatbot_sub_category','parent_id':parentId};
638            var result=wpwKits.ajax(data);
639            result.done(function( response ) {
640                wpwMsg.double_nobg(subCatMsg,response);
641            });
642        },
643        suggestEmail:function (emailFor) {
644            var sugMsg=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
645            var sugOptions= '<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>'; // /*emailFor+*/globalwpw.wildcards;
646            if( ( globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1 )){
647                wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
648            }
649        },
650        videohandler:function () {
651            $(globalwpw.settings.messageLastChild+' .wp-chatbot-paragraph').html(function(i, html) {
652                return html.replace(/(?:https:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, '<iframe width="250" height="180" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>');
653            });
654        },
655        scrollTo:function () {
656            var $bot = $(globalwpw.settings.botContainer);
657            var scrollTarget = $(globalwpw.settings.messageWrapper).prop("scrollHeight");
658            $bot.animate({ scrollTop: scrollTarget }, 'slow', function () {
659                if (typeof window.wpbotSyncSlimScrollBar === 'function') {
660                    window.wpbotSyncSlimScrollBar($bot);
661                } else {
662                    var el = $bot[0];
663                    var $wrap = $bot.parent();
664                    var $bar = $wrap.children('.slimScrollBar');
665                    if (!el || !$bar.length) {
666                        return;
667                    }
668                    if (el.scrollHeight <= el.clientHeight + 2) {
669                        $wrap.addClass('wpbot-no-scroll');
670                        $bar.stop(true, true).hide();
671                        $wrap.children('.slimScrollRail').stop(true, true).hide();
672                    } else {
673                        $wrap.removeClass('wpbot-no-scroll');
674                        var barH = $bar.outerHeight() || 30;
675                        $bar.css({ top: Math.max(0, $bot.outerHeight() - barH) + 'px', display: 'block' });
676                    }
677                }
678            });
679        },
680        botPreloader:function () {
681                var enableleReactions = globalwpw.settings.obj.skip_chat_reactions_menu;
682                var eanleeReport = globalwpw.settings.obj.enable_chat_report_menu;
683                var enableshare = globalwpw.settings.obj.enable_chat_share_menu;
684                var likeTxt = globalwpw.settings.obj.qlcd_wp_chatbot_like_text;
685                var disLikeTxt = globalwpw.settings.obj.qlcd_wp_chatbot_dislike_text;
686                var reportTxt = globalwpw.settings.obj.qlcd_wp_chatbot_report_text;
687                var sharetTxt = globalwpw.settings.obj.qlcd_wp_chatbot_share_text;
688            
689            var msgContent='<li class="wp-chatbot-msg">' +
690                '<div class="wp-chatbot-avatar">'+
691                '<img src="'+globalwpw.settings.obj.agent_image_path+'" alt="">'+
692                '</div>'+
693                '<div class="wp-chatbot-agent">'+ wpwMsg.oncommand_filter(globalwpw.settings.obj.agent)+'</div>'
694                +'<div class="chat-container"><div class="wp-chatbot-paragraph"><img class="wp-chatbot-comment-loader" src="'+globalwpw.settings.obj.image_path+'comment.gif" alt="Typing..." /></div>'+
695                '<div class="qcld-like-dislike-icon">' +
696              (enableleReactions == 1 && !qcldIsAiFormInProgress()
697                  ? '<a href="#" title="' + (disLikeTxt?.en_US || 'Dislike') + '"><i class="dashicons dashicons-thumbs-down" aria-hidden="true"></i></a>' + '<a href="#" title="' + (likeTxt?.en_US || 'Like') + '"><i class="dashicons dashicons-thumbs-up" aria-hidden="true"></i></a>' 
698                  : '') +
699
700              (eanleeReport == 1 && !qcldIsAiFormInProgress()
701                  ? '<a href="#" title="' + (reportTxt?.en_US || 'Report') + '"><i class="dashicons dashicons-admin-comments"></i></a>'
702                  : '') +
703
704              (enableshare == 1 && !qcldIsAiFormInProgress()
705                  ? '<div class="qcld-share">' +
706                      '<a href="#" class="share-toggle" title="' + (sharetTxt?.en_US || 'Share') + '"><i class="dashicons dashicons-share"></i></a>' +
707                      '<div class="share-menu" style="display:none;">' +
708                          '<a href="#" class="share-fb"><i class="dashicons dashicons-facebook"></i></a>' +
709                          '<a href="#" class="share-wa"><i class="dashicons dashicons-whatsapp"></i></a>' +
710                          '<a href="#" class="share-x"><i class="dashicons dashicons-twitter"></i></a>' +
711                          '<a href="#" class="share-email"><i class="dashicons dashicons-email-alt"></i></a>' +
712                      '</div>' +
713                  '</div>'
714                  : '') +
715          '</div>' +'</div>' +
716          '</li>';
717            return msgContent;
718        },
719        shopperMsgDom:function (msg) {
720            if(globalwpw.hasNameCookie){
721                var shopper=globalwpw.hasNameCookie;
722            } else{
723                var shopper=globalwpw.settings.obj.shopper_demo_name;
724            }
725            //var date = new Date();
726            date = new Date();
727            var msgContent='<li class="wp-chat-user-msg">' +
728                '<div style="margin-top:40px;" class="wp-chatbot-avatar">'+
729                '<img src="'+globalwpw.settings.obj.image_path+'client.png" alt="User Image">'+
730                '</div>'+
731                '<div class="wp-chatbot-agent">'+shopper +'</div>'
732                +'<div class="wp-chatbot-paragraph"><div class="wp-chatbot-textanimation">'+msg+'</div></div></li>';
733            return msgContent;
734        },
735        showCart:function () {
736            var data = {'action':'qcld_wb_chatbot_show_cart'}
737            this.ajax(data).done(function (response) {
738                //if cart show on message board
739                if($('#wp-chatbot-shortcode-template-container').length == 0) {
740                    $(globalwpw.settings.messageWrapper).html(response.html);
741                    $('#wp-chatbot-cart-numbers').html(response.items);
742                    $('.wp-chatbot-ball-cart-items').html(response.items);
743                    wpwKits.disableEditor(wpwKits.randomMsg(globalwpw.settings.obj.shopping_cart));
744                }else{  //Cart show on shortcode
745                    $('.wp-chatbot-cart-shortcode-container').html(response.html);
746                }
747                //Add scroll to the cart shortcode
748                if($('#wp-chatbot-shortcode-template-container').length > 0  && $('.chatbot-shortcode-template-02').length==0) {
749                    $('.wp-chatbot-cart-body').slimScroll({height: '200px', start: 'bottom'});
750                }
751            });
752        },
753        toTitlecase:function (msg) {
754            return msg.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
755        },
756        filterStopWords:function(msg){
757            var spcialStopWords=",;,/,\\,[,],{,},(,),&,*,.,+ ,?,^,$,=,!,<,>,|,:,-";
758            var userMsg="";
759            //Removing Special Characts from last position.
760            var msgLastChar=msg.slice(-1);
761            if(spcialStopWords.indexOf(msgLastChar) >= 0 ){
762                userMsg=msg.slice(0, -1);
763            }else{
764                userMsg=msg;
765            }
766            var stopWords=globalwpw.settings.obj.stop_words+spcialStopWords;
767            var stopWordsArr=stopWords.split(',');
768            var msgArr=userMsg.split(' ');
769            var filtermsgArr = msgArr.filter(function myCallBack(el){
770                return stopWordsArr.indexOf(el.toLowerCase()) < 0;
771            });
772            filterMsg=filtermsgArr.join(' ');
773            return filterMsg;
774        },
775		htmlTagsScape:function(userString) {
776           var tagsToReplace = {
777               '&': '&amp;',
778               '<': '&lt;',
779               '>': '&gt;'
780           };
781           return userString.replace(/[&<>]/g, function(tag) {
782               return tagsToReplace[tag] || tag;
783           });
784       },
785       reset: function() {
786        $('#wp-chatbot-messages-container').html('');
787        localStorage.removeItem("wpwHitory");
788        localStorage.removeItem('shopper');
789        localStorage.removeItem('shopperemail');
790        localStorage.removeItem('default_asking_email');
791        globalwpw.wildCard=0;
792        globalwpw.ai_step=0;
793        localStorage.setItem("wildCard",  globalwpw.wildCard);
794        localStorage.setItem("aiStep", globalwpw.ai_step);
795        globalwpw.formfieldid = '';
796        localStorage.setItem("formfieldid",  globalwpw.formfieldid);
797        globalwpw.formStep='welcome';
798        localStorage.setItem("formStep",  globalwpw.formStep);
799        globalwpw.formid='';
800        localStorage.setItem("formid",  globalwpw.formid);
801        globalwpw.formentry = 0;
802        localStorage.setItem("formentry",  globalwpw.formentry);
803        localStorage.removeItem("cx-name" );
804        localStorage.removeItem("cx-diaplayname" );
805        localStorage.removeItem("cx-languagecode" );
806        localStorage.removeItem("cx-timezone" );
807       }
808    }
809    /*
810     * wpwbot Trees are basically product,order and support
811     * product tree : asking,showing & shopping part will be covered.
812     * order tree : showing order list and email to admin option.
813     * support tree : List of support query-answer including text & video and email to admin option.
814     */
815    var wpwTree={
816         greeting:function (msg) {
817            if(localStorage.getItem('default_asking_email')){
818                var shopperEmail = msg;
819                var validate = "";
820                var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
821                if(re.test(shopperEmail) != true){
822                    validate = (globalwpw.settings.obj.invalid_email && globalwpw.settings.obj.invalid_email.length > 0) ? wpwKits.randomMsg(globalwpw.settings.obj.invalid_email) : "Please enter a valid email address.";
823                }
824                if(validate != ""){
825                    wpwMsg.single(validate);
826                }else{
827                    var email = shopperEmail;
828                    $.cookie("shopperemail", email, { expires: 365 });
829                    localStorage.setItem("shopperemail", email);
830
831                    if (email != "") {
832                      var data = {
833                        action: "qcld_wb_chatbot_email_subscription",
834                        name: localStorage.getItem("shopper"),
835                        email: email,
836                        url: window.location.href,
837                      };
838
839                      wpwKits.ajax(data).done(function (response) {
840                        //response.
841                      });
842                    }
843                    localStorage.removeItem('default_asking_email');
844                    
845                    var shopperName = localStorage.getItem('shopper');
846                    var shopperNameFiltered = wpwKits.toTitlecase(wpwKits.filterStopWords(shopperName));
847                    
848                    if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.df_status_lock==0){
849                        var NameGreeting=wpwKits.randomMsg(globalwpw.settings.obj.i_am) +" <strong>"+wpwMsg.oncommand_filter(globalwpw.settings.obj.agent)+"</strong>! "+ wpwKits.randomMsg(globalwpw.settings.obj.name_greeting);
850                        NameGreeting = NameGreeting.replace("%%username%%", shopperName);
851                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
852                        serviceOffer = serviceOffer.replace("%%username%%", shopperName);
853                        wpwMsg.triple_nobg( NameGreeting,serviceOffer, globalwpw.wildcards )
854                        globalwpw.ai_step=1;
855                        globalwpw.wildCard=0;
856                        localStorage.setItem("wildCard",  globalwpw.wildCard);
857                        localStorage.setItem("aiStep", globalwpw.ai_step);
858                    }else{
859                        if((globalwpw.settings.obj.skip_wp_greetings=='1') || (globalwpw.settings.obj.skip_greetings_and_menu =='1') ){
860                            wpwAction.bot(shopperName)
861                        }else{
862                            var NameGreeting=wpwKits.randomMsg(globalwpw.settings.obj.i_am) +" <strong>"+wpwMsg.oncommand_filter(globalwpw.settings.obj.agent)+"</strong>! "+wpwKits.randomMsg(globalwpw.settings.obj.name_greeting);
863                            NameGreeting = NameGreeting.replace("%%username%%", shopperNameFiltered);
864                            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
865                            if( ( globalwpw.settings.obj.show_menu_after_greetings!=0 ) && ( globalwpw.wildcards !='' ) ){
866                                wpwMsg.triple_nobg( NameGreeting,serviceOffer, globalwpw.wildcards )
867                            }else{
868                                 wpwMsg.double( NameGreeting,serviceOffer );
869                            }
870                        }
871                    }
872                }
873                return;
874            }
875            /**
876             * When Enable DialogFlow then  or else
877             */
878            
879            if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.df_status_lock==0){
880                //When intialize 1 and don't have cookies then keep  the name of shooper in in cookie
881                if(globalwpw.initialize==1 && !localStorage.getItem('shopper')  && globalwpw.wildCard==0 && globalwpw.ai_step==0 ){
882                    msg=wpwKits.toTitlecase(wpwKits.filterStopWords(msg));
883                    $.cookie("shopper", msg, { expires : 365 });
884                    localStorage.setItem('shopper',msg);
885                    globalwpw.hasNameCookie=msg;
886                    
887                    if(globalwpw.settings.obj.ask_email_wp_greetings == '1' && !localStorage.getItem('shopperemail')) {
888                        localStorage.setItem('default_asking_email', '1');
889                        var ask_msg = (globalwpw.settings.obj.asking_email && globalwpw.settings.obj.asking_email.length > 0) ? wpwKits.randomMsg(globalwpw.settings.obj.asking_email) : "Could you please provide your email address?";
890                        wpwMsg.single(ask_msg);
891                    } else {
892                        //Greeting with name and suggesting the wildcard.
893                        var NameGreeting=wpwKits.randomMsg(globalwpw.settings.obj.i_am) +" <strong>"+wpwMsg.oncommand_filter(globalwpw.settings.obj.agent)+"</strong>! "+ wpwKits.randomMsg(globalwpw.settings.obj.name_greeting);
894                        NameGreeting = NameGreeting.replace("%%username%%", msg);
895                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
896                        serviceOffer = serviceOffer.replace("%%username%%", msg);
897                        //After completing two steps messaging showing wildcards.
898                        wpwMsg.triple_nobg( NameGreeting,serviceOffer, globalwpw.wildcards )
899                        globalwpw.ai_step=1;
900                        globalwpw.wildCard=0;
901                        localStorage.setItem("wildCard",  globalwpw.wildCard);
902                        localStorage.setItem("aiStep", globalwpw.ai_step);
903                    }
904                }
905                //When returning shopper then greeting with name and wildcards.
906                else if(localStorage.getItem('shopper')  && globalwpw.wildCard==0 && globalwpw.ai_step==0){
907                    if(globalwpw.settings.obj.ask_email_wp_greetings == '1' && !localStorage.getItem('shopperemail')) {
908                        localStorage.setItem('default_asking_email', '1');
909                        var ask_msg = (globalwpw.settings.obj.asking_email && globalwpw.settings.obj.asking_email.length > 0) ? wpwKits.randomMsg(globalwpw.settings.obj.asking_email) : "Could you please provide your email address?";
910                        wpwMsg.single(ask_msg);
911                    } else {
912                        //After asking service show the wildcards.
913                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
914                        globalwpw.ai_step=1;
915                        globalwpw.wildCard=0;
916                        localStorage.setItem("wildCard",  globalwpw.wildCard);
917                        localStorage.setItem("aiStep", globalwpw.ai_step);
918                        if( ( globalwpw.settings.obj.show_menu_after_greetings==1) && ( globalwpw.wildcards !='' ) ){
919                            wpwMsg.double_nobg(serviceOffer, globalwpw.wildcards);
920                        }else{
921                            wpwMsg.single(serviceOffer);
922                        }
923                    }
924                }
925                //When user asking needs then DialogFlow will given intent after NLP steps.
926                else if(globalwpw.wildCard==0 && globalwpw.ai_step==1){
927                    var dfReturns=wpwKits.dailogAIOAction(msg);
928                    dfReturns.done(function( response ) {
929						if(globalwpw.settings.obj.df_api_version=='v2'){
930							response = $.parseJSON(JSON.parse(response));
931						}
932                        if(wpwKits.responseIsOk(response)){
933                            var userIntent=wpwKits.getIntentName(response);
934                            
935                            if(userIntent=='start'){
936                                globalwpw.wildCard=0;
937                                var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
938                                console.log( globalwpw.wildcards);
939                                wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
940                            }else if(userIntent=='welcome'){
941								var messages = wpwKits.getFulfillmentSpeech(response);
942								setTimeout(function () {
943									wpwMsg.single(messages);
944								},globalwpw.settings.preLoadingTime);
945							}else if(userIntent=='help'){
946                                $(globalwpw.settings.messageWrapper).html(localStorage.getItem("wpwHitory"));
947								//Showing help message
948                                setTimeout(function () {
949                                    wpwKits.scrollTo();
950                                    
951                                    var helpWelcome = wpwKits.randomMsg(globalwpw.settings.obj.help_welcome);
952                                    var helpMsg = wpwKits.randomMsg(globalwpw.settings.obj.help_msg);
953                                    wpwMsg.double(helpWelcome,helpMsg);
954                                    //dialogflow
955                                    if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.df_status_lock==0){
956                                        globalwpw.wildCard=0;
957                                        globalwpw.ai_step=1;
958                                        localStorage.setItem("wildCard",  globalwpw.wildCard);
959                                        localStorage.setItem("aiStep", globalwpw.ai_step);
960                                    }
961                                },globalwpw.settings.preLoadingTime);
962                            }else if(userIntent=='reset'){
963                                var restWarning=globalwpw.settings.obj.reset;
964                                var confirmBtn='<span class="qcld-chatbot-reset-btn" reset-data="yes" >'+globalwpw.settings.obj.yes+'</span> <span> '+globalwpw.settings.obj.or+' </span><span class="qcld-chatbot-reset-btn"  reset-data="no">'+globalwpw.settings.obj.no+'</span>';
965                                wpwMsg.double_nobg(restWarning,confirmBtn);
966                            }else if(userIntent=='phone'){
967                                if(typeof(globalwpw.hasNameCookie)=='undefined'|| globalwpw.hasNameCookie==''){
968									var shopperName=  globalwpw.settings.obj.shopper_demo_name;
969								}else{
970									var shopperName=globalwpw.hasNameCookie;
971								}
972                                var ask_msg = wpwKits.randomMsg(globalwpw.settings.obj.asking_phone);
973								var askEmail = (globalwpw.settings.obj.skip_wp_greetings=='1' || globalwpw.settings.obj.skip_greetings_and_menu =='1') ? 'Hello ' + ask_msg : 'Hello '+shopperName+'! '+ ask_msg;
974								wpwMsg.single(askEmail);
975								//Now updating the support part as .
976								globalwpw.supportStep='phone';
977								globalwpw.wildCard=1;
978								//keeping value in localstorage
979								localStorage.setItem("wildCard",  globalwpw.wildCard);
980								localStorage.setItem("supportStep",  globalwpw.supportStep);
981                            }else if(userIntent=='email'){
982                                if(typeof(globalwpw.hasNameCookie)=='undefined'|| globalwpw.hasNameCookie==''){
983									var shopperName=  globalwpw.settings.obj.shopper_demo_name;
984								}else{
985									var shopperName=globalwpw.hasNameCookie;
986								}
987                                var ask_msg = wpwKits.randomMsg(globalwpw.settings.obj.asking_email);
988								var askEmail = (globalwpw.settings.obj.skip_wp_greetings=='1' || globalwpw.settings.obj.skip_greetings_and_menu =='1') ? wpwKits.randomMsg(globalwpw.settings.obj.hello)+' '+ ask_msg : wpwKits.randomMsg(globalwpw.settings.obj.hello)+' '+shopperName+'! '+ ask_msg;
989								wpwMsg.single(askEmail);
990								//Now updating the support part as .
991								globalwpw.supportStep='email'; 
992								globalwpw.wildCard=1;
993								//keeping value in localstorage
994								localStorage.setItem("wildCard",  globalwpw.wildCard);
995								localStorage.setItem("supportStep",  globalwpw.supportStep);
996                            }else if(userIntent=='faq'){
997                                globalwpw.wildCard=1;
998                                globalwpw.supportStep='welcome';
999                                wpwAction.bot('from wildcard support');
1000                                //keeping value in localstorage
1001                                /*localStorage.setItem("wildCard",  globalwpw.wildCard);
1002                                localStorage.setItem("supportStep", globalwpw.supportStep);*/
1003                            }else if(userIntent=='Default Fallback Intent'){
1004                                
1005								var data = {'action':'wpbo_search_response','name':globalwpw.hasNameCookie,'keyword':msg};
1006								wpwKits.ajax(data).done(function (respond) {
1007									var json=$.parseJSON(respond);
1008									if(json.status=='success'){
1009										if(typeof(json.category)!=="undefined" && json.category){
1010											var question='';
1011                                            $.each(json.data, function (i, obj) {
1012                                                question += '<span class="qcld-chatbot-wildcard qcld_simple_txt_response"  data-strid="'+ obj.id +'">'+ obj.query +'</span>';
1013                                            });
1014                                            wpwMsg.single_nobg(question);
1015										}else if(json.multiple){
1016											var question='';
1017											$.each(json.data, function (i, obj) {
1018												question += '<span class="qcld-chatbot-wildcard qcld_simple_txt_response"  data-strid="'+ obj.id +'">'+ obj.query +'</span>';
1019											});
1020											wpwMsg.double_nobg(wpwKits.randomMsg(globalwpw.settings.obj.did_you_mean),question);
1021										}else{
1022												wpwMsg.single(json.data[0].response);
1023												setTimeout(function(){
1024													wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1025												},globalwpw.settings.preLoadingTime*2)
1026										}
1027									}if(wp_chatbot_obj.disable_site_search != 1){
1028                                      
1029                                        wpwTree.site_search(msg)
1030                                    }else{
1031										msg = wpwKits.filterStopWords(msg);
1032										if(globalwpw.counter == 2 ){
1033											wpwTree.df_reply(response);
1034											setTimeout(function(){
1035												var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1036												wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1037											},globalwpw.settings.preLoadingTime)
1038											globalwpw.counter = 0;
1039										}else{
1040											globalwpw.counter++;
1041											wpwTree.df_reply(response);
1042										}
1043									}
1044								})
1045							}else if(wpwKits.getScore(response)!=0){ // checking is reponsing from dialogflow.
1046								var sTalkAction=wpwKits.getAction(response);
1047								if(sTalkAction!='' && sTalkAction.indexOf('smalltalk') != -1 ){
1048									var sMgs=wpwKits.getFulfillmentText(response);
1049									wpwMsg.single(sMgs);
1050								}else{
1051									var messages = wpwKits.getFulfillmentText(response);						
1052									wpwTree.df_reply(response);
1053								}
1054                            }else{
1055                                console.log( globalwpw.wildcards);
1056                                var dfDefaultMsg=globalwpw.settings.obj.df_defualt_reply;
1057								wpwMsg.double_nobg(dfDefaultMsg,globalwpw.wildcards);
1058                            }
1059                        }else{
1060                            console.log( globalwpw.wildcards);
1061                            //if bad request or limit cross then
1062                            globalwpw.df_status_lock=0;
1063                            var dfDefaultMsg=globalwpw.settings.obj.df_defualt_reply;
1064                            wpwMsg.double_nobg(dfDefaultMsg,globalwpw.wildcards);
1065                        }
1066                    }).fail(function (error) {
1067                        var dfDefaultMsg=globalwpw.settings.obj.df_defualt_reply;
1068                        console.log( globalwpw.wildcards);
1069                        wpwMsg.double_nobg(dfDefaultMsg,globalwpw.wildcards);
1070                    });
1071                }
1072            }else{
1073                //When intialize 1 and don't have cookies then keep  the name of shooper in in cookie
1074                if(globalwpw.initialize==1 && !localStorage.getItem('shopper')  && global
1074wpw.wildCard==0){
1075                    msg=wpwKits.toTitlecase(msg);
1076                    msg1=wpwKits.toTitlecase(wpwKits.filterStopWords(msg));
1077                    $.cookie("shopper", msg, { expires : 365 });
1078                    localStorage.setItem('shopper',msg);
1079                    globalwpw.hasNameCookie=msg;
1080                    
1081                    if(globalwpw.settings.obj.ask_email_wp_greetings == '1' && !localStorage.getItem('shopperemail')) {
1082                        localStorage.setItem('default_asking_email', '1');
1083                        var ask_msg = (globalwpw.settings.obj.asking_email && globalwpw.settings.obj.asking_email.length > 0) ? wpwKits.randomMsg(globalwpw.settings.obj.asking_email) : "Could you please provide your email address?";
1084                        wpwMsg.single(ask_msg);
1085                    } else {
1086                        //Greeting with name and suggesting the wildcard.
1087                        if((globalwpw.settings.obj.skip_wp_greetings=='1') || (globalwpw.settings.obj.skip_greetings_and_menu =='1') ){
1088                            wpwAction.bot(msg)
1089                        }else{
1090                            var NameGreeting=wpwKits.randomMsg(globalwpw.settings.obj.i_am) +" <strong>"+wpwMsg.oncommand_filter(globalwpw.settings.obj.agent)+"</strong>! "+wpwKits.randomMsg(globalwpw.settings.obj.name_greeting);
1091                            NameGreeting = NameGreeting.replace("%%username%%", msg1);
1092                            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
1093                            //After completing two steps messaging showing wildcards.
1094                            if( ( globalwpw.settings.obj.show_menu_after_greetings!=0 ) && ( globalwpw.wildcards !='' ) ){
1095                                wpwMsg.triple_nobg( NameGreeting,serviceOffer, globalwpw.wildcards )
1096                               
1097                            }else{
1098                                 wpwMsg.double( NameGreeting,serviceOffer );
1099                            }
1100                        }
1101                    }
1102                }
1103                //When returning shopper then greeting with name and wildcards.
1104                else if(localStorage.getItem('shopper')  && globalwpw.wildCard==0){
1105                    if(globalwpw.settings.obj.ask_email_wp_greetings == '1' && !localStorage.getItem('shopperemail')) {
1106                        localStorage.setItem('default_asking_email', '1');
1107                        var ask_msg = (globalwpw.settings.obj.asking_email && globalwpw.settings.obj.asking_email.length > 0) ? wpwKits.randomMsg(globalwpw.settings.obj.asking_email) : "Could you please provide your email address?";
1108                        wpwMsg.single(ask_msg);
1109                    } else {
1110                        //After asking service show the wildcards.
1111                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
1112                        console.log( globalwpw.wildcards);
1113                        wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
1114                    }
1115                }
1116            }
1117        },
1118		df_multi_handle:function(array){
1119            if(array.length>0){
1120                setTimeout(function(){
1121                    wpwMsg.single(array[0]);
1122                    array.splice(0, 1);
1123                    setTimeout(function(){
1124                        wpwTree.df_multi_handle(array);
1125                    }, globalwpw.settings.preLoadingTime)
1126                }, globalwpw.settings.preLoadingTime)
1127            }
1128        },
1129		df_reply:function(response){
1130			//checking for facebook platform
1131			var i = 0;
1132            var html = '';
1133            var responses = [];
1134            if(globalwpw.settings.obj.df_api_version=='v1'){
1135                var messages = (response && response.result && response.result.fulfillment && response.result.fulfillment.messages) ? response.result.fulfillment.messages : [];
1136                var action = (response && response.result && typeof response.result.actionIncomplete !== 'undefined') ? response.result.actionIncomplete : false;
1137                jQuery.each( messages, function( key, message ) {
1138                    html = '';
1139                    i +=1;
1140                    if(message.type==2){
1141                        html += "<p>" + message.title + "</p>";
1142                        var index = 0;
1143                        for (index; index<message.replies.length; index++) {
1144                            html += "<span class=\"wpb-quick-reply qcld-chat-common\">"+ message.replies[index] +"</span>";
1145                        }
1146                    }
1147                    //check for default reply
1148                    else if(message.type==0 && message.speech!=''){
1149                        html += message.speech;
1150                    }else if(message.type==1){
1151                        html +='';
1152                    }else if(message.type=='simple_response'){
1153                        html += message.textToSpeech;
1154                    }
1155                    if(html!=''){
1156                        responses.push(html);
1157                    }
1158                })
1159            }else{
1160                var messages = (response && response.queryResult && response.queryResult.fulfillmentMessages) ? response.queryResult.fulfillmentMessages : [];
1161                var actioncomplete = (response && response.queryResult && typeof response.queryResult.allRequiredParamsPresent !== 'undefined') ? response.queryResult.allRequiredParamsPresent : false;
1162                jQuery.each( messages, function( key, message ) {
1163                    html = '';
1164                    i +=1;
1165                    //handeling quickreplies
1166                    if(typeof message.quickReplies !=="undefined"){
1167                        if(typeof message.quickReplies.title !=="undefined"){
1168                            html += "<p>" + message.quickReplies.title + "</p>";
1169                        }
1170                        if(typeof message.quickReplies.quickReplies !=="undefined" ){
1171                            var index = 0;
1172                            for (index; index<message.quickReplies.quickReplies.length; index++) {
1173                                html += "<span class=\"wpb-quick-reply qcld-chat-common\">"+ message.quickReplies.quickReplies[index] +"</span>";
1174                            }
1175                        }
1176                    }
1177                    //handleing default response
1178                    else if(typeof message.text !=="undefined"){
1179                        if(typeof message.text.text !=="undefined" && message.text.text.length>0){
1180                            html += message.text.text[0];
1181                        }
1182                    }
1183                    if(html!=''){
1184                        responses.push(html);
1185                    }
1186                })
1187            }
1188            wpwTree.df_multi_handle(responses);
1189		},
1190        support:function (msg) {
1191            if(globalwpw.wildCard==1 && globalwpw.supportStep=='welcome'){
1192                var welcomeMsg= wpwKits.randomMsg(globalwpw.settings.obj.support_welcome);
1193                var orPhoneSuggest = '';
1194                if(globalwpw.settings.obj.support_query.length>0){
1195                    var supportsItems = '';
1196                    var messenger = '';
1197                    if(globalwpw.settings.obj.enable_messenger==1) {
1198                        messenger += '<span class="qcld-chatbot-wildcard"  data-wildcart="messenger">'+wpwKits.randomMsg(globalwpw.settings.obj.messenger_label)+'</span>';
1199                    }
1200                    if(globalwpw.settings.obj.enable_whats==1) {
1201                        messenger += '<span class="qcld-chatbot-wildcard"  data-wildcart="whatsapp">'+wpwKits.randomMsg(globalwpw.settings.obj.whats_label)+'</span>';
1202                    }
1203                    if(globalwpw.settings.obj.disable_feedback=='') {
1204                        messenger+= '<span class="qcld-chatbot-suggest-email" >'+wpwKits.randomMsg(globalwpw.settings.obj.feedback_label)+'</span>';
1205                    }
1206                    $.each(globalwpw.settings.obj.support_query, function (i, obj) {
1207                        supportsItems += '<span class="qcld-chatbot-support-items"  data-query-index="' + i + '">' + obj + '</span>';
1208                    });
1209                    var orEmailSuggest = '<span class="qcld-chatbot-suggest-email" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_email) + '</span>';
1210                    if(globalwpw.settings.obj.call_sup=="") {
1211                        orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
1212                    }
1213                     var queryOrEmail=supportsItems/*+orEmailSuggest+orPhoneSuggest+messenger*/;
1214                }else {
1215                    if(globalwpw.settings.obj.call_sup=="") {
1216                        orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
1217                    }
1218                    var queryOrEmail='<span class="qcld-chatbot-suggest-email" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_email) + '</span>'+orPhoneSuggest;
1219                }
1220                wpwMsg.double_nobg(welcomeMsg,queryOrEmail);
1221                globalwpw.wildCard = 0;
1222            } else if(globalwpw.wildCard==1 && globalwpw.supportStep=='email'){
1223                globalwpw.shopperEmail=msg;
1224                var validate = "";
1225                var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
1226                if( re.test(globalwpw.shopperEmail)!=true){
1227                    validate = validate+wpwKits.randomMsg(globalwpw.settings.obj.invalid_email) ;
1228                }
1229                if(validate == ""){
1230                    var askingMsg=wpwKits.randomMsg(globalwpw.settings.obj.asking_msg);
1231                    wpwMsg.single(askingMsg);
1232                    globalwpw.supportStep='message';
1233                    //keeping value in localstorage
1234                    localStorage.setItem("supportStep",  globalwpw.supportStep);
1235                }else{
1236                    wpwMsg.single(validate);
1237                    globalwpw.supportStep='email';
1238                    //keeping value in localstorage
1239                    localStorage.setItem("supportStep",  globalwpw.supportStep);
1240                }
1241            }else if(globalwpw.wildCard==1 && globalwpw.supportStep=='message'){
1242                var data = {'action':'qcld_wb_chatbot_support_email','name':globalwpw.hasNameCookie,'email':globalwpw.shopperEmail,'message':msg,'nonce':globalwpw.settings.obj.ajax_nonce};
1243                wpwKits.ajax(data).done(function (response) {
1244                    var json=$.parseJSON(response);
1245                    var orPhoneSuggest='';
1246                    if(json.status=='success'){
1247                        var sucMsg=json.message;
1248                        wpwMsg.single(sucMsg);
1249                        //Asking email after showing answer.
1250                        setTimeout(function(){
1251                            if(globalwpw.settings.obj.call_sup=="") {
1252                                orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
1253                            }
1254                            var orEmailSuggest='<span class="qcld-chatbot-suggest-email" >'+wpwKits.randomMsg(globalwpw.settings.obj.support_email)+'</span>';
1255                            wpwKits.suggestEmail(orEmailSuggest+orPhoneSuggest);
1256                            globalwpw.wildCard=0;
1257                        },globalwpw.settings.preLoadingTime);
1258                    }else{
1259                        var failMsg=json.message;
1260                        wpwMsg.single(failMsg);
1261                        //Asking email after showing answer.
1262                        setTimeout(function(){
1263                            if(globalwpw.settings.obj.call_sup=="") {
1264                                orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
1265                            }
1266                            var orEmailSuggest='<span class="qcld-chatbot-suggest-email" >'+wpwKits.randomMsg(globalwpw.settings.obj.support_email)+'</span>';
1267                            wpwKits.suggestEmail(orEmailSuggest+orPhoneSuggest);
1268                            globalwpw.wildCard=0;
1269                        },globalwpw.settings.preLoadingTime);
1270                    }
1271                });
1272            }else if(globalwpw.wildCard==1 && globalwpw.supportStep=='phone'){
1273                var data = {'action':'qcld_wb_chatbot_support_phone','name':globalwpw.hasNameCookie,'phone':msg,'nonce':globalwpw.settings.obj.ajax_nonce};
1274                wpwKits.ajax(data).done(function (response) {
1275                    var json=$.parseJSON(response);
1276                    var orPhoneSuggest='';
1277                    if(json.status=='success'){
1278                        var sucMsg=json.message;
1279                        wpwMsg.single(sucMsg);
1280                        //Asking email after showing answer.
1281                        setTimeout(function(){
1282                            if(globalwpw.settings.obj.call_sup=="") {
1283                                orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
1284                            }
1285                            var orEmailSuggest='<span class="qcld-chatbot-suggest-email" >'+wpwKits.randomMsg(globalwpw.settings.obj.support_email)+'</span>';
1286                            wpwKits.suggestEmail(orEmailSuggest+orPhoneSuggest);
1287                            globalwpw.wildCard=0;
1288                        },globalwpw.settings.preLoadingTime);
1289                    }else{
1290                        var failMsg=json.message;
1291                        wpwMsg.single(failMsg);
1292                        //Asking email after showing answer.
1293                        setTimeout(function(){
1294                            if(globalwpw.settings.obj.call_sup=="") {
1295                                orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
1296                            }
1297                            var orEmailSuggest='<span class="qcld-chatbot-suggest-email" >'+wpwKits.randomMsg(globalwpw.settings.obj.support_email)+'</span>';
1298                            wpwKits.suggestEmail(orEmailSuggest+orPhoneSuggest);
1299                            globalwpw.wildCard=0;
1300                        },globalwpw.settings.preLoadingTime);
1301                    }
1302                });
1303            }else if(globalwpw.wildCard==1 && globalwpw.supportStep=='search'){
1304                msg = wpwKits.filterStopWords(msg);
1305				var data = {'action':'wpbo_search_site','name':globalwpw.hasNameCookie,'keyword':msg, 'security':wp_chatbot_obj.ajax_nonce };
1306				wpwKits.ajax(data).done(function (response) {
1307                    var json=$.parseJSON(response);
1308					if(json.status=='success'){
1309                        wpwMsg.double_nobg(wp_chatbot_obj.found_result_message,json.html);
1310					}else{
1311                        
1312						wpwMsg.single( wpwKits.randomMsg(wp_chatbot_obj.product_fail));
1313                        
1314						// setTimeout(function(){
1315						// 	var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1316						// 	wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
1317						// },globalwpw.settings.preLoadingTime)
1318					}
1319				});
1320            }//
1321        },
1322		formbuilder:function(msg){
1323            if(globalwpw.wildCard==7 && globalwpw.formStep=='welcome'){
1324                var data = {'action':'wpbot_get_form','formid':msg};
1325				wpwKits.ajax(data).done(function (response) {
1326					if(response!=''){
1327						var json=$.parseJSON(response);  
1328						globalwpw.prevform = json.ID;						
1329						globalwpw.formfieldid = json.ID;
1330						localStorage.setItem("formfieldid",  globalwpw.formfieldid);
1331						globalwpw.formStep='field';
1332						localStorage.setItem("formStep",  globalwpw.formStep);
1333						globalwpw.formid=msg;
1334						localStorage.setItem("formid",  globalwpw.formid);
1335						localStorage.setItem("wildCard",  globalwpw.wildCard);
1336						var label = json.label;
1337						if(json.type=='dropdown'){
1338							var html = '';
1339							jQuery.each(json.config.option, function(key, value){
1340								html += '<span class="qcld-chatbot-wildcard qcld-chatbot-formanswer" data-form-value="'+value.value+'" >'+value.label+'</span>';
1341							})
1342							wpwMsg.double(label, html);
1343						}else if(json.type=='checkbox'){
1344							var html = '';
1345							jQuery.each(json.config.option, function(key, value){                            
1346								html += '<input type="checkbox" class="qcld-chatbot-checkbox" value="'+value.value+'">'+value.label+'<br>';
1347							})
1348							wpwMsg.double(label, html);
1349						}else if(json.type=='html'){
1350							wpwMsg.single(json.config.default);
1351							globalwpw.formfieldid = json.ID;
1352							localStorage.setItem("formfieldid",  globalwpw.formfieldid);
1353							globalwpw.formentry = json.entry;
1354							localStorage.setItem("formentry",  globalwpw.formentry);
1355							setTimeout(function(){
1356								wpwTree.formbuilder();
1357							}, globalwpw.settings.preLoadingTime)
1358						}else{
1359								wpwMsg.single(label);
1360						}
1361					}
1362                })
1363            }else if(globalwpw.wildCard==7 && globalwpw.formStep=='field'){
1364                var data = {'action':'wpbot_capture_form_value','formid':globalwpw.formid, 'fieldid': globalwpw.formfieldid, 'answer': msg, 'entry':globalwpw.formentry,'session': localStorage.getItem('botsessionid'), 'name': globalwpw.hasNameCookie,'email':localStorage.getItem('shopperemail'), 'url': window.location.href};
1365				wpwKits.ajax(data).done(function (response) {
1366                    var json=$.parseJSON(response);
1367                    if(json.status=='incomplete'){
1368						if( json.type !='html' ){
1369                            if($('.chatbot_intent_reload').length > 0){
1370                                $('.chatbot_intent_reload').remove();
1371                            }
1372                            $('#wp-chatbot-editor-container').append('<span class="chatbot_intent_reload" title="Click to go back." data-wildcard="7" data-step="welcome" data-intent-type="formbuilder" data-intent="'+globalwpw.prevform+'"><i class="dashicons dashicons-controls-repeat"></i></span>');
1373                            globalwpw.prevform = globalwpw.formfieldid;
1374                        }
1375                        globalwpw.formStep='field';
1376                        localStorage.setItem("formStep",  globalwpw.formStep);
1377                        globalwpw.formfieldid = json.ID;
1378                        localStorage.setItem("formfieldid",  globalwpw.formfieldid);
1379                        globalwpw.formentry = json.entry;
1380                        localStorage.setItem("formentry",  global
1380wpw.formentry);
1381                        var label = json.label;
1382                        if(json.type=='dropdown'){
1383                            var html = '';
1384                            jQuery.each(json.config.option, function(key, value){
1385                                html += '<span class="qcld-chatbot-wildcard qcld-chatbot-formanswer" data-form-value="'+value.value+'" >'+value.label+'</span>';
1386                            })
1387                            wpwMsg.double(label, html);
1388                        }else if(json.type=='html'){
1389                            wpwMsg.single(json.config.default);
1390                            globalwpw.formfieldid = json.ID;
1391                            localStorage.setItem("formfieldid",  globalwpw.formfieldid);
1392                            globalwpw.formentry = json.entry;
1393                            localStorage.setItem("formentry",  globalwpw.formentry);
1394                            setTimeout(function(){
1395                                wpwTree.formbuilder();
1396                            }, 500)
1397                        }else if(json.type=='checkbox'){
1398                            jQuery('.qcld-chatbot-checkbox').val('');
1399							var html = '';
1400							jQuery.each(json.config.option, function(key, value){                            
1401								html += '<input type="checkbox" class="qcld-chatbot-checkbox" value="'+value.value+'">'+value.label+'<br>';
1402							})
1403							wpwMsg.double(label, html);
1404						}else if(json.type=='date_picker'){
1405                            if(json.hasOwnProperty("additional") && json.additional!=''){
1406								label +='<i class="wpbot_addition_label">'+json.additional+'</i>'; 
1407							}
1408							wpwMsg.single(label);
1409                            jQuery('#wp-chatbot-editor').blur();
1410                            jQuery('#wp-chatbot-editor').datetimepicker();
1411                        }else if(json.type=='number'){
1412                            if(json.hasOwnProperty("additional") && json.additional!=''){
1413								label +='<i class="wpbot_addition_label">'+json.additional+'</i>'; 
1414							}
1415							wpwMsg.single(label);
1416                            jQuery('#wp-chatbot-editor').addClass("qcnumberfield");
1417							if(json.hasOwnProperty("config") && json.config.hasOwnProperty("min") && json.config.min>0){
1418								jQuery('#wp-chatbot-editor').attr("minlength", json.config.min);
1419							}
1420							if(json.hasOwnProperty("config") && json.config.hasOwnProperty("max") && json.config.max>0){
1421								jQuery('#wp-chatbot-editor').attr("maxlength", json.config.max);
1422							}
1423                        }else if(json.type=='email'){
1424                            if(json.hasOwnProperty("additional") && json.additional!=''){
1425								label +='<i class="wpbot_addition_label">'+json.additional+'</i>'; 
1426							}
1427							wpwMsg.single(label);
1428                            jQuery('#wp-chatbot-editor').attr("type", "email");
1429                        }else if(json.type=='url'){
1430                            if(json.hasOwnProperty("additional") && json.additional!=''){
1431								label +='<i class="wpbot_addition_label">'+json.additional+'</i>'; 
1432							}
1433							wpwMsg.single(label);
1434                            jQuery('#wp-chatbot-editor').attr("type", "url");
1435                        }else if(json.type=='phone'){
1436							wpwMsg.single(label);
1437                            jQuery('#wp-chatbot-editor').addClass('qcphonebasicus');
1438                        }else if(json.type=='calculation'){
1439                            let calresult = json.calresult;
1440                            calresult = eval(calresult);
1441                            setTimeout(function(){
1442                                var cal = (json.calbefore +' '+ calresult.toFixed(2) +' '+ json.calafter)
1443                                wpwTree.formbuilder(cal);
1444                                wpwMsg.single(cal);
1445                            }, globalwpw.settings.preLoadingTime)
1446                        }else if(json.type=='hidden'){
1447                            var email = json.config.default;
1448                            if( globalwpw.settings.obj.order_login == 1 && json.slug=='email' ){
1449                                email = globalwpw.settings.obj.order_email;
1450                            }
1451                            wpwTree.formbuilder(email);
1452                        }else if(json.type=='text'){
1453							wpwMsg.single(label);
1454						}else{
1455                           // wpwMsg.single(label);
1456                        }
1457                    }else{
1458						if($('.chatbot_intent_reload').length > 0){
1459							$('.chatbot_intent_reload').attr('data-step', 'complete');
1460						}
1461                        globalwpw.formfieldid = '';
1462                        localStorage.setItem("formfieldid",  globalwpw.formfieldid);
1463                        globalwpw.formStep='welcome';
1464                        localStorage.setItem("formStep",  globalwpw.formStep);
1465                        globalwpw.formid='';
1466                        localStorage.setItem("formid",  globalwpw.formid);
1467                        globalwpw.wildCard = 0;
1468                        localStorage.setItem("wildCard",  globalwpw.wildCard);
1469                        globalwpw.formentry = 0;
1470                        localStorage.setItem("formentry",  globalwpw.formentry);
1471						var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
1472                        setTimeout(function(){
1473                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1474                        }, globalwpw.settings.preLoadingTime);
1475						if(jQuery('.chatbot_intent_reload').length>0){
1476                            jQuery('.chatbot_intent_reload').remove();
1477                        }
1478                    }
1479                })
1480            }
1481        },
1482        formbuilder_force_complete:function(msg){
1483            //destroy date picker
1484            //if ( jQuery.isFunction(jQuery.fn.datetimepicker) ) {
1485                if ( typeof jQuery.fn.datetimepicker === 'function' ) {
1486                    jQuery('#wp-chatbot-editor').datetimepicker('destroy');
1487                }
1488                jQuery('#wp-chatbot-editor').attr("type", "text");
1489                jQuery('#wp-chatbot-editor').prop("disabled", false);
1490                jQuery('#wp-chatbot-editor').removeAttr("multiple");
1491                jQuery('#wp-chatbot-editor').removeClass('qcphonebasicus');
1492                jQuery('#wp-chatbot-editor').removeClass("qcnumberfield");
1493                jQuery('#wp-chatbot-editor').removeAttr("minlength");
1494                jQuery('#wp-chatbot-editor').removeAttr("maxlength");
1495                if(globalwpw.wildCard==7 && globalwpw.formStep=='field'){
1496                    var data = {'action':'wpbot_capture_form_value','formid':globalwpw.formid, 'fieldid': globalwpw.formfieldid, 'answer': msg, 'entry':globalwpw.formentry, 'session': localStorage.getItem('botsessionid'), 'name':globalwpw.hasNameCookie, 'email':localStorage.getItem('shopperemail'), 'url': window.location.href, 'do_complete': 1};
1497                    globalwpw.formfieldid = '';
1498                    localStorage.setItem("formfieldid",  globalwpw.formfieldid);
1499                    globalwpw.formStep='welcome';
1500                    localStorage.setItem("formStep",  globalwpw.formStep);
1501                    globalwpw.formid='';
1502                    localStorage.setItem("formid",  globalwpw.formid);
1503                    globalwpw.wildCard = 0;
1504                    localStorage.setItem("wildCard",  globalwpw.wildCard);
1505                    globalwpw.formentry = 0;
1506                    localStorage.setItem("formentry",  globalwpw.formentry);
1507                    wpwKits.ajax(data).done(function (response) {
1508                        var json=$.parseJSON(response);
1509                        if( json.status == 'complete' ){
1510                            //
1511                        }
1512                    })
1513                }
1514        },
1515		reset: function( msg ){
1516			if( globalwpw.wildCard == 25 && globalwpw.resetStep == 'welcome' ){
1517				var restWarning= globalwpw.settings.obj.reset;
1518				var confirmBtn='<span class="qcld-chatbot-reset-btn" reset-data="yes" >'+globalwpw.settings.obj.yes+'</span> <span> '+globalwpw.settings.obj.or+' </span><span class="qcld-chatbot-reset-btn"  reset-data="no">'+globalwpw.settings.obj.no+'</span>';
1519				globalwpw.resetStep = 'answer'
1520				wpwMsg.double_nobg(restWarning,confirmBtn);
1521                setTimeout(function(){
1522                 //   wpwKits.disableEditor('');   
1523                }, 1500)
1524			}else if( globalwpw.wildCard == 25 && globalwpw.resetStep == 'answer' ){
1525				if( msg.toLowerCase() == globalwpw.settings.obj.yes.toLowerCase() ){
1526					wpwKits.reset();
1527                    var number = Math.random() // 0.9394456857981651
1528                    number.toString(36); // '0.xtis06h6'
1529                    var id = number.toString(36).substr(2); // 'xtis06h6'
1530                    localStorage.setItem('botsessionid', id);
1531                    wpwWelcome.greeting();
1532                    wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
1533				}else if( msg.toLowerCase() == globalwpw.settings.obj.no.toLowerCase() ){
1534					
1535					wpwAction.bot(globalwpw.settings.obj.sys_key_help.toLowerCase());
1536                    wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
1537				}
1538				globalwpw.wildCard = 0;
1539				globalwpw.resetStep = 'welcome'
1540			}
1541        },
1542        formatResponse: function(response) {
1543            let cleanResponse = response.replace(/(\w+)\n/g,''); 
1544                cleanResponse = cleanResponse.replace(/(.*?)/gs, '<pre>$1</pre>');
1545                cleanResponse = cleanResponse.replace(/(.*?)/g, '<code>$1</code>');
1546            return cleanResponse;
1547        },
1548        openai_reply:function(msg){
1549
1550        if(globalwpw.settings.obj.openai_enabled == 1){
1551
1552            var customAappend = globalwpw.settings.obj.qcld_openai_append_content;
1553            var customMessage = customAappend ? msg + ' ' + customAappend : msg;
1554
1555            qcldPushAiContext('user', customMessage);
1556
1557            if(wp_chatbot_obj.is_stream_enabled == '1'){
1558                // Callers already append botPreloader before calling openai_reply
1559                var streamData = {
1560                    action: 'qcld_stream_openai',
1561                    name: globalwpw.hasNameCookie,
1562                    keyword: customMessage,
1563                    active_ai_action: globalwpw.active_ai_action || "",
1564                    ai_history: JSON.stringify(globalwpw.aiContext),
1565                    nonce: qcld_chatbot_obj.nonce
1566                };
1567                qcldStreamOpenAI(streamData);
1568            } else {
1569                var data = {'action':'qcld_openai_response','name':globalwpw.hasNameCookie,'keyword':customMessage,'active_ai_action':(globalwpw.active_ai_action || ""),'ai_history':JSON.stringify(globalwpw.aiContext),nonce: qcld_chatbot_obj.nonce};
1570
1571                wpwKits.ajax(data).done(function (res) {
1572                    if( res == '' || typeof res === 'object' ){
1573                        var json = res;
1574                    }if(typeof res === 'string'){
1575                        var json = $.parseJSON(res);
1576                    }
1577
1578                    if(json.status=='success'){
1579                        qcldPushAiContext('assistant', json.message);
1580                        
1581                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1582
1583                        setTimeout(function(){
1584                            var isFormInProgress = qcldIsAiFormInProgress();
1585                            if (json.message && json.message.indexOf('__AI_FORM_IN_PROGRESS__') !== -1) {
1586                                isFormInProgress = true;
1587                                json.message = json.message.replace(/__AI_FORM_IN_PROGRESS__/g, '').trim();
1588                            }
1589                            if (json.message && (json.message.indexOf('AI_FORM_DATA') !== -1 || json.message.indexOf('ai-form-summary-card') !== -1)) {
1590                                isFormInProgress = false;
1591                                if (typeof globalwpw !== 'undefined') {
1592                                    globalwpw.aiContext = [];
1593                                    globalwpw.active_ai_action = '';
1594                                    globalwpw.qcld_ai_form_persisted_state = false;
1595                                }
1596                            }
1597                            
1598                            wpwMsg.single(json.message);
1599
1600                            if(!isFormInProgress && (globalwpw.settings.obj.qcld_disable_repited_startmenu != "1")){
1601                                if(globalwpw.settings.obj.disable_repeatative!=1){
1602                                    setTimeout(function(){
1603                                            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1604                                            if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1605                                                wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1606                                            }
1607                                    },globalwpw.settings.preLoadingTime)
1608                                }else{
1609                                    setTimeout(function(){
1610                                        if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1611                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1612                                        }
1613                                    }, globalwpw.settings.preLoadingTime*2);
1614                                }
1615                            }
1616                            if(!isFormInProgress) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
1617
1618                        },globalwpw.settings.preLoadingTime)
1619                    }
1620                })
1621            }
1622        }
1623        if(globalwpw.settings.obj.openrouter_enabled == 1){
1624 
1625            var customAappend = globalwpw.settings.obj.qcld_openrouter_append_content;
1626            var customprepend = globalwpw.settings.obj.qcld_openrouter_prepend_content;
1627            var customMessage = customprepend ? customprepend + ' ' + msg : msg;
1628            customMessage = customAappend ? customMessage + ' ' + customAappend : customMessage;
1629            
1630            qcldPushAiContext('user', customMessage);
1631
1632            var data = {'action':'openrouter_response','name':globalwpw.hasNameCookie,'keyword':customMessage, 'active_ai_action':(globalwpw.active_ai_action || ""), nonce: qcld_chatbot_obj.nonce, ai_history: JSON.stringify(globalwpw.aiContext)};
1633            wpwKits.ajax(data).done(function (res) {
1634                if( res == '' || typeof res === 'object' ){
1635                    var json = res;
1636                }if(typeof res === 'string'){
1637                    var json = $.parseJSON(res);
1638                }
1639                if(json.status=='success'){
1640                    qcldPushAiContext('assistant', json.message);
1641                    var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1642                    
1643                    setTimeout(function(){
1644                        var isFormInProgress = qcldIsAiFormInProgress();
1645                        if (json.message && json.message.indexOf('__AI_FORM_IN_PROGRESS__') !== -1) {
1646                            isFormInProgress = true;
1647                            json.message = json.message.replace(/__AI_FORM_IN_PROGRESS__/g, '').trim();
1648                        }
1649                        if (json.message && (json.message.indexOf('AI_FORM_DATA') !== -1 || json.message.indexOf('ai-form-summary-card') !== -1)) {
1650                            isFormInProgress = false;
1651                            if (typeof globalwpw !== 'undefined') {
1652                                globalwpw.aiContext = [];
1653                                globalwpw.active_ai_action = '';
1654                                globalwpw.qcld_ai_form_persisted_state = false;
1655                            }
1656                        }
1657                        
1658                        wpwMsg.single(json.message);
1659                        
1660                        if(!isFormInProgress && globalwpw.settings.obj.qcld_disable_repited_startmenu != "1" ){
1661                            if(globalwpw.settings.obj.disable_repeatative!=1){
1662                                setTimeout(function(){
1663                                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1664                                        if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1665                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1666                                        }
1667                                },globalwpw.settings.preLoadingTime)
1668                            }else{
1669                                setTimeout(function(){
1670                                    if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1671                                        wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1672                                    }
1673                                }, globalwpw.settings.preLoadingTime*2);
1674                            }
1675                        }
1676                        if(!isFormInProgress) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
1677                    },globalwpw.settings.preLoadingTime)
1678                }else{
1679                    wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + 'Sorry, I encountered an error processing your AI request. Please check api key and try again later.' + '</span>');
1680                }
1681            })
1682        }
1683        
1684        if(globalwpw.settings.obj.claude_enabled == 1){
1685            var customAappend = globalwpw.settings.obj.qcld_claude_append_content;
1686            var customprepend = globalwpw.settings.obj.qcld_claude_prepend_content;
1687            var customMessage = customprepend ? customprepend + ' ' + msg : msg;
1688            customMessage = customAappend ? customMessage + ' ' + customAappend : customMessage;
1689
1690            qcldPushAiContext('user', customMessage);
1691            
1692            var claudeStreamEnabled = globalwpw.settings.obj.qcld_claude_stream_enabled;
1693            if (claudeStreamEnabled == "1") {
1694                const claudeStreamData = {
1695                    action: "qcld_stream_claude",
1696                    name: globalwpw.hasNameCookie,
1697                    keyword: customMessage,
1698                    active_ai_action: globalwpw.active_ai_action || "",
1699                    ai_history: JSON.stringify(globalwpw.aiContext)
1700                };
1701                streamClaude(claudeStreamData);
1702                return;
1703            } else {
1704                var data = {'action':'claude_response','name':globalwpw.hasNameCookie,'keyword':customMessage, 'active_ai_action':(globalwpw.active_ai_action || ""), nonce: qcld_chatbot_obj.nonce, ai_history: JSON.stringify(globalwpw.aiContext)};
1705                wpwKits.ajax(data).done(function (res) {
1706                    if( res == '' || typeof res === 'object' ){
1707                        var json = res;
1708                    }if(typeof res === 'string'){
1709                        var json = $.parseJSON(res);
1710                    }
1711                    if(json.status=='success'){
1712                        qcldPushAiContext('assistant', json.message);
1713                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1714                        setTimeout(function(){
1715                            var isFormInProgress = qcldIsAiFormInProgress();
1716                            if (json.message && json.message.indexOf('__AI_FORM_IN_PROGRESS__') !== -1) {
1717                                isFormInProgress = true;
1718                                json.message = json.message.replace(/__AI_FORM_IN_PROGRESS__/g, '').trim();
1719                            }
1720                            if (json.message && (json.message.indexOf('AI_FORM_DATA') !== -1 || json.message.indexOf('ai-form-summary-card') !== -1)) {
1721                                isFormInProgress = false;
1722                                if (typeof globalwpw !== 'undefined') {
1723                                    globalwpw.aiContext = [];
1724                                    globalwpw.active_ai_action = '';
1725                                    globalwpw.qcld_ai_form_persisted_state = false;
1726                                }
1727                            }
1728                            
1729                            wpwMsg.single(json.message);
1730                            if(!isFormInProgress && globalwpw.settings.obj.qcld_disable_repited_startmenu != "1" ){
1731                                if(globalwpw.settings.obj.disable_repeatative!=1){
1732                                    setTimeout(function(){
1733                                            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1734                                            if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1735                                                wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1736                                            }
1737                                    },globalwpw.settings.preLoadingTime)
1738                                }else{
1739                                    setTimeout(function(){
1740                                        if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1741                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1742                                        }
1743                                    }, globalwpw.settings.preLoadingTime*2);
1744                                }
1745                            }
1746                            if(!isFormInProgress) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
1747                        },globalwpw.settings.preLoadingTime)
1748                    }else{
1749                        wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + 'Sorry, I encountered an error processing your AI request. Please check api key and try again later.' + '</span>');
1750                    }
1751                });
1752            }
1753        }
1754        if(globalwpw.settings.obj.gemini_enabled == 1){
1755            var customAappend = globalwpw.settings.obj.qcld_openrouter_append_content;
1756            var customprepend = globalwpw.settings.obj.qcld_openrouter_prepend_content;
1757            var customMessage = customprepend ? customprepend + ' ' + msg : msg;
1758            customMessage = customAappend ? customMessage + ' ' + customAappend : customMessage;
1759            
1760            qcldPushAiContext('user', customMessage);
1761            
1762            var data = {'action':'qcld_gemini_response','name':globalwpw.hasNameCookie,'keyword':customMessage, 'active_ai_action':(globalwpw.active_ai_action || ""), nonce: qcld_chatbot_obj.nonce, ai_history: JSON.stringify(globalwpw.aiContext)};
1763            wpwKits.ajax(data).done(function (res) {
1764                 if( res == '' || typeof res === 'object' ){
1765                    var json = res;
1766                }if(typeof res === 'string'){
1767                    var json = $.parseJSON(res);
1768                }
1769                
1770                if(json.status=='success'){
1771                    qcldPushAiContext('assistant', json.message);
1772                    var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1773                    
1774                    setTimeout(function(){
1775                        var isFormInProgress = qcldIsAiFormInProgress();
1776                        if (json.message && json.message.indexOf('__AI_FORM_IN_PROGRESS__') !== -1) {
1777                            isFormInProgress = true;
1778                            json.message = json.message.replace(/__AI_FORM_IN_PROGRESS__/g, '').trim();
1779                        }
1780                        if (json.message && (json.message.indexOf('AI_FORM_DATA') !== -1 || json.message.indexOf('ai-form-summary-card') !== -1)) {
1781                            isFormInProgress = false;
1782                            if (typeof globalwpw !== 'undefined') {
1783                                globalwpw.aiContext = [];
1784                                globalwpw.active_ai_action = '';
1785                                globalwpw.qcld_ai_form_persisted_state = false;
1786                            }
1787                        }
1788                        
1789                        wpwMsg.single(json.message);
1790                        
1791                        if(!isFormInProgress && (globalwpw.settings.obj.qcld_disable_repited_startmenu != "1")){
1792                            if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1793                                setTimeout(function(){
1794                                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1795                                        if((globalwpw.settings.obj.qcld_disable_start_menu != "1" && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1796                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1797                                        }
1798                                },globalwpw.settings.preLoadingTime)
1799                            }else{
1800                                setTimeout(function(){
1801                                    if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1" && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1802                                        wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1803                                    }
1804                                }, globalwpw.settings.preLoadingTime*2);
1805                            }
1806                        }
1807                    },globalwpw.settings.preLoadingTime)
1808                }else{
1809                    wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + 'Sorry, I encountered an error processing your AI request. Please check api key and try again later.' + '</span>');
1810                }
1811            })
1812        }
1813        if(globalwpw.settings.obj.grok_enabled == 1){
1814            var customMessage = msg;
1815            customMessage = customAappend ? customMessage + ' ' + customAappend : customMessage;
1816
1817            qcldPushAiContext('user', customMessage);
1818
1819            var data = {'action':'qcld_grok_response','name':globalwpw.hasNameCookie,'keyword':customMessage, 'active_ai_action':(globalwpw.active_ai_action || ""), nonce: qcld_chatbot_obj.nonce, ai_history: JSON.stringify(globalwpw.aiContext)};
1820            wpwKits.ajax(data).done(function (res) {
1821                if( res == '' || typeof res === 'object' ){
1822                    var json = res;
1823                }if(typeof res === 'string'){
1824                    var json = $.parseJSON(res);
1825                }
1826                
1827                if(json.status=='success'){
1828                    qcldPushAiContext('assistant', json.message);
1829                    var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1830                    
1831                    setTimeout(function(){
1832                        var isFormInProgress = qcldIsAiFormInProgress();
1833                        if (json.message && json.message.indexOf('__AI_FORM_IN_PROGRESS__') !== -1) {
1834                            isFormInProgress = true;
1835                            json.message = json.message.replace(/__AI_FORM_IN_PROGRESS__/g, '').trim();
1836                        }
1837                        if (json.message && (json.message.indexOf('AI_FORM_DATA') !== -1 || json.message.indexOf('ai-form-summary-card') !== -1)) {
1838                            isFormInProgress = false;
1839                            if (typeof globalwpw !== 'undefined') {
1840                                globalwpw.aiContext = [];
1841                                globalwpw.active_ai_action = '';
1842                                globalwpw.qcld_ai_form_persisted_state = false;
1843                            }
1844                        }
1845                        
1846                        wpwMsg.single(json.message);
1847                        
1848                        if(!isFormInProgress && (globalwpw.settings.obj.qcld_disable_repited_startmenu != "1")){
1849                            if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1850                                setTimeout(function(){
1851                                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
1852                                        if((globalwpw.settings.obj.qcld_disable_start_menu != "1" && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1853                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1854                                        }
1855                                },globalwpw.settings.preLoadingTime)
1856                            }else{
1857                                setTimeout(function(){
1858                                    if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1" && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
1859                                        wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1860                                    }
1861                                }, globalwpw.settings.preLoadingTime*2);
1862                            }
1863                        }
1864                    },globalwpw.settings.preLoadingTime)
1865                }else{
1866                    wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + 'Sorry, I encountered an error processing your AI request. Please check api key and try again later.' + '</span>');
1867                }
1868            })
1869        }
1870        },
1871        site_search:function(msg){
1872            msg1 = wpwKits.filterStopWords(msg);
1873            var data = {'action':'wpbo_search_site','name':globalwpw.hasNameCookie,'keyword':msg1, 'security':wp_chatbot_obj.ajax_nonce};
1874            wpwKits.ajax(data).done(function (res) {
1875                var json=$.parseJSON(res);
1876                  if(!qcldIsAiFormInProgress()) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
1877               
1878                if(json.status=='success'){
1879                    if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
1880                        wpwMsg.triple_nobg( wp_chatbot_obj.found_result_message,json.html,'<span class="qcld-chatbot-wildcard"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>' );
1881                    }else{
1882                        wpwMsg.double_nobg( wp_chatbot_obj.found_result_message,json.html);
1883                    }
1884                }else if( (globalwpw.settings.obj.openai_enabled == 1) || (wp_chatbot_obj.openai_enabled == 1) || (globalwpw.settings.obj.openrouter_enabled == 1) || (wp_chatbot_obj.openrouter_enabled == 1) || (globalwpw.settings.obj.gemini_enabled == 1) || (wp_chatbot_obj.gemini_enabled == 1) || (globalwpw.settings.obj.grok_enabled == 1) || (wp_chatbot_obj.grok_enabled == 1) || (wp_chatbot_obj.claude_enabled == 1) || (globalwpw.settings.obj.claude_enabled == 1) ){
1885                             if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
1886                                    $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
1887                                }
1888                    wpwTree.openai_reply(msg);
1889                }else{
1890                    if((globalwpw.settings.obj.disable_back_to_start != '1' && global
1890wpw.settings.obj.skip_greetings_and_menu != 1)){
1891                        wpwMsg.double_nobg( wpwKits.randomMsg(wp_chatbot_obj.product_fail ),'<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
1892                    }else{
1893                        wpwMsg.single( wpwKits.randomMsg(wp_chatbot_obj.product_fail ));
1894                    }
1895                }
1896            })  
1897        }
1898    };
1899    /*
1900     * wpwbot Actions are divided into two part
1901     * shopper will response after initialize message,
1902     * then based on shopper activities shopper will act.
1903     */
1904    var wpwAction={
1905        findkey:function(array, msg){
1906            var index = -1;
1907            $.each( array, function( key, value ) {
1908                value = jQuery.map(value, function(n,i){return n.toLowerCase();});
1909                if(value.indexOf(msg.toLowerCase()) > -1){
1910                    index = key;
1911                    return false;
1912                }
1913            });
1914            return index;
1915        },
1916        bot:function(msg){
1917            var simple_response_intent = globalwpw.settings.obj.simple_response_intent;
1918            if(simple_response_intent.length>0){
1919                simple_response_intent = jQuery.map(simple_response_intent, function(n,i){return n.toLowerCase();});
1920            }
1921            var allformname = jQuery.map(globalwpw.settings.obj.forms, function(n,i){return n.toLowerCase();});
1922            var allformcommand = globalwpw.settings.obj.form_commands;
1923            if(globalwpw.wildcardsHelp.indexOf(msg.toLowerCase())>-1){
1924                
1925                    if(globalwpw.wildCard==7){
1926                        wpwTree.formbuilder_force_complete( msg );
1927                    }
1928                    if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_help.toLowerCase()){
1929                 
1930                        globalwpw.wildCard=0;
1931                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
1932                        wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
1933                    }
1934                    if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_support.toLowerCase()){
1935                        globalwpw.wildCard=1;
1936                        globalwpw.supportStep='welcome';
1937                        wpwTree.support(msg);
1938                    }
1939                    // if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_product.toLowerCase()){
1940                    //     globalwpw.wildCard=20;
1941                    //     globalwpw.productStep='asking';
1942                    //  //   wpwTree.product(msg);
1943                    // }
1944                    if(globalwpw.settings.obj.woocommerce){
1945                        if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_catalog.toLowerCase()){
1946                            globalwpw.wildCard=20;
1947                            globalwpw.productStep='search';
1948                            wpwKits.sugestCat();
1949                        }
1950                        if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_order.toLowerCase()){
1951                            globalwpw.wildCard=21;
1952                            globalwpw.orderStep='welcome';
1953                            wpwTree.order(msg);
1954                        }
1955                    }
1956                    if( globalwpw.settings.obj.open_a_ticket && msg.toLowerCase()==globalwpw.settings.obj.open_a_ticket.toLowerCase() && globalwpw.settings.obj.ticket_url!=''){
1957                        //comming
1958                        window.open(globalwpw.settings.obj.ticket_url, '_blank');
1959                        wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
1960                    }
1961                    if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_reset.toLowerCase()){
1962                        globalwpw.wildCard=25;
1963                        globalwpw.resetStep='welcome';
1964                        wpwTree.reset(msg);
1965                    }
1966                    if(msg.toLowerCase()==globalwpw.settings.obj.sys_key_email.toLowerCase()){
1967                    // var shopperChoice=$(this).text();
1968                        wpwMsg.shopper_choice(globalwpw.settings.obj.sys_key_email.toLowerCase());
1969                        //Then ask email address
1970                        if(typeof(globalwpw.hasNameCookie)=='undefined'|| global
1970wpw.hasNameCookie==''){
1971                            var shopperName=  globalwpw.settings.obj.shopper_demo_name;
1972                        }else{
1973                            var shopperName=globalwpw.hasNameCookie;
1974                        }
1975                        var ask_msg = wpwKits.randomMsg(globalwpw.settings.obj.asking_email);
1976                        var askEmail = (globalwpw.settings.obj.skip_wp_greetings=='1' || globalwpw.settings.obj.skip_greetings_and_menu =='1') ? wpwKits.randomMsg(globalwpw.settings.obj.hello)+' '+ ask_msg : wpwKits.randomMsg(globalwpw.settings.obj.hello)+' '+shopperName+'! '+ ask_msg;
1977                        wpwMsg.single(askEmail);
1978                        globalwpw.supportStep='email';
1979                        globalwpw.wildCard=1;
1980                        localStorage.setItem("wildCard",  globalwpw.wildCard);
1981                        localStorage.setItem("supportStep",  globalwpw.supportStep);
1982                    }
1983                    if( globalwpw.settings.obj.sys_key_livechat && msg.toLowerCase()==globalwpw.settings.obj.sys_key_livechat.toLowerCase()){
1984                        wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
1985                        if(globalwpw.settings.obj.is_livechat_active){
1986                            if(globalwpw.settings.obj.disable_livechat_operator_offline==1){
1987                                if(globalwpw.settings.obj.is_operator_online==1){
1988                                    $(globalwpw.settings.messageWrapper).html(localStorage.getItem("wpwHitory"));
1989                                    if($('#wbca_signup_fullname').length>0){
1990                                        if(localStorage.getItem('shopper')!==null){
1991                                            $('#wbca_signup_fullname').val(localStorage.getItem('shopper'));
1992                                        }
1993                                        if(localStorage.getItem('shopperemail')!==null){
1994                                            $('#wbca_signup_email').val(localStorage.getItem('shopperemail'));
1995                                        }
1996                                    }
1997                                    $("#wp-chatbot-board-container").removeClass('active-chat-board');
1998                                    $('.wp-chatbot-container').hide();
1999                                    $('.wpbot-saas-live-chat').show();
2000                                }
2001                            }else{
2002                                $(globalwpw.settings.messageWrapper).html(localStorage.getItem("wpwHitory"));
2003                                if($('#wbca_signup_fullname').length>0){
2004                                    if(localStorage.getItem('shopper')!==null){
2005                                        $('#wbca_signup_fullname').val(localStorage.getItem('shopper'));
2006                                    }
2007                                    if(localStorage.getItem('shopperemail')!==null){
2008                                        $('#wbca_signup_email').val(localStorage.getItem('shopperemail'));
2009                                    }
2010                                }
2011                                $("#wp-chatbot-board-container").removeClass('active-chat-board');
2012                                $('.wp-chatbot-container').hide();
2013                                $('.wpbot-saas-live-chat').show();
2014                            }
2015                        }
2016                    }
2017                }else if(allformname.indexOf(msg.toLowerCase()) > -1 || this.findkey(allformcommand, msg)> -1){
2018                    //Form builder commands form name
2019                    if(globalwpw.wildCard==7){
2020                        wpwTree.formbuilder_force_complete( msg );
2021                    }
2022                    var index = (allformname.indexOf(msg.toLowerCase()) > -1?allformname.indexOf(msg.toLowerCase()):this.findkey(allformcommand, msg));
2023                    var formid=globalwpw.settings.obj.form_ids[index];
2024                    globalwpw.wildCard=7;
2025                    globalwpw.formStep='welcome';
2026                    wpwTree.formbuilder(formid);
2027                }else if(simple_response_intent.indexOf(msg.toLowerCase()) > -1){
2028                    if(globalwpw.wildCard==7){
2029                        wpwTree.formbuilder_force_complete( msg );
2030                    }
2031                    var data = {'action':'wpbo_search_responseby_intent','name':globalwpw.hasNameCookie,'keyword':msg, 'language':globalwpw.settings.obj.language};
2032                    if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2033                        $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2034                    }
2035                    wpwKits.ajax(data).done(function (response) {
2036                        var json=$.parseJSON(response);
2037                        if(json.status=='success'){
2038                            wpwMsg.single(json.html);
2039                            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
2040                            if( typeof(json.followup)!=="undefined" && json.followup!='' ){
2041                                setTimeout(function(){
2042                                    wpwMsg.single(json.followup);
2043                                }
2043, globalwpw.settings.preLoadingTime*2);
2044                            }else{
2045                               
2046                                    setTimeout(function(){
2047                                           if(!qcldIsAiFormInProgress()) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
2048                                        if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2049                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2050                                        }
2051                                    }, globalwpw.settings.preLoadingTime*2);
2052                            }
2053                        }
2054                    })
2055                }else{
2056                    /*
2057                    *   Greeting part
2058                    *   bot action
2059                    */
2060                    if(globalwpw.wildCard==0){
2061                        //When intialize 1 and don't have cookies then keep  the name of shooper in in cookie
2062                        if(globalwpw.initialize==1 && !localStorage.getItem('shopper')  && globalwpw.wildCard==0){
2063                            wpwTree.greeting(msg);
2064                        }else if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.df_status_lock==0){
2065                            wpwTree.greeting(msg);
2066                        }else if(localStorage.getItem('default_asking_email')){
2067                            wpwTree.greeting(msg);
2068                        }else if(localStorage.getItem('default_asking_phone')){
2069                            wpwTree.greeting(msg);
2070                        }else{
2071                            //simple text response wrapper
2072                         
2073                            var data = {'action':'wpbo_search_response','name':globalwpw.hasNameCookie,'keyword':msg, 'language':globalwpw.settings.obj.language};
2074                              if(wp_chatbot_obj.disable_site_search == 1){
2075                                if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2076                                    $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2077                                }
2078                            }
2079                            wpwKits.ajax(data).done(function (response) {
2080                                var json=$.parseJSON(response);
2081                                
2082                                if(json.status=='fail' && json.data !==''){
2083
2084                                    if(wp_chatbot_obj.disable_site_search != 1){
2085                                        wpwTree.site_search(msg)
2086                                    }
2087                                    else if( (globalwpw.settings.obj.openai_enabled == 1) || (wp_chatbot_obj.openai_enabled == 1) || (globalwpw.settings.obj.openrouter_enabled == 1) || (wp_chatbot_obj.openrouter_enabled == 1) || (globalwpw.settings.obj.gemini_enabled == 1) || (wp_chatbot_obj.gemini_enabled == 1) || (globalwpw.settings.obj.grok_enabled == 1) || (wp_chatbot_obj.grok_enabled == 1) || (wp_chatbot_obj.claude_enabled == 1) || (globalwpw.settings.obj.claude_enabled == 1) ){
2088                                        wpwTree.openai_reply(msg)
2089                                    }else{
2090                                        wpwMsg.single(globalwpw.settings.obj.empty_filter_msg);
2091                                    }
2092                                }else if(json.status=='success'){
2093                                    if(typeof(json.category)!=="undefined" && json.category){
2094                                        var question='';
2095                                        $.each(json.data, function (i, obj) {
2096                                            question += '<span class="qcld-chatbot-wildcard qcld_simple_txt_response"  data-strid="'+ obj.id +'">'+ obj.query +'</span>';
2097                                        });
2098                                        wpwMsg.single_nobg(question);
2099                                    }
2100                                    else if(json.multiple){
2101                                        var question='';
2102                                        $.each(json.data, function (i, obj) {
2103                                            question += '<span class="qcld-chatbot-wildcard qcld_simple_txt_response"  data-strid="'+ obj.id +'">'+ obj.query +'</span>';
2104                                        });
2105                                        wpwMsg.double_nobg(wpwKits.randomMsg(globalwpw.settings.obj.did_you_mean),question);
2106                                    }else{
2107                                            wpwMsg.single(json.data[0].response);
2108                                            var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.wildcard_msg);
2109                                            if( typeof(json.data[0].followup)!=="undefined" && json.data[0].followup!='' ){
2110                                                setTimeout(function(){
2111                                                    wpwMsg.single(json.data[0].followup);
2112                                                }
2112, globalwpw.settings.preLoadingTime*2);
2113                                            }else{
2114                                                // if(globalwpw.settings.obj.disable_repeatative!=1){
2115                                                //     setTimeout(function(){
2116                                                //         wpwMsg.double_nobg(serviceOffer, globalwpw.wildcards);
2117                                                //     }, globalwpw.settings.preLoadingTime*2);
2118                                                // }else{
2119                                                    setTimeout(function(){
2120                                                           if(!qcldIsAiFormInProgress()) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
2121                                                        if( (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2122                                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2123                                                        }
2124                                                    }, globalwpw.settings.preLoadingTime*2);
2125                                              // }
2126                                            }
2127                                    }
2128                                }else{
2129                                    //Default intents site search
2130                                    msg = wpwKits.filterStopWords(msg);
2131                                    if(globalwpw.settings.obj.woocommerce){
2132                                        var data = {'action':'qcld_wb_chatbot_keyword', 'keyword':msg};
2133                                        //Products by string search ajax handler.
2134                                        if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2135                                            $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2136                                        }
2137                                        wpwKits.ajax(data).done(function( response ) {
2138                                            if(response.product_num==0){
2139                                                if(msg!='' && globalwpw.settings.obj.disable_sitesearch==''){
2140                                                    msg = wpwKits.filterStopWords(msg);
2141                                                    var data = {'action':'wpbo_search_site','name':globalwpw.hasNameCookie,'keyword':msg, 'security':wp_chatbot_obj.ajax_nonce};
2142                                                    if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2143                                                        $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2144                                                    }
2145                                                    wpwKits.ajax(data).done(function (response) {
2146                                                        var json=$.parseJSON(response);
2147                                                        if(json.status=='success'){
2148                                                          //  wpwMsg.single(wp_chatbot_obj.found_result_message);
2149                                                            $('span[data-wildcart="back"]').remove();
2150                                                            if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2151                                                                wpwMsg.triple_nobg(wp_chatbot_obj.found_result_message,json.html,'<span class="qcld-chatbot-wildcard"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2152                                                            }else{
2153                                                                wpwMsg.double_nobg(wp_chatbot_obj.found_result_message,json.html);
2154                                                            }
2155                                                        }else{
2156                                                            var data = {'action':'wpbo_failed_response','name':globalwpw.hasNameCookie,'keyword':msg};
2157                                                                wpwKits.ajax(data).done(function (res) {
2158                                                                    //
2159                                                                })
2160                                                            if(globalwpw.counter == globalwpw.settings.obj.no_result_attempt_count || global
2160wpw.settings.obj.no_result_attempt_count == 0 ){
2161                                                                wpwMsg.single(wpwKits.randomMsg(json.html));
2162                                                                    setTimeout(function(){
2163                                                                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
2164                                                                        if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2165                                                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2166                                                                        }
2167                                                                    },globalwpw.settings.preLoadingTime)
2168                                                                globalwpw.counter = 0;
2169                                                            }else{
2170                                                                globalwpw.counter++;
2171                                                                wpwMsg.single(wpwKits.randomMsg(json.html));
2172                                                            }
2173                                                        }
2174                                                        globalwpw.wildCard=0;
2175                                                    });
2176                                                }else{
2177                                                    globalwpw.wildCard=0;
2178                                                    wpwMsg.single(wpwKits.randomMsg(globalwpw.settings.obj.empty_filter_msg));
2179                                                    // if(globalwpw.settings.obj.disable_repeatative!=1){
2180                                                    //     setTimeout(function(){
2181                                                    //         var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
2182                                                    //         wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
2183                                                    //     },globalwpw.settings.preLoadingTime)
2184                                                    // }else{
2185                                                        setTimeout(function(){
2186                                                               if(!qcldIsAiFormInProgress()) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
2187                                                            if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2188                                                                wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2189                                                            }
2190                                                        }, globalwpw.settings.preLoadingTime*2);
2191                                                   // }
2192                                                }
2193                                            }else {
2194                                            var productSucces= wpwKits.randomMsg(globalwpw.settings.obj.product_success)+" <strong>"+msg+"</strong>!";
2195                                                console.log(globalwpw.wildcards);
2196                                                wpwMsg.double_nobg(productSucces,response.html);
2197                                                if(response.per_page >= response.product_num){
2198                                                    setTimeout(function () {
2199                                                        var searchAgain = wpwKits.randomMsg(globalwpw.settings.obj.product_infinite);
2200                                                        wpwMsg.single(searchAgain);
2201                                                        //keeping value in localstorage
2202                                                        globalwpw.wildCard=20;
2203                                                        globalwpw.productStep='search';
2204                                                        localStorage.setItem("productStep",  globalwpw.productStep);
2205                                                    },globalwpw.settings.wildcardsShowTime);
2206                                                }	
2207                                            }
2208                                        });
2209                                    }else{
2210                                        if(msg!='' && globalwpw.settings.obj.disable_sitesearch==''){
2211                                            msg = wpwKits.filterStopWords(msg);
2212                                            var data = {'action':'wpbo_search_site','name':globalwpw.hasNameCookie,'keyword':msg, 'security':wp_chatbot_obj.ajax_nonce};
2213                                            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2214                                                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2215                                            }
2216                                            wpwKits.ajax(data).done(function (response) {
2217                                                var json=$.parseJSON(response);
2218                                                if(json.status=='success'){
2219                                                    //wpwMsg.single();
2220                                                    $('span[data-wildcart="back"]').remove();
2221                                                    if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2222                                                        wpwMsg.triple_nobg(wp_chatbot_obj.found_result_message,json.html,'<span class="qcld-chatbot-wildcard"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2223                                                    }else{
2224                                                        wpwMsg.double_nobg(wp_chatbot_obj.found_result_message,json.html);
2225                                                    }
2226                                                }else{
2227                                                    var data = {'action':'wpbo_failed_response','name':globalwpw.hasNameCookie,'keyword':msg};
2228                                                        wpwKits.ajax(data).done(function (res) {
2229                                                            //
2230                                                        })
2231                                                    if(globalwpw.counter == globalwpw.settings.obj.no_result_attempt_count || globalwpw.settings.obj.no_result_attempt_count == 0 ){
2232                                                        wpwMsg.single(wpwKits.randomMsg(json.html));
2233                                                            setTimeout(function(){
2234                                                                var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
2235                                                                if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2236                                                                    wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2237                                                                }
2238                                                            },globalwpw.settings.preLoadingTime)
2239                                                        globalwpw.counter = 0;
2240                                                    }else{
2241                                                        globalwpw.counter++;
2242                                                        wpwMsg.single(wpwKits.randomMsg(json.html));
2243                                                    }
2244                                                }
2245                                                globalwpw.wildCard=0;
2246                                            });
2247                                        }else{
2248                                            globalwpw.wildCard=0;
2249                                            wpwMsg.single(wpwKits.randomMsg(globalwpw.settings.obj.empty_filter_msg));
2250                                            // if(globalwpw.settings.obj.disable_repeatative!=1){
2251                                            //     setTimeout(function(){
2252                                            //         var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
2253                                            //         wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
2254                                            //     },globalwpw.settings.preLoadingTime)
2255                                            // }else{
2256                                                setTimeout(function(){
2257                                                       if(!qcldIsAiFormInProgress()) { $(globalwpw.settings.messageContainer).find('.wp-chatbot-msg:last .qcld-like-dislike-icon').css('display', 'block'); }
2258                                                        if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2259                                                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2260                                                        }
2261                                                }, globalwpw.settings.preLoadingTime*2);
2262                                           // }
2263                                        }
2264                                    }
2265                                }
2266                            })
2267                         
2268                        } //
2269                    }
2270                    if(globalwpw.settings.obj.woocommerce){
2271                        //Product
2272                        if(globalwpw.wildCard==20){
2273                            wpwTree.product(msg);
2274                        }
2275                        /*
2276                        *   order status part
2277                        *   bot action
2278                        */
2279                        if(globalwpw.wildCard==21){
2280                            wpwTree.order(msg);
2281                        }
2282                    }
2283                    if(globalwpw.wildCard==1){
2284                        wpwTree.support(msg);
2285                    }
2286                    if(globalwpw.wildCard==3){
2287                        wpwTree.subscription(msg);
2288                    }
2289                    if(globalwpw.wildCard==6){
2290                        wpwTree.unsubscription(msg);
2291                    }
2292                    if(globalwpw.wildCard==7){
2293                        wpwTree.formbuilder(msg);
2294                    }
2295                    if(globalwpw.wildCard==9){
2296                        wpwTree.bargain(msg);
2297                    }
2298                    if(globalwpw.wildCard==25){
2299                        wpwTree.reset(msg);
2300                    }
2301                    if(globalwpw.wildCard==26){
2302                        wpwTree.dfcx(msg);
2303                    }
2304                    if(globalwpw.wildCard==30){
2305                        wpwTree.ldsuggestion();
2306                    }
2307                }
2308        },
2309        clickstr: function(id){
2310            var data = {'action':'wpbo_search_response','name':globalwpw.hasNameCookie,'strid':id, 'language':globalwpw.settings.obj.language}; 
2311            
2312            wpwKits.ajax(data).done(function (response) {
2313                var json=$.parseJSON(response);
2314                if(json.status=='success'){
2315                    if(typeof(json.data)!=="undefined" && json.data){
2316                        var question='';
2317                        $.each(json.data, function (i, obj) {
2318                            
2319                            question += obj.response;
2320                        });
2321                        wpwMsg.single(question);
2322                    }
2323                }
2324            })
2325        },
2326        shopper:function (msg) {
2327            wpwMsg.shopper(msg);
2328            if(globalwpw.wildCard==1) {
2329                this.bot(msg);
2330            }
2330else if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.wildCard==0 && globalwpw.ai_step==1 && globalwpw.df_status_lock==0){
2331                this.bot(msg);
2332            } else{
2333                //Filtering the user given messages by stopwords
2334                var filterMsg=(msg);
2335                //handle empty filterMsg as repeat the message.
2336                if(filterMsg=="")  {
2337                    //if(globalwpw.emptymsghandler==0){
2338                        globalwpw.repeatQueryEmpty=wpwKits.randomMsg(globalwpw.settings.obj.empty_filter_msg);
2339                        globalwpw.emptymsghandler++;
2340                    //}
2341                    wpwMsg.single(globalwpw.repeatQueryEmpty);
2342                    setTimeout(function(){
2343                        var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
2344                        if((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2345                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2346                        }
2347                    },globalwpw.settings.preLoadingTime)
2348                }else {
2349                    globalwpw.emptymsghandler=0;
2350                    this.bot(filterMsg);
2351                }
2352            }
2353        }
2354    };
2355    /*
2356     * wpwBot Plugin Creation without selector and
2357     * wpwbot and shoppers all activities will be handled.
2358     */
2359    $.wpwbot = function(options) {
2360        //Using plugins defualts values or overwrite by options.
2361        
2362        var settings = $.extend({}, $.wpwbot.defaults, options);
2363        //Updating global settings
2364        globalwpw.settings=settings;
2365        //updating the helpkeywords
2366        globalwpw.wildcardsHelp=[globalwpw.settings.obj.sys_key_help.toLowerCase(),globalwpw.settings.obj.sys_key_product.toLowerCase(),globalwpw.settings.obj.sys_key_catalog.toLowerCase(),globalwpw.settings.obj.sys_key_support.toLowerCase(),globalwpw.settings.obj.sys_key_order.toLowerCase(),globalwpw.settings.obj.sys_key_reset.toLowerCase(),globalwpw.settings.obj.sys_key_email.toLowerCase()]
2367        //updating wildcards
2368        globalwpw.wildcards='';
2369		if(globalwpw.settings.obj.start_menu!=''){
2370            var menu_html = '';
2371            var menu_items = $.parseHTML($.trim(globalwpw.settings.obj.start_menu));
2372            $(menu_items).each(function(){
2373                if( $(this).prop('tagName') == 'SPAN' ){
2374                    if( $(this).hasClass('qcld-chatbot-suggest-email') ){
2375                        if( globalwpw.settings.obj.disable_feedback=='' ){
2376                            menu_html += $(this).prop('outerHTML');
2377                        }
2378                    }else if( $(this).hasClass('qcld-chatbot-suggest-phone') ){
2379                        if( globalwpw.settings.obj.call_gen=="" ){
2380                            menu_html += $(this).prop('outerHTML');
2381                        }
2382                    }else if( $(this).hasClass('qcld-chatbot-wildcard') && $(this).attr('data-wildcart') == 'support' ){
2383                        if( globalwpw.settings.obj.disable_faq=='' ){
2384                            menu_html += $(this).prop('outerHTML');
2385                        }
2386                    }else if( $(this).hasClass('qcld-chatbot-wildcard') && $(this).attr('data-wildcart') == 'messenger' ){
2387                        if( globalwpw.settings.obj.enable_messenger==1 ){
2388                            menu_html += $(this).prop('outerHTML');
2389                        }
2390                    }else if( $(this).hasClass('qcld-chatbot-wildcard') && $(this).attr('data-wildcart') == 'whatspp' ){
2391                        if( globalwpw.settings.obj.enable_whats==1 ){
2392                            menu_html += $(this).prop('outerHTML');
2393                        }
2394                    }else{
2395                        menu_html += $(this).prop('outerHTML');
2396                    }
2397                }
2398            })
2399            if( menu_html != '' ){
2400                globalwpw.wildcards = menu_html;
2401            }else{
2402                globalwpw.wildcards = globalwpw.settings.obj.start_menu;
2403            }
2404        }
2405        //Initialize the wpwBot with greeting and if already initialize and given name then return greeting..
2406        if(localStorage.getItem("wpwHitory") && globalwpw.initialize==0 ){
2407            var wpwHistory=localStorage.getItem("wpwHitory");
2408            $(globalwpw.settings.messageWrapper).html(wpwHistory);
2409            //Scroll to the last element.
2410            wpwKits.scrollTo();
2411            //Now mainting the current stages tokens
2412            globalwpw.initialize=1;
2413            if(localStorage.getItem("wildCard")){
2414                globalwpw.wildCard=localStorage.getItem("wildCard");
2415            }
2416            if(localStorage.getItem("productStep")){
2417                globalwpw.productStep=localStorage.getItem("productStep");
2418            }
2419            if(localStorage.getItem("orderStep")){
2420                globalwpw.orderStep=localStorage.getItem("orderStep");
2421            }
2422            if(localStorage.getItem("supportStep")){
2423                globalwpw.supportStep=localStorage.getItem("supportStep");
2424            }
2425            if(localStorage.getItem("aiStep")){
2426                globalwpw.ai_step=localStorage.getItem("aiStep");
2427            }
2428			if(localStorage.getItem("formfieldid")){
2429                globalwpw.formfieldid=localStorage.getItem("formfieldid");
2430            }
2431            if(localStorage.getItem("formentry")){
2432                globalwpw.formentry=localStorage.getItem("formentry");
2433            }
2434            if(localStorage.getItem("formStep")){
2435                globalwpw.formStep=localStorage.getItem("formStep");
2436            }
2437            if(localStorage.getItem("formid")){
2438                globalwpw.formid=localStorage.getItem("formid");
2439            }
2440            //update the value for initializing.
2441            globalwpw.initialize=1;
2442        } else {
2443            if(globalwpw.initialize==0 && globalwpw.wildCard==0 && globalwpw.settings.obj.re_target_handler==0){
2444                wpwWelcome.greeting();
2445                //update the value for initializing.
2446                globalwpw.initialize=1;
2447            }else{  // re targeting part .
2448                setTimeout(function (e) {
2449                    wpwWelcome.greeting();
2450                },8500);
2451                globalwpw.initialize=1;
2452            }
2453        }
2454        function wpbotResetSendMessageClasses() {
2455            $(settings.sendButton).removeClass('wp-chatbot-send-message-active wp-chatbot-send-message-typing');
2456        }
2457
2458        // Typing state only: add active class while editor has content.
2459        $(document).on('input keyup', settings.messageEditor, function () {
2460            var hasValue = $.trim($(settings.messageEditor).val()).length > 0;
2461            $(settings.sendButton).toggleClass('wp-chatbot-send-message-active', hasValue);
2462        });
2463
2464        // Blur state: clean both classes if no input value.
2465        $(document).on('blur', settings.messageEditor, function () {
2466            var hasValue = $.trim($(settings.messageEditor).val()).length > 0;
2467            if (!hasValue) {
2468                wpbotResetSendMessageClasses();
2469            }
2470        });
2471
2472        //When shopper click on send button
2473        $(document).on('click',settings.sendButton,function (e) {
2474            var shopperMsg =$(settings.messageEditor).val();
2475            if(shopperMsg != ""){
2476                wpwAction.shopper(wpwKits.htmlTagsScape(shopperMsg));
2477                $(settings.messageEditor).val('');
2478                wpbotResetSendMessageClasses();
2479            }
2480        });
2481		$(document).on('click', '.chatbot_intent_reload', function(e){
2482			e.preventDefault();
2483            var obj = $(this);
2484            if(obj.attr('data-intent-type')=='formbuilder'){
2485                if( obj.attr('data-step')=='complete' ){
2486				globalwpw.formStep='field';
2487				localStorage.setItem("formStep",  globalwpw.formStep);
2488				}
2489                globalwpw.wildCard=obj.attr('data-wildcard');
2490                globalwpw.formfieldid = obj.attr('data-intent');
2491                wpwTree.formbuilder();
2492            }
2493		})
2494        /*
2495         * Or when shopper press the ENTER key
2496         * Then chatting functionality will be started.
2497         */
2498		$(document).on('click', '.wpb-quick-reply', function(e){
2499			e.preventDefault();
2500			$('#wp-chatbot-editor').val($(this).html());
2501			$('#wp-chatbot-send-message').trigger( "click" );
2502		})
2503        $(document).on('keypress',settings.messageEditor,function (e) {
2504            if (e.which == 13||e.keyCode==13) {
2505                e.preventDefault();
2506                var shopperMsg =$(settings.messageEditor).val();
2507                if(shopperMsg != ""){
2508                    wpwAction.shopper(wpwKits.htmlTagsScape(shopperMsg));
2509                    $(settings.messageEditor).val('');
2510                    wpbotResetSendMessageClasses();
2511                }
2512            }
2513        });
2514		$(document).on('click', '.qcld-chatbot-checkbox', function(){
2515            
2516            var value = [];
2517            $('.qcld-chatbot-checkbox').each(function(){
2518                if($(this).prop("checked") == true){
2519                    value.push($(this).val());
2520                }
2521            })
2522           $('#wp-chatbot-editor').val(value.join());
2523           if ($.trim($('#wp-chatbot-editor').val()).length > 0) {
2524               $(settings.sendButton).addClass('wp-chatbot-send-message-active');
2525           } else {
2526               wpbotResetSendMessageClasses();
2527           }
2528        })
2529        //Click on the wildcards to select a service
2530        $(document).on('click','.qcld-chatbot-wildcard',function(){
2531            var wildcardData=$(this).attr('data-form');
2532            var shooperChoice=$(this).text();
2533            wpwMsg.shopper_choice(shooperChoice);
2534            if(typeof wildcardData === "undefined"){
2535                var wildcardData=$(this).attr('data-wildcart');
2536            }
2537            //Wild cards handling for bot.
2538            if(wildcardData=='product'){
2539                globalwpw.wildCard=1;
2540                globalwpw.productStep='asking'
2541                wpwAction.bot('from wildcard product');
2542                //keeping value in localstorage
2543                localStorage.setItem("wildCard",  globalwpw.wildCard);
2544                localStorage.setItem("productStep", globalwpw.productStep);
2545            }
2546            if(wildcardData=='catalog'){
2547                wpwAction.bot(globalwpw.settings.obj.sys_key_catalog.toLowerCase());
2548            }
2549            if(wildcardData=='featured'){
2550                globalwpw.wildCard=1;
2551                globalwpw.productStep='featured'
2552                wpwAction.bot('from wildcard product');
2553                //keeping value in localstorage
2554                localStorage.setItem("wildCard",  globalwpw.wildCard);
2555                localStorage.setItem("productStep", globalwpw.productStep);
2556            }
2557            if(wildcardData=='sale'){
2558                globalwpw.wildCard=1;
2559                globalwpw.productStep='sale'
2560                wpwAction.bot('from wildcard product');
2561                //keeping value in localstorage
2562                localStorage.setItem("wildCard",  globalwpw.wildCard);
2563                localStorage.setItem("productStep", globalwpw.productStep);
2564            }
2565            if(wildcardData=='order'){
2566                globalwpw.wildCard=2;
2567                globalwpw.orderStep='welcome';
2568                wpwAction.bot('from wildcard order');
2569                //keeping value in localstorage
2570                localStorage.setItem("wildCard",  globalwpw.wildCard);
2571                localStorage.setItem("orderStep", globalwpw.orderStep);
2572            }
2573            if((wildcardData=='support ui-sortable-handle') || (wildcardData=='support')) {
2574                globalwpw.wildCard=1;
2575                globalwpw.supportStep='welcome';
2576                wpwAction.bot('from wildcard support');
2577                //keeping value in localstorage
2578                localStorage.setItem("wildCard",  globalwpw.wildCard);
2579                localStorage.setItem("supportStep", globalwpw.supportStep);
2580            }
2581            if(wildcardData=='back'){
2582                globalwpw.wildCard=0;
2583                //wpwAction.bot('start');
2584                wpwAction.bot(wp_chatbot_obj.sys_key_help.toLowerCase());
2585                //keeping value in localstorage
2586                localStorage.setItem("wildCard",  globalwpw.wildCard);
2587            }
2588            if(wildcardData=='ai_form'){
2589                globalwpw.wildCard=0;
2590                globalwpw.active_ai_action = shooperChoice;
2591                globalwpw.qcld_ai_form_persisted_state = true;
2592                wpwAction.bot(shooperChoice);
2593                localStorage.setItem("wildCard",  globalwpw.wildCard);
2594            }
2595            if(wildcardData=='messenger'){
2596                var url='https://www.messenger.com/t/'+globalwpw.settings.obj.fb_page_id;
2597                var win = window.open(url, '_blank');
2598                win.focus();
2599            }
2600            if(wildcardData=='whatsapp'){
2601                var url='https://api.whatsapp.com/send?phone='+globalwpw.settings.obj.whats_num;
2602                var win = window.open(url, '_blank');
2603                win.focus();
2604            }
2605        });
2606		$(document).on('click','.qcld-chatbot-form',function(e){
2607            e.preventDefault();
2608            var formid=$(this).attr('data-form');
2609            globalwpw.wildCard=7;
2610            globalwpw.formStep='welcome';
2611            wpwTree.formbuilder(formid);
2612        })
2613		$(document).on('click','.qcld_simple_txt_response',function(e){
2614            e.preventDefault();
2615            var text=$(this).text();
2616            var id = $(this).data('strid');
2617            globalwpw.wildCard=0;            
2618            wpwAction.clickstr(id);
2619        })
2620        $(document).on('click','#wp-chatbot-desktop-reload',function (e) {
2621            e.preventDefault();
2622            var actionType=$(this).attr('reset-data');
2623                $('#wp-chatbot-messages-container').html('');
2624                localStorage.removeItem('shopper');
2625                globalwpw.wildCard=0;
2626                globalwpw.ai_step=0;
2627                localStorage.setItem("wildCard",  globalwpw.wildCard);
2628                localStorage.setItem("aiStep", globalwpw.ai_step);
2629                globalwpw.formfieldid = '';
2630                localStorage.setItem("formfieldid",  globalwpw.formfieldid);
2631                globalwpw.formStep='welcome';
2632                localStorage.setItem("formStep",  globalwpw.formStep);
2633                globalwpw.formid='';
2634                localStorage.setItem("formid",  globalwpw.formid);
2635                globalwpw.formentry = 0;
2636                localStorage.setItem("formentry",  globalwpw.formentry);
2637                localStorage.removeItem("cx-name" );
2638                localStorage.removeItem("cx-diaplayname" );
2639                localStorage.removeItem("cx-languagecode" );
2640                localStorage.removeItem("cx-timezone" );
2641				var number = Math.random() // 0.9394456857981651
2642                number.toString(36); // '0.xtis06h6'
2643                var id = number.toString(36).substr(2); // 'xtis06h6'
2644                localStorage.setItem('botsessionid', id);
2645                // Keep mobile/responsive chat full-width after reset (do not shrink to content)
2646                if ($(window).width() <= 480 && globalwpw.settings.obj.mobile_full_screen == 1) {
2647                    $('#wp-chatbot-chat-container').addClass('wp-chatbot-mobile-fs-open').css({
2648                        'bottom': '0',
2649                        'left': '0',
2650                        'right': '0',
2651                        'width': '100%',
2652                        'max-width': '100%'
2653                    });
2654                    $('#wp-chatbot-board-container').css({'width': '100%', 'max-width': '100%'});
2655                    $('.slimScrollDiv').css({'width': '100%', 'max-width': '100%'});
2656                }
2657                wpwWelcome.greeting();
2658        });
2659        $(document).on('click','.qcld-chatbot-formanswer',function(e){
2660            e.preventDefault();
2661            var answer=$(this).attr('data-form-value');
2662            wpwAction.bot(answer);
2663        })
2664        //
2665        $(document).on('click','.qcld-chatbot-product-category',function(){
2666            var catType=$(this).attr('data-category-type');
2667            var shopperChoiceCatId=$(this).text()+'#'+$(this).attr('data-category-id');
2668            var shopperChoiceCategory=$(this).text();
2669            if(catType=='hasChilds'){
2670                //Now hide all categories but shopper choice.
2671                wpwMsg.shopper_choice(shopperChoiceCategory);
2672                //updating the product steps and bringing the product by category.
2673                wpwKits.subCats($(this).attr('data-category-id'));
2674                globalwpw.productStep='search';
2675                globalwpw.wildCard=1;
2676            }else{
2677                //Now hide all categories but shopper choice.
2678                wpwMsg.shopper_choice(shopperChoiceCategory);
2679                //updating the product steps and bringing the product by category.
2680                globalwpw.productStep='category';
2681                globalwpw.wildCard=1;
2682                //keeping value in localstorage
2683                localStorage.setItem("productStep",  globalwpw.productStep);
2684                wpwAction.bot(shopperChoiceCatId);
2685            }
2686        });
2687        //Product Load More features for product search or category products
2688        $(document).on('click','#wp-chatbot-loadmore',function (e) {
2689            $('#wp-chatbot-loadmore-loader').html('<img class="wp-chatbot-comment-loader" src="'+globalwpw.settings.obj.image_path+'loadmore.gif" alt="..." />');
2690            var loadMoreDom=$(this);
2691            var productOffest=loadMoreDom.attr('data-offset');
2692            var searchType=loadMoreDom.attr('data-search-type');
2693            var searchTerm=loadMoreDom.attr('data-search-term');
2694            var data = { 'action': 'qcld_wb_chatbot_load_more','offset': productOffest,'search_type': searchType,'search_term': searchTerm};
2695            //Load more ajax handler.
2696            wpwKits.ajax(data).done(function (response) {
2697                //Change button text
2698                $('#wp-chatbot-loadmore-loader').html('');
2699                $('.wp-chatbot-products').append(response.html);
2700                loadMoreDom.attr('data-search-term',response.search_term);
2701                wpwKits.wpwHistorySave();
2702                loadMoreDom.attr('data-offset',response.offset);
2703                if(response.product_num <= response.per_page){
2704                    loadMoreDom.hide();
2705                    //Now show the user infinite.
2706                    setTimeout(function () {
2707                        var searchAgain = wpwKits.randomMsg(globalwpw.settings.obj.product_infinite);
2708                        wpwMsg.single(searchAgain);
2709                        globalwpw.productStep='search';
2710                        //keeping value in localstorage
2711                        localStorage.setItem("productStep",  globalwpw.productStep);
2712                    },globalwpw.settings.wildcardsShowTime);
2713                }
2714                //scroll to the last message
2715                wpwKits.scrollTo();
2716            });
2717        });
2718        //search load more
2719        $(document).on('click', '.wp-chatbot-loadmore', function(e){
2720            e.preventDefault();
2721            var obj = $(this);
2722
2723            var keyword = obj.attr('data-keyword');
2724            var post_type = obj.attr('data-post_type');
2725            var page = obj.attr('data-page');
2726            obj.text('Loading...');
2727            var data = {'action':'wpbo_search_site_pagination','name':globalwpw.hasNameCookie,'keyword':keyword,'language': globalwpw.settings.obj.language,'type': post_type, 'page': page, 'nonce': qcld_chatbot_obj.nonce};
2728            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2729                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2730            }
2731            wpwKits.ajax(data).done(function (res) {
2732                var json = (res);
2733                if(json.status=='success'){
2734                    $('span[data-wildcart="back"]').remove();
2735                    wpwMsg.single(json.html);
2736                    // Hide the comment loader after response inside parent .wp-chatbot-paragraph
2737                    // Hide the entire li.wp-chatbot-msg if its .wp-chatbot-paragraph only contains the loader image (and is hidden)
2738
2739                    setTimeout(function(){
2740                        if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2741                        wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2742                        }
2743                    },globalwpw.settings.preLoadingTime)
2744
2745                    obj.remove();
2746                }else{
2747                    
2748                    if(globalwpw.counter == globalwpw.settings.obj.no_result_attempt_count || globalwpw.settings.obj.no_result_attempt_count == 0 ){
2749                        
2750                        wpwMsg.single(json.html);
2751                        if(globalwpw.settings.obj.disable_repeatative!=1){
2752                            if ( wpwKits.render( globalwpw.settings.obj.no_result_attempt_message ) != '' ) {
2753                                setTimeout(function(){
2754                                    wpwMsg.single(wpwKits.render( globalwpw.settings.obj.no_result_attempt_message ));
2755                                },globalwpw.settings.preLoadingTime)
2756                            } else {
2757                                setTimeout(function(){
2758                                    var serviceOffer=wpwKits.randomMsg(globalwpw.settings.obj.support_option_again);
2759                                    if((globalwpw.settings.obj.qcld_disable_start_menu != "1")){
2760                                        if(typeof(globalwpw.wildcards) != 'undefined' && (globalwpw.wildcards != '')){
2761                                            console.log(globalwpw.wildcards);
2762                                            wpwMsg.double_nobg(serviceOffer,globalwpw.wildcards);
2763                                        }else{
2764                                            wpwMsg.single(serviceOffer);
2765                                        }
2766                                        
2767                                    }
2768
2769                                }
2769,globalwpw.settings.preLoadingTime)
2770                            }
2771                        }
2772                        globalwpw.counter = 0;
2773                        
2774                    }else{
2775                        globalwpw.counter++;
2776                        wpwTree.df_reply(res);
2777                    }
2778
2779                }
2780                globalwpw.wildCard=0;
2781                
2782            });
2783
2784
2785        })
2786
2787        //search load more
2788        $(document).on('click', '.wp-chatbot-loadmore2', function(e){
2789            e.preventDefault();
2790            var obj = $(this);
2791
2792            var keyword = obj.attr('data-keyword');
2793            
2794            var page = obj.attr('data-page');
2795
2796            var search_type = obj.attr('data-search-type');
2797            obj.text(globalwpw.settings.obj.loading.en_US);
2798
2799            if( search_type == 'default-wp-search' ){
2800                var data = {'action':'wpbo_default_search_pagination2','name':globalwpw.hasNameCookie,'keyword':keyword, 'page': page, search_type:'default-wp-search'};
2801            }else{
2802                var data = {'action':'wpbo_search_site_pagination2','name':globalwpw.hasNameCookie,'keyword':keyword, 'page': page,'nonce': qcld_chatbot_obj.nonce};
2803            }
2804            if($(globalwpw.settings.messageLastChild+' .wp-chatbot-comment-loader').length==0){
2805                $(globalwpw.settings.messageContainer).append(wpwKits.botPreloader());
2806            }
2807            wpwKits.ajax(data).done(function (res) {
2808                var json=$.parseJSON(res);
2809                if(json.status=='success'){
2810                    $('span[data-wildcart="back"]').remove();
2811                    
2812                    wpwMsg.single_nobg(json.html);
2813
2814                    setTimeout(function(){
2815                        if((globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && (globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1)){
2816                            wpwMsg.single_nobg('<span class="qcld-chatbot-wildcard qcld_back_to_start"  data-wildcart="back">' + wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) + '</span>');
2817                        }
2818                    },globalwpw.settings.preLoadingTime)
2819
2820                    obj.remove();
2821                }else{
2822                    
2823                    if(globalwpw.counter == globalwpw.settings.obj.no_result_attempt_count || globalwpw.settings.obj.no_result_attempt_count == 0 ){
2824                        
2825                        wpwMsg.single(json.html);
2826                        wpwTree.start_menu_settings();
2827                        globalwpw.counter = 0;
2828                        
2829                    }else{
2830                        globalwpw.counter++;
2831                        wpwTree.df_reply(res);
2832                    }
2833
2834                }
2835                globalwpw.wildCard=0;
2836            });
2837
2838
2839        });
2840        /*Products details part **/
2841        // if(globalwpw.settings.obj.open_product_detail!=1){
2842        // $(document).on('click','.wp-chatbot-product a',function (e) {
2843        //      e.preventDefault();
2844        //     $('.wp-chatbot-product-container').addClass('active-chatbot-product-details');
2845        //     $('.wp-chatbot-product-reload').addClass('wp-chatbot-product-loading').html('<img class="wp-chatbot-product-loader" src="'+globalwpw.settings.obj.image_path+'comment.gif" alt="Loading..." />');
2846        //     var productId=$(this).attr('wp-chatbot-pid');
2847        //     var data = { 'action':'qcld_wb_chatbot_product_details', 'wp_chatbot_pid':productId};
2848        //     //product details ajax handler.
2849        //     wpwKits.ajax(data).done(function (response) {
2850        //         $('.wp-chatbot-product-reload').removeClass('wp-chatbot-product-loading').html('');
2851        //         $('#wp-chatbot-product-title').html(response.title);
2852        //         $('#wp-chatbot-product-description').html(response.description);
2853        //         $('#wp-chatbot-product-image').html(response.image);
2854        //         $('#wp-chatbot-product-price').html(response.price);
2855        //         $('#wp-chatbot-product-quantity').html(response.quantity);
2856        //         $('#wp-chatbot-product-variable').html(response.variation);
2857        //         $('#wp-chatbot-product-cart-button').html(response.buttton);
2858        //         //Load gallery magnify
2859        //         setTimeout(function () {
2860        //             $('#wp-chatbot-product-image-large-path').magnificPopup({type:'image'});
2861        //         },1000);
2862        //         //For shortcode handle recenlty view product by ajax as
2863        //         if($('#wp-chatbot-shortcode-template-container').length > 0){
2864        //             var data = {'action':'qcld_wb_chatbot_recently_viewed_products'};
2865        //             wpwKits.ajax(data).done(function (response) {
2866        //                 $('.wp-chatbot-product-shortcode-container').html(response);
2867        //                 $('.chatbot-sidebar .wp-chatbot-products').slimScroll({height: '435px', start: 'top'});
2868        //             });
2869        //         }
2870        //     });
2871        // });
2872        // }
2873        //Image gallery.
2874        $(document).on('click','.wp-chatbot-product-image-thumbs-path',function (e) {
2875            e.preventDefault();
2876            var imagePath=$(this).attr('href');
2877            $('#wp-chatbot-product-image-large-path').attr('href',imagePath);
2878            $('#wp-chatbot-product-image-large-src').attr('src',imagePath);
2879            //handle thumb active one
2880            $('.wp-chatbot-product-image-thumbs-path').parent().removeClass('wp-chatbot-product-active-image-thumbs');
2881            $(this).parent().addClass('wp-chatbot-product-active-image-thumbs');
2882        });
2883        //Product details close
2884        $(document).on('click', '.wp-chatbot-product-close', function (e) {
2885            $('.wp-chatbot-product-container').removeClass('active-chatbot-product-details');
2886        });
2887        /*add to cart part **/
2888        $(document).on("click","#wp-chatbot-add-cart-button",function (e) {
2889            var pId=$(this).attr('wp-chatbot-product-id');
2890            var qnty=$("#vPQuantity").val();
2891            var data = {'action': 'qcld_wb_chatbot_add_to_cart','product_id': pId,'quantity': qnty };
2892            //add to cart ajax handler.
2893            wpwKits.ajax(data).done(function (response) {
2894                //Change button text
2895                if(response=="simple"){
2896                    //Showing cart.
2897                    wpwKits.showCart();
2898                    //handle the active tab on chat board.
2899                    $('.wp-chatbot-operation-option').each(function(){
2900                        if($(this).attr('data-option')=='cart'){
2901                            $(this).parent().addClass('wp-chatbot-operation-active');
2902                        }else{
2903                            $(this).parent().removeClass('wp-chatbot-operation-active');
2904                        }
2905                    });
2906                }
2907                //Hide the shortcode and chat ui product details.
2908                $('.wp-chatbot-product-container').removeClass('active-chatbot-product-details');
2909            });
2910        });
2911        //Add to cart operation for variable product.
2912        $(document).on('click','#wp-chatbot-variation-add-to-cart',function(event) {
2913            event.preventDefault();
2914            var pId=$(this).attr('wp-chatbot-product-id');
2915            var quanity=$('#vPQuantity').val();
2916            var variation_id=$(this).attr('variation_id');
2917            var attributes=new Array();
2918            $.each($("#wp-chatbot-variation-data select"), function(){
2919                var attribute = $(this).attr('name')+'#'+ $(this).find('option:selected').text();
2920                attributes.push(attribute);
2921            });
2922            var data = {
2923                'action': 'qcld_variable_add_to_cart',
2924                'p_id': pId,
2925                'quantity': quanity,
2926                'variations_id':variation_id,
2927                'attributes':attributes
2928            };
2929            //add to cart ajax handler.
2930            wpwKits.ajax(data).done(function (response) {
2931                //Change button text
2932                if(response=="variable"){
2933                    //Showing cart.
2934                    wpwKits.showCart();
2935                    //handle the active tab on chat board.
2936                    //handle the active tab on chat board.
2937                    $('.wp-chatbot-operation-option').each(function(){
2938                        if($(this).attr('data-option')=='cart'){
2939                            $(this).parent().addClass('wp-chatbot-operation-active');
2940                        }else{
2941                            $(this).parent().removeClass('wp-chatbot-operation-active');
2942                        }
2943                    });
2944                }
2945                //Hide the shortcode and chat ui product details.
2946                $('.wp-chatbot-product-container').removeClass('active-chatbot-product-details');
2947            });
2948        });
2949        //Update cart.
2950        $(document).on("change", ".qcld-wp-chatbot-cart-item-qnty", function () {
2951            //Update editor only for chat ui
2952            if($('#wp-chatbot-shortcode-template-container').length == 0) {
2953                wpwKits.disableEditor(wpwKits.randomMsg(globalwpw.settings.obj.cart_updating));
2954            }
2955            var currentItem=$(this);
2956            setTimeout(function () {
2957                var item_key=currentItem.attr('data-cart-item');
2958                var qnty=currentItem.val();
2959                var data = {'action': 'qcld_wb_chatbot_update_cart_item_number','cart_item_key':item_key,'qnty':qnty};
2960                wpwKits.ajax(data).done(function () {
2961                    //Showing cart.
2962                    wpwKits.showCart();
2963                });
2964            }
2964, globalwpw.settings.preLoadingTime);
2965        });
2966        //remove the cart item from global cart.
2967        $(document).on("click", ".wp-chatbot-remove-cart-item", function () {
2968            //Update editor only for chat ui
2969            if($('#wp-chatbot-shortcode-template-container').length == 0) {
2970                wpwKits.disableEditor(wpwKits.randomMsg(globalwpw.settings.obj.cart_removing));
2971            }
2972            var item=$(this).attr('data-cart-item');
2973            var data = {'action': 'qcld_wb_chatbot_cart_item_remove', 'cart_item':item };
2974            wpwKits.ajax(data).done(function () {
2975                //Showing cart.
2976                wpwKits.showCart();
2977            })
2978        });
2979        /*Support query answering.. **/
2980        $(document).on('click','.qcld-chatbot-support-items',function (e) {
2981            var shopperChoose=$(this).text();
2982            var queryIndex=$(this).attr('data-query-index');
2983            wpwMsg.shopper_choice(shopperChoose);
2984            //Now answering the query.
2985            var queryAns=globalwpw.settings.obj.support_ans[queryIndex];
2986            wpwMsg.single(queryAns);
2987            //Asking email after showing answer.
2988            var orPhoneSuggest='';
2989            setTimeout(function(){
2990                if(globalwpw.settings.obj.call_sup!=1) {
2991                    orPhoneSuggest = '<span class="qcld-chatbot-suggest-phone" >' + wpwKits.randomMsg(globalwpw.settings.obj.support_phone) + '</span>';
2992                }
2993                var orEmailSuggest='<span class="qcld-chatbot-suggest-email">'+wpwKits.randomMsg(globalwpw.settings.obj.support_email)+'</span>';
2994                wpwKits.suggestEmail(orPhoneSuggest+orEmailSuggest);
2995            },globalwpw.settings.wildcardsShowTime);
2996        });
2997        /*Support Email **/
2998        $(document).on('click','.qcld-chatbot-suggest-email',function (e) {
2999            var shopperChoice=$(this).text();
3000            wpwMsg.shopper_choice(shopperChoice);
3001            //Then ask email address
3002            if(typeof(globalwpw.hasNameCookie)=='undefined'|| globalwpw.hasNameCookie==''){
3003                var shopperName=  globalwpw.settings.obj.shopper_demo_name;
3004            }else{
3005                var shopperName=globalwpw.hasNameCookie;
3006            }
3007            var ask_msg = wpwKits.randomMsg(globalwpw.settings.obj.asking_email);
3008            var askEmail = (globalwpw.settings.obj.skip_wp_greetings=='1' || globalwpw.settings.obj.skip_greetings_and_menu =='1') ? wpwKits.randomMsg(globalwpw.settings.obj.hello)+' '+ ask_msg : wpwKits.randomMsg(globalwpw.settings.obj.hello) + ' '+shopperName+'! '+ ask_msg;
3009            wpwMsg.single(askEmail);
3010            //Now updating the support part as .
3011            globalwpw.supportStep='email';
3012            globalwpw.wildCard=1;
3013            //keeping value in localstorage
3014            localStorage.setItem("wildCard",  globalwpw.wildCard);
3015            localStorage.setItem("supportStep",  globalwpw.supportStep);
3016        });
3017		/*site Search*/
3018		$(document).on('click','.qcld-chatbot-site-search',function (e) {
3019            var shopperChoice=$(this).text();
3020            wpwMsg.shopper_choice(shopperChoice);
3021            //Then ask email address
3022            if(typeof(globalwpw.hasNameCookie)=='undefined'|| globalwpw.hasNameCookie==''){
3023                var shopperName=  globalwpw.settings.obj.shopper_demo_name;
3024            }else{
3025                var shopperName=globalwpw.hasNameCookie;
3026            }
3027            var ask_msg = wp_chatbot_obj.search_keyword;
3028            var askEmail = (globalwpw.settings.obj.skip_wp_greetings=='1' || globalwpw.settings.obj.skip_greetings_and_menu =='1') ? 'Hello ' + ask_msg : 'Hello '+shopperName+'! '+ ask_msg;
3029            wpwMsg.single(askEmail);
3030            //Now updating the support part as .
3031            globalwpw.supportStep='search';
3032            globalwpw.wildCard=1;
3033            //keeping value in localstorage
3034            localStorage.setItem("wildCard",  globalwpw.wildCard);
3035            localStorage.setItem("supportStep",  globalwpw.supportStep);
3036        });
3037        /*Support Phone **/
3038        $(document).on('click','.qcld-chatbot-suggest-phone',function (e) {
3039            var shopperChoice=$(this).text();
3040            wpwMsg.shopper_choice(shopperChoice);
3041            //Then ask email address
3042            if(typeof(globalwpw.hasNameCookie)=='undefined'|| global
3042wpw.hasNameCookie==''){
3043                var shopperName=  globalwpw.settings.obj.shopper_demo_name;
3044            }else{
3045                var shopperName=globalwpw.hasNameCookie;
3046            }
3047            var ask_msg = wpwKits.randomMsg(globalwpw.settings.obj.asking_phone);
3048            var askEmail = (globalwpw.settings.obj.skip_wp_greetings=='1' || globalwpw.settings.obj.skip_greetings_and_menu =='1') ? 'Hello ' + ask_msg : 'Hello '+shopperName+'! '+ ask_msg;
3049            wpwMsg.single(askEmail);
3050            //Now updating the support part as .
3051            globalwpw.supportStep='phone';
3052            globalwpw.wildCard=1;
3053            //keeping value in localstorage
3054            localStorage.setItem("wildCard",  globalwpw.wildCard);
3055            localStorage.setItem("supportStep",  globalwpw.supportStep);
3056        });
3057        //Show chat,cart and recently view products by click event.
3058        $(document).on('click','.wp-chatbot-operation-option',function (e) {
3059            e.preventDefault();
3060            var oppt=$(this).attr('data-option');
3061            if(oppt=='recent'  && globalwpw.wpwIsWorking==0){
3062                wpwKits.disableEditor(globalwpw.settings.obj.sys_key_product);
3063                var data = {'action':'qcld_wb_chatbot_recently_viewed_products'};
3064                wpwKits.ajax(data).done(function (response) {
3065                    $(globalwpw.settings.messageWrapper).html(response);
3066                });
3067                //First remove wp-chatbot-operation-active class from all selector
3068                $('.wp-chatbot-operation-option').parent().removeClass('wp-chatbot-operation-active');
3069                //then add the active class to current element.
3070                $(this).parent().addClass('wp-chatbot-operation-active');
3071            }else if(oppt=='chat' && globalwpw.wpwIsWorking==0){
3072                $(globalwpw.settings.messageWrapper).html(localStorage.getItem("wpwHitory"));
3073                wpwKits.scrollTo();
3074                wpwKits.enableEditor(wpwKits.randomMsg(globalwpw.settings.obj.send_a_msg));
3075                //First remove wp-chatbot-operation-active class from all selector
3076                $('.wp-chatbot-operation-option').parent().removeClass('wp-chatbot-operation-active');
3077                //then add the active class to current element.
3078                $(this).parent().addClass('wp-chatbot-operation-active');
3079            } else if(oppt=='cart' && globalwpw.wpwIsWorking==0){
3080                wpwKits.showCart();
3081                //First remove wp-chatbot-operation-active class from all selector
3082                $('.wp-chatbot-operation-option').parent().removeClass('wp-chatbot-operation-active');
3083                //then add the active class to current element.
3084                $(this).parent().addClass('wp-chatbot-operation-active');
3085            } else if(oppt=='help' && globalwpw.wpwIsWorking==0){
3086                if( $('.wp-chatbot-messages-container').length==0) {
3087                    //if from other nob then goo to the chat window
3088                    $(globalwpw.settings.messageWrapper).html(localStorage.getItem("wpwHitory"));
3089                    //Showing help message
3090                    setTimeout(function () {
3091                        wpwKits.scrollTo();
3092                        var helpWelcome = wpwKits.randomMsg(globalwpw.settings.obj.help_welcome);
3093                        var helpMsg = wpwKits.decodehtml(wpwKits.randomMsg(globalwpw.settings.obj.help_msg));
3094                        wpwMsg.double(helpWelcome,helpMsg);
3095                        //dialogflow
3096                        if(globalwpw.settings.obj.ai_df_enable==1 && globalwpw.df_status_lock==0){
3097                            globalwpw.wildCard=0;
3098                            globalwpw.ai_step=1;
3099                            localStorage.setItem("wildCard",  globalwpw.wildCard);
3100                            localStorage.setItem("aiStep", globalwpw.ai_step);
3101                        }
3102                    },globalwpw.settings.preLoadingTime);
3103                }else{
3104                    //Showing help message on chat self window.
3105                    var helpWelcome = wpwKits.randomMsg(globalwpw.settings.obj.help_welcome);
3106                    var helpMsg = wpwKits.randomMsg(globalwpw.settings.obj.help_msg);
3107                    wpwMsg.double(helpWelcome,helpMsg);
3108                    //dialogflow
3109                    if(globalwpw.settings.obj.ai_df_enable==1 && global
3109wpw.df_status_lock==0){
3110                        globalwpw.wildCard=0;
3111                        globalwpw.ai_step=1;
3112                        localStorage.setItem("wildCard",  globalwpw.wildCard);
3113                        localStorage.setItem("aiStep", globalwpw.ai_step);
3114                    }
3115                }
3116                //First remove wp-chatbot-operation-active class from all selector
3117                $('.wp-chatbot-operation-option').parent().removeClass('wp-chatbot-operation-active');
3118                //then add the active class to current element.
3119                $(this).parent().addClass('wp-chatbot-operation-active');
3120            } else if(oppt=='support' && globalwpw.wpwIsWorking==0){
3121                if( $('.wp-chatbot-messages-container').length==0) {
3122                    //if from other nob then goo to the chat window
3123                    $(globalwpw.settings.messageWrapper).html(localStorage.getItem("wpwHitory"));
3124                    //Showing help message
3125                    setTimeout(function () {
3126                        wpwKits.scrollTo();
3127                        globalwpw.wildCard=1;
3128                        globalwpw.supportStep='welcome';
3129                        wpwTree.support(globalwpw.settings.obj.sys_key_support.toLowerCase());
3130                    },globalwpw.settings.preLoadingTime);
3131                }else{
3132                    //Showing help message on chat self window.
3133                    globalwpw.wildCard=1;
3134                    globalwpw.supportStep='welcome';
3135                    wpwTree.support(globalwpw.settings.obj.sys_key_support.toLowerCase());
3136                }
3137                //First remove wp-chatbot-operation-active class from all selector
3138                $('.wp-chatbot-operation-option').parent().removeClass('wp-chatbot-operation-active');
3139                //then add the active class to current element.
3140                $(this).parent().addClass('wp-chatbot-operation-active');
3141            }
3142            //show chat wrapper and hide cart-checkout wrapper
3143            $(globalwpw.settings.messageWrapper).show();
3144            $('#wp-chatbot-checkout-short-code').hide();
3145            $('#wp-chatbot-cart-short-code').hide();
3146        });
3147        $(document).on('click','.qcld-chatbot-reset-btn',function (e) {
3148            e.preventDefault();
3149            var actionType=$(this).attr('reset-data');
3150            if(actionType=='yes'){
3151
3152                $('#wp-chatbot-messages-container').html('');
3153                localStorage.removeItem('shopper');
3154                globalwpw.wildCard=0;
3155                globalwpw.ai_step=0;
3156                localStorage.setItem("wildCard",  globalwpw.wildCard);
3157                localStorage.setItem("aiStep", globalwpw.ai_step);
3158                globalwpw.formfieldid = '';
3159                localStorage.setItem("formfieldid",  globalwpw.formfieldid);
3160                globalwpw.formStep='welcome';
3161                localStorage.setItem("formStep",  globalwpw.formStep);
3162                globalwpw.formid='';
3163                localStorage.setItem("formid",  globalwpw.formid);
3164                globalwpw.formentry = 0;
3165                localStorage.setItem("formentry",  globalwpw.formentry);
3166                localStorage.removeItem("cx-name" );
3167                localStorage.removeItem("cx-diaplayname" );
3168                localStorage.removeItem("cx-languagecode" );
3169                localStorage.removeItem("cx-timezone" );
3170				var number = Math.random() // 0.9394456857981651
3171                number.toString(36); // '0.xtis06h6'
3172                var id = number.toString(36).substr(2); // 'xtis06h6'
3173                localStorage.setItem('botsessionid', id);
3174                wpwWelcome.greeting();
3175            } else if(actionType=='no'){
3176                wpwAction.bot(globalwpw.settings.obj.sys_key_help.toLowerCase());
3177            }
3178        });
3179        return this;
3180    };
3181    //Deafault value for wpwbot.If nothing passes from the work station
3182    //Then defaults value will be used.
3183    $.wpwbot.defaults={
3184        obj:{},
3185        editor_handler:0,
3186        sendButton:'#wp-chatbot-send-message',
3187        messageEditor:'#wp-chatbot-editor',
3188        messageContainer:'#wp-chatbot-messages-container',
3189        messageWrapper:'.wp-chatbot-messages-wrapper',
3190        botContainer:'.wp-chatbot-ball-inner',
3191        messageLastChild:'#wp-chatbot-messages-container li:last',
3192        messageLastBot:'#wp-chatbot-messages-container .wp-chatbot-msg:last .wp-chatbot-paragraph',
3193        preLoadingTime:0,
3194        wildcardsShowTime:5000,
3195    }
3196
3197    document.addEventListener("click", function(e) {
3198        // Toggle share menu
3199        if (e.target.closest(".share-toggle")) {
3200            e.preventDefault();
3201            let menu = e.target.closest(".qcld-share").querySelector(".share-menu");
3202            menu.style.display = menu.style.display === "none" ? "block" : "none";
3203        }
3204
3205        // Find message content dynamically
3206        let msgItem = e.target.closest(".wp-chatbot-msg");
3207        if (!msgItem) return;
3208
3209        let msgContent = msgItem.querySelector(".wp-chatbot-paragraph");
3210        if (!msgContent) return;
3211
3212        // Extract plain text
3213        let msgText = msgContent.innerText.trim();
3214        let shareSite = window.location.origin; // Get the site URL dynamically (e.g., "https://www.example.com")
3215        // Ensure a trailing slash if it's meant to represent the root of the site
3216        if (!shareSite.endsWith('/')) {
3217            shareSite += '/';
3218        }
3219        let fullMsg = `${msgText}\n-- ${shareSite}`;
3220        let encodedMsg = encodeURIComponent(fullMsg);
3221
3222        // Facebook (requires App ID)
3223        if (e.target.closest(".share-fb")) {
3224            e.preventDefault();
3225
3226            // You must include a URL even if you're just sharing text
3227            const shareURL = encodeURIComponent(window.location.href); // or your chatbot page URL
3228            const fbShareURL = "https://www.facebook.com/sharer/sharer.php?u=" + shareURL + "&quote=" + encodedMsg;
3229
3230            window.open(fbShareURL, "_blank", "width=600,height=400");
3231        }
3232
3233        // WhatsApp
3234        if (e.target.closest(".share-wa")) {
3235            e.preventDefault();
3236            window.open("https://wa.me/?text=" + encodedMsg, "_blank");
3237        }
3238
3239        // X (Twitter)
3240        if (e.target.closest(".share-x")) {
3241            e.preventDefault();
3242            window.open("https://twitter.com/intent/tweet?text=" + encodedMsg, "_blank");
3243        }
3244
3245        // Email
3246        if (e.target.closest(".share-email")) {
3247            e.preventDefault();
3248            window.location.href = "mailto:?subject=Chatbot Message&body=" + encodedMsg;
3249        }
3250    });
3251    jQuery(document).ready(function($) {
3252
3253    let reportedMessage = "";
3254    let modalElements = {}; // Store references to modal elements
3255    let isModalInitialized = false; // Flag to prevent re-attaching listeners
3256
3257    /**
3258     * Initializes the report modal by finding its elements and attaching event listeners.
3259     * This function is designed to be called only once, the first time the report icon is clicked,
3260     * to ensure all DOM elements are available.
3261     * @returns {boolean} True if initialization was successful, false otherwise.
3262     */
3263    function setupReportModal() {
3264        if (isModalInitialized) {
3265        return true; // Already initialized
3266        }
3267
3268        const modal = document.getElementById("wpbot-report-modal");
3269        const emailInput = document.getElementById("wpbot-report-email");
3270        const textInput = document.getElementById("wpbot-report-text");
3271        const cancelBtn = document.getElementById("wpbot-report-cancel");
3272        const reportForm = document.getElementById("wpbot-report-form");
3273
3274        if (!modal || !emailInput || !textInput || !cancelBtn || !reportForm) {
3275        console.error("❌ One or more modal elements missing in DOM. Cannot initialize report modal.");
3276        return false; // Initialization failed
3277        }
3278
3279        // Store references to the elements
3280        modalElements = { modal, emailInput, textInput, cancelBtn, reportForm };
3281
3282        // Attach event listener for the cancel button
3283        modalElements.cancelBtn.addEventListener("click", function() {
3284        modalElements.modal.style.display = "none";
3285        });
3286
3287        // Attach event listener for the form submission
3288        modalElements.reportForm.addEventListener("submit", function(e) {
3289        e.preventDefault();
3290
3291        let email = modalElements.emailInput.value.trim();
3292        let reportText = modalElements.textInput.value.trim();
3293
3294        if (!email || !reportText) {
3295            alert("Please fill in both fields.");
3296            return;
3297        }
3298
3299        // Save email to localStorage
3300        localStorage.setItem("shopperemail", email);
3301
3302        // Build meta info for the report
3303        let meta = "Source URL: " + window.location.href + " | User Agent: " + navigator.userAgent;
3304
3305        // Send report via AJAX
3306        $.post(wp_chatbot_obj.ajax_url, {
3307            action: "wpbot_save_report",
3308            user_id: globalwpw.settings.obj.current_user_id,
3309            conversation_id: 3,
3310            message: reportedMessage, // Use the message captured when the icon 
3310was clicked
3311            report_text: reportText,
3312            email: email,
3313            meta_info: meta
3314        }, function(response) {
3315            if (response.success) {
3316            console.log("Report sent successfully.");
3317            // The original line `jQuery(e.target.closest(".fa fa-commenting-o")).addClass("submitted");`
3318            // was incorrect as `e.target` here refers to the form, not the original icon.
3319            // To mark the icon, a reference to it would need to be stored when it was clicked.
3320            } else {
3321            console.log("Failed to send report.");
3322            }
3323            modalElements.modal.style.display = "none"; // Hide modal after submission
3324        });
3325        });
3326
3327        isModalInitialized = true; // Mark as initialized
3328        return true; // Initialization successful
3329    }
3330
3331    // Event listener for clicks on the document to detect report icon clicks
3332    document.addEventListener("click", function(e) {
3333        if (e.target.closest(".fa-commenting-o")) {
3334        e.preventDefault();
3335        console.log("Report icon clicked");
3336
3337        // Attempt to initialize the modal elements and listeners if not already done.
3338        // This ensures elements are looked up only when needed, making it more robust
3339        // against timing issues if the modal HTML is loaded asynchronously or late.
3340        if (!setupReportModal()) {
3341            return; // If initialization failed (elements not found), stop here.
3342        }
3343
3344        // Now that we are sure modal elements are available, proceed to open the modal.
3345        let msgItem = e.target.closest(".wp-chatbot-msg");
3346        if (msgItem) {
3347            reportedMessage = msgItem.querySelector(".wp-chatbot-paragraph").innerText.trim();
3348        } else {
3349            reportedMessage = ""; // Fallback if message item not found
3350        }
3351
3352        // Prefill email from localStorage if available
3353        let shopperEmail = localStorage.getItem("shopperemail");
3354        modalElements.emailInput.value = shopperEmail ? shopperEmail : "";
3355
3356        // Clear previous report text
3357        modalElements.textInput.value = "";
3358        
3359        // Display the modal
3360        modalElements.modal.style.display = "block";
3361        }
3362    });
3363    });
3364    jQuery(document).on('click', '.qc_wpbot_chat_link', function (e) {
3365        console.log("Chat link clicked");
3366        e.preventDefault();
3367        jQuery("#wp-chatbot-ball").trigger("click");
3368        jQuery("#wp-chatbot-chat-container").show();
3369    });
3370    document.addEventListener("click", function (e) {
3371        const likeIcon = e.target.closest(".dashicons-thumbs-up");
3372        const dislikeIcon = e.target.closest(".dashicons-thumbs-down");
3373
3374        if (!likeIcon && !dislikeIcon) return; // only handle like/dislike clicks
3375        e.preventDefault();
3376
3377        const msgItem = e.target.closest(".wp-chatbot-msg");
3378        const feedbackContainer = jQuery(msgItem).find(".qcld-like-dislike-icon");
3379        const likeAnchor = jQuery(msgItem).find(".dashicons-thumbs-up").parent("a");
3380        const dislikeAnchor = jQuery(msgItem).find(".dashicons-thumbs-down").parent("a");
3381
3382        let feedbackType = "";
3383        let isToggleOff = false;
3384
3385        if (likeIcon) {
3386            // If like is already active → toggle it off
3387            if (likeAnchor.hasClass("liked")) {
3388            likeAnchor.removeClass("liked");
3389            likeIcon.classList.remove("liked");
3390            isToggleOff = true;
3391            } else {
3392            // Activate like, deactivate dislike
3393            likeAnchor.addClass("liked");
3394            likeIcon.classList.add("liked");
3395            dislikeAnchor.removeClass("disliked");
3396            jQuery(msgItem).find(".dashicons-thumbs-down").removeClass("disliked");
3397            feedbackType = "like";
3398            }
3399        } else if (dislikeIcon) {
3400            // If dislike is already active → toggle it off
3401            if (dislikeAnchor.hasClass("disliked")) {
3402            dislikeAnchor.removeClass("disliked");
3403            dislikeIcon.classList.remove("disliked");
3404            isToggleOff = true;
3405            } else {
3406            // Activate dislike, deactivate like
3407            dislikeAnchor.addClass("disliked");
3408            dislikeIcon.classList.add("disliked");
3409            likeAnchor.removeClass("liked");
3410            jQuery(msgItem).find(".fa-thumbs-o-up").removeClass("liked");
3411            feedbackType = "dislike";
3412            }
3413        }
3414
3415        // 🔹 Only send feedback if toggled ON
3416        if (!isToggleOff && feedbackType) {
3417            let message = msgItem.querySelector(".wp-chatbot-paragraph").innerText.trim();
3418            let meta =
3419            "Source URL: " +
3420            window.location.href +
3421            " | User Agent: " +
3422            navigator.userAgent;
3423
3424            jQuery.post(
3425            wp_chatbot_obj.ajax_url,
3426            {
3427                action: "wpbot_save_feedback",
3428                user_id: globalwpw.settings.obj.current_user_id,
3429                conversation_id: 3,
3430                message: message,
3431                feedback: feedbackType,
3432                meta_info: meta,
3433            },
3434            function (response) {
3435                if (response.success) {
3436                console.log("Feedback saved:", feedbackType);
3437                } else {
3438                console.log("Failed to save feedback.");
3439                }
3440            }
3441            );
3442        } else {
3443            console.log("Feedback toggled off, not saving.");
3444        }
3445    });
3446
3447// ---------------------------------------------------------------------------
3448// Streaming helpers
3449// ---------------------------------------------------------------------------
3450
3451function qcldInlineMarkdown(text) {
3452    text = text.replace(/`([^`]+)`/g, '<code>$1</code>');
3453    text = text.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
3454    text = text.replace(/__([^_]+)__/g, '<strong>$1</strong>');
3455    text = text.replace(/\*([^*\n]+)\*/g, '<em>$1</em>');
3456    text = text.replace(/_([^_\n]+)_/g, '<em>$1</em>');
3457    text = text.replace(/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g,
3458        '<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>');
3459    return text;
3460}
3461
3462function qcldParseMarkdown(text) {
3463    if (!text) { return ''; }
3464    var lines       = text.split('\n');
3465    var html        = '';
3466    var inCode      = false;
3467    var inUL        = false;
3468    var inOL        = false;
3469    var codeLines   = [];
3470
3471    function closeList() {
3472        if (inUL) { html += '</ul>'; inUL = false; }
3473        if (inOL) { html += '</ol>'; inOL = false; }
3474    }
3475
3476    for (var i = 0; i < lines.length; i++) {
3477        var line = lines[i];
3478
3479        // Fenced code block toggle
3480        if (/^```/.test(line)) {
3481            if (inCode) {
3482                html += '<pre><code>' + codeLines.join('\n').replace(/</g,'&lt;').replace(/>/g,'&gt;') + '</code></pre>';
3483                codeLines = [];
3484                inCode = false;
3485            } else {
3486                closeList();
3487                inCode = true;
3488            }
3489            continue;
3490        }
3491        if (inCode) { codeLines.push(line); continue; }
3492
3493        // Headings
3494        var hm = line.match(/^(#{1,6})\s+(.*)/);
3495        if (hm) {
3496            closeList();
3497            var lvl = hm[1].length;
3498            html += '<h' + lvl + '>' + qcldInlineMarkdown(hm[2]) + '</h' + lvl + '>';
3499            continue;
3500        }
3501
3502        // Horizontal rule
3503        if (/^---+$/.test(line.trim())) {
3504            closeList();
3505            html += '<hr>';
3506            continue;
3507        }
3508
3509        // Unordered list
3510        var ulm = line.match(/^\s*[-*+]\s+(.*)/);
3511        if (ulm) {
3512            if (inOL) { html += '</ol>'; inOL = false; }
3513            if (!inUL) { html += '<ul>'; inUL = true; }
3514            html += '<li>' + qcldInlineMarkdown(ulm[1]) + '</li>';
3515            continue;
3516        }
3517
3518        // Ordered list
3519        var olm = line.match(/^\s*\d+\.\s+(.*)/);
3520        if (olm) {
3521            if (inUL) { html += '</ul>'; inUL = false; }
3522            if (!inOL) { html += '<ol>'; inOL = true; }
3523            html += '<li>' + qcldInlineMarkdown(olm[1]) + '</li>';
3524            continue;
3525        }
3526
3527        // Blank line
3528        if (line.trim() === '') {
3529            closeList();
3530            html += '<br>';
3531            continue;
3532        }
3533
3534        // Normal line
3535        closeList();
3536        html += qcldInlineMarkdown(line) + '<br>';
3537    }
3538
3539    if (inCode) { html += '<pre><code>' + codeLines.join('\n') + '</code></pre>'; }
3540    closeList();
3541    return html;
3542}
3543
3544function qcldTypeCharacterByCharacter($target, text, speed, onComplete) {
3545    speed      = speed || 10;
3546    onComplete = onComplete || function(){};
3547
3548    var i = 0;
3549    function type() {
3550        if (i < text.length) {
3551            $target.append(document.createTextNode(text.charAt(i)));
3552            i++;
3553            setTimeout(type, speed);
3554        } else {
3555            onComplete();
3556        }
3557    }
3558    type();
3559}
3560
3561function qcldStreamOpenAI(dataObj) {
3562    fetch(qcld_chatbot_obj.stream_endpoint, {
3563        method: 'POST',
3564        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
3565        body: new URLSearchParams(dataObj)
3566    })
3567    .then(function(response) {
3568        if (!response.ok || !response.body) {
3569            throw new Error('Network response was not OK or empty body');
3570        }
3571
3572        var reader      = response.body.getReader();
3573        var decoder     = new TextDecoder('utf-8');
3574        var buffer      = '';
3575        var queue       = [];
3576        var isTyping    = false;
3577        var streamEnded = false;
3578        var msgBuffer   = '';
3579
3580        function finalize() {
3581            var finalMsg = msgBuffer;
3582            var isFormInProgress = qcldIsAiFormInProgress();
3583
3584            // The streaming endpoint never receives __AI_FORM_IN_PROGRESS__ markers
3585            // (those are only added by the non-streaming PHP handler). So we also
3586            // check whether the original request was sent with an active AI action.
3587            if (dataObj.active_ai_action && dataObj.active_ai_action !== '') {
3588                isFormInProgress = true;
3589            }
3590
3591            if (finalMsg.indexOf('__AI_FORM_IN_PROGRESS__') !== -1) {
3592                isFormInProgress = true;
3593                finalMsg = finalMsg.replace(/__AI_FORM_IN_PROGRESS__/g, '').trim();
3594            }
3595
3596            // qcldIsAiFormInProgress() above only reflects context from BEFORE this
3597            // response. If this response itself carries the AI_FORM_DATA completion
3598            // block, the form is done as of now regardless of that stale history.
3599            var isFormCompletion = finalMsg.indexOf('AI_FORM_DATA') !== -1;
3600            if (isFormCompletion) {
3601                isFormInProgress = false;
3602            }
3603
3604            finalMsg = wpwMsg.oncommand_filter(finalMsg);
3605
3606            if (typeof globalwpw !== 'undefined' && typeof globalwpw.aiContext !== 'undefined') {
3607                globalwpw.aiContext.push({role: 'assistant', content: finalMsg});
3608                if (globalwpw.aiContext.length > 10) {
3609                    globalwpw.aiContext.shift();
3610                }
3611            }
3612
3613            // Replace raw typed text with formatted HTML
3614            var $para = jQuery('.wp-chatbot-msg').last().find('.wp-chatbot-paragraph');
3615            if (finalMsg.trim()) {
3616                $para.html(qcldParseMarkdown(finalMsg));
3617            }
3618            // Reactions (like/dislike/report/share) don't apply to the form
3619            // completion summary card itself, only to normal AI chat replies.
3620            if (!isFormInProgress && !isFormCompletion) {
3621                jQuery(globalwpw.settings.messageContainer)
3622                    .find('.wp-chatbot-msg:last .qcld-like-dislike-icon')
3623                    .css('display', 'block');
3624            }
3625                
3626            if(!isFormInProgress && (globalwpw.settings.obj.qcld_disable_repited_startmenu != "1") && ((globalwpw.settings.obj.disable_back_to_start != '1' && globalwpw.settings.obj.skip_greetings_and_menu != 1))){
3627                wpwMsg.single_nobg(
3628                    '<span class="qcld-chatbot-wildcard qcld_back_to_start" data-wildcart="back">' +
3629                    wpwKits.randomMsg(globalwpw.settings.obj.back_to_start) +
3630                    '</span>'
3631                );
3632            }
3633            setTimeout(function() {
3634                jQuery(globalwpw.settings.botContainer)
3635                    .stop(true)
3636                    .animate({ scrollTop: jQuery(globalwpw.settings.botContainer)[0].scrollHeight }, 400);
3637            }, 150);
3638            wpwKits.scrollTo();
3639        }
3640
3641        function processQueue() {
3642            if (isTyping || queue.length === 0) {
3643                if (streamEnded && !isTyping && queue.length === 0) {
3644                    finalize();
3645                }
3646                return;
3647            }
3648
3649            isTyping = true;
3650            var nextChunk = queue.shift();
3651            msgBuffer += nextChunk;
3652
3653            // If we've started receiving the data block or internal flags, hide it from the UI!
3654            // We use '__AI_' as the trigger so it stops rendering even partial tags like '__AI_FORM_DATA__' or '__AI_FORM_IN_PROGRESS__'.
3655            if (msgBuffer.indexOf('__AI_') !== -1) {
3656                isTyping = false;
3657                processQueue();
3658                return;
3659            }
3660
3661            var $para = jQuery('.wp-chatbot-msg').last().find('.wp-chatbot-paragraph');
3662            if ($para.length) {
3663                $para.find('.wp-chatbot-comment-loader').remove();
3664                var $span = jQuery('<span>');
3665                $para.append($span);
3666                qcldTypeCharacterByCharacter($span, nextChunk, 10, function() {
3667                    isTyping = false;
3668                    processQueue();
3669                    wpwKits.scrollTo();
3670                });
3671            } else {
3672                isTyping = false;
3673                processQueue();
3674            }
3675        }
3676
3677        function read() {
3678            reader.read().then(function(result) {
3679                if (result.done) { return; }
3680
3681                buffer += decoder.decode(result.value, { stream: true });
3682                var lines = buffer.split('\n');
3683                buffer = lines.pop();
3684
3685                for (var i = 0; i < lines.length; i++) {
3686                    var line = lines[i].trim();
3687                    if (!line) { continue; }
3688                    if (line.indexOf('data:') === 0) {
3689                        var jsonStr = line.replace(/^data:\s*/, '');
3690                        if (jsonStr === '[DONE]') {
3691                            streamEnded = true;
3692                            if (!isTyping && queue.length === 0) { finalize(); }
3693                            return;
3694                        }
3695                        try {
3696                            var parsed  = JSON.parse(jsonStr);
3697                            var content = '';
3698                            if (parsed.choices && parsed.choices[0] && parsed.choices[0].delta) {
3699                                content = parsed.choices[0].delta.content || '';
3700                            } else if (parsed.delta && parsed.delta.content) {
3701                                content = parsed.delta.content;
3702                            }
3703                            if (content) {
3704                                queue.push(content);
3705                                processQueue();
3706                                wpwKits.scrollTo();
3707                            }
3708                        } catch(e) {
3709                            console.warn('Streaming parse error:', e, jsonStr);
3710                        }
3711                    }
3712                }
3713                read();
3714            }).catch(function(err) { console.error('Stream read error:', err); });
3715        }
3716
3717        read();
3718    })
3719    .catch(function(err) { console.error('Stream fetch error:', err); });
3720}
3721
3722})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.