1(function($) { 2 var Simple = function() { 3 }; 4 5 Simple.prototype.human = false; 6 7 Simple.prototype.instances = []; 8 9 Simple.prototype.resources = { 10 loading: "catalog/view/image/loading.gif", 11 next: "catalog/view/image/next_gray.png", 12 nextCompleted: "catalog/view/image/next_green.png" 13 }; 14 15 Simple.prototype.serializeFields = function($block) { 16 var serialized = $block.find("input,select,textarea").serializeArray(); 17 18 $block.find('input:checkbox:not(:checked)').each(function() { 19 var found = false; 20 21 for (var i in serialized) { 22 if (!serialized.hasOwnProperty(i)) continue; 23 24 if (serialized[i].name == this.name) { 25 found = true; 26 } 27 } 28 29 if (!found) { 30 serialized.push({ 31 name: this.name, 32 value: this.dataset && this.dataset.uncheckedValue ? this.dataset.uncheckedValue : '' 33 }); 34 } 35 }); 36 37 return serialized; 38 }; 39 40 Simple.prototype.getValidationRules = function() { 41 var self = this; 42 43 return { 44 notEmpty: function($rule, silent) { 45 var fieldId = $rule.attr("data-for"); 46 var fieldType = $rule.attr("data-for-type"); 47 48 if (typeof silent === "undefined") { 49 silent = false; 50 } 51 52 if (fieldId) { 53 var $field = $(self.params.mainContainer).find("#" + fieldId); 54 55 if (fieldType == 'checkbox' || fieldType == 'radio') { 56 $field = $(self.params.mainContainer).find("[id*=" + fieldId + "_]"); 57 } 58 59 if ($field.length) { 60 if (!$rule.attr("data-required")) { 61 $rule.hide(); 62 return true; 63 } 64 65 var value = ""; 66 67 if (fieldType == "checkbox" || fieldType == "radio") { 68 var arr = $field.serializeArray(); 69 var values = []; 70 for (var i in arr) { 71 if (!arr.hasOwnProperty(i)) continue; 72 values.push(arr[i].value); 73 } 74 value = values.join(','); 75 } else { 76 value = $field.val(); 77 } 78 79 if (!value) { 80 if (!silent) { 81 if (typeof toastr !== 'undefined' && self.params.notificationToasts) { 82 toastr.error($rule.text()); 83 } 84 85 if (self.params.notificationDefault) { 86 $rule.show(); 87 } 88 } 89 return false; 90 } else { 91 $rule.hide(); 92 return true; 93 } 94 } 95 } 96 return true; 97 }, 98 equal: function($rule, silent) { 99 var fieldId = $rule.attr("data-for"); 100 var equalId = $rule.attr("data-equal"); 101 102 if (typeof silent === "undefined") { 103 silent = false; 104 } 105 106 if (fieldId && equalId) { 107 var $mainContainer = $(self.params.mainContainer); 108 109 var $field = $mainContainer.find("#" + fieldId); 110 var $equal = $mainContainer.find("#" + equalId); 111 112 if ($field.length && $equal.length) { 113 if ($equal.val() != $field.val()) { 114 if (!silent) { 115 if (typeof toastr !== 'undefined' && self.params.notificationToasts) { 116 toastr.error($rule.text()); 117 } 118 119 if (self.params.notificationDefault) { 120 $rule.show(); 121 } 122 } 123 return false; 124 } else { 125 $rule.hide(); 126 return true; 127 } 128 } 129 } 130 return true; 131 }, 132 byLength: function($rule, silent) { 133 var fieldId = $rule.attr("data-for"); 134 135 if (typeof silent === "undefined") { 136 silent = false; 137 } 138 139 if (fieldId) { 140 var $field = $(self.params.mainContainer).find("#" + fieldId); 141 142 if ($field.length) { 143 var min = 0; 144 var max = 1000; 145 146 if ($rule.attr("data-length-min")) { 147 min = ~~$rule.attr("data-length-min"); 148 } 149 150 if ($rule.attr("data-length-max")) { 151 max = ~~$rule.attr("data-length-max"); 152 } 153 154 var value = ($field.val() + '').trim(); 155 156 if (!value && !$rule.attr("data-required")) { 157 $rule.hide(); 158 return true; 159 } 160 161 if (value.length < min || value.length > max) { 162 if (!silent) { 163 if (typeof toastr !== 'undefined' && self.params.notificationToasts) { 164 toastr.error($rule.text()); 165 } 166 167 if (self.params.notificationDefault) { 168 $rule.show(); 169 } 170 } 171 return false; 172 } else { 173 $rule.hide(); 174 175 return true; 176 } 177 } 178 } 179 return true; 180 }, 181 regexp: function($rule, silent) { 182 var fieldId = $rule.attr("data-for"); 183 var fieldType = $rule.attr("data-for-type"); 184 185 if (typeof silent === "undefined") { 186 silent = false; 187 } 188 189 if (fieldId) { 190 var $field = $(self.params.mainContainer).find("#" + fieldId); 191 192 if (fieldType == 'checkbox' || fieldType == 'radio') { 193 $field = $(self.params.mainContainer).find("[id*=" + fieldId + "_]"); 194 } 195 196 if ($field.length) { 197 var regexp = $rule.attr("data-regexp"); 198 199 if (regexp) { 200 var value = ""; 201 202 if (fieldType == "checkbox" || fieldType == "radio") {
203 var arr = $field.serializeArray(); 204 var values = []; 205 for (var i in arr) { 206 if (!arr.hasOwnProperty(i)) continue; 207 values.push(arr[i].value); 208 } 209 value = values.join(','); 210 } else { 211 value = $field.val(); 212 } 213 214 if (!value && !$rule.attr("data-required")) { 215 $rule.hide(); 216 return true; 217 } 218 219 try { 220 if (!value.match(regexp)) { 221 if (!silent) { 222 if (typeof toastr !== 'undefined' && self.params.notificationToasts) { 223 toastr.error($rule.text()); 224 } 225 226 if (self.params.notificationDefault) { 227 $rule.show(); 228 } 229 } 230 return false; 231 } else { 232 $rule.hide(); 233 return true; 234 } 235 } catch (err) { 236 237 } 238 } 239 } 240 } 241 return true; 242 }, 243 api: function($rule, silent) { 244 var fieldId = $rule.attr("data-for"); 245 var fieldType = $rule.attr("data-for-type"); 246 247 var $mainContainer = $(self.params.mainContainer); 248 249 if (typeof silent === "undefined") { 250 silent = false; 251 } 252 253 if (fieldId) { 254 var $field = $mainContainer.find("#" + fieldId); 255 256 if (fieldType == 'checkbox' || fieldType == 'radio') { 257 $field = $(self.params.mainContainer).find("[id*=" + fieldId + "_]"); 258 } 259 260 if ($field.length) { 261 var method = $rule.attr("data-method"); 262 263 if (method) { 264 var filter = ""; 265 266 if ($rule.attr("data-filter")) { 267 var filterType = $rule.attr("data-filter-type"); 268 269 var $filter = $mainContainer.find("#" + $rule.attr("data-filter")); 270 271 if (filterType == 'checkbox' || filterType == 'radio') { 272 $filter = $mainContainer.find("[id*=" + $rule.attr("data-filter") + "_]"); 273 } 274 275 if ($filter.length) { 276 if (filterType == "radio" || filterType == "checkbox") { 277 var arr = $filter.serializeArray(); 278 var values = []; 279 for (var i in arr) { 280 if (!arr.hasOwnProperty(i)) continue; 281 values.push(arr[i].value); 282 } 283 filter = values.join(','); 284 } else { 285 filter = $filter.val(); 286 } 287 } else if ($rule.attr("data-filter-value")) { 288 filter = $rule.attr("data-filter-value"); 289 } 290 } 291 292 var custom = $rule.attr("data-custom") ? true : false; 293 294 var deferred = $.Deferred(); 295 296 var value = ""; 297 298 if (fieldType == "checkbox" || fieldType == "radio") {
299 var arr = $field.serializeArray(); 300 var values = []; 301 for (var i in arr) { 302 if (!arr.hasOwnProperty(i)) continue; 303 values.push(arr[i].value); 304 } 305 value = values.join(','); 306 } else { 307 value = $field.val(); 308 } 309 310 $.get("index.php?" + self.params.additionalParams + "route=common/simple_connector/validate&method=" + method + "&filter=" + encodeURIComponent(filter) + "&value=" + encodeURIComponent(value) + (custom ? "&custom=1 " : ""), function(data) { 311 data = data.trim(); 312 313 if (data == "invalid") { 314 if (!silent) { 315 if (typeof toastr !== 'undefined' && self.params.notificationToasts) { 316 toastr.error($rule.text()); 317 } 318 319 if (self.params.notificationDefault) { 320 $rule.show(); 321 } 322 } 323 deferred.resolve(false); 324 } else { 325 $rule.hide(); 326 deferred.resolve(true); 327 } 328 }); 329 330 return deferred.promise(); 331 } 332 } 333 } 334 335 return true; 336 } 337 }; 338 }; 339 340 Simple.prototype.initValidationRules = function() { 341 var self = this; 342 var $mainContainer = $(self.params.mainContainer); 343 344 $mainContainer.find(".simplecheckout-rule-group").each(function() { 345 var $ruleGroup = $(this); 346 var fieldId = $(this).attr("data-for"); 347 var promises = []; 348 349 if (fieldId) { 350 var $field = $mainContainer.find("#" + fieldId); 351 352 if (!$field.length) { 353 $field = $mainContainer.find("[id*=" + fieldId + "_]"); 354 } 355 356 if ($field.length) { 357 var checker = function() { 358 var result = true; 359 360 $ruleGroup.find(".simplecheckout-rule").each(function() { 361 var $rule = $(this); 362 var type = $(this).attr("data-rule"); 363 var rules = self.getValidationRules(); 364 365 if (typeof rules[type] === "function") { 366 var promise = $.when(rules[type]($rule)).then(function(ruleResult){ 367 if (!ruleResult) { 368 result = false; 369 } 370 371 return $.when(ruleResult); 372 }); 373 374 promises.push(promise); 375 } 376 }); 377 378 $.when.apply($, promises).then(function() { 379 $field.attr("data-valid", result ? "true" : "false"); 380 381 if (!result) { 382 $field.parents(".form-group").addClass("has-error") 383 } else { 384 $field.parents(".form-group").removeClass("has-error") 385 } 386 }); 387 }; 388 389 var $pairField = false; 390 391 $ruleGroup.find(".simplecheckout-rule").each(function() { 392 if ($(this).attr("data-rule") == 'equal' && $(this).attr("data-equal")) { 393 if ($("#" + $(this).attr("data-equal")).length) { 394 $pairField = $("#" + $(this).attr("data-equal")); 395 } 396 } 397 }); 398 399 if (!self.params.notificationToasts && $field.attr('data-validate-on') && typeof $field[$field.attr('data-validate-on')] === 'function') { 400 $field[$field.attr('data-validate-on')](checker); 401 402 if ($pairField) { 403 $pairField[$field.attr('data-validate-on')](checker); 404 } 405 } else { 406 $field.change(checker); 407 408 if ($pairField) { 409 $pairField.change(function() { 410 if ($field.val()) { 411 checker.call($field); 412 } 413 }); 414 } 415 } 416 } 417 } 418 }); 419 }; 420 421 Simple.prototype.checkRules = function(container, silent) { 422 var self = this; 423 var fields = {}; 424 var resultAll = true; 425 var allPromises = []; 426 var $mainContainer = $(self.params.mainContainer); 427 var $container = $mainContainer; 428 429 if (container) { 430 $container = $mainContainer.find(container); 431 } 432 433 if (typeof silent === "undefined") { 434 silent = false; 435 } 436 437 if ($container.length && ($container.is(":visible") || $container.find('*').is(":visible"))) { 438 $container.find(".simplecheckout-rule-group").each(function() { 439 var ruleGroupResult = true; 440 var promises = []; 441 var $ruleGroup = $(this); 442 var fieldId = $(this).attr("data-for"); 443 444 if (fieldId) { 445 var $field = $mainContainer.find("#" + fieldId); 446 447 if (!$field.length) { 448 $field = $mainContainer.find("[id*=" + fieldId + "_]"); 449 } 450 451 if ($field.length) { 452 $ruleGroup.find(".simplecheckout-rule").each(function() { 453 var $rule = $(this); 454 var type = $(this).attr("data-rule"); 455 var rules = self.getValidationRules();
456 457 if (typeof rules[type] === "function") { 458 var promise = $.when(rules[type]($rule, silent)).then(function(ruleResult){ 459 if (!ruleResult) { 460 ruleGroupResult = false; 461 } 462 463 return $.when(ruleResult); 464 }); 465 466 promises.push(promise); 467 } 468 }); 469 470 var groupPromise = $.when.apply($, promises).then(function() { 471 $field.attr("data-valid", ruleGroupResult ? "true" : "false"); 472 473 if (!ruleGroupResult) { 474 $field.parents(".form-group").addClass("has-error") 475 } else { 476 $field.parents(".form-group").removeClass("has-error") 477 } 478 479 if (!ruleGroupResult) { 480 resultAll = false; 481 } 482 }); 483 484 allPromises.push(groupPromise); 485 } 486 } 487 }); 488 } 489 490 var deferred = $.Deferred(); 491 492 $.when.apply($, allPromises).then(function() { 493 deferred.resolve(resultAll); 494 }); 495 496 return deferred.promise(); 497 }; 498 499 Simple.prototype.setAddressFields = function(block, countryId, zoneId, city, postcode, callbackAfterChanging) { 500 var self = this; 501 var $mainContainer = $(self.params.mainContainer); 502 503 var setFields = function() { 504 if (countryId) { 505 $mainContainer.find("#" + block + "_country_id").val(countryId); 506 } 507 if (zoneId) { 508 $mainContainer.find("#" + block + "_zone_id").val(zoneId); 509 } 510 if (city) { 511 $mainContainer.find("#" + block + "_city").val(city); 512 } 513 if (postcode) { 514 $mainContainer.find("#" + block + "_postcode").val(postcode); 515 } 516 517 if (typeof callbackAfterChanging === "function") { 518 callbackAfterChanging(); 519 } else if (typeof reloadAll === "function") { 520 reloadAll(); 521 } 522 }; 523 524 if ($mainContainer.find("#" + block + "_country_id").val() != countryId) { 525 $mainContainer.find("#" + block + "_zone_id").load("index.php?" + self.params.additionalParams + "route=common/simple_connector/zone&country_id=" + countryId, function() { 526 setFields(); 527 }); 528 } else { 529 setFields(); 530 } 531 }; 532 533 Simple.prototype.initFileUploader = function(beforeUploading, afterUploading) { 534 var self = this; 535 var $mainContainer = $(self.params.mainContainer); 536 537 $mainContainer.find("[data-file]").each(function() { 538 var hiddenInputId = $(this).attr("data-file"); 539 var fileNameId = hiddenInputId ? "text_" + hiddenInputId : ""; 540 541 $(this).on("click", function() { 542 $("#form-upload").remove(); 543 544 $("body").prepend("<form enctype='multipart/form-data' id='form-upload' style='display: none;'><input type='file' name='file' /></form>"); 545 546 $("#form-upload input[name='file']").trigger("click"); 547 548 if (typeof fileUploaderTimer !== "undefined") { 549 clearInterval(fileUploaderTimer); 550 } 551 552 fileUploaderTimer = setInterval(function() { 553 if ($("#form-upload input[name='file']").val() != "") { 554 clearInterval(fileUploaderTimer); 555 556 $.ajax({
557 url: "index.php?" + self.params.additionalParams + "route=common/simple_connector/upload", 558 type: "post", 559 dataType: "json", 560 data: new FormData($("#form-upload")[0]), 561 cache: false, 562 contentType: false, 563 processData: false, 564 beforeSend: function() { 565 if (typeof beforeUploading === "function") { 566 beforeUploading(); 567 } 568 }, 569 complete: function() { 570 $("#form-upload").remove(); 571 572 if (typeof afterUploading === "function") { 573 afterUploading(); 574 } 575 }, 576 success: function(json) { 577 if (json["file"]) { 578 if (hiddenInputId) { 579 $mainContainer.find("#" + hiddenInputId).val(json["file"]).trigger('change'); 580 } 581 if (fileNameId) { 582 var fname = typeof json["filename"] !== "undefined" && json["filename"] ? json["filename"] : file; 583 $mainContainer.find("#" + fileNameId).text(fname); 584 } 585 } 586 587 if (json["error"]) { 588 if (hiddenInputId) { 589 $mainContainer.find("#" + hiddenInputId).attr("value", ""); 590 } 591 if (fileNameId) { 592 $mainContainer.find("#" + fileNameId).text(json["error"]); 593 } 594 } 595 }, 596 error: function(xhr, ajaxOptions, thrownError) { 597 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 598 } 599 }); 600 } 601 }, 500); 602 }); 603 }); 604 }; 605 606 Simple.prototype.initAutocomplete = function(callbackAfterChanging) { 607 var self = this; 608 var $fields = $(self.params.mainContainer).find("#payment_address_city, #shipping_address_city, #register_city, #address_city"); 609 if (typeof($fields.autocomplete) !== "undefined") { 610 $fields.each(function() { 611 var $field = $(this) 612 var tmp = $field.attr("data-onchange"); 613 if (tmp) { 614 $field.removeAttr("data-onchange"); 615 $field.removeAttr("data-reload-payment-form"); 616 $field.attr("data-onchange-delayed", tmp); 617 } 618 619 $field.on("keydown", function(){ 620 $field.data("status", "started"); 621 }); 622 623 $field.autocomplete({ 624 source: function(request, response) { 625 $.ajax({
626 url: "index.php?" + self.params.additionalParams + "route=common/simple_connector/geo", 627 dataType: "json", 628 data: { 629 term: typeof request.term !== "undefined" ? request.term : request 630 }, 631 success: function(data) { 632 response($.map(data, function(item) { 633 if (typeof request.term === "undefined") { 634 return { 635 id: item.id, 636 label: item.full, 637 value: item.id, 638 postcode: item.postcode, 639 zone_id: item.zone_id, 640 country_id: item.country_id, 641 city: item.city 642 }; 643 } else { 644 return { 645 id: item.id, 646 label: item.full, 647 value: item.city, 648 postcode: item.postcode, 649 zone_id: item.zone_id, 650 country_id: item.country_id, 651 city: item.city 652 }; 653 } 654 655 })); 656 } 657 }); 658 }, 659 minLength: 2, 660 delay: 300, 661 close: function( event, ui ) { 662 if ($field.data("status") == "started") { 663 //$field.val(""); 664 callbackAfterChanging($field); 665 } 666 }, 667 select: function(event, ui) { 668 $field.data("status", "selected"); 669 var name = $field.attr("name"); 670 var from = name.substr(0, name.indexOf("[")); 671 672 if (ui !== undefined) { 673 self.setAddressFields(from, ui.item.country_id, ui.item.zone_id, ui.item.city, ui.item.postcode, function() { 674 callbackAfterChanging($field); 675 }); 676 } else { 677 self.setAddressFields(from, event.country_id, event.zone_id, event.city, event.postcode, function() { 678 callbackAfterChanging($field); 679 }); 680 } 681 } 682 }); 683 }); 684 } 685 }; 686 687 Simple.prototype.initPopups = function() { 688 var self = this; 689 var $mainContainer = $(self.params.mainContainer); 690 691 if (typeof($.fancybox) == "function") { 692 $mainContainer.find(".fancybox").fancybox({ 693 width: 560, 694 height: 560, 695 autoDimensions: false 696 }); 697 } 698 699 if (typeof($.colorbox) == "function") { 700 $mainContainer.find(".colorbox").colorbox({ 701 width: 560, 702 height: 560 703 }); 704 } 705 706 if (typeof($.prettyPhoto) !== "undefined") { 707 $mainContainer.find("a[rel^='prettyPhoto']").prettyPhoto({ 708 theme: "light_square", 709 opacity: 0.5, 710 social_tools: "", 711 deeplinking: false 712 }); 713 } 714 }; 715 716 Simple.prototype.initTooltips = function(bootstrap) { 717 var self = this; 718 var $mainContainer = $(self.params.mainContainer); 719 720 $mainContainer.find(".simplecheckout-tooltip[data-for]").each(function() { 721 var $target = $mainContainer.find("#" + $(this).attr("data-for"));
722 723 if ($target.length) { 724 if ($target.attr("data-file")) { 725 $(this).show(); 726 } else { 727 if (bootstrap && typeof $target.tooltip === "function") { 728 $target.tooltip({ 729 html: true, 730 title: $(this).html(), 731 placement: 'bottom', 732 container: 'body' 733 }); 734 } else if (typeof $target.easyTooltip === "function") { 735 $target.easyTooltip({ 736 useElement: self.params.mainContainer + " .simplecheckout-tooltip[data-for='" + $(this).attr("data-for") + "']", 737 clickRemove: true 738 }); 739 } 740 } 741 } 742 }); 743 }; 744 745 Simple.prototype.initMasks = function() { 746 var self = this; 747 var $mainContainer = $(self.params.mainContainer); 748 749 if (typeof $(document).inputmask !== "undefined" /*&& !window.localStorage.getItem('inputmaskFailed')*/) { 750 var masked = []; 751 $mainContainer.find("input[data-simple-mask]").each(function(indx) { 752 var mask = $(this).attr("data-simple-mask"); 753 var id = $(this).attr("id"); 754 if (mask && id) { 755 masked[masked.length] = [id, mask]; 756 } 757 }); 758 try { 759 for (var i = 0; i < masked.length; i++) { 760 var id = masked[i][0]; 761 var mask = masked[i][1]; 762 763 $mainContainer.find("input[id=" + id + "]") 764 .inputmask({ 765 mask: mask, 766 clearMaskOnLostFocus: true, 767 clearIncomplete: true, 768 }); 769 /*.on('change', function() { 770 if ($(this).val().indexOf('_') > -1) { 771 window.localStorage.setItem('inputmaskFailed', true); 772 $(this).inputmask('remove'); 773 } 774 });*/ 775 } 776 } catch (err) {} 777 } 778 }; 779 780 Simple.prototype.initSelect2 = function() { 781 var self = this; 782 783 if (typeof $(document).select2 !== "undefined") { 784 $(self.params.mainContainer).find("select[data-type=select2]").each(function() { 785 $(this).select2({ 786 787 }); 788 }); 789 } 790 }; 791 792 Simple.prototype.initDatepickers = function(callbackAfterChanging) { 793 var self = this; 794 var days = false; 795 796 var checkWeekendAndHoliday = function(date) { 797 if (typeof $.datepicker !== "undefined") { 798 var noWeekend = $.datepicker.noWeekends(date); 799 } else { 800 var noWeekend = [(date.getDay() == 0 || date.getDay() == 6), ""]; 801 } 802 803 if (noWeekend[0]) { 804 return checkNationalDay(date); 805 } else { 806 return noWeekend; 807 } 808 }; 809 810 var checkNationalDay = function(date) { 811 var days = [ 812 [1, 1, "ru"], 813 [1, 7, "ru"], 814 [5, 9, "ru"] 815 ]; 816 817 for (i = 0; i < days.length; i++) { 818 if (date.getMonth() == days[i][0] - 1 && date.getDate() == days[i][1]) { 819 return [false, days[i][2] + "_day"]; 820 } 821 } 822 return [true, ""]; 823 }; 824 825 var addDays = function(add, onlyWeekdays) { 826 var result = add | 0; 827 var self = this; 828 if (onlyWeekdays) { 829 var i = 1; 830 while (i <= result) { 831 var d = new Date(); 832 d.setDate(d.getDate() + i); 833 var test = checkWeekendAndHoliday(d); 834 if (!test[0]) { 835 result++; 836 } 837 i++; 838 } 839 } 840 841 return result; 842 }; 843 844 var checkDays = function(date) { 845 for (var i = 0; i < days.length; i++) { 846 if (date.getDay() == days[i]) { 847 return [true, ""]; 848 } 849 } 850 851 return [false, ""]; 852 }; 853 854 $(self.params.mainContainer).find("input[type=date],input[type=datetime],input[data-type=date],input[data-type=datetime]").each(function() { 855 var onlyWeekdays = $(this).attr("data-weekdays-only") ? true : false, 856 min = new Date(), 857 max = new Date(); 858 859 if ($(this).attr("data-days-only")) { 860 days = $(this).attr("data-days-only").split(","); 861 onlyWeekdays = false; 862 } 863 864 if ($(this).attr("data-start-day")) { 865 min = $(this).attr("data-start-day"); 866 } else if ($(this).attr("data-start-after")) { 867 min.setDate(min.getDate() + addDays($(this).attr("data-start-after"), onlyWeekdays)); 868 } 869 870 if ($(this).attr("data-end-day")) { 871 max = $(this).attr("data-end-day"); 872 } else if ($(this).attr("data-end-after")) { 873 max.setDate(max.getDate() + addDays($(this).attr("data-end-after"), onlyWeekdays)); 874 } 875 876 if (typeof($(this).datetimepicker) !== "undefined") { 877 var disabledDays = []; 878 879 if (onlyWeekdays || typeof days.length !== "undefined") { 880 var useDays = false; 881 882 if (days.length !== "undefined" && days.length) { 883 useDays = true; 884 } 885 886 for (var i = 0; i < 7; i++) { 887 if (((i == 6 || i == 0) && onlyWeekdays) || (useDays && $.inArray(i + "", days) == -1)) { 888 disabledDays.push(i); 889 } 890 } 891 } 892 893 var $el = $(this); 894 895 $el.datetimepicker({ 896 pickDate: true, 897 pickTime: $el.attr("data-type") == "datetime" ? true : false, 898 showTimepicker: false, 899 daysOfWeekDisabled: disabledDays, 900 firstDay: 1,
901 beforeShowDay: onlyWeekdays ? checkWeekendAndHoliday : (days ? checkDays : null), 902 minDate: min ? min : null, 903 maxDate: max ? max : null, 904 useCurrent: false, 905 showButtonPanel: false, 906 language: self.params.languageCode, 907 locale: self.params.languageCode, 908 onSelect: function() { 909 $el.datetimepicker('hide'); 910 } 911 }).on('dp.change', function(dateText, inst) { 912 if (typeof callbackAfterChanging === "function") { 913 callbackAfterChanging($el); 914 } 915 }); 916 917 $el.next().on('click', function () { 918 $el.focus(); 919 }); 920 } else if (typeof($(this).datepicker) !== "undefined") { 921 $(this).datepicker({ 922 firstDay: 1, 923 beforeShowDay: onlyWee
923kdays ? checkWeekendAndHoliday : (days ? checkDays : null), 924 minDate: min ? min : null, 925 maxDate: max ? max : null, 926 onSelect: function(dateText, inst) { 927 if (typeof callbackAfterChanging === "function") { 928 callbackAfterChanging($(this)); 929 } 930 } 931 }); 932 } 933 }); 934 }; 935 936 Simple.prototype.initTimepickers = function(callbackAfterChanging) { 937 var self = this; 938 var min = ""; 939 940 if ($(this).attr("data-min-time")) { 941 min = ~~ ($(this).attr("data-min-time").split(":")[0]); 942 } 943 944 var max = ""; 945 946 if ($(this).attr("data-max-time")) { 947 max = ~~ ($(this).attr("data-max-time").split(":")[0]); 948 } 949 950 var onlyHours = $(this).attr("data-hours-only") ? true : false; 951 952 $(self.params.mainContainer).find("input[type=time],input[data-type=time]").each(function() { 953 if (typeof($(this).datetimepicker) !== "undefined") { 954 var $el = $(this); 955 956 $el.datetimepicker({ 957 pickDate: false, 958 //language: document.cookie.match(new RegExp('language=([^;]+)')) && document.cookie.match(new RegExp('language=([^;]+)'))[1], 959 language: self.params.languageCode, 960 locale: self.params.languageCode, 961 pickTime: true, 962 showMinute: !onlyHours, 963 useCurrent: false 964 }).on('dp.change', function(dateText, inst) { 965 if (typeof callbackAfterChanging === "function") { 966 callbackAfterChanging($el); 967 } 968 }); 969 970 $el.next().on('click', function () { 971 $el.focus(); 972 }); 973 } else if (typeof($(this).timepicker) !== "undefined") { 974 $(this).timepicker({ 975 hourMin: min, 976 hourMax: max, 977 showMinute: !onlyHours, 978 onSelect: function(datetimeText, datepickerInstance) { 979 if (typeof callbackAfterChanging === "function") { 980 callbackAfterChanging($(this)); 981 } 982 }, 983 onClose: function() { 984 if (typeof callbackAfterChanging === "function") { 985 callbackAfterChanging($(this)); 986 } 987 } 988 }); 989 } 990 }); 991 }; 992 993 Simple.prototype.checkIsHuman = function() { 994 var self = this; 995 var timeoutId = 0; 996 997 $("body").on("mousemove", function() { 998 if (!self.human) { 999 clearTimeout(timeoutId); 1000 1001 timeoutId = window.setTimeout(function(){ 1002 self.human = true; 1003 $.get("index.php?" + self.params.additionalParams + "route=common/simple_connector/human"); 1004 }, 300); 1005 } 1006 }); 1007 }; 1008 1009 $.ajaxSetup({ cache: false }); 1010 1011 window.Simple = Simple; 1012})(jQuery || $); 1013 1014if (typeof String.prototype.trim !== "function") { 1015 String.prototype.trim = function() { 1016 return this.replace(/^\s+|\s+$/g, ""); 1017 }; 1018} 1019 1020function includeScript(url) { 1021 document.write("<script type='text/javascript' src='" + url + "'></script>"); 1022} 1023 1024function includeStyle(url) { 1025 document.write("<link rel='stylesheet' type='text/css' href='" + url + "' media='screen' />"); 1026} 1027 1028function bind(func, context) { 1029 return function() { 1030 return func.apply(context, arguments); 1031 }; 1032} 1033 1034function inherit(proto) { 1035 function F() {} 1036 F.prototype = proto; 1037 var object = new F(); 1038 return object; 1039} 1040 1041function reloadAll() { 1042 if (typeof Simple.prototype.instances !== "undefined") { 1043 for (var i in Simple.prototype.instances) { 1044 if (!Simple.prototype.instances.hasOwnProperty(i)) continue; 1045 1046 if (typeof Simple.prototype.instances[i].reloadAll === "function") { 1047 Simple.prototype.instances[i].reloadAll(); 1048 } 1049 } 1050 } 1051} 1052 1053function reloadBlock() { 1054 if (typeof Simple.prototype.instances !== "undefined") { 1055 for (var i in Simple.prototype.instances) { 1056 if (!Simple.prototype.instances.hasOwnProperty(i)) continue; 1057 1058 if (typeof Simple.prototype.instances[i].reloadBlock === "function") { 1059 Simple.prototype.instances[i].reloadBlock.apply(Simple.prototype.instances[i], arguments); 1060 } 1061 } 1062 } 1063} 1064 1065if (!window.localStorage) { 1066 window.localStorage = { 1067 getItem: function (sKey) { 1068 if (!sKey || !this.hasOwnProperty(sKey)) { return null; } 1069 return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1")); 1070 }, 1071 key: function (nKeyId) { 1072 return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/, "").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nKeyId]); 1073 }, 1074 setItem: function (sKey, sValue) {
1075 if(!sKey) { return; } 1076 document.cookie = escape(sKey) + "=" + escape(sValue) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/"; 1077 this.length = document.cookie.match(/\=/g).length; 1078 }, 1079 length: 0, 1080 removeItem: function (sKey) { 1081 if (!sKey || !this.hasOwnProperty(sKey)) { return; } 1082 document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; 1083 this.length--; 1084 }, 1085 hasOwnProperty: function (sKey) { 1086 return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); 1087 } 1088 }; 1089 window.localStorage.length = (document.cookie.match(/\=/g) || window.localStorage).length; 1090}
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.