PageSourceSearch

https://api.suffescom.com/cdn/js/custom.js?v=

js suffescom.com collected 2026-10-02 10:03:41 UTC 26,680 bytes, 595 lines download raw bytes

1;(function($){
2    // CONSTANTS
3    const API_URL = "https://api.suffescom.com/app";
4    const API_ACCESS_KEY = "b7720fc7021f7fc784e6c3fd2eaffe01";
5    // CALLBACK AJAX
6    function CallHttpRequest(action,params,handleData){ 
7        if(action == 'UploadFile' || action == 'UploadDocument'){
8            $.ajax({
9                url: APP_URL+"utility/httpRequest.php",
10                type: "POST",
11                data:  params,
12                contentType: false,
13                cache: false,
14                processData:false,
15                beforeSend: function() {
16                    ShowLoader();
17                },
18                success: function(response) {
19                    HideLoader();
20                    handleData(response); 
21                },
22                error: function(jqXHR, textStatus) {
23                    HideLoader();
24                    console.log( "Request failed: " + textStatus );
25                },
26                complete: function() {
27                    HideLoader();
28                },
29            });
30        }else{
31            var settings = { url: API_URL, type: "POST", crossDomain: true, data: {params, "action": action,  "apikey": API_ACCESS_KEY } };
32            var request = $.ajax(settings);
33            request.done(function (response) {
34                handleData(response); 
35            });
36            request.fail(function (jqXHR, textStatus) {
37                console.log("Request failed:",textStatus);
38            });
39        }
40    }
41    // Exit Event
42    (function (jQuery) {
43        'use strict';
44        var timer;
45        function trackLeave(ev) {
46            if (ev.clientY > 0) {
47                return;
48            }
49            if (timer) {
50                clearTimeout(timer);
51            }
52            if (jQuery.exitIntent.settings.sensitivity <= 0) {
53                jQuery.event.trigger('exitintent');
54                return;
55            }
56            timer = setTimeout(function() { timer = null; jQuery.event.trigger('exitintent'); }, jQuery.exitIntent.settings.sensitivity);
57        }
58
59        function trackEnter() {
60            if (timer) {
61                clearTimeout(timer);
62                timer = null;
63            }
64        }
65
66        $.exitIntent = function(enable, options) {
67            $.exitIntent.settings = $.extend($.exitIntent.settings, options);
68            if (enable == 'enable') {
69                $(window).mouseleave(trackLeave);
70                $(window).mouseenter(trackEnter);
71            } else if (enable == 'disable') {
72                trackEnter();
73                $(window).unbind('mouseleave', trackLeave);
74                $(window).unbind('mouseenter', trackEnter);
75            } else {
76                throw "Invalid parameter to $.exitIntent -- should be 'enable'/'disable'";
77            }
78        }
79        $.exitIntent.settings = { 'sensitivity': 300 };
80    })($);
81
82
83    var hostExit = window.location.host;
84    switch(hostExit) {
85        case "suffescom.com":
86            $.exitIntent('enable');
87        break;
88        case "www.suffescom.com":
89            $.exitIntent('enable');
90        break;
91        case "staging.suffescom.com":
92            $.exitIntent('enable');
93        break;
94        case "stagingv2.suffescom.com":
95            $.exitIntent('enable');
96        break;
97        case "hyperlocalcloud.com":
98            $.exitIntent('enable');
99        break;
100        case "www.marqade.com":
101            $.exitIntent('enable');
102        break;
103        default:
104            $.exitIntent('disable');
105        break;
106    }
107
108    $(document).bind('exitintent', function() {
109        if(localStorage.getItem('popState') != 'shown'){
110            var prev_val = $("#warning form input[name='utm_medium']").val();
111            $("#warning form input[name='utm_medium']").val(prev_val+"~exit-popup");
112            $('#warning').show();
113            localStorage.setItem('popState','shown');
114        }
115    });
116    $('.exit-hide').click(function(){
117       $('#warning').hide();
118    });
119    // COMMON 
120    function ShowLoader(){
121        $(".common_form .btn-loader").removeClass('hide');
122        $(".common_form .btn-loader").css('display','block');
123        $('.common_form button').attr('disabled',true);
124    }
125
126    function HideLoader(){
127        $(".common_form .btn-loader").addClass('hide');
128        $(".common_form .btn-loader").css('display','none');
129        $('.common_form button').attr('disabled',false);
130    }
131
132    // PHONE WITH COUNTRY CODE VALIDATION
133    $.validator.methods.matches = function( value, element, params ) {
134        var re = new RegExp(params);
135        return this.optional( element ) || re.test( value );
136    }
137
138    // $(document).ready(function(){
139    //     setTimeout(function(){ 
140    //         var prev_val = $("#letsstart form input[name='utm_medium']").val();
141    //         $("#letsstart form input[name='utm_medium']").val(prev_val+"~popup");
142    //         $("#letsstart").modal('show');
143    //     }, 30000);
144    // })
145    function checkFormParams(){
146        let lead_source  = getCookie("lead_source");
147        let href = window.location.href;
148        if(lead_source == ""){
149            setCookie("lead_source",href,1);
150        }else{
151            href = getCookie("lead_source");
152        }
153        $("input[name='lead_source']").val(href);
154        $('.common_form').each(function(key, val){
155            let common_form = $(this);
156            var elements = common_form.find('input');
157            let status = true;
158            elements.each(function() {
159                if ($(this).attr('type') !== "submit" && $(this).attr('type') !== "button" && $(this).attr('type') !== "reset" && $(this).attr('name') === "referred_from")
160                    status = false;
161            });
162            if(status){
163                let input = $('<input type="hidden" name="referred_from"/>').val(document.referrer);
164                $(common_form).append(input);
165            }
166        })
167    }
168    $(document).ready(function(){
169        checkFormParams()
170    })
171    
172    
173    $(document).on("hidden.bs.modal", '.modal', function(){
174        if(this.id == "letsstart"){
175            var prev_val = $("#letsstart form input[name='utm_medium']").val();
176            var tags = ["~popup","~exit-popup"];
177            tags.forEach(TagFilter);
178            function TagFilter(tag, index, array) {
179                if(prev_val.indexOf(tag) != -1){
180                    prev_val = prev_val.replace(tag,'');
181                    $("#letsstart form input[name='utm_medium']").val(prev_val);
182                }
183            }
184        }
185    });
186
187    function setCookie(name,value,days) {
188        var expires = "";
189        if (days) {
190            var date = new Date();
191            date.setTime(date.getTime() + (days*24*60*60*1000));
192            expires = "; expires=" + date.toUTCString();
193        }
194        document.cookie = name + "=" + (value || "")  + expires + "; path=/";
195    }
196    
197    // Auto Save Data Start
198    const callAutoSave = async (action, params) => { return await $.ajax({ url: API_URL, type: "POST", crossDomain: true, data: {params, "action": action,  "apikey": API_ACCESS_KEY }, error: async (error) => { console.log(error) } }); }
199        let typingTimer;
200        let inputDelay = 1000;
201        $('.common_form input,.common_form textarea').on('input', function(){   
202            if(this.value != ""){
203                let form = $(this).closest("form");
204                
205                let timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
206                form.find('input[name="local_timezone"]').val(timezone);
207            
208                clearTimeout(typingTimer);
209                typingTimer = setTimeout(async function(){
210                    let cookie_sfl = getCookie('sfl');
211                    let form_fields="";
212                    let formInputs = ["full_name","email","mobile_number","message","utm_source","utm_medium","utm_campaign","utm_term","lead_source", "local_timezone"];
213                    for (var i = 0; i < form[0].length; i++) {
214                        if(form[0][i].value != "" && $.inArray(form[0][i].name, formInputs) !== -1){
215                            form_fields+=`${(i > 0 ? "&" : "")}${form[0][i].name}=${(form[0][i].name == "lead_source" ? btoa(form[0][i].value) : form[0][i].value)}`;
216                        }
217                    }
218                    form_fields+="&sfl="+(cookie_sfl != "" ? cookie_sfl : createUniqueCookie());
219                    let params = encodeURI(form_fields);
220                    let action = "auto-save-lead";
221                    await callAutoSave(action,params);
222                }, inputDelay);
223            }
224    });
225    
226    function getCookie(cookieName) {
227        let name = cookieName+"=";
228        let decodedCookie = decodeURIComponent(document.cookie);
229        let cookieArray = decodedCookie.split(';');
230        for (var i = 0; i < cookieArray.length; i++) {
231            var cookie = cookieArray[i];
232            while (cookie.charAt(0) === ' ') {
233                cookie = cookie.substring(1);
234            }
235            if (cookie.indexOf(name) === 0) {
236                return cookie.substring(name.length, cookie.length);
237            }
238        }
239        return "";
240    }
241    function createUniqueCookie() {
242        let timestamp = new Date().getTime();        
243        let uniqueId = "sfl_"+timestamp;
244        document.cookie = "sfl=" + encodeURIComponent(uniqueId) + "; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/";
245    }
246    // Auto Save Data End
247    
248    
249    function isSpamContent(value) {
250        if (!value) return false; // empty → not spam
251    
252        // Split into words
253        var words = value.split(/\s+/);
254    
255        for (var i = 0; i < words.length; i++) {
256            var word = words[i];
257    
258            // Count uppercase letters in this word
259            var upperCount = (word.match(/[A-Z]/g) || []).length;
260    
261            // If word is long (>8) and uppercase letters >2  spam
262            if (word.length > 8 && upperCount > 2) {
263                return true;
264            }
265        }
266    
267        return false; // otherwise valid
268    }
269    
270    
271    function isSpamRefernce(value) {
272        if (!value) return false; // empty → not spam
273    
274           var cleanValue = value.replace(/\s+/g, '');
275    
276              if (/^\d+$/.test(cleanValue)) {
277    
278                var allSame = cleanValue.split('').every(function(ch
278ar) {
279                    return char === cleanValue[0];
280                });
281    
282                if (allSame && cleanValue.length >= 5) {
283                    return true;
284                }
285            }
286    
287        return false;
288    }
289
290    // FORM SUBMISSION
291    $('.common_form').each(function(key, val){
292       	var common_form = $(this);
293        if(params['captcha_render'] == "true"){
294            $("head").append("
vendor: 63 bytes, line 294
294<script src='https://www.google.com/recaptcha/api.js'></script>
294");
295           	var interval = setInterval(function(){
296                if(window.grecaptcha){
297                    grecaptcha.ready(function() {
298                   	    grecaptcha.render(common_form.find(".api-g-recaptcha")[0], { 'sitekey' : '6LefgIMcAAAAACZAex_rxdoC7hP4BnoaI6gEohwH' });
299                   	});
300                    clearInterval(interval);
301                  }
302            },10);
303        }
304        // console.log($('.common_form').length);
305        let captcha_render = params['captcha_render'];
306        let input = $('<input type="hidden" name="captcha_render"/>').val(captcha_render);
307        $(common_form).append(input);
308        const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
309        let local_timezone = $('<input type="hidden" name="local_timezone"/>').val(userTimezone);
310        $(common_form).append(local_timezone);
311    	common_form.validate({
312    	    ignore: ".ignore",
313    	    rules: {
314    	        full_name: {required:true},
315    	        email: {required:true, email:true},
316    	        mobile_number: {required:true, matches:/^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/},
317    	        message: {required:true},
318    	        hiddenRecaptcha: {
319    	            required: function () {
320                        // if(params['captcha_render'] == "true"){
321                        //     console.log(key,grecaptcha.getResponse());
322                        //     if (grecaptcha.getResponse() == '') {
323                        //         return true;
324                        //     }
325                        //     else{
326                                return false;
327                        //     }
328                        // }
329                        // else{
330                        //     return true;
331                        // }
332    	            }
333    	        }
334    	    },
335    	    messages: {     
336    	        full_name: "This field is required",
337    	        email: {
338    	            required: "This field is required",
339    	            email: "Please provide an valid Email"
340    	        },
341    	        mobile_number: {
342    	            required: "This field is required",
343    	            matches: "Please provide an valid Mobile Number With Country Code"
344    	        },
345    	        message: "Please share your message to understand you",
346    	        hiddenRecaptcha: "Please prove you are not a robot"
347    	    },
348    	    submitHandler: function(form) {
349    	        var params = $(form).serialize();
350    	        var action = "create-lead";
351    	        var params = params;
352    	        var values = {};
353                $.each($(form).serializeArray(), function (i, field) { values[field.name] = field.value; });
354                
355                
356                var nameVal = values["full_name"];
357                var messageVal = values["message"];
358                var local_timezone = values["local_timezone"];
359                var referred_from = values["referred_from"];
360                
361                var isSpam = isSpamContent(nameVal) || isSpamContent(messageVal) || isSpamRefernce(referred_from) || !local_timezone || local_timezone === "Etc/Unknown";     
362                
363                var getValue = function (valueName) { return values[valueName]; };
364                localStorage.setItem('utm_medium',getValue("utm_medium"));
365                localStorage.setItem('layer_email',getValue("email"));
366                let formObject = {full_name : getValue("full_name") , email : getValue("email") , mobile_number : getValue("mobile_number") , message : getValue("message")}
367                localStorage.setItem(`formData`, JSON.stringify(formObject));
368    	        ShowLoader();
369    	        
370    	        /*if (isSpam) {
371                // Redirect silently without sending to HubSpot or email
372                HideLoader();
373
374                    let host = window.location.host;
375                    let href = window.location.href;
376                    let path = window.location.pathname;
377                    let params = href.split(path);
378                    params = params[1];
379                    params = params + (params != "" ? "&agt=215181882" : "?agt=215181882")
380                    let url = '';
381
382                    switch (host) {
383                            case "suffescom.com":
384                                url = "https://www.suffescom.com/thanks"+params;
385                            break;
386                            case "www.suffescom.com":
387                                url = "https://www.suffescom.com/thanks"+params;
388                            break;
389                            case "lp.suffescom.com":
390                                url = "https://lp.suffescom.com/thanks-new"+params;
391                            break;
392                            case "rm.suffescom.com":
393                                url = "https://rm.suffescom.com/thanks-new"+params;
394                            break;
395                            case "staging.suffescom.com":
396                                url = "https://staging.suffescom.com/thanks"+params;
397                            break;
398                            case "lp-staging.suffescom.com":
399                                url = "https://lp-staging.suffescom.com/thanks-new"+params;
400                            break;
401                            case "rm-staging.suffescom.com":
402                                url = "https://rm-staging.suffescom.com/thanks-new"+params;
403                            break;
404                            case "stagingv2.suffescom.com":
405                                url = "https://stagingv2.suffescom.com/thanks"+params;
406                            break;
407                            case "cloneappscript.com":
408                                url = "https://www.suffescom.com/thankyou?utm_source=cas";
409                            break;
410                            case "hyperlocalcloud.com":
411                                url = "https://hyperlocalcloud.com/thanks"+params;
412                            break;
413                            case "apps.hyperlocalcloud.com":
414                                url = "https://apps.hyperlocalcloud.com/thanks";
415                            break;
416                            case "risingmax.com":
417                                url = "https://risingmax.com/thankyou"+params;
418                            break;
419                            case "teams.suffescom.io":
420                                     url = "https://teams.suffescom.io/thanks-new"+params;
421                            break;
422                            case "team.suffescom.app":
423                                url = "https://team.suffescom.app/thanks";
424                            break;
425                            case "teams.appcarts.com":
426                                url = "https://teams.appcarts.com/thanks";
427                            break;
428                            case "teams.suffescom.co":
429                                 url = "https://teams.suffescom.co/thanks"+params;
430                            break;
431                            case "teams.aicircular.com":
432                                url = "https://teams.aicircular.com/thanks";
433                            break;
434                            case "bestweb3development.com":
435                                url = "https://bestweb3development.com/thanks";
436                            break;
437                            case "teams.suffescom.ae":
438                                url = "https://teams.suffescom.ae/thanks"+params;
439                            break;
440                            case "suffescom.co":
441                                url = "https://suffescom.co/thanks"+params;
442                            break;
443                            case "suffescom.ae":
444                                url = "https://www.suffescom.ae/thanks"+params;
445                            break;
446                            case "www.suffescom.ae":
447                                url = "https://www.suffescom.ae/thanks"+params;
448                            break;
449                            case "www.thinsquare.com":
450                                url = "https://www.thinsquare.com/thanks"+params;
451                            break;
452                            case "www.marqade.com":
453                                url = "https://www.marqade.com/thanks"+params;
454                            break;
455                            case "marqade.com":
456                                url = "https://www.marqade.com/thanks"+params;
457                            break;
458                            case "suffescom.co.uk":
459                                url = "https://suffescom.co.uk/thanks" + params;
460                            break;
461                            case "suffescom.com.au":
462                                url = "https://suffescom.com.au/thanks" + params;
463                            break;
464                            default:
465                                url = "https://www.suffescom.com/thanks"+params;
466                            break;
467                        }
468
469                    setCookie("THANKS_SUCCESS", true, 1);
470                    $(form).trigger("reset");
471                    if ($(form).find('input[name="captcha_render"]').val() == "true") {
472                        grecaptcha.reset(key);
473                    }
474
475                    window.location.href = url;
476                    return false;
477                } */
478                
479    	        CallHttpRequest(action,params,function(response){
480    	           // HideLoader();
481    	            var color = 'danger';
482    	            if(response.status == 200){
483    	                color = 'success';
484                        let host = window.location.host;
485                        let href = window.location.href;
486                        let path = window.location.pathname;
487                        let params = href.split(path);
488                        	params = params[1];
489                        	params = params+(params != "" ? "&agt="+response.agent : "?agt="+response.agent);
490                        	
491                        let url  = '';
492                        switch(host) {
493                            case "suffescom.com":
494                                url = "https://www.suffescom.com/thanks"+params;
495                            break;
496                            case "www.suffescom.com":
497                                url = "https://www.suffescom.com/thanks"+params;
498                            break;
499                            case "lp.suffescom.com":
500                                url = "https://lp.suffescom.com/thanks-new"+params;
501                            break;
502                            case "rm.suffescom.com":
503                                url = "https://rm.suffescom.com/thanks-new"+params;
504                            break;
505                            case "staging.suffescom.com":
506                                url = "https://staging.suffescom.com/thanks"+params;
507                            break;
508                            case "lp-staging.suffescom.com":
509                                url = "https://lp-staging.suffescom.com/thanks-new"+params;
510                            break;
511                            case "rm-staging.suffescom.com":
512                                url = "https://rm-staging.suffescom.com/thanks-new"+params;
513                            break;
514                            case "stagingv2.suffescom.com":
515                                url = "https://stagingv2.suffescom.com/thanks"+params;
516                            break;
517                            case "cloneappscript.com":
518                                url = "https://www.suffescom.com/thankyou?utm_source=cas";
519                            break;
520                            case "hyperlocalcloud.com":
521                                url = "https://hyperlocalcloud.com/thanks"+params;
522                            break;
523                            case "apps.hyperlocalcloud.com":
524                                url = "https://apps.hyperlocalcloud.com/thanks";
525                            break;
526                            case "risingmax.com":
527                                url = "https://risingmax.com/thankyou"+params;
528                            break;
529                            case "teams.suffescom.io":
530                                     url = "https://teams.suffescom.io/thanks-new"+params;
531                            break;
532                            case "team.suffescom.app":
533                                url = "https://team.suffescom.app/thanks";
534                            break;
535                            case "teams.appcarts.com":
536                                url = "https://teams.appcarts.com/thanks";
537                            break;
538                            case "teams.suffescom.co":
539                                 url = "https://teams.suffescom.co/thanks"+params;
540                            break;
541                            case "teams.aicircular.com":
542                                url = "https://teams.aicircular.com/thanks";
543                            break;
544                            case "bestweb3development.com":
545                                url = "https://bestweb3development.com/thanks";
546                            break;
547                            case "teams.suffescom.ae":
548                                url = "https://teams.suffescom.ae/thanks"+params;
549                            break;
550                            case "suffescom.co":
551                                url = "https://suffescom.co/thanks"+params;
552                            break;
553                            case "suffescom.ae":
554                                url = "https://www.suffescom.ae/thanks"+params;
555                            break;
556                            case "www.suffescom.ae":
557                                url = "https://www.suffescom.ae/thanks"+params;
558                            break;
559                            case "www.thinsquare.com":
560                                url = "https://www.thinsquare.com/thanks"+params;
561                            break;
562                            case "www.marqade.com":
563                                url = "https://www.marqade.com/thanks"+params;
564                            break;
565                            case "marqade.com":
566                                url = "https://www.marqade.com/thanks"+params;
567                            break;
568                            case "suffescom.co.uk":
569                                url = "https://suffescom.co.uk/thanks" + params;
570                            break;
571                            case "suffescom.com.au":
572                                url = "https://suffescom.com.au/thanks" + params;
573                            break;
574                            case "erosrank.com":
575                        	    url = "https://erosrank.com/thanks"+params;
576                        	break;
577                            default:
578                                url = "https://www.suffescom.com/thanks"+params;
579                            break;
580                        }
581                        console.log(host,url);
582                        setCookie("THANKS_SUCCESS",true,1);
583                        $('#common_form').trigger("reset");
584                        if($(form).find('input[name="captcha_render"]').val() == "true"){
585                            grecaptcha.reset(key);
586                        }
587                        window.location.href = url;
588    	            }
589    	            $("#common_form").after("<p class='response_msg "+color+"'>"+response.msg+"</b>");
590    	            setTimeout(function() { $(".response_msg").fadeOut(); $(".response_msg").remove(); }, 5000);
591    	        })
592    	    }
593    	});
594    });
595})(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.