1 2var cornerstoneUX = { 3 init: function () { 4 String.prototype.toCamelCase = function(cap1st) { 5 return ((cap1st ? '-' : '') + this).replace(/-+([^-])/g, function(a, b) { 6 return b.toUpperCase(); 7 }); 8 }; 9 var pageID = document.body.id.toCamelCase(); 10 11 if (cornerstoneUX[pageID]) { 12 // ---- If the function exists, run it, otherwise, don't do anything. ---- // 13 $(document).ready(function () { 14 cornerstoneUX[pageID](); 15 }); 16 } 17 18 $(document).ready(function () { 19 // ---- Create the "main" element for older versions of IE ---- // 20 document.createElement('main'); 21 22 $('.js-hide').hide(); 23 $('.js-show').show(); 24 $('.js-remove').remove(); 25 $('select, :text, textarea').not('.input').addClass('input'); 26 cornerstoneUX.sharedFunctions.toggle(); 27 cornerstoneUX.sharedFunctions.showHide(); 28 cornerstoneUX.sharedFunctions.tabs(); 29 30 $('.js-slide-toggle').on('click', function (e) { 31 e.preventDefault(); 32 33 var $trigger = $(this), 34 $target = $($trigger.data('target')); 35 36 $target.slideToggle('fast'); 37 38 }); 39 40 // ---- Allow Named Anchors With A Class Of "smoothscroll" To Work Without Full URL ---- // 41 $('a[href^="\#"].smoothscroll').on('click', function (e) { 42 e.preventDefault(); 43 var selector = this.href.substr(this.href.indexOf('#')), 44 target = $(selector), 45 offset = 10; 46 47 if (target.offset().top > windowHeight / 2) { 48 offset = $('#js-header').outerHeight(); 49 } 50 51 scrollToDiv(target, offset); 52 }); 53 54 // ---- Quantity Incrementer ---- // 55 $('#js-increase-quantity, .js-increase-quantity').on('click', function () { 56 var $qty = $(this).parent().prev(), 57 currentVal = parseInt($qty.val()), 58 $update = $(this).parent().siblings('.js-update-quantity'); 59 60 if (!isNaN(currentVal)) { 61 $qty.val(currentVal + 1).change(); 62 $update.trigger('click'); 63 } 64 }); 65 $('#js-decrease-quantity, .js-decrease-quantity').on('click', function () { 66 var $qty = $(this).parent().prev(), 67 currentVal = parseInt($qty.val()), 68 min = (!isNaN($qty.data('min'))) ? $qty.data('min') : 1, 69 $update = $(this).parent().siblings('.js-update-quantity'); 70 71 if (!isNaN(currentVal) && currentVal > min) { 72 $qty.val(currentVal - 1).change(); 73 $update.trigger('click'); 74 } 75 }); 76 77 $('.js-read-more').readmore({ 78 speed: 75, 79 moreLink: '<a href="#" class="js-read-more-toggle read-more-toggle">... read more</a>', 80 lessLink: '<a href="#" class="js-read-more-toggle read-less-toggle">read less</a>', 81 collapsedHeight: 67, 82 embedCSS: false 83 }); 84 85 // ---- Sticky ---- // 86 function stickyHeader() { 87 // Main Header & Stick Header 88 var jsHeader = $('#js-header'), 89 stickyNav = $('#js-sticky-header'), 90 jsHHeight = $(jsHeader).height(), 91 sNHeight = $(stickyNav).height(), 92 jsMain = $('main'); 93 // Copying of the Logo & dropdown menu 94 var allCategoriesNav = $('#js-all-categories-nav').clone(); 95 $(allCategoriesNav).attr('id', 'js-sticky-categories-nav'); 96 97 $('#js-sticky-dropdown-button .dropdown-menu-sticky-wrap').html( allCategoriesNav ); 98 $(window).scroll(function () { 99 if ( $(this).scrollTop() >= jsHHeight) { 100 $(stickyNav).addClass('slideDownSticky'); 101 $(jsHeader).addClass('sticky-shown'); 102 $(jsMain).addClass('sticky-is-shown'); 103 } else if ( $(stickyNav).hasClass('slideDownSticky') ) { 104 $(stickyNav).removeClass('slideDownSticky'); 105 $(jsHeader).removeClass('sticky-shown'); 106 $(jsMain).removeClass('sticky-is-shown'); 107 } 108 }); 109 } 110 //stickyHeader(); 111 112 (function floatingPlaceholder(){ 113 function updateText(event){ 114 var $input = $(this); 115 116 setTimeout(function(){ 117 if( $input.val() !== '' || $input.is(':focus') || $input.prop('tagName') === 'SELECT' ) { 118 $input.parent().addClass('floating-placeholder-float'); 119 } else { 120 $input.parent().removeClass('floating-placeholder-float'); 121 } 122 }, 1); 123 } 124 $('.floating-placeholder .input').each(updateText); 125 $('.floating-placeholder .input, .floating-placeholder select').on('input keyup change blur', updateText); 126 })(); 127 128 (function(){ 129 var autocomplete = {
130 $inputs: $('.js-autocomplete-input'), 131 $results: $('.js-autocomplete-results'), 132 init: function(){ 133 autocomplete.$inputs.on('input', autocomplete.getResults); 134 autocomplete.$inputs.on('blur', autocomplete.hideResults); 135 // TODO: Add keyboard controls 136 }, 137 getResults: debounce(function(e) { 138 var $input = $(this), 139 search = $.trim($input.val()); 140 141 if( !search.length ) return; 142 143 $.get( 144 $input.data('api-url'), 145 { 146 Get: 'autocomplete', 147 Search: search 148 }, 149 autocomplete.displayResults 150 ); 151 }, 150), 152 displayResults: function(response){ 153 if( !$.trim(response) ){ 154 autocomplete.$results.hide(); 155 return; 156 } 157 autocomplete.$results.html(response); 158 autocomplete.$results.fadeIn(100); 159 }, 160 hideResults: debounce(function(){ 161 autocomplete.$results.fadeOut(100); 162 }, 750) 163 }; 164 autocomplete.init(); 165 })(); 166 167 // ---- Back to Top Controls ---- // 168 (function backToTop () { 169 if ($(window).innerWidth() < 768) { 170 return; 171 } 172 173 var chaser = $('#js-chaser'), 174 windowHeight = $(window).height(); 175 176 if (chaser) { 177 $(window).scroll(function() { 178 if ($(window).scrollTop() >= windowHeight / 2) { 179 chaser.fadeIn(); 180 } 181 else { 182 chaser.hide(); 183 } 184 }); 185 186 chaser.on('click', function () { 187 $('html, body').animate({scrollTop: '0px'}, 800); 188 }); 189 } 190 })(); 191 192 // ---- On scroll, fix the header to the top ---- // 193 // if (document.location.protocol !== 'https:' && $(window).innerWidth() > 768) { 194 // $('#js-header').stuck(); 195 // } 196 197 // ---- Toggle global search display ---- // 198 $('#js-open-global-search, #js-open-global-search--tablet').on('click', function (e) { 199 e.preventDefault(); 200 $(this).toggleClass('bg-gray'); 201 $('#js-global-search').fadeToggle(); 202 }); 203 204 // ---- Mobile Footer Links Control ---- // 205 function footerNavControl () { 206 /* Corrects positioning of virtual keyboard */ 207 $(document).on('focus', 'input, select, textarea', function () { 208 $('#mobile-footer').hide(); 209 }); 210 $(document).on('blur', 'input, select, textarea', function () { 211 $('#mobile-footer').show(); 212 }); 213 } 214 $(window).on('debouncedresize load', footerNavControl ()); 215 216 }); 217 218 $('.js-az-menu-trigger').on('click', function(e){ 219 e.preventDefault(); 220 $('.nav-group-2').toggle(); 221 if( !$('.nav-group-2').is(':visible') ){ 222 $('.nav-group-3, .nav-group-4').hide(); 223 } 224 }); 225 226 $('.js-az-menu-trigger, #js-sticky-dropdown-button .button').on('mouseenter', function(){ 227 $('.nav-group-2').show(); 228 }); 229 230 var timer; 231 $('.js-az-menu-trigger, #js-sticky-dropdown-button .button, .nav-group-2, .nav-group-3, .nav-group-4').on({ 232 mouseover: function(){ 233 clearTimeout(timer); 234 }, 235 mouseout: function(e){ 236 clearTimeout(timer); 237 timer = setTimeout(function(){ 238 $('.nav-group-2, .nav-group-3, .nav-group-4').hide(); 239 }, 250); 240 } 241 }); 242 243 $('.nav-group-2 a').on('mouseenter', function() { 244 $('.nav-group-3').css('min-height', $(this).parent().height()); 245 }); 246 247 $.getScript(theme_path + '/js/jquery.menu-aim.js', function(data, textStatus) { 248 $('.nav-group-2').menuAim({ 249 activate: function(row) { 250 var $item = $(row), 251 id = $item.data('navigationitem-id'), 252 $group = $('.nav-group-4[data-navigationitem-id="' + id + '"]'); 253 254 $('.nav-group-4').hide(); 255 if( $group.find('.nav-group-5').length ){ 256 $group.show(); 257 $('.nav-group-3').show(); 258 } 259 }, 260 deactivate: function(row) { 261 $('.nav-group-4').hide(); 262 $('.nav-group-3').hide(); 263 }, 264 rowSelector: ".nav-item-2" 265 }); 266 }); 267 268 // ---- Mobile Footer Links Control ---- // 269 function mobileFooterToggles(h5) { 270 if ( $(window).width() <= 768 ) { 271 if ( $(h5).parent().find('.mobile-toggle').is(':visible') ) { 272 $(h5).find('span').attr('data-icon', 'L'); 273 } else { 274 $(h5).find('span').attr('data-icon', 'K'); 275 } 276 $(h5).parent().find('.mobile-toggle').slideToggle(); 277 } 278 } 279 $('footer h5').on('click', function(e) { 280 mobileFooterToggles($(this)); 281 }); 282 }, 283 sharedFunctions: { 284 // ---- Product Carousels ---- //
285 productsCarousels: function (carousel, append) { 286 var carousel = $(carousel); 287 if (append === true) { 288 var appendArrowsTo = $(carousel.selector).parent(); 289 } 290 else if (append === 'undefined') { 291 var appendArrowsTo = $(carousel.selector); 292 } 293 294 $.getScript(theme_path + '/js/jquery.slick.min.js', function () { 295 carousel.slick({ 296 appendArrows: appendArrowsTo, 297 draggable: false, 298 slidesToScroll: 3, 299 slidesToShow: 3, 300 responsive: [ 301 { 302 breakpoint: 960, 303 settings: { 304 slidesToScroll: 2, 305 slidesToShow: 2 306 } 307 }, 308 { 309 breakpoint: 767, 310 settings: { 311 slidesToScroll: 1, 312 slidesToShow: 1 313 } 314 } 315 ] 316 }); 317 }); 318 }, 319 // ---- Cart Summary Controls ---- // 320 cartSummary: function () { 321 var marker = $('#js-toggle-cart-summary-contents').find('span'), 322 clickCount = 0; 323 324 $('#js-toggle-cart-summary-contents').on('click', function (e) { 325 e.preventDefault(); 326 if (clickCount) { 327 marker.html('▼'); 328 clickCount = 0; 329 $('#js-cart-summary-contents').slideDown(); 330 } 331 else { 332 clickCount = 1; 333 marker.html('►'); 334 $('#js-cart-summary-contents').slideUp(); 335 } 336 }); 337 if ($(window).innerWidth() < 768) { 338 $('#js-toggle-cart-summary-contents').click(); 339 } 340 }, 341 342 // ---- Open Forgot Password ---- // 343 openForgotPassword: function (pageID) { 344 $('#js-open-forgot-password').magnificPopup({ 345 callbacks: { 346 open: function () { 347 if (pageID === 'jsOCST') { 348 // magnificPopup.close(); 349 } 350 } 351 }, 352 focus: '#l-Customer_LoginEmail', 353 items: { 354 src: $('#js-forgot-password'), 355 type: 'inline' 356 } 357 }); 358 }, 359 360 // ---- Conform all subcategory and/or product DIVs to same height ---- // 361 conformDisplay: function (selector) { 362 var targetElement = selector || '.category-product'; 363 364 $(window).on('load', function () { 365 $(targetElement).conformity({mode: 'height'}); 366 }); 367 $(window).on('resize', function () { 368 $(targetElement).conformity({mode: 'height'}); 369 }); 370 }, 371 372 // ---- Open Product Image Gallery ---- // 373 productGallery: function (trigger) { 374 trigger.on('click', function (e) { 375 var startAt = Number($(this).attr('data-index')); 376 377 e.preventDefault(); 378 if (gallery.length > 0) { 379 $.magnificPopup.open({ 380 callbacks: { 381 open: function () { 382 $.magnificPopup.instance.goTo(startAt); 383 } 384 }, 385 gallery: { 386 enabled: true 387 }, 388 items: gallery, 389 type: 'image' 390 }); 391 } 392 else { 393 $.magnificPopup.open({ 394 items: { 395 src: $('#js-main-image').attr('data-image') 396 }, 397 type: 'image' 398 }); 399 } 400 }); 401 }, 402 403 // ---- Quick View Function ---- // 404 openQuickView: function () { 405 $('.quick-view, .js-quick-view').on('click', function (e){ 406 var productLink = $(this).data('product-link'); 407 408 e.preventDefault(); 409 $.magnificPopup.open({ 410 items: { 411 src: productLink 412 }, 413 type: 'iframe' 414 }); 415 }); 416 }, 417 418 // ---- Miva Google Address Autocomplete ---- // 419 /*mvGAAC: { 420 init: function(){ 421 var self = this; 422 $('.js-geocomplete-input').removeAttr('placeholder'); 423 $(window).on('load', function(){ 424 $('.js-geocomplete-input').removeAttr('placeholder'); 425 }); 426 $.getScript('//cdnjs.cloudflare.com/ajax/libs/geocomplete/1.6.5/jquery.geocomplete.min.js', cornerstoneUX.sharedFunctions.mvGAAC.loaded); 427 }, 428 loaded: function(){ 429 $('.js-geocomplete-input') 430 .geocomplete() 431 .bind('geocode:result', cornerstoneUX.sharedFunctions.mvGAAC.result); 432 }, 433 result: function(event, result){ 434 var $input = $(this), 435 $container = $input.closest('.js-geocomplete-container'), 436 streetNumber = '', 437 streetName = '', 438 country = '', 439 address = ''; 440 441 result.address_components.reverse(); 442 443 $.each(result.address_components, function(index, component){ 444 var component_type = component.types[0]; 445 446 switch (component_type){ 447 case 'street_number': 448 streetNumber = component.long_name; 449 address = streetNumber; 450 if( streetName ){ 451 address += ' ' + streetName; 452 } 453 $container.find('[name$="Address1"], [name$="_addr"]').val(address).trigger('input'); 454 break; 455 case 'route': 456 streetName = component.long_name; 457 address = ''; 458 if(streetNumber){ 459 address = streetNumber + ' ' + streetName; 460 } 461 $container.find('[name$="Address1"], [name$="_addr"]').val(address).trigger('input'); 462 break; 463 case 'locality': 464 $container.find('[name$="City"], [name$="_city"]').val(component.long_name).trigger('input'); 465 break; 466 case 'administrative_area_level_1': 467 if( country === 'US' ){ 468 $container.find('[name$="StateSelect"], [name$="_state"]').val(component.short_name).trigger('input'); 469 } else { 470 $container.find('[name$="State"]').val(component.short_name).trigger('input'); 471 } 472 break; 473 case 'country': 474 country = component.short_name; 475 $container.find('[name$="Country"], [name$="_cntry"]').val(component.short_name).trigger('change'); 476 break; 477 case 'postal_code': 478 $container.find('[name$="Zip"], [name$="_zip"]').val(component.long_name).trigger('input'); 479 break; 480 default: 481 break; 482 } 483 }); 484 } 485 },*/ 486 toggle: function(){ 487 $('[data-toggle]').each(function(){ 488 var $trigger = $(this), 489 target = $trigger.data('toggle'), 490 $target = $(target); 491 $trigger.prepend('<span data-icon="L"></span> '); 492 if( $target.is(':visible') ){ 493 $trigger.addClass('active'); 494 } 495 }); 496 $('[data-toggle]').on('click', function(e){ 497 e.preventDefault(); 498 var $trigger = $(this), 499 target = $trigger.data('toggle'), 500 $target = $(target); 501 502 if( $target.is(':visible') ){ 503 $target.slideUp('fast'); 504 $trigger.find('[data-icon]').replaceWith('<span data-icon="L"></span>'); 505 $trigger.removeClass('active'); 506 } else { 507 $target.slideDown('fast'); 508 $trigger.find('[data-icon]').replaceWith('<span data-icon="K"></span>'); 509 $trigger.addClass('active'); 510 } 511 }); 512 }, 513 showHide: function(){ 514 $('[data-show]').on('click', function(){ 515 var $this = $(this); 516 $($this.data('show')).show(); 517 }); 518 $('[data-hide]').on('click', function(){ 519 var $this = $(this); 520 $($this.data('hide')).hide(); 521 }); 522 }, 523 tabs: function(){ 524 $('.js-tabs').each(function(){ 525 var $container = $(this); 526 $container.find('.js-tab').first().addClass('tab-active'); 527 $container.find('.js-tab-item:gt(0)').hide(); 528 }); 529 $('.js-tabs').on('click', '.js-tab', function(e){ 530 e.preventDefault(); 531 var $tab = $(this), 532 index = $tab.index(), 533 $container = $tab.closest('.js-tabs'), 534 $tabItem = $container.find('.tab-item:eq(' + index + '), .js-tab-item:eq(' + index + ')'); 535 536 if( $tabItem.is(':visible') ){ 537 return false;
538 } 539 540 $container.find('.tab-active').removeClass('tab-active'); 541 $container.find('.tab-item, .js-tab-item').fadeOut(200); 542 $tabItem.fadeIn(200); 543 $tab.addClass('tab-active'); 544 }); 545 } 546 }, 547 548 jsSFNT: function () { 549 // ---- Product Carousel ---- // 550 cornerstoneUX.sharedFunctions.productsCarousels('#js-whats-popular-carousel'); 551 552 // ---- Open Quick View ---- // 553 cornerstoneUX.sharedFunctions.openQuickView(); 554 function minFeaturedProductsHeight() { 555 var minHeight = $('#js-featured-products-height').outerHeight(); 556 $('.js-featured-products-height-min').css('min-height', minHeight); 557 } 558 minFeaturedProductsHeight(); 559 $(window).on('resize', minFeaturedProductsHeight); 560 561 }, 562 563 jsCTGY: function () { 564 // ---- Conform all subcategory and/or product DIVs to same height ---- // 565 cornerstoneUX.sharedFunctions.conformDisplay(); 566 cornerstoneUX.sharedFunctions.conformDisplay('.sub-category'); 567 568 // ---- Open Quick View ---- // 569 cornerstoneUX.sharedFunctions.openQuickView(); 570 }, 571 572 jsPROD: function () { 573 // ---- Open Product Image Gallery ---- // 574 cornerstoneUX.sharedFunctions.productGallery($('#js-main-image-zoom')); 575 576 var mainImageZoom = $('#js-main-image-zoom'), 577 thumbnails = $('#js-thumbnails'); 578 579 //console.log(window['image_data' + productID][0]['image_data'][2]); 580 thumbnails.on('click', 'div', function () { 581 var thumbnailIndex = $(this).attr('data-index'); 582 mainImageZoom.attr('data-index', thumbnailIndex); 583 var clickedLI = parseFloat($(this).attr('data-index')); 584 if ( thumbnailIndex ) { 585 $('#js-main-dots li.active').removeClass('active'); 586 $('#js-main-dots li[data-index="' + thumbnailIndex + '"]').addClass('active'); 587 } 588 }); 589 590 $.getScript(theme_path + '/js/jquery.slick.min.js', function () { 591 $('#js-thumbnails').slick({ 592 vertical: true, 593 draggable: false, 594 slidesToScroll: 1, 595 slidesToShow: 4 596 }); 597 }); 598 $(window).resize( function() { 599 $('#js-thumbnails').slickSetOption(null,null,true); 600 }); 601 602 // ---- Update Button For "Out Of Stock" ---- // 603 function outOfStock () { 604 var button = $('#js-add-to-cart'), 605 buttonText = button.val(); 606 607 if (button.is(':disabled') === true) { 608 button.addClass('bg-gray').val('Sold Out'); 609 } 610 else { 611 button.removeClass('bg-gray').val(buttonText); 612 } 613 } 614 outOfStock(); 615 616 // ---- Set Initial Swatch Name ---- // 617 $('#js-swatch-name').text($('#js-swatch-select').find('option:first-child').text()); 618 619 // ---- Add Border to Active Swatch ---- // 620 function selectedSwatch () { 621 $('#js-swatches').find('li').each(function () { 622 var swatchElement = $(this), 623 swatchColor = swatchElement.attr('data-code'); 624 625 swatchElement.removeClass('selected-swatch'); 626 if (swatchColor === $('#js-swatch-select').find('option:selected').val() ) { 627 swatchElement.addClass('selected-swatch'); 628 // swatchColor = swatchColor.replace(/ /g,''); 629 // swatchColor = swatchColor.toLowerCase(); 630 631 // var namedColors = { 632 // aliceblue: 'f0f8ff',antiquewhite: 'faebd7',aqua: '00ffff',aquamarine: '7fffd4',azure: 'f0ffff',beige: 'f5f5dc',bisque: 'ffe4c4',black: '000000',blanchedalmond: 'ffebcd',blue: '0000ff',blueviolet: '8a2be2',brown: 'a52a2a',burlywood: 'deb887',cadetblue: '5f9ea0',chartreuse: '7fff00',chocolate: 'd2691e',coral: 'ff7f50',cornflowerblue: '6495ed',cornsilk: 'fff8dc',crimson: 'dc143c',cyan: '00ffff',darkblue: '00008b',darkcyan: '008b8b',darkgoldenrod: 'b8860b',darkgray: 'a9a9a9',darkgreen: '006400',darkkhaki: 'bdb76b',darkmagenta: '8b008b',darkolivegreen: '556b2f',darkorange: 'ff8c00',darkorchid: '9932cc',darkred: '8b0000',darksalmon: 'e9967a',darkseagreen: '8fbc8f',darkslateblue: '483d8b',darkslategray: '2f4f4f',darkturquoise: '00ced1',darkviolet: '9400d3',deeppink: 'ff1493',deepskyblue: '00bfff',dimgray: '696969',dodgerblue: '1e90ff',feldspar: 'd19275',firebrick: 'b22222',floralwhite: 'fffaf0',forestgreen: '228b22',fuchsia: 'ff00ff',gainsboro: 'dcdcdc',ghostwhite: 'f8f8ff',gold: 'ffd700',goldenrod: 'daa520',gray: '808080',green: '008000',greenyellow: 'adff2f',honeydew: 'f0fff0',hotpink: 'ff69b4',indianred : 'cd5c5c',indigo : '4b0082',ivory: 'fffff0',khaki: 'f0e68c',lavender: 'e6e6fa',lavenderblush: 'fff0f5',lawngreen: '7cfc00',lemonchiffon: 'fffacd',lightblue: 'add8e6',lightcoral: 'f08080',lightcyan: 'e0ffff',lightgoldenrodyellow: 'fafad2',lightgrey: 'd3d3d3',lightgreen: '90ee90',lightpink: 'ffb6c1',lightsalmon: 'ffa07a',lightseagreen: '20b2aa',lightskyblue: '87cefa',lightslateblue: '8470ff',lightslategray: '778899',lightsteelblue: 'b0c4de',lightyellow: 'ffffe0',lime: '00ff00',limegreen: '32cd32',linen: 'faf0e6',magenta: 'ff00ff',maroon: '800000',mediumaquamarine: '66cdaa',mediumblue: '0000cd',mediumorchid: 'ba55d3',mediumpurple: '9370d8',mediumseagreen: '3cb371',mediumslateblue: '7b68ee',mediumspringgreen: '00fa9a',mediumturquoise: '48d1cc',mediumvioletred: 'c71585',midnightblue: '191970',mintcream: 'f5fffa',mistyrose: 'ffe4e1',moccasin: 'ffe4b5',navajowhite: 'ffdead',navy: '000080',oldlace: 'fdf5e6',olive: '8
63208000',olivedrab: '6b8e23',orange: 'ffa500',orangered: 'ff4500',orchid: 'da70d6',palegoldenrod: 'eee8aa',palegreen: '98fb98',paleturquoise: 'afeeee',palevioletred: 'd87093',papayawhip: 'ffefd5',peachpuff: 'ffdab9',peru: 'cd853f',pink: 'ffc0cb',plum: 'dda0dd',powderblue: 'b0e0e6',purple: '800080',red: 'ff0000',rosybrown: 'bc8f8f',royalblue: '4169e1',saddlebrown: '8b4513',salmon: 'fa8072',sandybrown: 'f4a460',seagreen: '2e8b57',seashell: 'fff5ee',sienna: 'a0522d',silver: 'c0c0c0',skyblue: '87ceeb',slateblue: '6a5acd',slategray: '708090',snow: 'fffafa',springgreen: '00ff7f',steelblue: '4682b4',tan: 'd2b48c',teal: '008080',thistle: 'd8bfd8',tomato: 'ff6347',turquoise: '40e0d0',violet: 'ee82ee',violetred: 'd02090',wheat: 'f5deb3',white: 'ffffff',whitesmoke: 'f5f5f5',yellow: 'ffff00',yellowgreen: '9acd32' 633 // }; 634 // for (var key in namedColors) { 635 // if (swatchColor === key) { 636 // swatchElement.css('border-color', '#' + namedColors[key]); 637 // } 638 // else { 639 // swatchElement.addClass('selected-swatch'); 640 // } 641 // } 642 } 643 }); 644 } 645 selectedSwatch(); 646 647 // ---- Update Display When Attribute Machine Fires ---- // 648 MivaEvents.SubscribeToEvent('variant_changed', function () { 649 gallery.length = 0; 650 mainImageZoom.attr('data-index', 0); 651 thumbnailIndex = 0; 652 outOfStock(); 653 selectedSwatch(); 654 }); 655 656 // ---- Update Display Price Based on Attribute Selections (If Attribute Machine Is Not Being Used) ---- // 657 if (typeof attrMachCall === 'undefined' && document.getElementById('js-product-attribute-count').value > 0) { 658 for(var baseProductPrice=Number(document.getElementById("js-price-value").getAttribute("data-base-price")),regularProductPrice=Number(),productAttributeCount=Number(document.getElementById("js-product-attribute-count").value+1),productAttributes=document.getElementById("js-purchase-product").elements,attributeType=[""],i=0;i<productAttributes.length;i++){var tagName=productAttributes[i].tagName.toLowerCase(),elementType=productAttributes[i].type,type=productAttributes[i].getAttribute("data-attribute-type"), name=productAttributes[i].name;"hidden"==elementType&&null!=type&&attributeType.push(type);productAttributes[i].onchange=function(){updateProductDisplayPrice()}} function updateProductDisplayPrice(){for(var b,a,c=baseProductPrice,f=regularProductPrice,d=1;d<productAttributeCount;d++)if(b=document.getElementsByName("Product_Attributes["+d+"]:value"),"select"==attributeType[d])for(var e=0;e<b.length;e++)a=b.item(e),a=a.options.item(a.selectedIndex),c+=Number(a.getAttribute("data-option-price")),f+=Number(a.getAttribute("data-regular-price"));else if("radio"==attributeType[d]||"checkbox"==attributeType[d])for(e=0;e<b.length;e++)a=b.item(e),a.checked&&(c+=Number(a.getAttribute("data-option-price")), f+=Number(a.getAttribute("data-regular-price")));else if("text"==attributeType[d]||"memo"==attributeType[d])a=b.item(0),a.value&&(c+=Number(a.getAttribute("data-option-price")),f+=Number(a.getAttribute("data-regular-price")));b=document.getElementsByName("Quantity");c*=Number(b.item(0).value);b.item(0);document.getElementById("js-price-value").innerHTML=formatCurrency(c);document.getElementById("js-mobile-price-value")&&(document.getElementById("js-mobile-price-value").innerHTML=formatCurrency(c))} function formatCurrency(b){var a=!1;0>b&&(a=!0,b=Math.abs(b));return(a?"-$":"$")+parseFloat(b,10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g,"$1,").toString()}updateProductDisplayPrice(); 659 } 660 661 // ---- AJAX Add To Cart ---- // 662 function addToCart () { 663 $('#js-add-to-cart').on('click', function (e) { 664 var purchaseForm = $('#js-purchase-product'); 665 // Check the form is not currently submitting 666 if (purchaseForm.data('formstatus') !== 'submitting') { 667 // Set up variables 668 var form = purchaseForm, 669 formData = form.serialize(), 670 formUrl = form.attr('action').replace('^https?:', ''), 671 formMethod = form.attr('method'), 672 responseMessage = $('#js-purchase-message'), 673 miniBasket = $('#js-mini-basket-container'), 674 processingImage = $('#js-processing-purchase'), 675 purchaseButton = $(this), 676 purchaseButtonText = purchaseButton.val(); 677 678 // Add status data to form 679 form.data('formstatus', 'submitting'); 680 681 // Show processing message 682 processingImage.show(); 683 purchaseButton.toggleDisabled().val('Processing...'); 684 responseMessage.html('').hide(); 685 686 // Send data to server for validation 687 $.ajax({ 688 url: formUrl, 689 type: formMethod, 690 cache: false, 691 data: formData, 692 success: function(data, textStatus, jqXHR) { 693 if (data.search(/id="js-BASK"/i) != -1) { 694 $('html, body').animate({scrollTop: '0px'}, 250); 695 var responseMiniBasket = $(data).find('#js-mini-basket-container'), 696 miniBasketCount = responseMiniBasket.contents()[1].getAttribute('data-itemcount'), 697 miniBasketSubtotal = ' ' + responseMiniBasket.contents()[1].getAttribute('data-subtotal'), 698 miniBasketLinkCount = $('#js-mini-basket-count, #js-mobile-basket-button .notification'), 699 miniBasketLinkSubtotal = $('#js-mini-basket-subtotal'); 700 701 miniBasketLinkCount.text(miniBasketCount); // Update basket quantity (display only) 702 miniBasketLinkSubtotal.text(miniBasketSubtotal); // Update basket subtotal (display only) 703 704 miniBasket.html(responseMiniBasket.contents()).addClass('open'); 705 setTimeout(function () { 706 miniBasket.removeClass('open'); 707 }, 5000); 708
709 // Re-Initialize Attribute Machine (if it is active) 710 if (typeof attrMachCall !== 'undefined') { 711 attrMachCall.Initialize(); 712 } 713 } 714 else if(data.search(/id="js-PATR"/i) != -1) { 715 var missingAttrs = []; 716 form.find('.required').each(function () { 717 missingAttrs.push(' ' + $(this).attr('title')); 718 }); 719 responseMessage.html('All <em class="red">Required</em> options have not been selected.<br />Please review the following options: <span class="red">' + missingAttrs + '</span>.').fadeIn().delay(5000).fadeOut(); 720 } 721 else if(data.search(/id="js-PLMT"/i) != -1) { 722 responseMessage.html('We do not have enough of the Size/Color you have selected.<br />Please adjust your quantity.').fadeIn().delay(3000).fadeOut(); 723 } 724 else if(data.search(/id="js-POUT"/i) != -1) { 725 responseMessage.html('The Size/Color you have selected is out of stock.<br />Please review your options or check back later.').fadeIn().delay(3000).fadeOut(); 726 } 727 else { 728 responseMessage.html('Please review options.').fadeIn().delay(3000).fadeOut(); 729 } 730 731 // Hide processing message and reset formstatus 732 processingImage.hide(); 733 purchaseButton.toggleDisabled().val(purchaseButtonText); 734 form.data('formstatus', 'idle'); 735 }, 736 error: function (jqXHR, textStatus, errorThrown) { 737 } 738 }); 739 } 740 // Prevent form from submitting 741 e.preventDefault(); 742 e.stopImmediatePropagation(); 743 }); 744 } 745 addToCart(); 746 747 // ---- Related Products Carousel ---- // 748 $.getScript(theme_path + '/js/jquery.slick.min.js', function () { 749 $('#js-related-products-carousel').slick({ 750 draggable: false, 751 slidesToScroll: 2, 752 slidesToShow: 2, 753 }); 754 }); 755 756 // --- Mobile slider for Images --- // 757 function mobileImageSlider() { 758 var totalThumbs = parseFloat($('#js-thumbnails .thumbnail-img-wrap').length - 1 ), 759 currentImg = parseFloat($('#js-main-image-zoom').attr('data-index')); 760 761 if (totalThumbs === -1 ) { 762 $('.main-image-nav').hide(); 763 } else { 764 $('#js-main-dots').html(''); 765 $('#js-main-dots').html('<ul class="inline-list np"></ul>'); 766 for (var i = totalThumbs; i >= 0; i--) { 767 if (i > 0){ 768 $('#js-main-dots ul').prepend('<li data-index="' + i + '"></li>'); 769 } else { 770 $('#js-main-dots ul').prepend('<li class="active" data-index="' + i + '"></li>'); 771 } 772 } 773 } 774 775 776 $('#js-main-dots ul li').on('click', function() { 777 var clickedLI = parseFloat($(this).attr('data-index')); 778 $('#js-thumbnails .thumbnail-img-wrap[data-index="' + clickedLI + '"]').click(); 779 $('#js-main-dots ul li.active').removeClass('active'); 780 $(this).addClass('active'); 781 currentImg = clickedLI; 782 }); 783 784 function nextMobileImage() { 785 var currIndex = parseFloat($('#js-main-image-zoom').attr('data-index')), 786 nextImage = $('#js-main-dots li[data-index="' + (currIndex + 1) + '"]'), 787 firstImage = $('#js-main-dots li[data-index="0"]'); 788 if ($(nextImage).length > 0) { 789 $(nextImage).click(); 790 } else { 791 $(firstImage).click(); 792 } 793 } 794 795 function prevMobileImage() { 796 var currIndex = parseFloat($('#js-main-image-zoom').attr('data-index')), 797 prevImage = $('#js-main-dots li[data-index="' + (currIndex - 1) + '"]'), 798 lastImage = $('#js-main-dots li[data-index="' + totalThumbs + '"]'); 799 if ($(prevImage).length > 0) { 800 $(prevImage).click(); 801 } else { 802 $(lastImage).click(); 803 } 804 805 } 806 if (totalThumbs > 1 ) { 807 $("#js-main-image-zoom").swipe( { 808 swipeLeft:function(event, direction, distance, duration, fingerCount) { 809 nextMobileImage(); 810 }, 811 swipeRight:function(event, direction, distance, duration, fingerCount) { 812 prevMobileImage(); 813 }, 814 threshold:10 815 }); 816 } 817 } 818 mobileImageSlider(); 819 820 }, 821 822 jsPLST: function () { 823 // ---- Conform all subcategory and/or product DIVs to same height ---- // 824 cornerstoneUX.sharedFunctions.conformDisplay(); 825 826 // ---- Open Quick View ---- // 827 cornerstoneUX.sharedFunctions.openQuickView(); 828 }, 829 830 jsSRCH: function () { 831 // ---- Conform all subcategory and/or product DIVs to same height ---- // 832 cornerstoneUX.sharedFunctions.conformDisplay(); 833 834 // ---- Open Quick View ---- // 835 cornerstoneUX.sharedFunctions.openQuickView(); 836 }, 837 838 jsBASK: function () { 839 // ---- Remove Item From Basket (Compatible down to IE6) ---- // 840 $('.remove-item').on('click', function (e) { 841 $(this).children('input').prop('checked', 'checked'); 842 if ($(this).children('input').is(':checked')) { 843 e.stopImmediatePropagation(); 844 $('#js-bask-form').submit(); 845 } 846 }); 847 848 // ---- Estimate Shipping Function ---- // 849 function estimateShipping () { 850 function resetFields () { 851 $('#js-shipping-estimate-state-select').prop('selectedIndex', 0); 852 $('#js-shipping-estimate-country').val(default_country); 853 $('#js-shipping-estimate-state, #js-shipping-estimate-zip').val(''); 854 } 855 856 $('#js-show-shipping-estimate').on('click', function (e) { 857 e.preventDefault(); 858 $('#js-shipping-estimate-dialog').fadeToggle(); 859 resetFields(); 860 }); 861 862 $('#js-shipping-estimate-recalculate').on('click', function (e) { 863 e.preventDefault(); 864 $(this).hide(); 865 $('#js-shipping-estimate-results').fadeOut(function () { 866 $('#js-shipping-estimate-fields').fadeIn(); 867 }).empty(); 868 }); 869 870 $('#js-shipping-estimate-form').on('submit', function (e) { 871 e.preventDefault(); 872 if ($(this).data('formstatus') !== 'submitting') { 873 874 var form = $(this), 875 formData = form.serialize(), 876 formUrl = form.attr('action'), 877 formMethod = form.attr('method'); 878 879 form.data('formstatus', 'submitting'); 880 $('#js-processing-request').show(); 881 $.ajax({ 882 url: formUrl, 883 type: formMethod, 884 data: formData, 885 success: function(data, textStatus, jqXHR) { 886 $('#js-shipping-estimate-fields').fadeOut(function () { 887 $('#js-shipping-estimate-results').html(data).fadeIn(); 888 $('#js-shipping-estimate-recalculate').fadeIn(); 889 }); 890 resetFields (); 891 form.data('formstatus', 'idle'); 892 $('#js-processing-request').hide(); 893 }, 894 error: function (jqXHR, textStatus, errorThrown) { 895 console.log(errorThrown); 896 form.data('formstatus', 'idle'); 897 } 898 }); 899 } 900 }); 901 } 902 estimateShipping(); 903 904 }, 905 906 jsACAD: function () { 907 // ---- Copy Email Address to Shipping or Billing Email ---- // 908 $('#js-Customer_LoginEmail').on('blur', function () { 909 var primaryAddress = $(this).attr('data-primary'), 910 shippingEmail = $('#js-Customer_ShipEmail'), 911 billingEmail = $('#js-Customer_BillEmail'); 912 913 if (primaryAddress === 'shipping') { 914 if (shippingEmail && (shippingEmail.val() === '')) { 915 shippingEmail.val($(this).val()); 916 } 917 } 918 else if (primaryAddress === 'billing') { 919 if (billingEmail && (billingEmail.val() === '')) { 920 billingEmail.val($(this).val()); 921 } 922 } 923 }); 924 925 // ---- Toggle Customer Fields Controls ---- // 926 // cornerstoneUX.sharedFunctions.toggleCustomerFields(); 927 }, 928 929 jsACED: function () { 930 // ---- Toggle Customer Fields Controls ---- // 931 // cornerstoneUX.sharedFunctions.toggleCustomerFields(); 932 }, 933 934 jsCTUS: function () { 935 // ---- Additional Server Security To Help Against Spambots ---- // 936 $.getScript('//ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.min.js', function(){ 937 var contactForm = $('#js-contact-form'); 938 $('#js-noscript-warning').remove(); 939 contactForm.show(); 940 var url = theme_path + '/forms/token.php'; 941 $.get(url, function (tkn) {
942 contactForm.append('<input type="hidden" name="mms" value="' + tkn + '" />'); 943 }); 944 945 // ---- Form Validation ---- // 946 contactForm.validate({ 947 errorContainer: '#js-contact-form div.message', 948 errorLabelContainer: '#js-contact-form div.message small', 949 errorElement: 'p', 950 rules: { 951 contactName: {required: true, minlength: 2}, 952 contactEmail: {required: true, email: true}, 953 contactComment: {required: true, minlength: 2} 954 }, 955 messages: { 956 contactName: {required: 'Your Name Is Required', minlength: jQuery.validator.format('Your Name must be a minimum of {0} characters!')}, 957 contactEmail: {required: 'Your Email Address Is Required', email: 'Your Email Address must be formatted like [email protected]'}, 958 contactComment: {required: 'Comments or Questions Are Required', minlength: jQuery.validator.format('Your Message must be a minimum of {0} characters!')} 959 }, 960 highlight: function (element, errorClass) { 961 $(element.form).find('label[for=' + element.id + ']').addClass(errorClass); 962 }, 963 unhighlight: function (element, errorClass) { 964 $(element.form).find('label[for=' + element.id + ']').removeClass(errorClass); 965 }, 966 submitHandler: function (form) { 967 if ($(this).data('formstatus') !== 'submitting') { 968 var form = contactForm, 969 formData = form.serialize(), 970 formUrl = form.attr('action'), 971 formMethod = form.attr('method'); 972 973 form.data('formstatus', 'submitting'); 974 $.ajax({ 975 url: formUrl, 976 type: formMethod, 977 data: formData, 978 success: function(data, textStatus, jqXHR) { 979 // Show reponse message 980 if (data.search(/error/i) != -1) { 981 $('#js-contact-form div.message').fadeOut(200, function () { 982 $(this).removeClass('message-info').addClass('message-error').text(data).fadeIn(200); 983 }); 984 } 985 else { 986 $('#js-contact-form div.message').removeClass('message-error').addClass('message-success').text(data).fadeIn(200); 987 } 988 form.data('formstatus', 'idle'); 989 }, 990 error: function (jqXHR, textStatus, errorThrown) { 991 console.log(errorThrown); 992 form.data('formstatus', 'idle'); 993 } 994 }); 995 } 996 } 997 }); 998 }); 999 }, 1000 1001 jsAFCL: function () { 1002 // ---- Open Forgot Password ---- // 1003 cornerstoneUX.sharedFunctions.openForgotPassword(); 1004 }, 1005 1006 jsWLST: function () { 1007 // ---- Open Forgot Password ---- // 1008 cornerstoneUX.sharedFunctions.openForgotPassword(); 1009 }, 1010 1011 jsLOGN: function () { 1012 // ---- Open Forgot Password ---- // 1013 cornerstoneUX.sharedFunctions.openForgotPassword(); 1014 }, 1015 1016 jsORDL: function () { 1017 // ---- Open Forgot Password ---- // 1018 cornerstoneUX.sharedFunctions.openForgotPassword(); 1019 }, 1020 1021 jsORHL: function () { 1022 // ---- Open Forgot Password ---- // 1023 cornerstoneUX.sharedFunctions.openForgotPassword(); 1024 }, 1025 1026 jsOCST: function () { 1027 // ---- Open Log-In Form ---- // 1028 $('#js-open-ocst-login').magnificPopup({ 1029 focus: '#l-Customer_LoginEmail', 1030 items: { 1031 src: $('#js-ocst-login'), 1032 type: 'inline' 1033 } 1034 }); 1035 1036 // ---- Open Forgot Password ---- // 1037 cornerstoneUX.sharedFunctions.openForgotPassword('jsOCST'); 1038 1039 // ---- Cart Summary Controls ---- // 1040 cornerstoneUX.sharedFunctions.cartSummary(); 1041 1042 // ---- Google Address Autocomplete ---- // 1043 // cornerstoneUX.sharedFunctions.mvGAAC.init(); 1044 1045 // ---- Show/Hide State Field --- // 1046 (function(){ 1047 var $countries = $('#ShipCountry, #BillCountry'), 1048 updateStateFromCountry = function(){ 1049 var $select = $(this), 1050 $row = $select.closest('.form-row'), 1051 $next_row = $row.next('.form-row'), 1052 $next_select_row = $next_row.find('.js-state-select-wrapper'), 1053 $next_select = $next_select_row.find('select'), 1054 $next_input_row = $next_row.find('.js-state-input-wrapper'), 1055 $next_input = $next_input_row.find('input'); 1056 1057 if( $select.val() === default_country){ 1058 $next_select_row.show(); 1059 $next_input_row.hide(); 1060 $next_input.val(''); 1061 } else { 1062 $next_select_row.hide(); 1063 $next_input_row.show(); 1064 $next_select.val(''); 1065 } 1066 }; 1067 1068 $countries.each( updateStateFromCountry ); 1069 $countries.on('change', updateStateFromCountry); 1070 })(); 1071 1072 1073 1074 $('#l-ShipEmail').on('input', function(){ 1075 var $input = $(this), 1076 email = $input.val(); 1077 1078 $('#js-create-customer-email-display').text( email ); 1079 $('#js-create-customer-email-input').val( email ); 1080 }); 1081 1082 1083 (function(){ 1084 var updateCreateCustomerFields = function(){ 1085 var $toggle = $('#js-create-customer'); 1086 1087 if( $toggle.is(':checked') ){ 1088 $('#js-create-customer-fields').slideDown('fast'); 1089 $('#js-Customer_Password, #js-Customer_VerifyPassword').prop('required', true); 1090 } else {
1091 $('#js-create-customer-fields').slideUp('fast'); 1092 $('#js-Customer_Password, #js-Customer_VerifyPassword').val('').trigger('input').prop('required', false); 1093 } 1094 }; 1095 $('#js-create-customer').on('change', updateCreateCustomerFields); 1096 updateCreateCustomerFields(); 1097 })(); 1098 1099 1100 $('#js-Customer_Password, #js-Customer_VerifyPassword').on('input', function(){ 1101 var $password = $('#js-Customer_Password'), 1102 password = $password.val(), 1103 $verify_password = $('#js-Customer_VerifyPassword'), 1104 verify_password = $verify_password.val(), 1105 $message = $('#js-password-message'); 1106 1107 if( password && password.length && verify_password && verify_password.length ){ 1108 if( password === verify_password ){ 1109 $message.html('<span class="green"><span data-icon="R"></span> Passwords Match</span>'); 1110 } else { 1111 $message.html('<span class="red"><span data-icon="Q"></span> Passwords Do Not Match</span>'); 1112 } 1113 } else { 1114 $message.html(''); 1115 } 1116 }); 1117 1118 (function(){ 1119 var createdCustomer = false;
1120 $('#js-ocst-form').on('submit', function(e){ 1121 1122 var $form = $(this), 1123 $button = $form.find('input[type="submit"]'), 1124 fields = $form.serializeArray(), 1125 data = '', 1126 screenFound = false; 1127 1128 // Don't submit if we are already submitting 1129 if( $form.data('status') === 'submitting' ) return; 1130 1131 // Let submit proceed if they are not creating customer 1132 if ( !$('#js-create-customer').is(':checked') ) return; 1133 1134 // Let submit proceed we have successfully created a customer using the following AJAX call 1135 if ( createdCustomer ) return; 1136 1137 e.preventDefault(); 1138 1139 $form.data('status', 'submitting'); 1140 $('#js-messages').html(''); 1141 $button.data('value', $button.attr('value') ); 1142 $button.prop('disabled', true).attr('value', 'Creating Account...'); 1143 1144 if( ToggleDetails.trigger.checked ){ 1145 ToggleDetails.CopyFields(); 1146 $(ToggleDetails.secondary_inputs, ToggleDetails.secondary_selects).trigger('input'); 1147 } 1148 1149 $.each(fields, function(i, field){ 1150 // Rename OCST fields to create an account 1151 if( field.name === 'Action' ){ 1152 data += '&Action=ICST'; 1153 } else if( field.name === 'Screen' ){ 1154 data += '&Screen=ACED'; 1155 screenFound = true; 1156 } else if( /(Ship|Bill)/.test(field.name) ){ 1157 data += '&Customer_' + field.name + '=' + field.value; 1158 } else { 1159 data += '&' + field.name + '=' + field.value; 1160 } 1161 }); 1162 1163 if( !screenFound ){ 1164 data += '&Screen=ACED'; 1165 } 1166 1167 var cust_create_url = $('#customer_create_url').val(); 1168 1169 $.ajax({ 1170 url: cust_create_url, 1171 type: 'POST', 1172 dataType: 'json', 1173 data: data + '&api=1', 1174 }) 1175 .done(function(response) { 1176 if( response.page_code ==='ACED' ){ 1177 createdCustomer = true; 1178 $form.append('<input type="hidden" name="Customer_Created" value="yes">'); 1179 $form.submit(); 1180 } else if( response.error_messages.length ){ 1181 var html = '<div class="message message-error">'; 1182 html += '<br />'; 1183 $.each(response.error_messages, function(i, error){ 1184 html += error + '<br>'; 1185 }); 1186 html += '</div>'; 1187 $('#js-messages').html(html); 1188 scrollToDiv( $('#js-messages'), 50); 1189 // TODO: Add better input validation 1190 } 1191 }) 1192 .always(function() { 1193 $form.data('status', ''); 1194 $button.prop('disabled', false).attr('value', $button.data('value') ); 1195 }); 1196 1197 }); 1198 })(); 1199 1200 }, 1201 1202 jsOSEL: function () { 1203 // ---- Cart Summary Controls ---- // 1204 cornerstoneUX.sharedFunctions.cartSummary(); 1205 }, 1206 1207 jsOPAY: function () { 1208 // ---- Cart Summary Controls ---- // 1209 cornerstoneUX.sharedFunctions.cartSummary(); 1210 1211 // ---- Make Credit Card Expiration Fields More User-Friendly ---- // 1212 $('#js-cc_exp select').first().find('option:first').text('Month'); 1213 $('#js-cc_exp select').last().find('option:first').text('Year'); 1214 1215 // ---- CVV Information Function ---- // 1216 $('#js-open-cvv-information').magnificPopup({ 1217 items: { 1218 src: $('#js-cvv-information'), 1219 type: 'inline' 1220 } 1221 }); 1222 1223 // ---- Secondary Form Submit Button ---- // 1224 $('#js-opay-form-submit').on('click', function () { 1225 $('#js-opay-form').submit(); 1226 }); 1227 1228 // ---- Opayments ---- // 1229 (function(){ 1230 var opayments = {}; 1231 opayments.debug = false; 1232 opayments.$form = $('input[name="Action"]').closest('form'); 1233 opayments.$actualRows = $('.payment-field-row'); 1234 opayments.$proxyInputs = $('.proxy-input'); 1235 1236 opayments.init = function(){ 1237 if( !$('.proxy-payment-fields').length ){ 1238 return; 1239 } 1240 opayments.copyAllActualToProxy(); 1241 opayments.$actualRows.on('input keyup blur change', 'input, select', opayments.copyAllActualToProxy); 1242 opayments.$proxyInputs.on('input keyup blur change', opayments.copyProxyInputToActual); 1243 opayments.$form.on('submit', opayments.copyAllProxyToActual ); 1244 1245 if( opayments.debug ){ 1246 opayments.$actualRows.css('opacity', 0.5); 1247 } else { 1248 opayments.$actualRows.hide(); 1249 } 1250 $('.proxy-payment-fields').show(); 1251 }; 1252 1253 opayments.copyActualRowToProxy = function(){ 1254 var $row = $(this), 1255 code = $row.data('code'), 1256 invalid = $row.data('invalid'), 1257 classes = (!!invalid) ? 'invalid red' : '', 1258 $input = $row.find('input'); 1259 1260 switch (code) { 1261 case 'cc_exp': 1262 $('.proxy-input-cc_exp_month').closest('.proxy-payment-field-row').addClass(classe
1262s); 1263 $('.proxy-input-cc_exp_month').val( $row.find('[name*="Month"], [name*="month"]').val() ); 1264 $('.proxy-input-cc_exp_year').val( $row.find('[name*="Year"], [name*="year"]').val() ); 1265 break; 1266 case 'cc_name': 1267 case 'cc_fname': 1268 case 'cc_lname': 1269 case 'cc_number': 1270 case 'cc_cvv': 1271 case 'cvv': 1272 default: 1273 $('.proxy-input-' + code).closest('.proxy-payment-field-row').addClass(classes); 1274 $('.proxy-input-' + code).val( $input.val() ); 1275 break; 1276 } 1277 }; 1278 1279 opayments.copyAllActualToProxy = function(){ 1280 opayments.$actualRows.each( opayments.copyActualRowToProxy ); 1281 }; 1282 1283 opayments.copyProxyInputToActual = function(){ 1284 var $input = $(this), 1285 code = $input.data('code'), 1286 $proxy = {}; 1287 1288 switch (code) { 1289 case 'cc_exp_month': 1290 $proxy = opayments.$form.find('[name*="Month"], [name*="month"]'); 1291 break; 1292 case 'cc_exp_year': 1293 $proxy = opayments.$form.find('[name*="Year"], [name*="year"]'); 1294 break; 1295 case 'cc_name': 1296 case 'cc_fname': 1297 case 'cc_lname': 1298 case 'cc_number': 1299 case 'cc_cvv': 1300 case 'cvv': 1301 default: 1302 $proxy = $('.payment-field-row-' + code).find('input'); 1303 break; 1304 } 1305 1306 $proxy.val( $input.val() ); 1307 }; 1308 opayments.copyAllProxyToActual = function(){ 1309 opayments.$proxyInputs.each( opayments.copyProxyInputToActual ); 1310 }; 1311 1312 opayments.init(); 1313 })(); 1314 1315 (function creditCardFormatting(){ 1316 $.getScript('https://cdnjs.cloudflare.com/ajax/libs/jquery.payment/2.0.0/jquery.payment.min.js', function(){ 1317 var creditCardTypeMap = { 1318 visa: '.payment-method-selectors input:radio[data-name="Visa"]', 1319 mastercard: '.payment-method-selectors input:radio[data-name="MasterCard"]', 1320 amex: '.payment-method-selectors input:radio[data-name="American Express"]', 1321 discover: '.payment-method-selectors input:radio[data-name="Discover"]' 1322 }, 1323 $form = $('#js-opay-form'), 1324 $paymentMethods = $form.find('input:radio[name="PaymentMethod"]'), 1325 $cc_number = $form.find('.proxy-input-cc_number'), 1326 updatePaymentMethod = function(){ 1327 var type = $.payment.cardType( $cc_number.val() ), 1328 $matchingPaymentMethod = $(creditCardTypeMap[type]); 1329 1330 if( $matchingPaymentMethod.length ){ 1331 $matchingPaymentMethod.prop('checked', true); 1332 } 1333 }; 1334 $cc_number.payment('formatCardNumber').on('input blur', updatePaymentMethod); 1335 $('.proxy-input-cc_cvv, .proxy-input-cvv').payment('formatCardCVC'); 1336 updatePaymentMethod(); 1337 }); 1338 })(); 1339 }, 1340 1341 jsINVC: function () { 1342 }, 1343 1344 jsORDP: function () { 1345 // ---- Launch Printer Dialog ---- // 1346 window.print(); 1347 }, 1348 1349 jsSMAP: function () { 1350 // ---- Conform all site map DIVs to same height ---- // 1351 cornerstoneUX.sharedFunctions.conformDisplay('.site-map'); 1352 }, 1353 1354 jsGFTL: function () { 1355 // ---- Open Forgot Password ---- // 1356 cornerstoneUX.sharedFunctions.openForgotPassword(); 1357 }, 1358 1359 jsWLGN: function () { 1360 // ---- Open Forgot Password ---- // 1361 cornerstoneUX.sharedFunctions.openForgotPassword(); 1362 }, 1363 1364 jsCSBE: function () { 1365 $('.qty-dec').on('click', function() { 1366 var qtyBox = $(this).parent().find('[name="Quantity"]'), 1367 qty = parseFloat( $(qtyBox).val() ); 1368 if ( qty > 1 ) { 1369 $(qtyBox).val( qty - 1 ); 1370 } 1371 }); 1372 $('.qty-inc').on('click', function() { 1373 var qtyBox = $(this).parent().find('[name="Quantity"]'), 1374 qty = parseFloat( $(qtyBox).val() ); 1375 if ( qty ) { 1376 $(qtyBox).val( qty + 1 ); 1377 } 1378 }); 1379 } 1380}; 1381cornerstoneUX.init();
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.