PageSourceSearch

https://myiphider.com/application/default/views/public/js/user.js

js myiphider.com collected 2026-10-01 15:25:59 UTC 13,119 bytes, 345 lines download raw bytes

1/////
2// make form act as ajax login form
3// it will just submit form to aMember's login url
4// and handle login response
5// options -
6// success: callback to be called on succes
7//    by default - redirect or page reload
8// failure: callback to be called on failure
9//    by default - display error to $("ul.errors")
10/////
11function amAjaxLoginForm(selector, options)
12{
13    if (typeof options == 'function') {
14            options = {success: options};
15    }
16    options = jQuery.extend(true, {
17        success: function(response, frm) {
18            if (response.url) window.location = response.url;
19            else if (response.reload) window.location.reload(true);
20        },
21        error: function(response, frm) {
22            var errUl = jQuery("ul.errors.am-login-errors");
23            if (!errUl.length)
24                frm.before(errUl = jQuery("<ul class='errors am-login-errors'></ul>"));
25            else
26                errUl.empty();
27            for (var i=0;i<response.error.length;i++)
28                errUl.append("<li>"+response.error[i]+"</li>");
29            errUl.fadeTo('slow', 0.1).fadeTo('slow', 1.0);
30            // show recaptcha if enabled
31            if (response.recaptcha_key)
32            {
33                jQuery("#recaptcha-row").show();
34
35                if (typeof grecaptcha == "undefined")
36                {
37                    window.onLoadGrecaptcha = function(){
38                        frm.data('recaptcha', grecaptcha.render('recaptcha-element', {
39                            sitekey: response.recaptcha_key,
40                            theme: jQuery("#recaptcha-row").data('recaptcha-theme')
41                        }));
42                    }
43                    jQuery.getScript('//www.google.com/recaptcha/api.js?onload=onLoadGrecaptcha&render=explicit');
44                } else {
45                    if (typeof(frm.data('recaptcha')) == 'undefined') {
46                        frm.data('recaptcha', grecaptcha.render('recaptcha-element', {
47                            sitekey: response.recaptcha_key,
48                            theme: jQuery("#recaptcha-row").data('recaptcha-theme')
49                        }));
50                    } else {
51                        grecaptcha.reset(frm.data('recaptcha'));
52                    }
53                }
54            } else {
55                jQuery("#recaptcha-row").hide();
56            }
57        }
58    }, options);
59    jQuery(document).off("click.ajax-login", selector + ' [type=submit]');
60    jQuery(document).on("click.ajax-login", selector + ' [type=submit]', function(){
61        var frm = jQuery(this).closest('form');
62        var formData = frm.serializeArray();
63        formData.push({ name: this.name, value: this.value });
64        jQuery.post(frm.attr("action"), formData, function(response, status, request){
65            if ((request.status != '200') && (request.status != 200))
66                response = {ok: false, error: ["ajax request error: " + request.status + ': ' + request.statusText ]};
67            if (!response)
68                response = {ok: false, error: ["ajax request error: empty response"]};
69            if (!response || !response.ok)
70            {
71                if (response.code == -8) {
72                    var p = frm.parent().empty().append(response.html);
73                    frm = p.find('form');
74                } else {
75                    if (!response.error) response.error = ["Login failed"];
76                    options.error(response, frm);
77                }
78            } else {
79                options.success(response, frm);
80            }
81        });
82        return false;
83    });
84}
85
86/////
87// make form act as ajax login form
88// it will just submit form to aMember's login url
89// and handle login response
90// options -
91// success: callback to be called on succes
92//    by default - redirect or page reload
93// failure: callback to be called on failure
94//    by default - display error to jQuery("ul.errors")
95/////
96function amAjaxSendPassForm(selector, options)
97{
98    if (typeof options == 'function') {
99            options = {success: options};
100    }
101    options = jQuery.extend(true, {
102        successContainer: jQuery("success", this),
103        success: function(response, frm) {
104            if (response.url) window.location = response.url;
105            else if (response.reload) window.location.reload(true);
106            else {
107                if (!options.successContainer.length)
108                {
109                    frm.before(options.successContainer = jQuery('<div class="am-info"></div>'));
110                }
111                jQuery("ul.errors.am-sendpass-errors").remove();
112                options.successContainer.html(response.error[0]);
113                jQuery(":submit", frm).prop("disabled", "disabled");
114            }
115        },
116        error: function(response, frm) {
117            var errUl = jQuery("ul.errors.am-sendpass-errors");
118            if (!errUl.length)
119                frm.before(errUl = jQuery("<ul class='errors am-sendpass-errors'></ul>"));
120            else
121                errUl.empty();
122            for (var i=0;i<response.error.length;i++)
123                errUl.append("<li>"+response.error[i]+"</li>");
124            errUl.fadeTo('slow', 0.1).fadeTo('slow', 1.0);
125        }
126    }, options);
127    jQuery(document).off("submit.ajax-send-pass", selector);
128    jQuery(document).on("submit.ajax-send-pass", selector, function(){
129        var frm = jQuery(this);
130        jQuery.post(frm.attr("action"), frm.serialize(), function(response, status, request){
131            if ((request.status != '200') && (request.status != 200))
132                response = {ok: false, error: ["ajax request error: " + request.status + ': ' + request.statusText ]};
133            if (!response)
134                response = {ok: false, error: ["ajax request error: empty response"]};
135            if (!response || !response.ok)
136            {
137                if (!response.error) response.error = ["Error while e-mailing lost password"];
138                options.error(response, frm);
139            } else {
140                options.success(response, frm);
141            }
142        });
143        return false;
144    });
145}
146
147function amFlashError(msg){
148    return amFlash(msg, 'error', 5000);
149}
150function amFlashMessage(msg){
151    return amFlash(msg, 'message', 2000);
152}
153function amFlash(msg, msgClass, timeout)
154{
155    $('#am-flash .am-flash-content').empty().text(msg).
156        removeClass('am-flash-content-error am-flash-content-message').
157        addClass('am-flash-content-' + msgClass);
158    $('#am-flash').fadeIn();
159    if (timeout)
160        setTimeout(function(){
161            $('#am-flash').fadeOut();
162        }, timeout);
163}
164
165function ajaxLink(selector)
166{
167    jQuery(document).on('click', selector, function(){
168        var $link = jQuery(this);
169        jQuery("#ajax-link").remove();
170        jQuery.get(jQuery(this).attr('href'), {}, function(html){
171            var options = {};
172            if ($link.data('popup-width'))
173                options.width = $link.data('popup-width');
174            if ($link.data('popup-height'))
175                options.height = $link.data('popup-height');
176            if ($link.prop('title'))
177                options.title = $link.prop('title');
178            jQuery('body').append('<div id="ajax-link" style="display:none"></div>');
179            jQuery("#ajax-link").html(html).amPopup(options);
180        })
181        return false;
182    });
183}
184(function($){
185    // render a popup window for the element
186    if (!$.fn.amPopup) { // if not yet re-defined by theme
187        //recalculate popup position on resize event
188        $(window).resize(function(){
189            $('.am-popup').css({
190                left: $('body').width()/2 - $('.am-popup').outerWidth(false)/2
191            });
192        });
193        $.fn.amPopup = function(params){
194        return this.each(function(){
195            var options = params;
196            if (options == 'close')
197            {
198                $(".am-popup-close").first().click();
199                return;
200            }
201            // else do init
202            var options = $.extend({
203                width: null,
204                height: null,
205                title: '',
206                animation: 300,
207                onClose : function() {}
208            }, options);
209            var $this = $(this);
210            $("#mask").remove();
211
212            var $popup = $("\
213    <div class='am-popup am-common'>\
214        <div class='am-popup-header'>\
215            <a href='javascript:' class='am-popup-close-icon am-popup-close' />\
216            <div class='am-popup-title'>\
217            </div>\
218        </div>\
219        <div class='am-popup-content' />\
220    </div>");
221
222            var $parent = $this.wrap('<div><div>').parent();
223            $popup.find(".am-popup-title").empty().append(options.title);
224            if(options.width > $('body').width()) options.width = $('body').width();
225            options.width && $popup.css('width', options.width);
226            options.height && $popup.find(".am-popup-content").
227                    css('max-height', options.height).
228                    css('overflow-y', 'auto');
229            $popup.find(".am-popup-content").empty().append($(this).css('display', 'block'));
230
231            var _top = $(window).scrollTop() + 100;
232            $('body').append('<div id="mask"></div>').append($popup);
233            $popup.css({
234                top: _top - 50,
235                left: $('body').width()/2 - $popup.outerWidth(false)/2,
236                transition: 'top 0.5s ease'
237            });
238
239            $popup.fadeIn(options.animation);
240            $popup.css({
241                top: _top,
242            });
243            $popup.find(".am-popup-close").unbind('click.popup').bind('click.popup', function(){
244                $popup.css({top: _top - 50});
245                $popup.fadeOut(options.animation, function() {
246                    $parent.append($this.css('display', 'none'));
247                    $this.unwrap();
248                    $(this).closest('.am-popup').remove();
249                    $("#mask").remove();
250                    options.onClose.call();
251                });
252            });
253        });};
254    }
255
256    $.fn.amRevealPass = function() {
257        return $(this).each(function(){
258            if ($(this).data('am-reveal-pass-init')) return;
259            $(this).data('am-reveal-pass-init', true);
260
261            var $switch = $('<span class="am-switch-reveal am-switch-reveal-off" title="Toggle Password Visibility"></span>');
262            $(this).after($switch);
263            $switch.click(function(){
264                $(this).toggleClass('am-switch-reveal-on am-switch-reveal-off');
265                var $input = $(this).prev();
266                $input.attr('type', $input.attr('type') == 'text' ? 'password' : 'text');
267            });
268        })
269    };
270
271})(jQuery);
272
273jQuery(function($) {
274    // scroll to error message if any
275    var errors = $(".errors:visible:first,.error:visible:first");
276    if (errors.length)
277        $("html, body").scrollTop(Math.floor(errors.offset().top));
278
279    $('input.datepicker').datepicker({
280        defaultDate: window.uiDefaultDate,
281        dateFormat: window.uiDateFormat,
282        changeMonth: true,
283        changeYear: true,
284        yearRange:  'c-90:c+10'
285    });
286
287    $('.upload').upload();
288
289    amAjaxLoginForm(".am-login-form form");
290
291    amAjaxSendPassForm(".am-sendpass-form form");
292
293    // cancel form support hooks (member/payment-history)
294    $(document).on('click',".cancel-subscription", function(event){
295        event.stopPropagation();
296        var $div = $(".cancel-subscription-popup");
297        $div.amPopup({
298            width: 500,
299            title: $div.data('popup-title')
300        }).data('href', this.href);
301        return false;
302    });
303    $(document).on('click',"#cancel-subscription-yes", function(){
304        window.location.href = $(".cancel-subscription-popup").data('href');
305    });
306    // end of cancel form
307    // upgrade form
308    $(document).on('click',"a.upgrade-subscription", function(event){
309        event.stopPropagation();
310        var $div = $(".upgrade-subscription-popup-"+$(this).data('invoice_item_id'));
311        $div.amPopup({
312            width: 500,
313            title: $div.data('popup-title')
314        }).data('href', this.href);
315        return false;
316    });
317    // end of upgrade
318
319    ajaxLink(".ajax-link");
320
321    $('.am-pass-reveal').amRevealPass();
322    $(document).ajaxComplete(function(){
323        //allow ajax handler to do needed tasks before convert elements
324        setTimeout(function(){$('.am-pass-reveal').amRevealPass();}, 100);
325    })
326
327    $(document).on("click",".am-switch-forms", function(){
328        var el = $(this);
329        $(el.data('show_form')).show();
330        $(el.data('hide_form')).hide();
331    });
332    /// DEPRECATED, kept for compatiblity, handled by css .popup-close
333    $(document).on('click',"#cancel-subscription-no, .upgrade-subscription-no", function(){
334        if (!$(this).hasClass("am-popup-close")) {
335            $(".am-popup").amPopup("close");
336        }
337    });
338});
339
340function filterHtml(source)
341{
342    HTMLReg.disablePositioning = true;
343    HTMLReg.validateHTML = false;
344    return HTMLReg.parse(source);
345}

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.