PageSourceSearch

https://www.zettahost.bg/wp-content/plugins/rchr-one-click-registr…/js/rchr-one-click-registration.js?ver=1.0

js zettahost.bg collected 2026-10-02 19:01:23 UTC 30,544 bytes, 893 lines download raw bytes

1/* NOTIFY START */
2(function($) {
3
4        var Notify = function(element, options) {
5
6                this.$element = $(element);
7                this.options  = $.extend(false, $.fn.notify.defaults, options);
8
9                if(this.options.closePrevious) {
10
11                        this.$element.children().each(function() {
12                                $(this).data('notify').close();
13                        });
14
15                } else if(this.$element.children().length >= this.options.maxNotes) {
16                        this.$element.children().first().data('notify').close();
17                }
18
19                this.$note = $('<div />', {
20                        'class': 'rchr-notify-'+this.options.type+' '+this.options.types[this.options.type]
21                }).append('<div class="rchr-notify-message-overlay"></div>').append('<p>'+this.options.text+'</p>');
22
23                if(this.options.closeAble) {
24                        $('<a class="rchr-notify-close" />').appendTo(this.$note).on('click', $.proxy(this.close, this));
25                }
26
27                this.$note.data('notify', this).appendTo(this.$element);
28
29                if(this.options.modal) {
30                        $('.rchr-notify-overlay').fadeIn(400);
31                }
32
33                this.show();
34
35        };
36
37        Notify.onClose = function() {
38
39                this.options.onClose();
40                this.$note.remove();
41
42                if(this.options.modal) {
43                        $('.rchr-notify-overlay').fadeOut(400);
44                }
45        };
46
47        Notify.prototype = {
48                show: function() {
49
50                        var self = this;
51
52                        if(window.oldIE) {
53                                self.$note.show();
54                                if(!self.options.permanent) {
55                                        setTimeout(function() { self.close(); }, self.options.time);
56                                }
57
58                                self.options.onShow.call(self);
59                        } else {
60
61                                self.$note.slideDown(400, function() {
62
63                                        if(!self.options.permanent) {
64                                                setTimeout(function() { self.close(); }, self.options.time);
65                                        }
66
67                                        self.options.onShow.call(self);
68
69                                });
70                        }
71
72                },
73
74                close: function() {
75                        if(window.oldIE) {
76                                this.$note.hide();
77                        } else {
78                                this.$note.slideUp(400, $.proxy(Notify.onClose, this));
79                        }
80                }
81        };
82
83        $.fn.notify = function(options) {
84                return this.each(function() { new Notify(this, options); });
85        };
86
87        $.fn.notify.defaults = {
88                text: '',
89                type: 'notice',
90                types: {
91                        notice: '',
92                        success: '',
93                        warning: '',
94                        error: ''
95                },
96                time: 10000,
97                maxNotes: 5,
98                modal: false,
99                permanent: false,
100                closeAble: true,
101                closePrevious: false,
102                onShow: function() {},
103                onClose: function() {},
104                target: 'body'
105        };
106
107        $.notify = {
108                setup: function(options) {
109
110                        options = $.extend(false, $.fn.notify.defaults, options);
111                        if(!this.notifyContainer) {
112                                this.notifyContainer = $('<div></div>').addClass('rchr-notify-top rchr-notify').prependTo(options.target)
113                        }
114                },
115
116                show: function(options) {
117                        options  = $.extend(false, $.fn.notify.defaults, options);
118                        this.notifyContainer.notify(options);
119
120                },
121
122                showSuccess: function(text) {
123
124                        this.show({
125                                text: text,
126                                type: 'success'
127                        });
128
129                },
130
131                showNotice: function(text) {
132
133                        this.show({
134                                text: text,
135                                type: 'notice'
136                        });
137
138                },
139
140                showWarning: function(text) {
141
142                        this.show({
143                                text: text,
144                                type: 'warning'
145                        });
146
147                },
148
149                showError: function(text) {
150
151                        this.show({
152                                text: text,
153                                type: 'error'
154                        });
155
156                },
157
158                checkMessages: function(xhr) {
159
160                        try {
161                                if(xhr != null) {
162
163                                        var notifyJson = xhr.getResponseHeader('Notify-Messages');
164
165                                        if(notifyJson != null) {
166                                                $.each($.parseJSON(notifyJson), function(i, params) { $.notify.show(params) });
167                                        }
168
169                                } else {
170
171                                        var notifyMsgs = $('.rchr-notify-messages').data('messages');
172
173                                        if(typeof notifyMsgs != 'undefined') {
174                                                $.each(notifyMsgs, function(i, params) { $.notify.show(params) });
175                                        }
176
177                                }
178
179                        } catch(e) {}
180
181                }
182
183        };
184
185})(window.jQuery);
186
187jQuery( document ).ready( function( $ ) {
188        jQuery.notify.setup();
189
190        jQuery.notify.checkMessages();
191})
192/* NOTIFY END */
193
194/* RCHR ONE CLICK REGISTRATION START */
195jQuery.fn.serializeObject = function() {
196    var o = {};
197    var a = this.serializeArray();
198    jQuery.each( a, function() {
199        if ( o[this.name] !== undefined ) {
200            if ( ! o[this.name].push ) {
201                o[this.name] = [o[this.name]];
202            }
203            o[this.name].push(this.value || '');
204        } else {
205            o[this.name] = this.value || '';
206        }
207    });
208    return o;
209};
210
211function findAncestorByTagName (el, elType) {
212    elType = elType.toUpperCase();
213    while (el.tagName != elType) {
214            el = el.parentElement;
215    }
216    return el;
217}
218
219var validateDomain = function( domainName ) {
220
221    var rs = {},
222        re = /^([A-Za-z0-9])+[A-Za-z0-9-]*([A-Za-z0-9]){2,63}$/;
223
224    if ( domainName.length < 1 ) {
225
226        rs = {
227            hasError: true,
228            cssclass: 'has-error',
229            msg: errorMsg.domainNameEmpty
230        };
231
232    } else if ( domainName.length < 3 || domainName.length > 63 ) {
233
234        rs = {
235            hasError: true,
236            cssclass: 'has-error',
237            msg: errorMsg.domainNameTooShort
238        };
239
240    } else if ( domainName[0] === '-' || domainName[domainName.length - 1] === '-' ) {
241
242        rs = {
243            hasError: true,
244            cssclass: 'has-error',
245            msg: errorMsg.domainNameWithHyphen
246        };
247
248    } else if ( re.test( domainName ) === false ) {
249
250        rs = {
251            hasError: true,
252            cssclass: 'has-error',
253            msg: errorMsg.domainNameInvalidChars
254        };
255
256    } else {
257
258        rs = {
259            hasError: false,
260            cssclass: 'has-success',
261            msg: null
262        };
263
264    }
265
266    return rs;
267};
268
269function onloadCallback() {
270    if(document.getElementById('rchp-one-click-registration-submit')) {
271        var captcha = grecaptcha.render('rchp-one-click-registration-submit', {
272
273            'sitekey' : reCaptcha.siteKey,
274            'callback' : function(token) {
275
276                var loadingEl = document.getElementById('loading-element');
277
278                loadingEl.style.display = 'block';
279
280                window.quickSearch(
281                    {
282                        'action': 'rchr_one_click_registration',
283                        'step': 'checkrecaptchaguess',
284                        'userGuess': token,
285
286                    },
287                    function( data ) {
288
289                        var rs = JSON.parse( data );
290                        var errorsWrapper = document.getElementsByClassName('registration-msg')[0];
291
292                        loadingEl.style.display = 'none';
293
294                        successInput = document.createElement('input');
295                        successInput.setAttribute( 'type', 'hidden' );
296                        successInput.setAttribute( 'name', 'reCaptchaResult' );
297                        successInput.setAttribute( 'value', 1 );
298
299                        var wrapObj = document.getElementsByClassName( 'register-wrapper' )[0];
300                        wrapObj.appendChild( successInput );
301
302                        jQuery(findAncestorByTagName(wrapObj, 'form')).trigger('submit');
303                    }
304                );
305
306            }
307        } );
308    }
309};
310
311window.quickSearch = ( function() {
312
313    var timer = 0,
314    oldParams = '',
315    xhr = null;
316
317    return function ( params, callback ) {
318
319        if ( params == oldParams ) {
320            return;
321        } else {
322            oldParams = params;
323        }
324
325        clearTimeout( timer );
326
327        timer = setTimeout( function() {
328
329            xhr = jQuery.ajax({
330                type: 'POST',
331                url: ajax_object.handler_url,
332                data: params,
333                async: true,
334                success: function( rs ) {
335                    callback( rs );
336                    return;
337                }
338            });
339
340        }, 200);
341
342    };
343
344})();
345
346jQuery( document ).ready( function( $ ) {
347
348    // Reset form fields
349    if( $( '.rchr-one-click-registration-form form').length > 0 ) {
350
351        $( '.rchr-one-click-registration-form form')[0].reset();
352        $( '#rchr-one-click-domain').val('');
353
354    }
355
356    $( '.rchr-one-click-check-domain input' ).on( 'keyup', function() {
357
358        var $input, $errors, target, rs;
359
360        $input = $( this );
361        $errors = $( '.rchr-one-click-check-domain').find( '.domain-msg' );
362        target = $input.parent('.input-group');
363
364        // Validate user input for domain name
365        rs = validateDomain( $input.val() );
366
367        $errors.removeClass('error').text( '' );
368        target.removeClass('has-error').removeClass('has-success').addClass(rs.cssclass);
369
370        if ( typeof rs.msg === 'string' ) {
371            $errors.addClass('error').text( rs.msg );
372        }
373
374    } );
375
376    $( '#rchr-one-click-domain, .rchr-one-click-registration-form input' ).on( 'keypress', function(e) {
377
378            if ( e.keyCode === 13 ) {
379                $( this ).parent().parent().find( 'button' ).trigger( 'click' );
380            }
381
382    } );
383
384    $( '#rchr-one-click-check-availability' ).on( 'click', function(e) {
385
386            e.preventDefault();
387
388            var $checkDomainBtn = $( this ),
389                $usrDomainWrapper =  $checkDomainBtn.closest('div'),
390                $inputGroup = $usrDomainWrapper.find('.input-group'),
391                usrDomainInput = $usrDomainWrapper.find('#rchr-one-click-domain').val(),
392                $loading = $usrDomainWrapper.find('.loading'),
393                $errorHolder = $usrDomainWrapper.find('.domain-msg'),
394                rs, idString, objToSend = {};
395
396            $errorHolder.text('');
397
398            // check if user input can be a valid domain
399            rs = validateDomain( usrDomainInput );
400
401            // Check if hasError make an ajax request to handle the messages properly
402            if ( !rs.hasError ) {
403
404                    objToSend.step       = 'checkdomainavailability';
405                    objToSend.action     = 'rchr_one_click_registration';
406                    objToSend.domainName = usrDomainInput;
407
408                    $checkDomainBtn.hide();
409                    $loading.show();
410
411                    // make ajax request to check if the domain is available
412                    window.quickSearch( objToSend, function( rs ) {
413
414                        var response = JSON.parse( rs );
415
416                        if( 1 === parseInt( response.error ) ) {
417
418                            // display error in the specified error span provided
419                            $errorHolder.addClass('error').text( response.msg );
420                            $inputGroup.removeClass('has-success').addClass('has-error');
421
422                        } else {
423
424                            $( '.rchr-one-click-registration-form form' ).data('domainName', usrDomainInput);
425
426                            // display message in the specified span provided
427                            $( '.rchr-one-click-registration-form h1' ).text( response.msg );
428
429                            idString = $usrDomainWrapper.attr( 'id').replace( 'domain-search', 'registration' );
430
431                            $usrDomainWrapper.hide( 'slow' );
432
433                            $( '.rchr-one-click-registration' ).show( 'slow', function() {
434                                //jQuery('html,body').animate({
435                                //  scrollTop: jQuery( '.et_pb_slide_description' ).offset().top
436                                //}, 600);
437                            });
438
439                        }
440
441                        $loading.hide();
442                        $checkDomainBtn.show();
443
444                    } );
445
446            } else {
447
448                    // display domain validation error
449                    $errorHolder.addClass('error').text( rs.msg );
450
451            }
452
453            $( '#check-another-domain').on( 'click', function(e) {
454
455                    e.preventDefault();
456
457                    $( '.rchr-one-click-registration' ).hide( 'slow' );
458                    $usrDomainWrapper.show( 'slow' );
459
460            } );
461
462    } );
463
464    $( '.rchr-one-click-registration-form form input' ).on( 'keyup', function() {
465
466            var $self = $(this),
467                rs,
468                $errors = $( '.rchr-one-click-registration-form .registration-msg'),
469                $regForm = $('.rchr-one-click-registration-form form'),
470                inputType = $self.attr( 'name' ),
471                nameTimer = 0,
472                emailTimer = 0,
473                passwordTimer = 0;
474
475            $self.closest('.input-group').removeClass('rchr-shake');
476
477            switch ( inputType ) {
478
479                case 'name':
480
481                    var name = $.trim( $self.val() ),
482                        nameRgx = /^([A-Za-z]+([- ]?[A-Za-z])*){4,32}$/;
483
484
485                    if ( 4 < name.length && 0 <= name.indexOf( ' ' ) ) {
486
487                        rs = {
488                            cssclass: 'has-success',
489                            msg: null
490                        };
491
492                        if( name.match( nameRgx ) ) {
493
494                            rs = {
495                                cssclass: 'has-success',
496                                msg: null
497                            };
498
499                        } else {
500                            rs = {
501                                cssclass: 'has-error',
502                                msg: errorMsg.nameInvalidChars
503                            };
504
505                        }
506
507                    } else {
508                        rs = {
509                            cssclass: 'has-error',
510                            msg: errorMsg.nameTooShort
511                        };
512
513                    }
514
515                    break;
516
517                case 'email':
518
519                    var re = /^([a-zA-Z0-9]+(([.])|([-])|([_]{0,2}))?)+[a-zA-Z0-9]*@(([a-zA-Z0-9]+([\-])?)+([a-zA-Z0-9]+)(\.)+){1,3}[a-zA-Z]{2,10}/;
520
521                    if ( re.test( $self.val() ) ) {
522
523                        rs = {
524                            cssclass: 'has-success',
525                            msg: null
526
527                        };
528
529                    } else {
530                        rs = {
531                            cssclass: 'has-error',
532                            msg: errorMsg.invalidEmail
533
534                        };
535
536                    }
537
538                    break;
539
540                case 'password':
541
542                    var password = $self.val();
543
544                    if(password.length < 1) {
545
546                        rs = {
547                            cssclass: 'has-error',
548                            msg: errorMsg.noPass
549
550                        };
551
552                        break;
553
554                    }
555
556                    var strong_regex = /^(?=.{10,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[_!@#%&\/(){}[\]=?+*^~\-.:,;]).*$/g;
557                    var medium_regex = /^(?=.{9,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$/g;
558                    var valid_regex = /^[A-Za-z0-9_!@#%&\/(){}[\]=?+*^~\-.:,;]{8,32}$/;
559                    var valid_characters = /^[A-Za-z0-9_!@#%&\/(){}[\]=?+*^~\-.:,;]*$/;
560
561                    if ( ! password.match( valid_characters ) ) {
562
563                        rs = {
564                            cssclass: 'has-error',
565                            msg: errorMsg.invalidPass
566
567                        };
568                        break;
569
570                    }
571
572                    if ( ! password.match( /\d/g ) ) {
573                        rs = {
574                            cssclass: 'has-error',
575                            msg: errorMsg.passNeedsNum
576
577                        };
578                        break;
579                    }
580
581                    if ( ! password.match( /[a-z]/ig ) ) {
582                        rs = {
583                            cssclass: 'has-error',
584                            msg: errorMsg.passNeedsLetter
585
586                        };
587                        break;
588                    }
589
590                    if ( password.length < 8 ) {
591                        rs = {
592                            cssclass: 'has-error',
593                            msg: errorMsg.passTooShort
594
595                        };
596                        break;
597                    }
598
599                    if ( password.length > 32 ) {
600                        rs = {
601                            cssclass: 'has-error',
602                            msg: errorMsg.passTooLong
603
604                        };
605                        break;
606                    }
607
608
609                    if ( password.match( strong_regex ) ) {
610                        rs = {
611                            cssclass: 'has-success',
612                            msg: null
613
614                        };
615                        break;
616                    }
617
618                    if ( password.match( medium_regex ) ) {
619                        rs = {
620                            cssclass: 'has-success',
621                            msg: null
622
623                        };
624                        break;
625                    }
626
627                    if ( password.match( valid_regex ) ) {
628
629                        rs = {
630                            cssclass: 'has-success',
631                            msg: null
632
633                        };
634                        break;
635                    }
636
637                    rs = {
638                            cssclass: 'has-error',
639                            msg:      errorMsg.invalidPass
640
641                    };
642                    break;
643
644            }
645
646            var target = $self.parent('.input-group');
647
648            $errors.removeClass('error').text( '' );
649            target.removeClass('has-error').removeClass('has-success').addClass(rs.cssclass);
650            $regForm.find('#err-msg-' + inputType).text( '' );
651
652            if ( rs.cssclass === 'has-error' && typeof rs.msg === 'string'  ) {
653                    $regForm.find('#err-msg-' + inputType).text(rs.msg);
654            }
655
656
657    } );
658
659    $( '.rchr-one-click-registration-form form' ).on( 'submit', function( e ) {
660
661        e.preventDefault();
662
663        var $form = $( this );
664
665        // check for empty fields
666        $form.find('.input-group').map( function(){
667
668            if( ! Boolean( $(this).children('input').val() ) ) {
669                $(this).addClass('has-error');
670                $(this).find( '.rchr-msg-wrappers').text( errorMsg.fillField );
671            }
672
673        });
674
675        var $inputsWithErrors = $form.find('.input-group').filter('.has-error');
676        $inputsWithErrors.map(function() {
677            return $(this).removeClass('rchr-shake');
678        });
679
680        var $register_loader = $( '#loading-element' );
681        var $errors = $( '.rchr-one-click-registration-form .registration-msg');
682        var $register_btn_wrapper = $( '.register-button-box .register-wrapper' );
683        var $checkAnotherDomain = $form.find( '#check-another-domain' );
684
685        // Check if the google reCaptcha site key is entered
686        if ( reCaptcha.isSiteKeyAvailable && reCaptcha.isSiteSecretAvailable ) {
687
688            if ( $( 'input[name=reCaptchaResult]').length === 0 ) {
689                $errors.addClass('error').text( errorMsg.reCaptchaNotSolved );
690                return;
691            }
692
693        }
694
695        // Check whether there are any errors in the input fields to prevent
696        // unnecessary server calls
697        if( $inputsWithErrors.length > 0 ) {
698            $.each($inputsWithErrors, function() { $(this).addClass('rchr-shake').width(); });
699            grecaptcha.reset();
700            return;
701        }
702
703        $errors.removeClass('error').text( '' );
704
705        var data = $form.serializeObject();
706
707        $register_loader.show();
708        $register_btn_wrapper.hide();
709        if ( $checkAnotherDomain !== undefined ) {
710            $checkAnotherDomain.hide();
711        }
712
713        data.step = 'registerfreeclient';
714
715        data.action = 'rchr_one_click_registration';
716
717        data.domainName = $form.data('domainName');
718
719        window.quickSearch( data, function( rs ) {
720
721            var response = JSON.parse( rs );
722
723            if( 1 === parseInt( response.error ) ) {
724
725                $errors.addClass('error').text( response.msg ).show();
726
727                $register_loader.hide();
728                $register_btn_wrapper.show();
729
730                if ( $checkAnotherDomain !== undefined ) {
731                    $checkAnotherDomain.show();
732                }
733                grecaptcha.reset();
734
735            } else {
736
737                // clear form fields
738                $form[0].reset();
739                $( '#rchr-one-click-domain').val('');
740
741                $( '.rchr-one-click-registration-form' ).parent().html( response.data );
742
743                $( 'button.rchr-one-click-registration-resend-mail' ).on( 'click', function( e ) {
744
745                    e.preventDefault();
746
747                    var $btn = $( this );
748                    var $resend_loader = $( '.rchr-one-click-registration-success .loading' );
749                    var $resend_status = $( '.rchr-one-click-registration-success .status' );
750
751                    var client_id = $(this).parent().data( 'client-id' );
752
753                    var data = {
754                        action: 'rchr_one_click_registration',
755                        step: 'resendactivation',
756                        client_id: client_id
757                    }
758
759                    $btn.hide();
760                    $resend_loader.show();
761                    $resend_status.hide();
762
763                    window.quickSearch( data, function( rs ) {
764
765                        var result = JSON.parse( rs );
766                        $btn.show();
767                        $resend_loader.hide();
768                        $resend_status.html( result.msg );
769                        $resend_status.show();
770                    });
771
772
773                } );
774
775            }
776
777        } );
778
779    } );
780
781} );
782
783/* RCHR ONE CLICK REGISTRATION END */
784
785/* FB LOGIN BUTTON START */
786// window.fbAsyncInit = function() {
787//         var $buttons = jQuery('.rchr-fb-login-button').prop('disabled', true).addClass('rchr-login-button-loading');
788//         FB.init({
789//                 appId: FBAppData.appId,
790//                 version: 'v2.9'
791//         });
792//         FB.getLoginStatus(function(response){
793//                 $buttons.removeAttr('disabled').removeClass('rchr-login-button-loading')
794//         });
795// }
796
797// jQuery(document).on('click', '.rchr-fb-login-button', function(e) {
798//         e.preventDefault();
799//         var $button = jQuery(this);
800//         try {
801//                 FB.login(function(response) {
802//                         if(response.authResponse) {
803//                                 $button.prop('disabled', true).addClass('rchr-login-button-loading');
804//                                 var $form = jQuery('<form method="POST" action="'+FBAppData.authUrl+'">'+
805//                                                       '<input type="hidden" name="rchr_social_network_access_token" value="'+response.authResponse.accessToken+'">'+
806//                                                       '<input type="hidden" name="rchr_social_network_type" value="fb">'+
807//                                                       '<input type="hidden" name="action" value="rchr_one_click_registration">'+
808//                                                       '<input type="hidden" name="step" value="registerfreeclientsocial">'+
809//                                               '</form>');
810//                                 $form.appendTo('body');
811//                                 jQuery.ajax({
812//                                         url: $form.attr('action'),
813//                                         dataType: 'html',
814//                                         type: $form.attr('method'),
815//                                         data: $form.serialize(),
816//                                         success: function(json) {
817//                                                 try {
818//                                                         json = JSON.parse(json);
819//                                                         if(json.error) {
820//                                                                 jQuery.notify.showError(json.msg)
821//                                                         } else {
822//                                                                 jQuery.notify.showSuccess(json.msg);
823//                                                                 window.location.href = json.redirect;
824//                                                         }
825//                                                 } catch(e) {
826//                                                         jQuery.notify.showError('Network Error');
827//                                                 }
828//                                         },
829//                                         complete: function() { $button.removeAttr('disabled').removeClass('rchr-login-button-loading') }
830//                                 });
831//                                 $form.remove();
832//                         }
833//                         },
834//                         {scope: 'email,public_profile'}
835//                 );
836//         } catch (err) {
837//                 jQuery.notify.showError(err)
838//         }
839// });
840/* FB LOGIN BUTTON END */
841
842/* GPLUS LOGIN BUTTON START */
843// jQuery(document).ready(function() {
844//         window.rchrGPlusSigninCallback = function(response) {
845//                 if(response.access_token && response.status.signed_in) {
846//                         var $buttons = jQuery('.rchr-gplus-login-button').prop('disabled', true).addClass('rchr-login-button-loading');
847//                         var $form = jQuery('<form method="POST" action="'+GPlusAppData.authUrl+'">'+
848//                                               '<input type="hidden" name="rchr_social_network_access_token" value="'+response.access_token+'">'+
849//                                               '<input type="hidden" name="rchr_social_network_type" value="gplus">'+
850//                                               '<input type="hidden" name="action" value="rchr_one_click_registration">'+
851//                                               '<input type="hidden" name="step" value="registerfreeclientsocial">'+
852//                                       '</form>');
853//                         $form.appendTo('body');
854//                         jQuery.ajax({
855//                                 url: $form.attr('action'),
856//                                 dataType: 'html',
857//                                 type: $form.attr('method'),
858//                                 data: $form.serialize(),
859//                                 success: function(json) {
860//                                         try {
861//                                                 json = JSON.parse(json);
862//                                                 if(json.error) {
863//                                                         jQuery.notify.showError(json.msg)
864//                                                 } else {
865//                                                         jQuery.notify.showSuccess(json.msg);
866//                                                         window.location.href = json.redirect;
867//                                                 }
868//                                         } catch(e) {
869//                                                 jQuery.notify.showError('Network Error');
870//                                         }
871//                                 },
872//                                 complete: function() { $buttons.removeAttr('disabled').removeClass('rchr-login-button-loading') }
873//                         });
874//                         $form.remove();
875//                 }
876//         }
877// })
878
879// jQuery(document).on('click', '.rchr-gplus-login-button', function(e) {
880//         e.preventDefault();
881//         try {
882//                 gapi.auth.signIn({
883//                         clientid: GPlusAppData.clientId,
884//                         cookiepolicy : 'single_host_origin',
885//                         callback : 'rchrGPlusSigninCallback',
886//                         scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile',
887//                         prompt: 'select_account'
888//                 })
889//         } catch (err){
890//                 jQuery.notify.showError(err)
891//         }
892// })
893/* GPLUS LOGIN BUTTON END */

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.