PageSourceSearch

https://front-cafe.ru/components/com_uniform/assets/js/form.js

js front-cafe.ru collected 2026-10-05 18:25:45 UTC 146,335 bytes, 2,584 lines download raw bytes

1(function ($) {
2    $(function () {
3        var lang = null, forms = [], baseUrl = "";
4        $.initJSNForm = function (formname) {
5
6            var self = this;
7
8            if ($(formname).width() <= 480 && $(formname).width() > 0) {
9                $(formname).addClass("jsn-narrow");
10            }
11            $(".form-captcha").hide();
12
13            var sessionLifeTime = $(formname).find('input[name$=form_post_session_lifetime]').val();
14            var pathRoot = $(formname).find('input[name$=form_post_path_root]').val();
15            setInterval(function () {
16                JSNUFKeepSessionAlive(pathRoot)
17            }, parseFloat(sessionLifeTime));
18
19            //refresh captcha
20            $(formname).find(".jsn-refresh-captcha").click(function () {
21                var $this = $(this);
22                var token = $this.attr('data-token');
23                var namespace = $this.attr('data-namespace');
24                $.ajax({
25                    type: "GET",
26                    url: baseUrl + "/index.php?option=com_uniform&view=form&task=form.refreshCaptcha&namespace=" + namespace + '&' + token + '=1',
27                    success: function (src) {
28                        $this.parent().find('img.jsn-captcha-image').attr('src', src);
29                        return;
30                    }
31                });
32            });
33
34            function calculateTotal() {
35                var number = 0,
36                    checkboxes = 0,
37                    dropdown = 0,
38                    list = 0,
39                    choices = 0,
40                    moneyPayment = 0;
41
42                var numberElements = $(formname).find("input.number"),
43                    numberDecimal = $(formname).find("input.number-decimal");
44                numberElements.each(function () {
45                    if (!$(this).closest('.control-group').hasClass('hide') || $(this).closest('.control-group').hasClass('useField')) {
46                        if ($(this).hasClass('payment-active')) {
47                            if ($(this).val() == '') {
48                                if (numberDecimal) {
49                                    number += parseFloat(0 + '.' + numberDecimal.val());
50                                }
51                                else {
52                                    number += 0;
53                                }
54                            }
55                            else {
56                                if (numberDecimal) {
57                                    number += parseFloat($(this).val() + '.' + numberDecimal.val());
58                                }
59                                else {
60                                    number += parseFloat($(this).val());
61                                }
62                            }
63                        }
64                    }
65                });
66
67                var currencyElement = $(formname).find("input.input-medium.currency");
68                var currency = 0;
69                currencyElement.each(function () {
70                    if (!$(this).closest('.control-group').hasClass('hide') || $(this).closest('.control-group').hasClass('useField')) {
71                        if ($(this).hasClass('payment-active')) {
72                            if ($(this).val() == '') {
73                                currency += 0;
74                            }
75                            else {
76                                currency += parseFloat($(this).val());
77                            }
78                        }
79                    }
80                });
81
82                var currencyCent = $(formname).find(".currency-cents input.input-mini.currency");
83                var cents = 0;
84                currencyCent.each(function () {
85                    if (!$(this).closest('.control-group').hasClass('hide') || $(this).closest('.control-group').hasClass('useField')) {
86                        if ($(this).hasClass('payment-active')) {
87                            if ($(this).val() == '') {
88                                cents += 0;
89                            }
90                            else {
91                                cents += parseFloat($(this).val());
92                            }
93                        }
94                    }
95                });
96                if (cents >= 100) {
97                    var hundred = (cents / 100), hundredUnit = (100 * hundred);
98                    cents = parseFloat(hundred + '.' + (cents - hundredUnit));
99                }
100                else {
101                    cents = parseFloat(0 + '.' + cents);
102                }
103                moneyPayment = parseFloat(currency + cents);
104
105                var checkboxesElements = $(formname).find("div.checkboxes");
106                checkboxesElements.each(function () {
107                    if (!$(this).closest('.control-group').hasClass('hide')) {
108                        if ($(this).hasClass('payment-active')) {
109                            $(this).find("input:checked").each(function () {
110                                if ($(this).prop('checked')) {
111                                    checkboxes += parseFloat($(this).attr('data-jsnUfPrice') * $(this).attr('data-jsnUfQty'));
112                                }
113                            });
114                        }
115                    }
116                });
117                var dropdownElements = $(formname).find("select.dropdown");
118
119                /*if ($("select.jsn-uf-select2-dropdown").length > 0) {
120
121                 $("select.jsn-uf-select2-dropdown").select2();
122                 $("select.jsn-uf-select2-dropdown").css({'position':'absolute'})
123                 }*/
124                dropdownElements.each(function () {
125                    if (!$(this).closest('.control-group').hasClass('hide')) {
126                        if ($(this).hasClass('payment-active')) {
127                            if (typeof $(this).find('option:selected').attr('data-jsnUfPrice') != 'undefined') {
128                                if ($(this).find('option:selected').attr('data-jsnUfPrice') == '') {
129                                    dropdown += 0;
130                                }
131                                else {
132                                    dropdown += parseFloat($(this).find('option:selected').attr('data-jsnUfPrice') * $(this).find('option:selected').attr('data-jsnUfQty'));
133                                }
134                            }
135                        }
136                    }
137                });
138                var choicesElements = $(formname).find("div.choices");
139                choicesElements.each(function () {
140                    if (!$(this).closest('.control-group').hasClass('hide')) {
141                        if ($(this).hasClass('payment-active')) {
142                            $(this).find('input:checked').each(function () {
143                                choices += parseFloat($(this).attr('data-jsnUfPrice') * $(this).attr('data-jsnUfQty'));
144                            });
145                        }
146                        else {
147                            choices += 0;
148                        }
149                    }
150                });
151                var listElements = $(formname).find("select.list");
152                listElements.each(function () {
153                    if (!$(this).closest('.control-group').hasClass('hide')) {
154                        if ($(this).hasClass('payment-active')) {
155                            $(this).find('option:selected').each(function () {
156                                list += parseFloat($(this).attr('data-jsnUfPrice') * $(this).attr('data-jsnUfQty'));
157                            });
158                        }
159                    }
160                });
161                var total = [number, moneyPayment, choices, checkboxes, dropdown, list].reduce(function (previousValue, currentValue, index, array) {
162                    return previousValue + currentValue;
163                });
164
165                $(formname).find(".form-payments .total-money").text(total.toFixed(2));
166                $(formname).find(".form-payments .payment-total-money input#jform_form_payment_money_value").val(total.toFixed(2));
167            }
168
169            function formActionField() {
170                var id = [];
171                var fieldId = [];
172                $(formname).find('.control-group').each(function () {
173                    if ($(this).hasClass('hide')) {
174                    }
175                    else {
176                        fieldId = $(this).attr('data-id');
177                        fieldId = parseFloat(fieldId);
178                    }
179                    if ($.isNumeric(fieldId)) {
180                        id.push(fieldId);
181                    }
182
183                });
184                var val = $.toJSON(id);
185                $(formname).find('input#list_choosen_field').val(val.toString())
186            }
187
188            if ($('.jsn-uniform .icon-question-sign').length) {
189                $('.jsn-uniform .icon-question-sign').tipsy({
190                    gravity: 'w',
191                    fade: true
192                });
193            }
194            $(formname).find('input,button.btn,textarea,select').focus(function () {
195                var form = $(this).parents('form:first');
196                $(form).find(".ui-state-highlight").removeClass("ui-state-highlight");
197                $(this).parents(".control-group").addClass("ui-state-highlight");
198                self.captcha(form);
199            }).click(function (e) {
200                var form = $(this).parents('form:first');
201                $(form).find(".ui-state-highlight").removeClass("ui-state-highlight");
202                $(this).parents(".control-group").addClass("ui-state-highlight");
203                e.stopPropagation();
204            });
205            $(formname).find("input").keypress(function (e) {
206                if (e.which == 13 && $(".jsn-modal-overlay").size() < 1) {
207                    if ($(formname).find("button.next").hasClass("hide")) {
208                        $(formname).find("button.jsn-form-submit").click();
209                    } else {
210                        $(formname).find("button.next").click();
211                    }
212                    return false;
213                }
214            });
215            $(formname).find(" .form-actions .jsn-form-submit").click(function () {
216                $('.jsn-uniform-others').each(function () {
217                    $(this).find('.jsn-value-Others').each(function () {
218                        $(this).removeAttr('disabled');
219                    })
220                })
221                $(formname).submit();
222                return false;
223            });
224
225            $(document).click(function () {
226                $(".ui-state-highlight").removeClass("ui-state-highlight");
227            });
228            var formDefaultCaptcha = $('.form-captcha')[0];
229            
230            //if ($(formDefaultCaptcha).size()) {
231                //$($(formDefaultCaptcha).parents('form:first').find("input,textarea,select")[0]).focus();
232            //}
233            var randomizeListGroups = $(formname).find('select.list');
234            randomizeListGroups.each(function () {
235                if ($(this).hasClass("list-randomize")) {
236                    self.randomValueItems(this);
237                }
238            });
239            var randomizeDropdownGroups = $(formname).find('select.dropdown');
240            randomizeDropdownGroups.each(function () {
241                var selfDropdown = this;
242                if ($(this).hasClass("dropdown-randomize")) {
243                    self.randomValueItems(this);
244                    $(this).find("option").each(function () {
245                        if ($(this).attr("data-selectdefault") == "true") {
246                            $(this).prop("selected", true);
247                        }
248                    });
249                    $(this).css({'position': 'inherit'})
250                }
251                $(this).change(function () {
252                    if ($(this).val() == "Others" || $(this).val() == "others") {
253                        $(selfDropdown).parent().find("textarea.jsn-dropdown-Others").removeClass("hide");
254                    } else {
255                        $(selfDropdown).parent().find("textarea.jsn-dropdown-Others").addClass("hide");
256                    }
257                });
258            });
259            var randomizeChoiceGroups = $(formname).find('div.choices');
260            randomizeChoiceGroups.each(function () {
261                var selfChoices = this;
262                if ($(this).hasClass("choices-randomize")) {
263                    self.randomValueItems(this);
264                }
265                $(this).find("input[type=radio]").click(function () {
266                    if ($(this).val() == "Others" || $(this).val() == "others") {
267                        $(selfChoices).find("textarea.jsn-value-Others").removeAttr("disabled");
268                    } else {
269                        $(selfChoices).find("textarea.jsn-value-Others").attr("disabled", "true");
270                    }
271                });
272            });
273            var randomizeCheckboxGroups = $(formname).find('div.checkboxes');
274            randomizeCheckboxGroups.each(function () {
275                var selfChexbox = this;
276                if ($(this).hasClass("checkbox-randomize")) {
277                    self.randomValueItems(this);
278                }
279                $(this).find(".lbl-allowOther input[type=checkbox]").click(function () {
280
281
282                    if ($(this).is(':checked')) {
283                        $(selfChexbox).find("textarea.jsn-value-Others").removeAttr("disabled");
284                    } else {
285                        $(selfChexbox).find("textarea.jsn-value-Others").attr("disabled", "true");
286                    }
287                });
288            });
289            $(formname).find("input.number,input.phone,input.currency").each(function () {
290                $(this).keypress(function (e) {
291                    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
292                        return false;
293                    }
294                });
295                $(this).attr('onpaste', 'return false');
296            });
297
298            $(formname).find("input.number").change(calculateTotal);
299            $(formname).find("input.currency").change(calculateTotal);
300            $(formname).find("select.dropdown").change(calculateTotal);
301            $(formname).find("select.list").change(calculateTotal);
302            $(formname).find("div.checkboxes").change(calculateTotal);
303            $(formname).find("div.choices").change(calculateTotal);
304            $(formname).find("input.number").trigger("change");
305
306            $(formname).find("div.choices .jsn-column-item input").each(function () {
307
308                if ($(this).is(':checked')) {
309                    var idField = $(this).parents(".jsn-columns-container").attr("id");
310                    $(formname).find("div.control-group." + idField).removeAttr("style");
311                    self.getActionField(formname, $(this), idField);
312                }
313                formActionField();
314            });
315
316            $(formname).find("div.choices .jsn-column-item input").change(function () {
317
318                if ($(this).is(':checked')) {
319                    var idField = $(this).parents(".jsn-columns-container").attr("id");
320                    $(formname).find("div.control-group." + idField).removeAttr("style");
321                    self.getActionField(formname, $(this), idField);
322                }
323                formActionField();
324                self.removeRedundantMarginLeft(formname);
325            });
326
327            $(formname).find("div.checkboxes .jsn-column-item input").each(function () {
328                var idField = $(this).parents(".jsn-columns-container").attr("id");
329                var litmiChoises = $(this).parents(".jsn-columns-container").attr('data-limit')
330                var checkboxesInput = $(formname).find("div.checkboxes#" + idField + " .jsn-column-item input");
331                var countChecked = $(formname).find("div.checkboxes#" + idField + " .jsn-column-item input:checked");
332                if (litmiChoises > 0) {
333                    if (countChecked.length >= litmiChoises) {
334                        $(checkboxesInput).attr("disabled", "disabled");
335                        $(countChecked).removeAttr("disabled");
336                    }
337                    else {
338                        $(checkboxesInput).removeAttr("disabled");
339                    }
340                }
341                $(formname).find("div.control-group." + idField).removeAttr("style");
342                $(this).parents(".jsn-columns-container").find("input").each(function () {
343
344                    if ($(this).is(':checked')) {
345                        self.getActionFieldCheckboxes(formname, $(this), idField);
346                    }
347                    if (!$(this).is(':checked')) {
348                        self.getActionCheckboxesUnchecked(formname, $(this), idField);
349                    }
350                });
351                formActionField();
352            });
353
354            $(formname).find("div.checkboxes .jsn-column-item input").change(function () {
355                var idField = $(this).parents(".jsn-columns-container").attr("id");
356                var litmiChoises = $(this).parents(".jsn-columns-container").attr('data-limit')
357                var checkboxesInput = $(formname).find("div.checkboxes#" + idField + " .jsn-column-item input");
358                var countChecked = $(formname).find("div.checkboxes#" + idField + " .jsn-column-item input:checked");
359                if (litmiChoises > 0) {
360                    if (countChecked.length >= litmiChoises) {
361                        $(checkboxesInput).attr("disabled", "disabled");
362                        $(countChecked).removeAttr("disabled");
363                    }
364                    else {
365                        $(checkboxesInput).removeAttr("disabled");
366                    }
367                }
368                $(formname).find("div.control-group." + idField).removeAttr("style");
369                $(this).parents(".jsn-columns-container").find("input").each(function () {
370
371                    if ($(this).is(':checked')) {
372                        self.getActionFieldCheckboxes(formname, $(this), idField);
373                    }
374                    if (!$(this).is(':checked')) {
375                        self.getActionCheckboxesUnchecked(formname, $(this), idField);
376                    }
377                });
378                formActionField();
379                self.removeRedundantMarginLeft(formname);
380            });
381
382            $(formname).find("select.dropdown").each(function () {
383                var idField = $(this).attr("id");
384                $(formname).find("div.control-group." + idField).removeAttr("style");
385                self.getActionField(formname, $(this), idField);
386                formActionField();
387            });
388
389            if ($("select.jsn-uf-select2-dropdown").length > 0) {
390
391                $("select.jsn-uf-select2-dropdown").select2();
392                $("select.jsn-uf-select2-dropdown").css({'position': 'absolute'})
393            }
394
395            $(formname).find("select.dropdown").change(function () {
396                var idField = $(this).attr("id");
397
398                $(formname).find("div.control-group." + idField).removeAttr("style");
399                self.getActionField(formname, $(this), idField);
400                formActionField();
401                self.removeRedundantMarginLeft(formname);
402            });
403
404            $(formname).find("select.list").change(function () {
405            });
406
407            $(formname).find("input.limit-required,textarea.limit-required").each(function () {
408                var fieldId = $(this).attr('id');
409                var settings = $(this).attr('data-limit');
410                var limitSettings = $.evalJSON(settings);
411                if (limitSettings.limitType == 'Characters') {
412                    var newClass = 'characters_' + fieldId;
413                    $(this).addClass('characters');
414                    $(this).after(
415                        $("<div/>", {"class": "characters-limit", "id": "characters-limit_" + fieldId}).append(
416                            $("<div/>", {"class": "pull-right"}).append(
417                                $("<span/>", {"class": newClass, "style": "font-weight:bold; color:#bbb"})
418                            )
419                        )
420                    )
421                }
422                else {
423                    var newClass = 'words_' + fieldId;
424                    $(this).addClass('words');
425                    $(this).after(
426                        $("<div/>", {"class": "words-limit", "id": "words-limit_" + fieldId}).append(
427                            $("<div/>", {"class": "pull-right"}).append(
428                                $("<span/>", {"class": newClass, "style": "font-weight:bold; color:#bbb"})
429                            )
430                        )
431                    )
432                }
433            });
434
435            $(formname).find("input.limit-required,textarea.limit-required").each(function () {
436                var settings = $(this).attr("data-limit");
437                var limitSettings = $.evalJSON(settings);
438                if (limitSettings) {
439                    $(this).keypress(function (e) {
440                    		
441                            if (e.which != 27 && e.which != 13 && e.which != 8  && e.which != 118) {
442                                if (limitSettings.limitType == "Characters") {
443                                    var maxLength = parseInt(limitSettings.limitMax, 10);
444                                    var lengthValue = $(this).val().length + 1;
445                                    var charLeft = maxLength - lengthValue;
446                                    if (charLeft >= 0) {
447                                        var msg = charLeft + ' ' + lang['JSN_UNIFORM_CHARACTERS_LEFT'];
448                                        var id = $(this).attr('id');
449                                        $('.characters_' + id).text(msg);
450                                    }
451                                    else {
452                                        return false;
453                                    }
454                                }
455                               
456                                if (limitSettings.limitType == "Words") {
457                                    var maxLength = parseInt(limitSettings.limitMax, 10);
458                                    
459                                    var lengthValue = $.trim($(this).val() + String.fromCharCode(e.which)).split(/[\s]+/);
460                                    var charLeft = maxLength - lengthValue.length;
461                                    
462                                    if (charLeft >= 0) {
463                                        var msg = charLeft + ' ' + lang['JSN_UNIFORM_WORDS_LEFT'];
464                                        var id = $(this).attr('id');
465                                        $('.words_' + id).text(msg);
466                                    }
467                                    else {
468                                        return false;
469                                    }
470                                }
471                            }
472                        }
473                    );
474
475                    try {
476                    	 if (limitSettings.limitType == "Words") {
477	                        $(this).bind('paste', function (e) {
478	                    		var tmpTextArea = $(this);
479	                    		setTimeout(function(){ tmpTextArea.val($.trim(tmpTextArea.val())); tmpTextArea.trigger('keypress') }, 100);
480	                        });
481                    	 }
482                    }
483                    catch(err) {
484                       
485                    }
486                }
487            });
488            $(formname).find("input,textarea,select").bind('change', function () {
489                self.checkValidateForm($(this).parents(".control-group"), "detailInput", $(this), "onchange");
490            });
491
492            function executeAjaxUploadFile(option)
493            {
494            	var iform = $("<form method='POST' enctype='multipart/form-data''></form>");
495                iform.ajaxForm(option);
496                iform.submit();
497            }
498
499           $(formname).submit(function () {
500
501                if ($(formname).find('.control-group').hasClass('useField') && $(formname).find('.control-group').hasClass('hide')) {
502                    $(formname).find('.control-group').removeClass('hide');
503                }
504
505                formActionField();
506
507                var inputFiles = $(formname).find('.input-file');
508                //Check if using ajax upload. Disable all input-file to don't send them
509                if ($(formname).attr('data-ajaxupload') != '0')
510                {
511                	var totalOfFileField = 0; 
512                	inputFiles.each(function (index, node)
513                    {
514                         if ($(this).val() != '')
515                         {
516                        	 totalOfFileField++;
517                         }
518                    });
519                	
520                	if (totalOfFileField > 0)
521                	{	
522                		inputFiles.prop('disabled', true);
523                	}
524             	
525                }
526
527                var $selectHide = $('.jsn-row-container.row-fluid').find(".control-group");
528                $selectHide.each(function () {
529                    if ($(this).css("display") === "none") {
530                        var dropdown = $(this).find(".dropdown-required");
531                        if (dropdown.length != '1') {
532                            $(this).find('select').each(function () {
533                                $(this).attr('disabled', 'disabled');
534                            })
535                        }
536                    }
537                })
538                if ($(formname).find('input[name$=use_payment_gateway]').val() == '0') {
539                    $(".jsn-modal-overlay,.jsn-modal-indicator").remove();
540                }
541                $(this).find(".help-block").remove();
542                var selfsubmit = this;
543                if (self.checkValidateForm($(this))) {
544                    $("body").append($("<div/>", {
545                        "class": "jsn-modal-overlay",
546                        "style": "z-index: 1000; display: inline;"
547                    })).append($("<div/>", {
548                        "class": "jsn-modal-indicator",
549                        "style": "display:block"
550                    })).addClass("jsn-loading-page");
551                    $("#jsn-form-target").remove();
552                    $(selfsubmit).find('.message-uniform').html("");
553                    var iframe = $('<iframe/>', {
554                        name: 'jsn-form-target',
555                        id: 'jsn-form-target'
556                    });
557                    iframe.appendTo($('body'));
558                    iframe.css({
559                        display: 'none'
560                    });
561                    var publickey = $(this).find(".form-captcha").attr("data-jnsUfpublickey");
562                    iframe.load(function () {
563                    	var inputFile =  $(formname).find('.input-file');
564                    	var formID = formname.find("input[name='form_id']").val();
565                        var message = iframe.contents().find("input[name$=message]").val();
566                        var error = iframe.contents().find("input[name$=error]").val();
567                        var redirect = iframe.contents().find("input[name$=redirect]").val();
568                        var use_payment_gateway = $(formname).find('input[name$=use_payment_gateway]').val();
569                    
570                        //Check if using ajax upload. Disable all input-file to don't send them
571                        
572                        if ($(formname).attr('data-ajaxupload') != '0' && typeof error === 'undefined' && inputFile.length)
573                        {
574                        	
575                            //Enable all input-file to send by ajax
576                            //Count total field file
577                           
578                            
579                        	inputFile.removeAttr('disabled', true);
580
581                            if (inputFile.length)
582                            {
583                                //Remove current progress bar
584                            	$(formname).find('.jsn-uf-progress-container').remove();
585
586                                var token = $(formname).attr("data-token");
587                                var done = 0;
588                                var totalFileField = 0;
589
590                                inputFile.each(function (index, node)
591                                {
592                                    if ($(this).val() != '')
593                                    {
594                                        totalFileField++;
595                                    }
596                                });
597                                
598                                
599                                var options = [];
600                                var findex 	= 0;
601                                inputFile.each(function (index, node)
602                                {
603                                    if ($(this).val() != '') {
604
605                                    	var isLast	= 'no';
606
607                                        //Create a new progress bar
608                                        $(this).parent().append('<div class="jsn-uf-progress-container progress" id="' + formname.attr('id') + '_' + node.id + '"><div class="progress-bar jsn-progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%;"></div></div>');
609                                        //Create new form, form data
610                                        var fdata = new FormData();
611                                       // fdata.append('form_id', formname.find("input[name='form_id']").val());
612                                        //Get files from input field
613                                        var fileSelect = document.getElementById(node.id);
614                                        var files = fileSelect.files;
615
616                                        //Error on IE, Edgle
617                                        //fdata.delete('files[]');
618
619                                        //Add field_id to form data
620                                        // fdata.append('field_id', $(this).attr('id'));
621
622
623                                        for (var i = 0; i < files.length; i++)
624                                        {
625                                            var file = files[i];
626                                            // Add the files to the form data.
627                                            // We can upload multiple file, but progress bar display not good
628                                            // Edit Model JSNUniformModelSubmission::uploadFile to allow this
629                                            fdata.append('files[]', file);
630                                        }
631
632                                        //Check if is last file
633                                        if (findex == totalFileField - 1)
634                                        {
635                                        	isLast = 'yes';
636                                        }
637
638                                        //Error on IE, Edgle
639                                        //fdata.delete('field_id');
640
641                                        options[findex] = ({
642                                            url: baseUrl + "/index.php?option=com_uniform&view=submission&task=form.uploadFile&" + token + "=1&index=" + findex + "&field_id=" + $(this).attr('id') + '&is_last=' + isLast + '&form_id=' + formID + '&rand=' + Math.random(),
643                                            type: 'POST',
644                                            formData: fdata,
645                                            dataType: 'JSON',
646                                            contentType: false,
647                                            processData: false,
648                                            beforeSubmit: function () {
649
650                                            },
651                                            uploadProgress: function (event, position, total, percentComplete) {
652                                                if (percentComplete == 100)
653                                                {
654                                                    percentComplete = 99;
655                                                }
656                                                var percentVal = percentComplete + '%';
657                                                $('#' + formname.attr("id") + '_' + node.id + ' .jsn-progress-bar').animate({width: percentVal}, 50).text(percentVal).attr('aria-valuenow', percentComplete);
658                                            },
659                                            success: function (data) {
660                                                done ++;
661                                                //Done, no error
662                                                $('#' + formname.attr("id") + '_' + node.id + ' .jsn-progress-bar').attr('aria-valuenow', 100).animate({width: '100%'}, 50);
663                                                if (data.status  == 'success')
664                                                {
665                                                    $('#' + formname.attr("id") + '_' + node.id + ' .jsn-progress-bar').text('100%');
666                                                    $('#' + formname.attr("id") + ' #' + node.id + '').attr('disabled', true);
667                                                    $('#' + formname.attr("id") + '_' + node.id + ' .jsn-progress-bar').addClass('jsn-progress-bar-success');
668                                                    // $('#' + formname.attr("id") + ' #' + node.id + '').val('');
669                                                    var next = data.index + 1;
670
671                                                    if (typeof options[next] != 'undefined')
672                                                    {
673                                                        executeAjaxUploadFile(options[next]);
674                                                    }
675                                                    else if (done == totalFileField)
676                                                    {
677                                                        afterSubmit();
678                                                    }
679                                                }
680                                                else
681                                                {
682                                                	$(formname).find('.jsn-uf-progress-container').remove();
683                                                	$('#' + formname.attr("id") + '_' + node.id + ' .jsn-progress-bar').removeClass('jsn-progress-bar-success').addClass('jsn-progress-bar-danger');
684                                                    $('#' + formname.attr("id") + ' #' + node.id + '').attr('disabled', false);
685                                                    $('#' + formname.attr("id") + ' .jsn-form-submit').attr('disabled', false);
686                                                    error = '{"'+d
686ata.field_id+'":"'+data.message+'"}';
687                                                    afterSubmit();
688                                                }
689                                            }
690                                        });
691                                        findex ++;
692                                    }
693                                });
694                            }
695
696                            if (totalFileField != 0)
697                        	{
698	                            //End Enable all input-file to send by ajax
699	                            executeAjaxUploadFile(options[0]);
700                        	}
701                            else
702                            {
703                            	afterSubmit();
704                            }	
705                        }
706                        else {
707                            afterSubmit();
708                        }
709
710                        function afterSubmit() {
711                            if (error) {
712                                error = $.evalJSON(error);
713                                self.callMessageError(formname, error);
714                                $(formname).find('.input-file').removeAttr('disabled', true);
715                                $(formname).find('.jsn-progress-bar').remove();
716                                $(formname).find('.input-file').removeAttr('disabled', true);
717                                $(".jsn-modal-overlay,.jsn-modal-indicator").remove();
718                            } else if (redirect && use_payment_gateway != '1') {
719                                window.location = redirect;
720                            } else if (message && use_payment_gateway != '1') {
721                                $.ajax({
722                                    type: "GET",
723                                    async: true,
724                                    encoding: "UTF-8",
725                                    scriptCharset: "utf-8",
726                                    cache: false,
727                                    contentType: "text/plain; charset=UTF-8",
728                                    url: baseUrl + "/index.php?option=com_uniform&view=form&task=form.getHtmlForm&tmpl=component&form_id=" + $(selfsubmit).find("input[name=form_id]").val(),
729                                    success: function (htmlForm) {
730                                        $(selfsubmit).find(".jsn-row-container").empty();
731                                        $(selfsubmit).find(".jsn-row-container").html(htmlForm);
732                                        if (message) {
733                                            $(selfsubmit).find('.message-uniform').html(
734                                                $("<div/>", {
735                                                    "class": "success-uniform alert alert-success clearfix"
736                                                }).append(
737                                                    $("<button/>", {
738                                                        "class": "close",
739                                                        "onclick": "return false;",
740                                                        "data-dismiss": "alert",
741                                                        text: "x"
742                                                    })).append(message));
743                                        }
744                                        self.initJSNForm(formname);
745                                        var messagesFocus = $(formname).find(".message-uniform")[0];
746                                        $(window).scrollTop($(messagesFocus).offset().top - 50);
747                                        $(".jsn-modal-overlay,.jsn-modal-indicator").remove();
748                                    }
749                                });
750
751                            } else {
752                                if (use_payment_gateway != '1') {
753                                    $.ajax({
754                                        type: "GET",
755                                        async: true,
756                                        cache: false,
757                                        encoding: "UTF-8",
758                                        scriptCharset: "utf-8",
759                                        contentType: "text/plain; charset=UTF-8",
760                                        url: baseUrl + "/index.php?option=com_uniform&view=form&task=form.getHtmlForm&tmpl=component&form_id=" + $(selfsubmit).find("input[name=form_id]").val(),
761                                        success: function (htmlForm) {
762                                            $(selfsubmit).find(".jsn-row-container").empty();
763                                            $(selfsubmit).find(".jsn-row-container").html(htmlForm);
764                                            self.initJSNForm(formname);
765                                            var messagesFocus = $(formname).find(".message-uniform")[0];
766                                            $(window).scrollTop($(messagesFocus).offset().top - 50);
767
768                                            if ($(formname).find('input[name$=use_payment_gateway]').val() == '0') {
769                                                $(".jsn-modal-overlay,.jsn-modal-indicator").remove();
770                                            }
771                                            //$(".jsn-modal-overlay,.jsn-modal-indicator").remove();
772                                        }
773                                    });
774                                }
775                            }
776                            var idcaptcha;
777                            var idcaptcha2;
778                            idcaptcha = $(selfsubmit).find(".form-captcha").attr("id");
779                            idcaptcha2 = $(selfsubmit).find(".g-recaptcha").attr("id");
780                            if (idcaptcha) {
781                                Recaptcha.destroy();
782                                Recaptcha.create(publickey, idcaptcha, {
783                                    theme: 'white',
784                                    tabindex: 0,
785                                    callback: function () {
786                                        $(selfsubmit).find(".form-captcha").removeClass("error");
787                                        $(selfsubmit).find(".form-captcha #recaptcha_area").addClass("controls");
788                                        $(selfsubmit).find("#recaptcha_response_field").keypress(function (e) {
789                                            if (e.which == 13) {
790                                                if ($(formname).find("button.next").hasClass("hide")) {
791                                                    $(formname).find("button.jsn-form-submit").click();
792                                                } else {
793                                                    $(formname).find("button.next").click();
794                                                }
795                                                return false;
796                                            }
797                                        });
798                                        if (error) {
799                                            if (error.captcha) {
800                                                $(selfsubmit).find(".form-captcha").addClass("error");
801                                                $(selfsubmit).find(".form-captcha #recaptcha_area").append(
802                                                    $("<span/>", {
803                                                        "class": "help-block"
804                                                    }).append(
805                                                        $("<span/>", {
806                                                            "class": "validation-result label label-important",
807                                                            text: error.captcha
808                                                        })));
809                                                $(selfsubmit).find("#recaptcha_response_field").focus();
810                                            }
811                                        }
812                                    }
813                                });
814                            }
815                            
816                            if (idcaptcha2) {
817                                //grecaptcha.reset()
818                                try {
819                                    if (grecaptcha.getResponse() == '') {
820                                        $(formname).find(".validation-result").remove();
821                                        $(selfsubmit).find(".g-recaptcha").addClass("error");
822                                        $(selfsubmit).find(".g-recaptcha").append(
823                                            $("<span/>", {
824                                                "class": "help-block"
825                                            }).append(
826                                                $("<span/>", {
827                                                    "class": "validation-result label label-important",
828                                                    text: error.captcha
829                                                })));
830                                    }
831                                    else
832                                    {
833                                    	grecaptcha.reset();
834                                    }
835                                }
836                                catch (err) {
837                                	
838                                	try {
839                                		//var rd = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10);
840                                		var rd = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
841                                		var oldCaptchaElement = $(formname).find('.g-recaptcha');
842
843                                		var newCaptchaElement = $( "<div id='" + rd + "' data-sitekey='" + oldCaptchaElement.attr('data-sitekey') + "' data-theme='" + oldCaptchaElement.attr('data-theme') + "' data-timeout='" + oldCaptchaElement.attr('data-timeout') + "' class='" + oldCaptchaElement.attr('class') + "'></div>").insertAfter(oldCaptchaElement);
844                                		var newErrorMessage = oldCaptchaElement.find('span.help-block');
845                                		oldCaptchaElement.remove();
846                                		
847                                		grecaptcha.render(rd, {sitekey: oldCaptchaElement.attr('data-sitekey'), theme: oldCaptchaElement.attr('data-theme'), timeout:oldCaptchaElement.attr('data-timeout')});
848                                		
849                                	    if (error) 
850                                	    {
851                                	    	newCaptchaElement.append(newErrorMessage);
852                                	      
853                                	    }
854                                	}
855                                	catch(err)
856                                	{
857                                		
858                                	}
859                                }
860
861                            }
862                        }
863                    });
864
865                    //if($(formname).find('input[name$=use_payment_gateway]').val() != '1'){
866                    $(this).attr('target', 'jsn-form-target');
867                    //}
868
869                } else {
870                    $(formname).find('.input-file').removeAttr('disabled', true);
871                    return false;
872                }
873
874            });
875            $(formname).find("input.jsn-daterangepicker").each(function () {
876                var dateSettings = $.evalJSON($(this).attr("data-jsnUf-date-settings"));
877                if (dateSettings) {
878                    var yearRangeList = [];
879                    if (dateSettings.yearRangeMin && dateSettings.yearRangeMax) {
880                        yearRangeList.push(dateSettings.yearRangeMin);
881                        yearRangeList.push(dateSettings.yearRangeMax);
882                    } else if (dateSettings.yearRangeMin) {
883                        yearRangeList.push(dateSettings.yearRangeMin);
884                        yearRangeList.push((new Date).getFullYear());
885                    } else if (dateSettings.yearRangeMax) {
886                        yearRangeList.push(dateSettings.yearRangeMax);
887                        yearRangeList.push((new Date).getFullYear());
888                    }
889                    var yearRange = "1930:+0";
890                    if (yearRangeList.length) {
891                        yearRange = yearRangeList.join(":");
892                    }
893                    var dateOptionFormat = "";
894                    if (dateSettings.dateOptionFormat == "custom") {
895                        dateOptionFormat = dateSettings.customFormatDate;
896                    } else {
897                        dateOptionFormat = dateSettings.dateOptionFormat;
898                    }
899                    if (dateSettings.dateFormat == "1" && dateSettings.timeFormat == "1") {
900                        $(this).datetimepicker({
901                            changeMonth: true,
902                            changeYear: true,
903                            showOn: "button",
904                            yearRange: yearRange,
905                            dateFormat: dateOptionFormat,
906                            timeFormat: dateSettings.timeOptionFormat,
907                            timeText: "",
908                            hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
909                            minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
910                            closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
911                            prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
912                            nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
913                            currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
914                            monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
915                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
916                                lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
917                                lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
918                                lang['JSN_UNIFORM_DATE_MONTH_MAY'],
919                                lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
920                                lang['JSN_UNIFORM_DATE_MONTH_JULY'],
921                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
922                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
923                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
924                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
925                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']],
926                            monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
927                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
928                                lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
929                                lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
930                                lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
931                                lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
932                                lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
933                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
934                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
935                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
936                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
937                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']],
938                            dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
939                                lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
940                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
941                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
942                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
943                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
944                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY']],
945                            dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
946                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
947                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
948                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
949                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
950                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
951                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']],
952                            dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
953                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
954                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
955                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
956                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
957                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
958                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']],
959                            weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
960                        });
961                    } else if (dateSettings.dateFormat == "1") {
962                        $(this).datepicker({
963                            changeMonth: true,
964                            changeYear: true,
965                            showOn: "button",
966                            yearRange: yearRange,
967                            dateFormat: dateOptionFormat,
968                            hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
969                            minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
970                            closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
971                            prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
972                            nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
973                            currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
974                            monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
975                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
976                                lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
977                                lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
978                                lang['JSN_UNIFORM_DATE_MONTH_MAY'],
979                                lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
980                                lang['JSN_UNIFORM_DATE_MONTH_JULY'],
981                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
982                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
983                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
984                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
985                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']],
986                            monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
987                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
988                                lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
989                                lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
990                                lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
991                                lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
992                                lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
993                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
994                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
995                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
996                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
997                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']],
998                            dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
999                                lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
1000                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
1001                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
1002                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
1003                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
1004                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY']],
1005                            dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
1006                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
1007                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
1008                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
1009                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
1010                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
1011                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']],
1012                            dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
1013                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
1014                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
1015                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
1016                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
1017                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
1018                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']],
1019                            weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
1020                        });
1021                    } else if (dateSettings.timeFormat == "1") {
1022                        $(this).timepicker({
1023                            showOn: "button",
1024                            timeText: "",
1025                            timeFormat: dateSettings.timeOptionFormat,
1026                            hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
1027                            minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
1028                            closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
1029                            prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
1030                            nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
1031                            currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
1032                            monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
1033                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
1034                                lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
1035                                lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
1036                                lang['JSN_UNIFORM_DATE_MONTH_MAY'],
1037                                lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
1038                                lang['JSN_UNIFORM_DATE_MONTH_JULY'],
1039                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
1040                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
1041                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
1042                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
1043                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']],
1044                            monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
1045                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
1046                                lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
1047                                lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
1048                                lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
1049                                lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
1050                                lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
1051                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
1052                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
1053                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
1054                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
1055                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']],
1056                            dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
1057                                lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
1058                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
1059                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
1060                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
1061                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
1062                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY']],
1063                            dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
1064                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
1065                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
1066                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
1067                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
1068                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
1069                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']],
1070                            dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
1071                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
1072                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
1073                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
1074                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
1075                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
1076                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']],
1077                            weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
1078                        });
1079                    } else {
1080                        $(this).datepicker({
1081                            changeMonth: true,
1082                            changeYear: true,
1083                            yearRange: yearRange,
1084                            showOn: "button",
1085                            hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
1086                            minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
1087                            closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
1088                            prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
1089                            nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
1090                            currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
1091                            monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
1092                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
1093                                lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
1094                                lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
1095                                lang['JSN_UNIFORM_DATE_MONTH_MAY'],
1096                                lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
1097                                lang['JSN_UNIFORM_DATE_MONTH_JULY'],
1098                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
1099                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
1100                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
1101                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
1102                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']],
1103                            monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
1104                                lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
1105                                lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
1106                                lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
1107                                lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
1108                                lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
1109                                lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
1110                                lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
1111                                lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
1112                                lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
1113                                lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
1114                                lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']],
1115                            dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
1116                                lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
1117                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
1118                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
1119                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
1120                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
1121                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY']],
1122                            dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
1123                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
1124                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
1125                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
1126                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
1127                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
1128                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']],
1129                            dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
1130                                lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
1131                                lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
1132                                lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
1133                                lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
1134                                lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
1135                                lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']],
1136                            weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
1137                        });
1138                    }
1139                    $("button.ui-datepicker-trigger").addClass("btn btn-icon").html($("<i/>", {
1140                        "class": "icon-calendar"
1141                    }));
1142                }
1143            });
1144
1145            $(formname).find(".form-actions .prev").click(function () {
1146                $(formname).find('div.jsn-form-content').each(function (i) {
1147                    if (!$(this).is(':hidden')) {
1148// if (self.checkValidateForm($(this))) {
1149                        self.prevpaginationPage(formname);
1150// }
1151                        return false;
1152                    }
1153                });
1154            });
1155            $(formname).find(".form-actions .next").click(function () {
1156
1157                $(formname).find('div.jsn-form-content').each(function (i) {
1158                    if (!$(this).is(':hidden')) {
1159                        if (self.checkValidateForm($(this))) {
1160                            self.nextpaginationPage(formname);
1161                        }
1162                        return false;
1163                    }
1164                });
1165            });
1166
1167            $(formname).find(".form-actions .reset").click(function () {
1168                // $(formname).trigger("reset");
1169                if ($notHideContainer = $(formname).find('.jsn-form-content').not('.hide')) {
1170
1171                    $notHideContainer.find('input:text, input:password, input:file, textarea').val('');
1172                    $notHideContainer.find('select option:selected').removeAttr('selected');
1173                    $notHideContainer.find('input:checkbox, input:radio').removeAttr('checked');
1174                    try 
1175					{
1176						$notHideContainer.find("select.jsn-uf-select2-dropdown").select2();
1177					}
1178					catch(err) 
1179					{
1180   					
1181					}
1182                    $notHideContainer.find('.error').removeClass("error").find(".help-block").remove();
1183//	                $(formname).find('.jsn-form-content').addClass("hide");
1184//	                $(formname).find('.jsn-form-content').each(function (i, _formContent) {
1185//	                    if (i == 0) {
1186//	                        $(_formContent).removeClass("hide");
1187//	                    }
1188//	                });
1189
1190                    self.checkPage(formname);
1191
1192                    $notHideContainer.find("div.choices .jsn-column-item input").each(function () {
1193
1194                        if ($(this).is(':checked')) {
1195                            var idField = $(this).parents(".jsn-columns-container").attr("id");
1196                            $notHideContainer.find("div.control-group." + idField).removeAttr("style");
1197                            self.getActionField(formname, $(this), idField);
1198                        }
1199                        formActionField();
1200                    });
1201
1202                    $notHideContainer.find("div.checkboxes .jsn-column-item input").each(function () {
1203                        var idField = $(this).parents(".jsn-columns-container").attr("id");
1204                        var litmiChoises = $(this).parents(".jsn-columns-container").attr('data-limit')
1205                        var checkboxesInput = $notHideContainer.find("div.checkboxes#" + idField + " .jsn-column-item input");
1206                        var countChecked = $notHideContainer.find("div.checkboxes#" + idField + " .jsn-column-item input:checked");
1207                        if (litmiChoises > 0) {
1208                            if (countChecked.length >= litmiChoises) {
1209                                $(checkboxesInput).attr("disabled", "disabled");
1210                                $(countChecked).removeAttr("disabled");
1211                            }
1212                            else {
1213                                $(checkboxesInput).removeAttr("disabled");
1214                            }
1215                        }
1216                        $notHideContainer.find("div.control-group." + idField).removeAttr("style");
1217                        $(this).parents(".jsn-columns-container").find("input").each(function () {
1218
1219                            if ($(this).is(':checked')) {
1220                                self.getActionFieldCheckboxes(formname, $(this), idField);
1221                            }
1222                            if (!$(this).is(':checked')) {
1223                                self.getActionCheckboxesUnchecked(formname, $(this), idField);
1224                            }
1225                        });
1226                        formActionField();
1227                    });
1228
1229                    $notHideContainer.find("select.dropdown").each(function () {
1230                        var idField = $(this).attr("id");
1231                        $notHideContainer.find("div.control-group." + idField).removeAttr("style");
1232                        self.getActionField(formname, $(this), idField);
1233                        formActionField();
1234                    });
1235                    calculateTotal();
1236                    self.removeRedundantMarginLeft(formname);
1237                }
1238            });
1239
1240            //Event click preview button
1241            $(formname).find("button.preview").click(function(){
1242                $('#jsn_uniform_modal_'+formname.attr('id')+' .modal-body').html('');
1243                var token = formname.attr('data-token');
1244                var url = baseUrl + "/index.php?option=com_uniform&view=preview&task=preview.preview&tmpl=component&"+token+"=1";
1245                var values = $(formname).serializeArray();
1246                $(formname).find('.input-file').each(function(){
1247                    values.push({
1248                        name: $(this).attr('name'),
1249                        value: $(this).val()
1250                    });
1251                });
1252                values.push({
1253                    name: "task",
1254                    value: 'preview.preview'
1255                });
1256                values = $.param(values);
1257                $.ajax({
1258                    type: "POST",
1259                    url: url,
1260                    data: values,
1261                    success: function(modalHtml)
1262                    {
1263                        $('#jsn_uniform_modal_'+formname.attr('id')+' .modal-body').html(modalHtml);
1264                        $('#jsn_uniform_modal_'+formname.attr('id')).modal('show');
1265                        $('.modal-backdrop').addClass('jsn-uniform-modal-backdrop');
1266                    }
1267                });
1268            });
1269            $('#jsn_uniform_modal_'+formname.attr('id')+' .jsn_close_modal').click(function(){
1270                $('#jsn_uniform_modal_'+formname.attr('id')).modal('hide');
1271                $('#jsn_uniform_modal_'+formname.attr('id')+' .modal-body').html('');
1272            });
1273            //End event click preview button
1274
1275            this.defaultPage(formname);
1276            $('input, textarea').placeholder();
1277            //end
1278            calculateTotal();
1279            self.removeRedundantMarginLeft(formname);
1280        };
1281        /*--------------------------*/
1282        $.removeRedundantMarginLeft = function (formname) {
1283            var JSNUFRowContainer = $(formname).find('.jsn-uf-row-container');
1284            if (JSNUFRowContainer.length) {
1285                JSNUFRowContainer.each(function () {
1286                    var children = $(this).children();
1287
1288                    var totalChildren = children.length;
1289                    if (totalChildren) {
1290                        var hideIndex = null;
1291                        children.each(function (subIndex) {
1292
1293                            var subChildren = $(this).children();
1294                            var totalsubChildren = subChildren.length;
1295                            if (totalsubChildren) {
1296                                var totalSubHideChildren = $(this).find('.hide').length;
1297                                if (totalSubHideChildren == totalsubChildren && subIndex == 0) {
1298                                    if ($(this).next().length) {
1299                                        hideIndex = 0;
1300                                        $(this).next().css('margin-left', '0');
1301                                    }
1302                                }
1303                                else if (totalSubHideChildren == totalsubChildren && subIndex == 1) {
1304
1305                                    if (hideIndex == 0) {
1306                                        if ($(this).next().length) {
1307                                            hideIndex = 1;
1308                                            $(this).next().css('margin-left', '0');
1309                                        }
1310                                    }
1311                                }
1312                                else if (totalSubHideChildren == totalsubChildren && subIndex == 2) {
1313
1314                                    if (hideIndex == 1) {
1315                                        if ($(this).next().length) {
1316                                            hideIndex = 2;
1317                                            $(this).next().css('margin-left', '0');
1318                                        }
1319                                    }
1320                                }
1321                                else {
1322                                    if ($(this).next().length) {
1323                                        $(this).next().removeAttr('style');
1324                                    }
1325                                }
1326                            }
1327                        });
1328                    }
1329                });
1330            }
1331        },
1332            /*--------------------------*/
1333            $.getActionField = function (formname, selfInput, idField) {
1334
1335                var dataSettings = $(selfInput).parents(".control-group").attr("data-settings");
1336                if (dataSettings) {
1337                    dataSettings = $.evalJSON(dataSettings);
1338                }
1339
1340                if (dataSettings) {
1341
1342                    var classShowField = [];
1343                    var classHideField = [];
1344                    var classShowField2 = [];
1345                    var classHideField2 = [];
1346                    $.each(dataSettings, function (i, item) {
1347                        i = i.trim();
1348                        if ($(selfInput).val() == i) {
1349                            if (item.showField) {
1350                                $.each(item.showField, function (j, actionField) {
1351                                    if (actionField) {
1352                                        classShowField.push(".control-group." + actionField);
1353                                    }
1354                                    var showChild = $(".control-group." + actionField).attr("data-settings")
1355                                    if (showChild) {
1356                                        showChild = $.evalJSON(showChild);
1357                                        $.each(showChild, function (v, itemChild) {
1358                                            if ($(".control-group." + actionField).find('input
1358:checked, select option:selected').val() == v) {
1359                                                if ($.type(itemChild) == 'object') {
1360                                                    $.each(itemChild.showField, function (k, child) {
1361                                                        if ($.inArray(".control-group." + child, classShowField2) == -1) {
1362                                                            classShowField2.push(".control-group." + child);
1363                                                        }
1364                                                    })
1365                                                }
1366                                            }
1367                                        });
1368                                    }
1369                                });
1370                                $(formname).find(classShowField.join(",")).addClass(idField).show().removeClass('hide');
1371                                $(formname).find(classShowField2.join(",")).addClass(idField).show().removeClass('hide');
1372                            }
1373                            if (item.hideField) {
1374                                $.each(item.hideField, function (j, actionField) {
1375                                    if (actionField) {
1376                                        classHideField.push("div.control-group." + actionField);
1377                                    }
1378                                    var hideChild = $(".control-group." + actionField).attr("data-settings")
1379                                    if (hideChild) {
1380                                        hideChild = $.evalJSON(hideChild);
1381                                        $.each(hideChild, function (v, itemChild) {
1382                                            if ($(".control-group." + actionField).find('input:checked, select option:selected').val() == v) {
1383                                                if (itemChild) {
1384                                                    $.each(itemChild.hideField, function (k, child) {
1385                                                        if ($.inArray(".control-group." + child, classHideField2) == -1) {
1386                                                            classHideField2.push(".control-group." + child);
1387                                                        }
1388                                                    })
1389                                                }
1390                                            }
1391                                        });
1392                                    }
1393                                });
1394                                $(formname).find(classHideField.join(",")).addClass(idField).hide().addClass('hide');
1395                                $(formname).find(classHideField2.join(",")).addClass(idField).hide().addClass('hide');
1396
1397                            }
1398                        }
1399                        else {
1400                            if (item.showField) {
1401                                var classShow = [];
1402                                var classShow2 = [];
1403                                $.each(item.showField, function (j, actionField) {
1404
1405                                    if (actionField) {
1406                                        if ($.inArray(".control-group." + actionField, classShowField) == -1) {
1407                                            classShow.push(".control-group." + actionField);
1408                                        }
1409                                    }
1410                                    var showChild = $(".control-group." + actionField).attr("data-settings")
1411
1412                                    if (showChild) {
1413                                        showChild = $.evalJSON(showChild);
1414                                        $.each(showChild, function (v, itemChild) {
1415                                            if (itemChild) {
1416                                                if (typeof (itemChild.showField) != 'undefined') {
1417                                                    $.each(itemChild.showField, function (k, child) {
1418                                                        if ($.inArray(".control-group." + child, classShowField) == -1) {
1419                                                            classShow2.push(".control-group." + child);
1420                                                        }
1421                                                    })
1422                                                }
1423                                            }
1424                                        });
1425                                    }
1426                                });
1427                                $(formname).find(classShow.join(",")).addClass(idField).hide().addClass('hide');
1428                                $(formname).find(classShow2.join(",")).addClass(idField).hide().addClass('hide');
1429                            }
1430                            if (item.hideField) {
1431                                var classHide = [];
1432                                var classHide2 = [];
1433                                $.each(item.hideField, function (j, actionField) {
1434                                    if (actionField) {
1435                                        if ($.inArray("div.control-group." + actionField, classHideField) == -1) {
1436                                            classHide.push("div.control-group." + actionField);
1437                                        }
1438                                    }
1439                                    var hideChild = $(".control-group." + actionField).attr("data-settings")
1440
1441                                    if (hideChild) {
1442                                        hideChild = $.evalJSON(hideChild);
1443                                        $.each(hideChild, function (v, itemChild) {
1444                                            if (hideChild) {
1445                                                if (typeof (itemChild.hideField) != 'undefined') {
1446                                                    $.each(itemChild.hideField, function (k, child) {
1447                                                        if ($.inArray(".control-group." + child, classHideField) == -1) {
1448                                                            classHide2.push(".control-group." + child);
1449                                                        }
1450                                                    })
1451                                                }
1452                                            }
1453                                        });
1454                                    }
1455                                });
1456                                $(formname).find(classHide.join(",")).addClass(idField).show().removeClass('hide');
1457                                $(formname).find(classHide2.join(",")).addClass(idField).show().removeClass('hide');
1458                            }
1459                        }
1460                    });
1461                }
1462            };
1463        $.getActionFieldCheckboxes = function (formname, selfInput, idField) {
1464            var dataSettings = $(selfInput).parents(".control-group").attr("data-settings");
1465            if (dataSettings) {
1466                dataSettings = $.evalJSON(dataSettings);
1467            }
1468            if (dataSettings) {
1469                var classShowField = [];
1470                var classShowField2 = [];
1471                var classHideField = [];
1472                var classHideField2 = [];
1473
1474                $.each(dataSettings, function (i, item) {
1475                    i = i.trim();
1476                    if ($(selfInput).val() == i) {
1477                        if (item.showField) {
1478                            $.each(item.showField, function (j, actionField) {
1479                                if (actionField) {
1480                                    classShowField.push(".control-group." + actionField);
1481                                }
1482                                var showChild = $(".control-group." + actionField).attr("data-settings")
1483                                if (showChild) {
1484                                    showChild = $.evalJSON(showChild);
1485                                    $.each(showChild, function (v, itemChild) {
1486                                        var selectItem = $(".control-group." + actionField).find('input:checked, select option:selected')
1487                                        $.each(selectItem, function (a, selectChild) {
1488                                            if ($(selectChild).val() == v) {
1489                                                if (typeof (itemChild.showField) != 'undefined') {
1490                                                    $.each(itemChild.showField, function (k, child) {
1491                                                        if ($.inArray(".control-group." + child, classShowField2) == -1) {
1492                                                            classShowField2.push(".control-group." + child);
1493                                                        }
1494                                                    })
1495                                                }
1496                                            }
1497                                        })
1498                                    });
1499                                }
1500                            });
1501                            $(formname).find(classShowField.join(",")).addClass(idField).show().addClass('useField').removeClass('hide');
1502                            $(formname).find(classShowField2.join(",")).addClass(idField).show().addClass('useField').removeClass('hide').css({'display': 'block'});
1503                        }
1504                        if (typeof (item.hideField) != 'undefined' && item.hideField != '' && item.hideField != 'undefined') {
1505                            $.each(item.hideField, function (j, actionField) {
1506                                if (actionField) {
1507                                    classHideField.push("div.control-group." + actionField);
1508                                }
1509                                var hideChild = $(".control-group." + actionField).attr("data-settings")
1510                                if (hideChild) {
1511                                    hideChild = $.evalJSON(hideChild);
1512
1513                                    $.each(hideChild, function (v, itemChild) {
1514                                        if ($(".control-group." + actionField).find('input
1514:checked, select option:selected').val() == v) {
1515                                            if (itemChild) {
1516                                                $.each(itemChild.hideField, function (k, child) {
1517                                                    if ($.inArray(".control-group." + child, classHideField2) == -1) {
1518                                                        classHideField2.push(".control-group." + child);
1519                                                    }
1520                                                })
1521                                            }
1522                                        }
1523                                    });
1524                                }
1525                            });
1526                            $(formname).find(classHideField.join(",")).addClass(idField).hide().removeClass('useField').addClass('hide').css({'display': 'none'});
1527                            $(formname).find(classHideField2.join(",")).addClass(idField).show().removeClass('useField').addClass('hide').css({'display': 'none'});
1528                        }
1529                    }
1530                });
1531            }
1532        };
1533        $.getActionCheckboxesUnchecked = function (formname, selfInput, idField) {
1534            var dataSettings = $(selfInput).parents(".control-group").attr("data-settings");
1535            if (dataSettings) {
1536                dataSettings = $.evalJSON(dataSettings);
1537            }
1538            if (dataSettings) {
1539                var classShowField = [];
1540                var classShowField2 = [];
1541                var classHideField = [];
1542                var classHideField2 = [];
1543                $.each(dataSettings, function (i, item) {
1544
1545                    i = i.trim();
1546                    if ($(selfInput).val() == i) {
1547                        if (typeof (item.showField) != 'undefined') {
1548                            $.each(item.showField, function (j, actionField) {
1549                                if (actionField) {
1550                                    classShowField.push(".control-group." + actionField);
1551                                }
1552                                var showChild = $(".control-group." + actionField).attr("data-settings")
1553
1554                                if (showChild) {
1555                                    showChild = $.evalJSON(showChild);
1556
1557                                    $.each(showChild, function (v, itemChild) {
1558                                        if (typeof (itemChild.showField) != 'undefined') {
1559                                            $.each(itemChild.showField, function (k, child) {
1560                                                if ($.inArray(".control-group." + child, classShowField2) == -1) {
1561                                                    classShowField2.push(".control-group." + child);
1562                                                }
1563                                            })
1564                                        }
1565                                    });
1566                                }
1567                            });
1568                            $(formname).find(classShowField.join(",")).addClass(idField).hide().removeClass('useField').addClass('hide').css({'display': 'none'});
1569                            $(formname).find(classShowField2.join(",")).addClass(idField).hide().removeClass('useField').addClass('hide').css({'display': 'none'});
1570                        }
1571                        if (typeof (item.hideField) != 'undefined') {
1572                            $.each(item.hideField, function (j, actionField) {
1573                                if (actionField) {
1574                                    classHideField.push("div.control-group." + actionField);
1575                                }
1576                                var hideChild = $(".control-group." + actionField).attr("data-settings")
1577                                if (hideChild) {
1578                                    hideChild = $.evalJSON(hideChild);
1579
1580                                    $.each(hideChild, function (v, itemChild) {
1581                                        if ($(".control-group." + actionField).find('input
1581:checked, select option:selected').val() == v) {
1582                                            if (itemChild) {
1583                                                if (typeof (itemChild.hideField) != 'undefined') {
1584                                                    $.each(itemChild.hideField, function (k, child) {
1585                                                        if ($.inArray(".control-group." + child, classHideField2) == -1) {
1586                                                            classHideField2.push(".control-group." + child);
1587                                                        }
1588                                                    })
1589                                                }
1590                                            }
1591                                        }
1592                                    });
1593                                }
1594                            });
1595                            $(formname).find(classHideField.join(",")).addClass(idField).show().addClass('useField').addClass('hide').css({'display': 'block'});
1596                            $(formname).find(classHideField2.join(",")).addClass(idField).hide().addClass('hide').removeClass('useField').css({'display': 'none'});
1597                        }
1598                    }
1599                });
1600            }
1601        };
1602
1603        $.randomValueItems = function (_this) {
1604            var group = $(_this),
1605                choices = group.find('.jsn-column-item'),
1606                otherItem = choices.filter(function () {
1607                    return $('label.lbl-allowOther', this).size() > 0;
1608                }),
1609                randomItems = choices.not(otherItem);
1610            randomItems.detach();
1611            otherItem.detach();
1612            while (randomItems.length > 0) {
1613                var index = Math.floor(Math.random() * choices.length),
1614                    choice = randomItems[index];
1615
1616                if (group.find(".lbl-allowOther").size()) {
1617                    group.find(".lbl-allowOther").before(choice);
1618                } else {
1619                    group.append(choice);
1620                }
1621                delete(randomItems[index]);
1622                var newList = [];
1623                $(randomItems).each(function (index, element) {
1624                    if (element !== undefined) {
1625                        newList.push(element);
1626                    }
1627                });
1628                randomItems = newList;
1629            }
1630            delete(randomItems[0]);
1631            if (group.find(".lbl-allowOther").size()) {
1632                group.find(".lbl-allowOther").before(otherItem);
1633            } else {
1634                group.append(otherItem);
1635            }
1636            return true;
1637        };
1638        $.captcha = function (form) {
1639            var self = this;
1640            var idcaptcha = "";
1641            var idcaptcha = form.find(".form-captcha").attr("id");
1642            var publickey = form.find(".form-captcha").attr("data-jnsUfpublickey");
1643            if (form.find(".form-captcha").length > 0 && form.find(".form-captcha").is(':hidden') && idcaptcha) {
1644                $(".form-captcha").hide();
1645                form.find(".form-captcha").show();
1646                Recaptcha.create(publickey, idcaptcha, {
1647                    theme: 'white',
1648                    tabindex: 0,
1649                    callback: function () {
1650                        $(form).find(".form-captcha").removeClass("error");
1651                        $(form).find(".form-captcha #recaptcha_area").addClass("controls");
1652                        $(form).find("#recaptcha_response_field").keypress(function (e) {
1653                            if (e.which == 13) {
1654                                if ($(form).find("button.next").hasClass("hide")) {
1655                                    $(form).find("button.jsn-form-submit").click();
1656                                } else {
1657                                    $(form).find("button.next").click();
1658                                }
1659                                return false;
1660                            }
1661                        });
1662                    }
1663                });
1664            }
1665        };
1666        $.callMessageError = function (formname, messageError) {
1667        	
1668            var self = this;
1669            $.each(messageError, function (key, value) {
1670            	
1671                if (key != "captcha") {
1672                    if (key == "name" || key == "address" || key == "date" || key == "phone" || key == "currency" || key == "password") {
1673                        $.each(value, function (i, item) {
1674                            $(formname).find("input[name=password\\[" + i + "\\]\\[\\]], input[name=currency\\[" + i + "\\]\\[value\\]], input[name=phone\\[" + i + "\\]\\[default\\]], input[name=phone\\[" + i + "\\]\\[one\\]], input[name=date\\[" + i + "\\]\\[date\\]],input[name=name\\[" + i + "\\]\\[first\\]],input[name=address\\[" + i + "\\]\\[street\\]]").parents(".control-group").addClass("error").find(".controls").append($("<span/>", {
1675                                "class": "help-block"
1676                            }).append(
1677                                $("<span/>", {
1678                                    "class": "validation-result label label-important",
1679                                    text: item
1680                                })));
1681                        });
1682                    } else if (key != "max-upload") {
1683                        if (key == "captcha_2") {
1684                            $(formname).find("#jsn-captcha").parents(".control-group").addClass("error").find(".controls").append($("<span/>", {
1685                                "class": "help-block"
1686                            }).append(
1687                                $("<span/>", {
1688                                    "class": "validation-result label label-important",
1689                                    text: value
1690                                })));
1691                        } else {
1692                            if ($(formname).find("#" + key).size()) {
1693                                $(formname).find("#" + key).parents(".control-group").addClass("error").find(".controls").append($("<span/>", {
1694                                    "class": "help-block"
1695                                }).append(
1696                                    $("<span/>", {
1697                                        "class": "validation-result label label-important",
1698                                        text: value
1699                                    })));
1700                            }
1701                        }
1702                    } else if (key == "max-upload") {
1703                        $(formname).find(".message-uniform").html($("<div/>", {
1704                            "class": "alert alert-error"
1705                        }).append(value));
1706                    }
1707                }
1708                else {
1709                    $(formname).find(".validation-result").remove();
1710                    
1711                    $(formname).find(".jsn-uf-grecaptchav2").addClass("error").append($("<span/>", {
1712                        "class": "help-block"
1713                    }).append(
1714                        $("<span/>", {
1715                            "class": "validation-result label label-important",
1716                            text: value
1717                        })));
1718                }
1719            });
1720
1721            setTimeout(function () {
1722                var formError = $(formname).find('.error')[0];
1723                if ($(formError).parents('.jsn-form-content').attr("data-value")) {
1724                    $(formname).find('.jsn-form-content').addClass("hide");
1725                    $(formError).parents('.jsn-form-content').removeClass("hide");
1726                    self.checkPage(formname);
1727                } else {
1728                    var countPage = $(formname).find('div.jsn-form-content').length;
1729                    $(formname).find('div.jsn-form-content')[countPage - 1].removeClass("hide");
1730                    $(formname).find('input, button,textarea').focus();
1731                }
1732                if ($(formname).find(".error input,.error textarea,.error select").length) {
1733                    var fieldFocus = $(formname).find(".error")[0];
1734                    if ($(fieldFocus).find(".blank-required").size()) {
1735                        $(fieldFocus).find("input,select,textarea").each(function () {
1736                            var val = $(this).val();
1737                            var val2 = val.replace(' ', '');
1738                            if (val2 == '' || val2 == 0) {
1739                                $(window).scrollTop($(this).offset().top - 50);
1740                                $(this).click();
1741                                return false;
1742                            }
1743                        });
1744                    } else {
1745                        var fieldFocus = $(formname).find(".error input,.error textarea,.error select")[0];
1746                        $(window).scrollTop($(fieldFocus).offset().top - 50);
1747                        fieldFocus.click();
1748                    }
1749                }
1750            }, 800);
1751        };
1752        $.defaultPage = function (formname) {
1753            if (forms.length < 1) {
1754                this.captcha($(formname));
1755            }
1756            $($(formname).find('div.jsn-form-content')[0]).removeClass("hide");
1757            this.checkPage(formname);
1758            $(formname).find("#page-loading").addClass("hide");
1759            forms.push(formname);
1760        };
1761        $.checkPage = function (formname) {
1762            if ($(formname).width() > 0 && $(formname).size() > 0) {
1763                $(formname).find('div.jsn-form-content').each(function (i) {
1764                    if (!$(this).hasClass("hide")) {
1765                        if ($(this).next().attr("data-value")) {
1766                            $(formname).find(".form-actions .next").removeClass("hide");
1767                        } else {
1768                            $(formname).find(".form-actions .next").addClass("hide");
1769                        }
1770                        if ($(this).prev().attr("data-value")) {
1771                            $(formname).find(".form-actions .prev").removeClass("hide");
1772                        } else {
1773                            $(formname).find(".form-actions .prev").addClass("hide");
1774                        }
1775                        if (i + 1 == $(formname).find('div.jsn-form-content').length) {
1776                            $(formname).find(".form-actions .next").addClass("hide");
1777                            $(formname).find(".form-actions .jsn-form-submit").removeClass("hide");
1778                            $(formname).find(".form-actions .reset").removeClass("hide");
1779
1780                        } else {
1781                            $(formname).find(".form-actions .next").removeClass("hide");
1782                            $(formname).find(".form-actions .jsn-form-submit").addClass("hide");
1783                            $(formname).find(".form-actions .reset").addClass("hide");
1784                        }
1785                        $(this).find(".content-google-maps").each(function () {
1786                            $(this).find('.google_maps').width($(this).attr("data-width"));
1787                            $(this).find('.google_maps').height($(this).attr("data-height"));
1788                            var dataValue = $(this).attr("data-value");
1789                            var dataMarker = $(this).attr("data-marker");
1790                            if (dataValue) {
1791                                var gmapOptions = $.evalJSON(dataValue);
1792                                if (dataMarker) {
1793                                    var gmapMarker = $.evalJSON(dataMarker);
1794                                }
1795                                if (!gmapOptions.center.nb && gmapOptions.center.lat) {
1796                                    gmapOptions.center.nb = gmapOptions.center.lat;
1797                                }
1798                                if (!gmapOptions.center.ob && gmapOptions.center.lng) {
1799                                    gmapOptions.center.ob = gmapOptions.center.lng;
1800                                }
1801                                $(this).find('.google_maps').gmap({
1802                                    'zoom': gmapOptions.zoom,
1803                                    'mapTypeId': gmapOptions.mapTypeId,
1804                                    'center': gmapOptions.center.nb + ',' + gmapOptions.center.ob,
1805                                    'disableDefaultUI': false,
1806                                    'callback': function (map) {
1807                                        var self = this;
1808                                        self.set('inforWindow', function (marker, val) {
1809                                            var descriptions = val.descriptions;
1810                                            var content = '<div class="thumbnail">';
1811                                            if (val.images) {
1812                                                content += '<img src="' + val.images + '">';
1813                                            }
1814                                            content += '<div class="caption">';
1815                                            if (val.title) {
1816                                                content += '<h4>' + val.title + '</h4>';
1817                                            }
1818                                            if (descriptions) {
1819                                                content += '<p>' + descriptions.replace(new RegExp('\n', 'g'), "<br/>") + '</p>';
1820                                            }
1821                                            if (val.link) {
1822                                                content += '<p><a target="_blank" href="' + val.link + '">more info</a></p>';
1823                                            }
1824                                            content += '</div></div>';
1825                                            self.openInfoWindow({'content': content}, marker);
1826                                        });
1827                                        self.get('map').setOptions({streetViewControl: false});
1828                                        if (gmapMarker) {
1829                                            $.each(gmapMarker, function (i, val) {
1830
1831                                                var position = $.evalJSON(val.position);
1832                                                if (position) {
1833                                                    if (!position.nb && position.lb) {
1834                                                        position.nb = position.lb;
1835                                                    }
1836                                                    if (!position.ob && position.mb) {
1837                                                        position.ob = position.mb;
1838                                                    }
1839                                                    self.addMarker({
1840                                                        'position': position.nb + "," + position.ob,
1841                                                        'draggable': false,
1842                                                        'bounds': false
1843                                                    }, function (map, marker) {
1844                                                        if (val.open == "true") {
1845                                                            self.get('inforWindow')(marker, val);
1846                                                        }
1847                                                        if (val.title) {
1848                                                            marker.setTitle(val.title);
1849                                                        }
1850                                                    }).xclick(function (event) {
1851                                                        self.get('inforWindow')(this, val);
1852                                                    })
1853                                                }
1854                                            });
1855                                        }
1856                                        setTimeout(function () {
1857
1858                                            self.get('map').setCenter(self._latLng(gmapOptions.center.nb + ',' + gmapOptions.center.ob));
1859                                            self.get('map').setZoom(gmapOptions.zoom);
1860                                            self.get('map').setMapTypeId(gmapOptions.mapTypeId);
1861                                        }, 1000);
1862                                    }
1863                                });
1864
1865                            }
1866                        });
1867                    }
1868                });
1869            }
1870
1871        };
1872        $.actionPage = function (formname) {
1873            var self = this;
1874            $(formname).find('div.jsn-form-content').each(function () {
1875                if (!$(this).hasClass("hide")) {
1876                    $('html, body').animate({scrollTop: $(this).offset().top - 0}, 200);
1877                    $(this).find('input').each(function () {
1878                        $(this).first().focus();
1879                        return false;
1880                    });
1881                    self.checkPage(formname);
1882                }
1883            });
1884        },
1885            $.nextpaginationPage = function (formname) {
1886                var self = this;
1887                $(formname).find('div.jsn-form-content').each(function () {
1888                    if (!$(this).hasClass("hide")) {
1889                        $(this).addClass("hide");
1890                        $(this).next().removeClass("hide");
1891                        return false;
1892                    }
1893                });
1894                self.actionPage(formname);
1895            };
1896        $.prevpaginationPage = function (formname) {
1897            var self = this;
1898            $(formname).find('div.jsn-form-content').each(function () {
1899                if (!$(this).hasClass("hide")) {
1900                    $(this).addClass("hide");
1901                    $(this).prev().removeClass("hide");
1902                    return false;
1903                }
1904            });
1905            self.actionPage(formname);
1906        };
1907        $.checkValidateForm = function (_this, type, element, onchange) {
1908
1909            try {
1910                if ($("#select2-drop-mask").length) {
1911                    $("#select2-drop-mask").hide();
1912                }
1913            }
1914            catch (err) {
1915
1916            }
1917            var check = 0;
1918            var $inputBlank = $(_this).find(".blank-required");
1919            var self = this;
1920            $inputBlank.each(function () {
1921                if ($(this).parents(".control-group").css("display") != "none") {
1922                    var checkBlank = true;
1923                    $(this).find(".help-blank").remove();
1924                    $(this).parent().removeClass("error");
1925                    $(this).find("input,select,textarea").each(function () {
1926                        var val = $(this).val();
1927                        var val2 = val.replace(' ', '');
1928                        if ($(this).attr("type") == "text") {
1929                            if (val2 == '') {
1930                                checkBlank = false;
1931                            }
1932                        } else {
1933                            if (val2 == '') {
1934                                checkBlank = false;
1935                            }
1936                        }
1937                    });
1938                    if (!checkBlank) {
1939                        $(this).parent().addClass("error");
1940                        $(this).append(
1941                            $("<span/>", {
1942                                "class": "help-block help-blank"
1943                            }).append(
1944                                $("<span/>", {
1945                                    "class": "validation-result label label-important",
1946                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
1947                                })));
1948                        check++;
1949                    }
1950                } else {
1951                    $(this).removeClass('blank-required');
1952                    $(this).find("input,select,textarea").each(function () {
1953                        $(this).prop('disabled', true);
1954                    });
1955                }
1956            });
1957            var groupBlank = $(_this).find(".group-blank-required");
1958            groupBlank.each(function () {
1959                if ($(this).parents(".control-group").css("display") != "none") {
1960                    var checkGroupBlank = false;
1961                    $(this).find(".help-blank").remove();
1962                    $(this).parent().removeClass("error");
1963                    $(this).find("input").each(function () {
1964                        var val = $(this).val();
1965                        var val2 = val.replace(' ', '');
1966                        if (val2 != '') {
1967                            checkGroupBlank = true;
1968                        }
1969                    });
1970                    if (!checkGroupBlank) {
1971                        $(this).parents(".control-group").addClass("error");
1972                        $(this).append(
1973                            $("<span/>", {
1974                                "class": "help-block help-blank"
1975                            }).append(
1976                                $("<span/>", {
1977                                    "class": "validation-result label label-important",
1978                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
1979                                })));
1980                        check++;
1981                    }
1982                }
1983            });
1984            var $dropdown = $(_this).find(".dropdown-required");
1985            $dropdown.each(function () {
1986                if ($(this).parents(".control-group").css("display") != "none") {
1987                    $(this).find(".help-dropdown").remove();
1988                    $(this).parent().removeClass("error");
1989                    if ($(this).find("select").val() == "") {
1990                        $(this).parent().addClass("error");
1991                        $(this).append(
1992                            $("<span/>", {
1993                                "class": "help-block help-dropdown"
1994                            }).append(
1995                                $("<span/>", {
1996                                    "class": "validation-result label label-important",
1997                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
1998                                })))
1999                        check++;
2000                    } else if ($(this).find("select option:selected").hasClass('lbl-allowOther')) {
2001                        var selfRadio = this;
2002
2003                        $(this).find(".jsn-dropdown-Others").focusout(function () {
2004                            var checkRadio = false;
2005                            var valchoices = $(selfRadio).find(".jsn-dropdown-Others").val();
2006                            var valchoices2 = valchoices.replace(' ', '');
2007                            if (valchoices2 == '') {
2008                                checkRadio = true;
2009                            }
2010                            if (checkRadio) {
2011                                $(selfRadio).find(".help-dropdown").remove();
2012                                $(selfRadio).parent().addClass("error");
2013                                $(selfRadio).append(
2014                                    $("<span/>", {
2015                                        "class": "help-block help-dropdown"
2016                                    }).append(
2017                                        $("<span/>", {
2018                                            "class": "validation-result label label-important",
2019                                            text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
2020                                        })))
2021                                check++;
2022                            }
2023                        });
2024                        if (type != "detailInput") {
2025                            $(this).find(".jsn-dropdown-Others").trigger("focusout");
2026                        }
2027                    }
2028                }
2029            });
2030            var $inputEmailNull = $(_this).find("input.email");
2031            $inputEmailNull.each(function () {
2032                if ($(this).parents(".control-group").css("display") != "none") {
2033                    var parentEmail = $(this).parents(".control-group");
2034                    $(parentEmail).find(".help-email").remove();
2035                    $(parentEmail).removeClass("error");
2036                    var val = $(this).val();
2037                    var filter = /^(([a-zA-Z0-9\+_\-]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/;
2038
2039                    if (!filter.test(val) && $(this).hasClass("email-required")) {
2040                        $(parentEmail).addClass("error");
2041                        $(this).parents(".controls").append(
2042                            $("<span/>", {
2043                                "class": "help-block help-email"
2044                            }).append(
2045                                $("<span/>", {
2046                                    "class": "validation-result label label-important",
2047                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_INVALID']
2048                                })));
2049                        check++;
2050                    } else if (!$(this).hasClass("email-required") && val && !filter.test(val)) {
2051                        $(parentEmail).addClass("error");
2052                        $(this).parents(".controls").append(
2053                            $("<span/>", {
2054                                "class": "help-block help-email"
2055                            }).append(
2056                                $("<span/>", {
2057                                    "class": "validation-result label label-important",
2058                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_INVALID']
2059                                })));
2060                        check++;
2061                    }
2062                    if (val && filter.test(val) && $(parentEmail).find(".jsn-email-confirm").hasClass("jsn-email-confirm") && ($(element).hasClass("jsn-email-confirm") || !$(parentEmail).hasClass("ui-state-highlight"))) {
2063                        if ($(parentEmail).find(".jsn-email-confirm").val() != $(this).val()) {
2064                            $(parentEmail).addClass("error");
2065                            $(this).parents(".controls").append(
2066                                $("<span/>", {
2067                                    "class": "help-block help-email"
2068                                }).append(
2069                                    $("<span/>", {
2070                                        "class": "validation-result label label-important",
2071                                        text: lang['JSN_UNIFORM_CONFIRM_FIELD_EMAIL_CONFIRM']
2072                                    })));
2073                            check++;
2074                        }
2075                    }
2076                }
2077            });
2078            var $inputWebsite = $(_this).find("input.website");
2079            $inputWebsite.each(function () {
2080                if ($(this).parents(".control-group").css("display") != "none") {
2081                    $(this).parent().find(".help-website").remove();
2082                    $(this).parent().parent().removeClass("error");
2083                    var val = $(this).val();
2084                    var regexp = /^(https?:\/\/|ftp:\/\/|www([0-9]{0,9})?\.)?(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
2085                    if ((!regexp.test(val) && $(this).hasClass("website-required")) || (val != "" && val != "http://" && val != "https://" && !$(this).hasClass("website-required") && !regexp.test(val))) {
2086                        $(this).parent().parent().addClass("error");
2087                        $(this).after(
2088                            $("<span/>", {
2089                                "class": "help-block help-website"
2090                            }).append(
2091                                $("<span/>", {
2092                                    "class": "validation-result label label-important",
2093                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_INVALID']
2094                                })));
2095                        check++;
2096                    }
2097                }
2098            });
2099            var $inputInteger = $(_this).find("input.integer-required");
2100            $inputInteger.each(function () {
2101                if ($(this).parents(".control-group").css("display") != "none") {
2102                    $(this).parent().find(".help-integer").remove();
2103                    $(this).parent().parent().removeClass("error");
2104                    var val = $(this).val();
2105                    var regexp = /^[0-9]+$/;
2106                    if (!regexp.test(val)) {
2107                        $(this).parent().parent().addClass("error");
2108                        $(this).parent().append(
2109                            $("<span/>", {
2110                                "class": "help-block help-integer"
2111                            }).append(
2112                                $("<span/>", {
2113                                    "class": "validation-result label label-important",
2114                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_INVALID']
2115                                })));
2116                        check++;
2117                    }
2118                }
2119            });
2120            if (onchange != "onchange") {
2121                var $valueLimitPassword = $(_this).find(".limit-password-required");
2122                $valueLimitPassword.each(function () {
2123                    if ($(this).parents(".control-group").css("display") != "none") {
2124                        var checkval = false;
2125                        if ($(this).hasClass("group-blank-required")) {
2126                            $(this).find("input").each(function () {
2127                                var val = $(this).val();
2128                                var val2 = val.replace(' ', '');
2129                                if (val2 == '') {
2130                                    checkval = true;
2131                                }
2132                            });
2133                        }
2134                        if (!checkval) {
2135                            var inputPassword = $(this).find("input");
2136                            var limitSettings = $.evalJSON($(inputPassword).attr("data-limit"));
2137                            var checkPassword = false;
2138                            if ($(this).find("input").length > 1) {
2139                                $(this).parent().removeClass("error");
2140                                $(this).find(".help-limit").remove();
2141                                $(this).find("input").each(function () {
2142                                    if ($(this).val().length < limitSettings.limitMin) {
2143                                        checkPassword = true;
2144                                    } else if ($(this).val().length > limitSettings.limitMax) {
2145                                        checkPassword = true;
2146                                    }
2147                                });
2148                            } else {
2149                                if ($(inputPassword).val() != '' || $(inputPassword).val() != 0) {
2150                                    $(inputPassword).parent().find(".help-limit").remove();
2151                                    $(inputPassword).parent().parent().removeClass("error");
2152                                    if ($(inputPassword).val().length < limitSettings.limitMin) {
2153                                        checkPassword = true;
2154                                    } else if ($(inputPassword).val().length > limitSettings.limitMax) {
2155                                        checkPassword = true;
2156                                    }
2157                                }
2158                            }
2159
2160                            if (checkPassword) {
2161                                check++;
2162                                var textLang = lang['JSN_UNIFORM_CONFIRM_FIELD_PASSWORD_MIN_MAX_CHARACTER'];
2163                                textLang = textLang.replace("%mi%", limitSettings.limitMin);
2164                                textLang = textLang.replace("%mx%", limitSettings.limitMax);
2165                                $(this).parent().addClass("error");
2166                                $(this).append(
2167                                    $("<span/>", {
2168                                        "class": "help-block help-limit"
2169                                    }).append(
2170                                        $("<span/>", {
2171                                            "class": "validation-result label label-important",
2172                                            text: textLang
2173                                        })));
2174                            }
2175                        }
2176                    }
2177                });
2178            }
2179            var $valueLimit = $(_this).find(".limit-required");
2180            $valueLimit.each(function () {
2181                if ($(this).parents(".control-group").css("display") != "none") {
2182                    var limitSettings = $.evalJSON($(this).attr("data-limit"));
2183                    var checkval = false;
2184                    if ($(this).parent().hasClass("group-blank-required")) {
2185                        $(this).find("input").each(function () {
2186                            var val = $(this).val();
2187                            var val2 = val.replace(' ', '');
2188                            if (val2 == '') {
2189                                checkval = true;
2190                            }
2191                        });
2192                    }
2193                    if ($(this).parent().hasClass("blank-required")) {
2194                        var val = $(this).val();
2195                        var val2 = val.replace(' ', '');
2196                        if ($(this).attr("type") == "text") {
2197                            if (val2 == '') {
2198                                checkval = true;
2199                            }
2200                        } else {
2201                            if (val2 == '' || val2 == 0) {
2202                                checkval = true;
2203                            }
2204                        }
2205                    }
2206                    if (!checkval) {
2207                        $(this).parent().find(".help-limit").remove();
2208                        $(this).parent().parent().removeClass("error");
2209                        var id = $(this).attr('id')
2210                        if (limitSettings.limitType == "Words") {
2211                            var lengthValue = $.trim($(this).val()).split(/[\s]+/);
2212                            if (lengthValue.length < limitSettings.limitMin) {
2213                                check++;
2214                                $(this).parent().parent().addClass("error");
2215                                $('#words-limit_' + id).append(
2216                                    $("<div />", {"class": "pull-left"}).append(
2217                                        $("<span/>", {
2218                                            "class": "help-block help-limit"
2219                                        }).append(
2220                                            $("<span/>", {
2221                                                "class": "validation-result label label-important",
2222                                                text: lang['JSN_UNIFORM_CONFIRM_FIELD_MIN_LENGTH'] + " " + limitSettings.limitMin + " " + lang['JSN_UNIFORM_WORDS']
2223                                            }))));
2224                            } else if (lengthValue.length > limitSettings.limitMax) {
2225                                check++;
2226                                $(this).parent().parent().addClass("error");
2227                                $('#words-limit_' + id).append(
2228                                    $("<div />", {"class": "pull-left"}).append(
2229                                        $("<span/>", {
2230                                            "class": "help-block help-limit"
2231                                        }).append(
2232                                            $("<span/>", {
2233                                                "class": "validation-result label label-important",
2234                                                text: lang['JSN_UNIFORM_CONFIRM_FIELD_MAX_LENGTH'] + " " + limitSettings.limitMax + " " + lang['JSN_UNIFORM_WORDS']
2235                                            }))));
2236                            }
2237                        } else {
2238                            if ($(this).val().length < limitSettings.limitMin) {
2239                                check++;
2240                                $(this).parent().parent().addClass("error");
2241                                $('#characters-limit_' + id).append(
2242                                    $("<div />", {"class": "pull-left"}).append(
2243                                        $("<span/>", {
2244                                            "class": "help-block help-limit"
2245                                        }).append(
2246                                            $("<span/>", {
2247                                                "class": "validation-result label label-important",
2248                                                text: lang['JSN_UNIFORM_CONFIRM_FIELD_MIN_LENGTH'] + " " + limitSettings.limitMin + " " + lang['JSN_UNIFORM_CHARACTERS']
2249                                            }))));
2250                            } else if ($(this).val().length > limitSettings.limitMax) {
2251                                check++;
2252                                $(this).parent().parent().addClass("error");
2253                                $('#characters-limit_' + id).append(
2254                                    $("<div />", {"class": "pull-left"}).append(
2255                                        $("<span/>", {
2256                                            "class": "help-block help-limit"
2257                                        }).append(
2258                                            $("<span/>", {
2259                                                "class": "validation-result label label-important",
2260                                                text: lang['JSN_UNIFORM_CONFIRM_FIELD_MAX_LENGTH'] + " " + limitSettings.limitMax + " " + lang['JSN_UNIFORM_CHARACTERS']
2261                                            }))));
2262                            }
2263                        }
2264
2265                    }
2266                }
2267            });
2268
2269            var $valueNumberLimit = $(_this).find(".number-limit-required");
2270            $valueNumberLimit.each(function () {
2271                if ($(this).parents(".control-group").css("display") != "none") {
2272                    var checkval = false;
2273                    if ($(this).hasClass("integer-required")) {
2274                        var val = $(this).val();
2275                        var regexp = /^[0-9]+$/;
2276                        if (!regexp.test(val)) {
2277                            checkval = true;
2278                        }
2279                    }
2280                    if (!checkval) {
2281                        var limitNumberSettings = $.evalJSON($(this).attr("data-limit"));
2282                        $(this).parent().find(".help-limit").remove();
2283                        $(this).parent().parent().removeClass("error");
2284                        if ($(this).val() != '' || $(this).val() != 0) {
2285                            if (parseInt($(this).val(), 10) < limitNumberSettings.limitMin) {
2286                                check++;
2287                                $(this).parent().parent().addClass("error");
2288                                $(this).parent().append(
2289                                    $("<span/>", {
2290                                        "class": "help-block help-limit"
2291                                    }).append(
2292                                        $("<span/>", {
2293                                            "class": "validation-result label label-important",
2294                                            text: lang['JSN_UNIFORM_CONFIRM_FIELD_MIN_NUMBER'] + " " + limitNumberSettings.limitMin
2295                                        })));
2296                            } else if (parseInt($(this).val(), 10) > limitNumberSettings.limitMax) {
2297                                check++;
2298                                $(this).parent().parent().addClass("error");
2299                                $(this).parent().append(
2300                                    $("<span/>", {
2301                                        "class": "help-block help-limit"
2302                                    }).append(
2303                                        $("<span/>", {
2304                                            "class": "validation-result label label-important",
2305                                            text: lang['JSN_UNIFORM_CONFIRM_FIELD_MAX_NUMBER'] + " " + limitNumberSettings.limitMax
2306                                        })));
2307                            }
2308                            else if (parseInt($(this).val(), 10) == limitNumberSettings.limitMax) {
2309                                if (parseInt($('.number-decimal').val(), 10) > 0) {
2310                                    check++;
2311                                    $(this).parent().parent().addClass("error");
2312                                    $(this).parent().append(
2313                                        $("<span/>", {
2314                                            "class": "help-block help-limit"
2315                                        }).append(
2316                                            $("<span/>", {
2317                                                "class": "validation-result label label-important",
2318                                                text: lang['JSN_UNIFORM_CONFIRM_FIELD_MAX_NUMBER'] + " " + limitNumberSettings.limitMax
2319                                            })));
2320                                }
2321                            }
2322                        }
2323
2324                    }
2325                }
2326            });
2327
2328            var $list = $(_this).find(".list-required");
2329            $list.each(function () {
2330                if ($(this).parents(".control-group").css("display") != "none") {
2331                    $(this).parent().find(".help-list").remove();
2332                    $(this).parent().removeClass("error");
2333                    if (!$(this).find("select").val()) {
2334                        $(this).parent().addClass("error");
2335                        $(this).find("select").after(
2336                            $("<span/>", {
2337                                "class": "help-block help-list"
2338                            }).append(
2339                                $("<span/>", {
2340                                    "class": "validation-result label label-important",
2341                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_INVALID']
2342                                })));
2343                        check++;
2344                    }
2345                }
2346            });
2347            var $inputchoices = $(_this).find(".choices-required");
2348            $inputchoices.each(function () {
2349                if ($(this).parents(".control-group").css("display") != "none") {
2350                    $(this).find(".help-choices").remove();
2351                    $(this).parent().removeClass("error");
2352                    if ($(this).find("input[type=radio]:checked").length < 1) {
2353                        $(this).parent().addClass("error");
2354                        $(this).append(
2355                            $("<span/>", {
2356                                "class": "help-block help-choices"
2357                            }).append(
2358                                $("<span/>", {
2359                                    "class": "validation-result label label-important",
2360                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
2361                                })))
2362                        check++;
2363                    } else if ($(this).find("input[type=radio]:checked").hasClass('allowOther') && $(this).find("input[type=radio]:checked").length == 1) {
2364                        var selfRadio = this;
2365                        $(this).find(".jsn-value-Others").focusout(function () {
2366                            var checkRadio = false;
2367                            var valchoices = $(selfRadio).find(".jsn-value-Others").val();
2368                            var valchoices2 = valchoices.replace(' ', '');
2369                            if (valchoices2 == '') {
2370                                checkRadio = true;
2371                            }
2372                            if (checkRadio) {
2373                                $(selfRadio).find(".help-choices").remove();
2374                                $(selfRadio).parent().addClass("error");
2375                                $(selfRadio).append(
2376                                    $("<span/>", {
2377                                        "class": "help-block help-choices"
2378                                    }).append(
2379                                        $("<span/>", {
2380                                            "class": "validation-result label label-important",
2381                                            text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
2382                                        })))
2383                                check++;
2384                            }
2385                        });
2386                        if (type != "detailInput") {
2387                            $(this).find(".jsn-value-Others").trigger("focusout");
2388                        }
2389                    }
2390                }
2391            });
2392
2393            //if (onchange != "onchange") {
2394            var $inputlikert = $(_this).find(".likert-required");
2395            $inputlikert.each(function () {
2396                var $column = $(this).find("td.likert_data_hidden input[type=hidden]").val();
2397                var likertRequiredCheck = 1;
2398                if ($column) {
2399                    $column = $.evalJSON($column);
2400                    likertRequiredCheck = $column.rows.length;
2401                }
2402                if ($(this).parents(".control-group").css("display") != "none") {
2403                    $(this).find(".help-likert").remove();
2404                    $(this).parents(".control-group").removeClass("error");
2405                    //$(this).find("tbody tr").each(function () {
2406                    if ($(this).find("input[type=radio]:checked").length < likertRequiredCheck) {
2407                        $(this).parents(".control-group").addClass("error");
2408                        if (!$(this).parents(".controls").find(".help-likert").size()) {
2409                            $(this).parents(".controls").append(
2410                                $("<span/>", {
2411                                    "class": "help-block help-likert"
2412                                }).append(
2413                                    $("<span/>", {
2414                                        "class": "validation-result label label-important",
2415                                        text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
2416                                    })))
2417                        }
2418                        check++;
2419                    }
2420                    else {
2421                        $(this).parents(".control-group").removeClass("error");
2422                        $(this).parents(".control-group").find(".help-likert").remove()
2423                    }
2424                    //})
2425                }
2426            });
2427            //}
2428
2429            var $inputCheckbox = $(_this).find(".checkbox-required");
2430            $inputCheckbox.each(function () {
2431                if ($(this).parents(".control-group").css("display") != "none") {
2432                    $(this).find(".help-checkbox").remove();
2433                    $(this).parent().parent().removeClass("error");
2434                    if ($(this).find("input[type=checkbox]:checked").length < 1) {
2435                        $(this).parent().parent().addClass("error");
2436                        $(this).append(
2437                            $("<span/>", {
2438                                "class": "help-block help-checkbox"
2439                            }).append(
2440                                $("<span/>", {
2441                                    "class": "validation-result label label-important",
2442                                    text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
2443                                })))
2444                        check++;
2445                    } else if ($(this).find("input[type=checkbox]:checked").length == 1 && $(this).find("input[type=checkbox]:checked").hasClass('allowOther')) {
2446                        var selfCheckbox = this;
2447                        $(this).find(".jsn-value-Others").focusout(function () {
2448                            var checkCheckbox = false;
2449                            var valchoices = $(selfCheckbox).find(".jsn-value-Others").val();
2450                            var valchoices2 = valchoices.replace(' ', '');
2451                            if (valchoices2 == '') {
2452                                checkCheckbox = true;
2453                            }
2454                            if (checkCheckbox) {
2455                                $(selfCheckbox).find(".help-checkbox").remove();
2456                                $(selfCheckbox).parent().parent().addClass("error");
2457                                $(selfCheckbox).append(
2458                                    $("<span/>", {
2459                                        "class": "help-block help-checkbox"
2460                                    }).append(
2461                                        $("<span/>", {
2462                                            "class": "validation-result label label-important",
2463                                            text: lang['JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY']
2464                                        })))
2465                                check++;
2466                            }
2467                        });
2468                        if (type != "detailInput") {
2469                            $(this).find(".jsn-value-Others").trigger("focusout");
2470                        }
2471                    }
2472                }
2473            });
2474            if (check > 0 && type != "detailInput") {
2475                var fieldFocus = $(_this).find(".error")[0];
2476                if ($(fieldFocus).find(".blank-required").size()) {
2477                    $(fieldFocus).find("input,select,textarea").each(function () {
2478                        var val = $(this).val();
2479                        var val2 = val.replace(' ', '');
2480                        if (val2 == '' || val2 == 0) {
2481                            $(window).scrollTop($(this).offset().top - 50);
2482                            $(this).focus();
2483                            if ($(this).attr('type') != 'file') {
2484                                $(this).click();
2485                            }
2486                            return false;
2487                        }
2488                    })
2489                }
2490                else if ($(fieldFocus).find(".likert-required").size()) {
2491                    var fieldFocus = $(_this).find(".error input")[1];
2492                    $(fieldFocus).focus();
2493                }
2494                else {
2495                    var fieldFocus = $(_this).find(".error input,.error textarea,.error select")[0];
2496                    $(window).scrollTop($(fieldFocus).offset().top - 50);
2497                    $(fieldFocus).focus();
2498                }
2499                return false;
2500            }
2501            if (check > 0 && type == "detailInput") {
2502                return false;
2503            }
2504            return true;
2505        };
2506        $.getBoxStyle = function (element) {
2507
2508            var style = {
2509                width: element.width(),
2510                height: element.height(),
2511                outerHeight: element.outerHeight(),
2512                outerWidth: element.outerWidth(),
2513                offset: element.offset(),
2514                margin: {
2515                    left: parseInt(element.css('margin-left')),
2516                    right: parseInt(element.css('margin-right')),
2517                    top: parseInt(element.css('margin-top')),
2518                    bottom: parseInt(element.css('margin-bottom'))
2519                },
2520                padding: {
2521                    left: parseInt(element.css('padding-left')),
2522                    right: parseInt(element.css('padding-right')),
2523                    top: parseInt(element.css('padding-top')),
2524                    bottom: parseInt(element.css('padding-bottom'))
2525                }
2526            };
2527            return style;
2528        };
2529
2530        function jsnLoadForm($) {
2531            $(".jsn-uniform").each(function () {
2532                if ($(this).attr("data-form-name")) {
2533                    var getLang = $(this).find("span.jsn-language").attr("data-value");
2534                    baseUrl = $(this).find("span.jsn-base-url").attr("data-value");
2535                    if (getLang) {
2536                        lang = $.evalJSON(getLang);
2537                    }
2538                    $.initJSNForm($(this).find("form"));
2539                }
2540            });
2541        }
2542
2543        function JSNUFKeepSessionAlive(path) {
2544            var req = false;
2545            if (window.XMLHttpRequest && !(window.ActiveXObject)) {
2546                try {
2547                    req = new XMLHttpRequest();
2548                }
2549                catch (e) {
2550                    req = false;
2551                }
2552            }
2553            else if (window.ActiveXObject) {
2554                try {
2555                    req = new ActiveXObject("Msxml2.XMLHTTP");
2556                }
2557                catch (e) {
2558                    try {
2559                        req = ActiveXObject("Microsoft.XMLHTTP");
2560                    }
2561                    catch (e) {
2562                        req = false
2563                    }
2564                }
2565            }
2566            if (req) {
2567                req.onreadystatechange = function () {
2568                    // only if req show loaded
2569                    if (req.readyState == 4) {
2570                        // only if OK
2571                        if (req.status == 200) {
2572
2573                        } else {
2574
2575                        }
2576                    }
2577                }
2578                req.open("HEAD", path, true);
2579                req.send();
2580            }
2581        }
2582        jQuery(document).ready(jsnLoadForm($));
2583    });
2584})(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.