JAVASCRIPT 18
Iphone.js Guest on 16th July 2020 01:29:04 PM
  1. /**
  2.  * Magento
  3.  *
  4.  * NOTICE OF LICENSE
  5.  *
  6.  * This source file is subject to the Academic Free License (AFL 3.0)
  7.  * that is bundled with this package in the file LICENSE_AFL.txt.
  8.  * It is also available through the world-wide-web at this URL:
  9.  * http://opensource.org/licenses/afl-3.0.php
  10.  * If you did not receive a copy of the license and are unable to
  11.  * obtain it through the world-wide-web, please send an email
  12.  * to [email protected] so we can send you a copy immediately.
  13.  *
  14.  * DISCLAIMER
  15.  *
  16.  * Do not edit or add to this file if you wish to upgrade Magento to newer
  17.  * versions in the future. If you wish to customize Magento for your
  18.  * needs please refer to http://www.magento.com for more information.
  19.  *
  20.  * @category    design
  21.  * @package     default_iphone
  22.  * @copyright   Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
  23.  * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
  24.  */
  25.  
  26.  // Homepage categories and subcategories slider
  27. document.observe("dom:loaded", function() {
  28.  
  29.     transEndEventNames = {
  30.         'WebkitTransition' : 'webkitTransitionEnd',
  31.         'MozTransition'    : 'transitionend',
  32.         'OTransition'      : 'oTransitionEnd',
  33.         'msTransition'     : 'MSTransitionEnd',
  34.         'transition'       : 'transitionend'
  35.     },
  36.     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
  37.  
  38.     function handler(position) {
  39.         var lat = position.coords.latitude,
  40.             lng = position.coords.longitude;
  41.  
  42.         //alert(latitude + ' ' + longitude);
  43.  
  44.         var geocoder = new google.maps.Geocoder();
  45.  
  46.         function codeLatLng() {
  47.             var latlng = new google.maps.LatLng(lat, lng);
  48.             geocoder.geocode({'latLng': latlng}, function(results, status) {
  49.                 if (status == google.maps.GeocoderStatus.OK) {
  50.                     if (results[0]) {
  51.                         alert(results[0].formatted_address);
  52.                     }
  53.                 } else {
  54.                     alert("Geocoder failed due to: " + status);
  55.                 }
  56.             });
  57.         }
  58.  
  59.         //codeLatLng();
  60.  
  61.     }
  62.  
  63.     var loadMore = Class.create({
  64.         initialize: function (list, href, pattern) {
  65.             var that = this;
  66.  
  67.             this.list = list;
  68.             this.list.insert({ after : '<div class="more"><span id="more_button" class="more-button">More</span></div>'});
  69.             this.href = href.readAttribute('href');
  70.             this.button = $('more_button');
  71.             this.holder = new Element('div', { 'class': 'response-holder' });
  72.  
  73.             this.button.observe('click', function () {
  74.                 if ( !that.button.hasClassName('loading') ) {
  75.                     new Ajax.Request(that.href, {
  76.                         onCreate: function () {
  77.                             that.button.addClassName('loading');
  78.                         },
  79.                         onComplete: function(response) {
  80.                             if (200 == response.status) {
  81.                                 that.holder.innerHTML = response.responseText;
  82.                                 that.holder.select(pattern).each(function(elem) {
  83.                                     that.list.insert({ bottom : elem });
  84.                                 });
  85.                                 that.href = that.holder.select('.next-page')[0].readAttribute('href');
  86.                                 that.button.removeClassName('loading');
  87.                                 if ( !that.href ) {
  88.                                     that.button.up().remove();
  89.                                 }
  90.                             }
  91.  
  92.                         }
  93.                     });
  94.                 }
  95.             });
  96.         }
  97.     });
  98.  
  99.     if ( $$('.c-list')[0] && $$('.next-page')[0]  ) {
  100.         var loadMoreCategory = new loadMore(
  101.             $$('.c-list')[0],
  102.             $$('.next-page')[0],
  103.             '.c-list > li'
  104.         );
  105.     }
  106.  
  107.     if ( $$('.downloadable-products-history .list')[0] && $$('.next-page')[0]  ) {
  108.         var loadMoreCategory = new loadMore(
  109.             $$('.downloadable-products-history .list')[0],
  110.             $$('.next-page')[0],
  111.             '.downloadable-products-history .list > li'
  112.         );
  113.     }
  114.  
  115.     if ( $$('.review-history .list')[0] && $$('.next-page')[0]  ) {
  116.         var loadMoreCategory = new loadMore(
  117.             $$('.review-history .list')[0],
  118.             $$('.next-page')[0],
  119.             '.review-history .list > li'
  120.         );
  121.     }
  122.  
  123.     if ( $$('.recent-orders .data-table')[0] && $$('.next-page')[0]  ) {
  124.         var loadMoreCategory = new loadMore(
  125.             $$('.recent-orders .data-table')[0],
  126.             $$('.next-page')[0],
  127.             '.recent-orders .data-table tbody > tr'
  128.         );
  129.     }
  130.  
  131.     //-----------------------------//
  132.  
  133.     $$('label[for]').each(function(label) {
  134.         label.observe('click', function() {});
  135.     });
  136.  
  137.     $$('input.validate-email').each(function (input) {
  138.         input.writeAttribute('type', 'email');
  139.     });
  140.  
  141.     $$('.form-list img[src*="calendar.gif"]').each(function (img) {
  142.         img.up().insert({ 'top' : img });
  143.     });
  144.  
  145.     if ( navigator.geolocation ) {
  146.         //navigator.geolocation.getCurrentPosition(handler);
  147.     }
  148.  
  149.     if ( $('my-reviews-table') ) {
  150.         $('my-reviews-table').wrap('div', { 'class' : 'my-reviews-table-wrap' });
  151.     }
  152.  
  153.     $$('.my-account .dashboard .box-title').each(function (elem) {
  154.         elem.observe('click', function (e) {
  155.             if ( e.target.hasClassName('box-title') ) {
  156.                 this.toggleClassName('collapsed').next().toggle();
  157.             }
  158.         }).next().hide();
  159.     });
  160.  
  161.     var transformPref = Modernizr.prefixed('transform');
  162.  
  163.     function supportsTouchCallout () {
  164.         var div = document.createElement('div'),
  165.             supports = div.style['webkitTouchCallout'] !== undefined || div.style['touchCallout'] !== undefined;
  166.  
  167.         return supports;
  168.     }
  169.  
  170.     $$('input[name=qty], input[name*=super_group], input[name*=qty]').each(function (el) {
  171.         var defaultValue = el.value;
  172.         el.observe('focus', function () {
  173.             if (this.value == defaultValue) this.value = '';
  174.         });
  175.         el.observe('blur', function () {
  176.             if (this.value == "") this.value = defaultValue;
  177.         });
  178.     });
  179.  
  180.     if ( $('product-review-table') ) {
  181.         $('product-review-table').wrap('div', {'class' : 'review-table-wrap'}).on('click', 'input[type="radio"]', function (e) {
  182.  
  183.             var $this = e.target;
  184.  
  185.             $this.up('tr').select('td').invoke('removeClassName', 'checked');
  186.             if ( $this.up().hasClassName('value') ) {
  187.                 $this.up().addClassName('checked').previousSiblings().each(function (td) {
  188.                     if (td.hasClassName('value')) td.addClassName('checked');
  189.                 });
  190.             }
  191.  
  192.         });
  193.     }
  194.  
  195.     function is_touch_device() {
  196.       try {
  197.         document.createEvent("TouchEvent");
  198.         return true;
  199.       } catch (e) {
  200.         return false;
  201.       }
  202.     }
  203.  
  204.     var touch = is_touch_device();
  205.  
  206.     $$('select[multiple]').each(function (select) {
  207.         var select_options = new Element('ol', {'class': 'select-multiple-options'}).wrap('div', { 'class' : 'select-multiple-options-wrap' }),
  208.             selected;
  209.  
  210.         select.wrap('div', { 'class': 'select-multiple-wrap' });
  211.         select.select('option').each(function(option) {
  212.             select_options.down().insert({ bottom : new Element('li', { 'class' :  'select-option', 'data-option-value' : option.value }).update(option.text) });
  213.         });
  214.  
  215.         select_options.insert({ top : new Element('div', { 'class' : 'select-heading' }).update('Choose options...').insert({ top : new Element('span', { 'class' : 'select-close' }).update('×') }) });
  216.  
  217.         var closeSelect = function() {
  218.             select_options.setStyle({ 'visibility' : 'hidden' });
  219.             selected = [];
  220.             select.select('option').each(function (option) {
  221.                 if (option.selected) {
  222.                     selected.push(option.text);
  223.                 }
  224.             });
  225.  
  226.             if (selected.size() > 0) {
  227.                 select.previous().update('<span class="selected-counter"></span>' + selected.join(', ')).addClassName('filled');
  228.                 select.previous().select('span')[0].update(selected.size());
  229.             } else {
  230.                 select.previous().update('Choose options...').removeClassName('filled');
  231.             }
  232.             document.stopObserving('click', closeSelect);
  233.         };
  234.  
  235.         select_options.select('.select-close')[0].observe('click', closeSelect );
  236.  
  237.         select_options.on('click', '.select-option', function(e, elem) {
  238.             var option = select.select('option[value=' + elem.readAttribute('data-option-value') + ']')[0];
  239.             elem.toggleClassName('active');
  240.             if (option.selected) {
  241.                 option.selected = false;
  242.             } else {
  243.                 option.selected = true;
  244.             }
  245.             if (typeof bundle !== 'undefined') bundle.changeSelection(select);
  246.         });
  247.  
  248.         select.insert({ before : select_options });
  249.         select.insert({
  250.             before: new Element('div', {'class': 'select-multiple'}).update("Choose options...").observe('click', function(e) {
  251.                     select.previous('.select-multiple-options-wrap').setStyle({ 'visibility' : 'visible' }).observe('click', function(e) {
  252.                         e.stopPropagation();
  253.                     });
  254.                     setTimeout(function() {
  255.                         document.observe('click', closeSelect);
  256.                     }, 1);
  257.                 })
  258.         });
  259.         select.setStyle({ 'visibility' : 'hidden', 'position' : 'absolute' });
  260.     });
  261.  
  262.     var supportsOrientationChange = "onorientationchange" in window,
  263.     orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";
  264.  
  265.     Event.observe(window, orientationEvent, function() {
  266.         var orientation, page, transformValue = {};
  267.  
  268.         switch(window.orientation){
  269.             case 0:
  270.             orientation = "portrait";
  271.             break;
  272.  
  273.             case -90:
  274.             orientation = "landscape";
  275.             break;
  276.  
  277.             case 90:
  278.             orientation = "landscape";
  279.             break;
  280.         }
  281.  
  282.         if ( $('nav-container') ) {
  283.  
  284.             setTimeout(function () {
  285.                 $$("#nav-container ul").each(function(ul) {
  286.                     ul.setStyle({'width' : document.body.offsetWidth + "px"});
  287.                 });
  288.  
  289.                 page = Math.floor(Math.abs(sliderPosition/viewportWidth));
  290.                 sliderPosition = (sliderPosition + viewportWidth*page) - document.body.offsetWidth*page;
  291.                 viewportWidth = document.body.offsetWidth;
  292.  
  293.                 if ( Modernizr.csstransforms3d ) {
  294.                     transformValue[transformPref] = "translate3d(" + sliderPosition + "px, 0, 0)";
  295.                 } else if ( Modernizr.csstransforms ) {
  296.                     transformValue[transformPref] = "translate(" + sliderPosition + "px, 0)";
  297.                 }
  298.                 $("nav-container").setStyle(transformValue);
  299.  
  300.                 if ( upSellCarousel ) {
  301.                     if (orientation === 'landscape') {
  302.                         upSellCarousel.resize(3);
  303.                     } else {
  304.                         upSellCarousel.resize(2);
  305.                     }
  306.                 }
  307.             }, 400);
  308.  
  309.         }
  310.  
  311.     });
  312.  
  313.     //alert(Modernizr.prefixed('transform'));
  314.  
  315.     // Home Page Slider
  316.  
  317.     //alert(transformPref);
  318.     var sliderPosition = 0,
  319.         viewportWidth = document.body.offsetWidth,
  320.         last,
  321.         diff;
  322.  
  323.     $$("#nav-container ul").each(function(ul) { ul.style.width = document.body.offsetWidth + "px"; });
  324.  
  325.     $$("#nav a").each(function(sliderLink) {
  326.         if (sliderLink.next(0) !== undefined) {
  327.             sliderLink.clonedSubmenuList = sliderLink.next(0);
  328.  
  329.             sliderLink.observe('click', function(e) {
  330.  
  331.                 e.preventDefault();
  332.                 var transformValue = {};
  333.  
  334.                 //homeLink.hasClassName('disabled') ? homeLink.removeClassName('disabled') : '';
  335.  
  336.                 if (last) {
  337.                     diff = e.timeStamp - last;
  338.                 }
  339.                 last = e.timeStamp;
  340.                 if (diff && diff < 200) {
  341.                     return;
  342.                 }
  343.                 if (!this.clonedSubmenuList.firstDescendant().hasClassName('subcategory-header')) {
  344.                     var subcategoryHeader = new Element('li', {'class': 'subcategory-header'});
  345.                     subcategoryHeader.insert({
  346.                         top: new Element('button', {'class': 'previous-category'}).update("Back").wrap('div', {'class':'button-wrap'}),
  347.                         bottom: this.innerHTML
  348.                     });
  349.                     this.clonedSubmenuList.insert({
  350.                         top: subcategoryHeader
  351.                     });
  352.                     subcategoryHeader.insert({ after : new Element('li').update('<a href="' + sliderLink.href + '"><span>All Products</span></a>') });
  353.  
  354.                     this.clonedSubmenuList.firstDescendant().firstDescendant().observe('click', function(e) {
  355.                         if (last) {
  356.                             diff = e.timeStamp - last;
  357.                         }
  358.                         last = e.timeStamp;
  359.                         if (diff && diff < 200) {
  360.                             return;
  361.                         }
  362.                         if ( Modernizr.csstransforms3d ) {
  363.                             transformValue[transformPref] = "translate3d(" + (document.body.offsetWidth + sliderPosition) + "px, 0, 0)";
  364.                         } else if ( Modernizr.csstransforms ) {
  365.                             transformValue[transformPref] = "translate(" + (document.body.offsetWidth + sliderPosition) + "px, 0)";
  366.                         }
  367.                         $("nav-container").setStyle(transformValue);
  368.                         sliderPosition = sliderPosition + document.body.offsetWidth;
  369.                         setTimeout(function() {
  370.                             $$("#nav-container > ul:last-child")[0].remove();
  371.                             $("nav-container").setStyle({'height' : 'auto'});
  372.                         }, 250);
  373.                     });
  374.                     new NoClickDelay(this.clonedSubmenuList);
  375.                 };
  376.  
  377.                 $("nav-container").insert(this.clonedSubmenuList.setStyle({'width' : document.body.offsetWidth + 'px'}));
  378.                 $('nav-container').setStyle({'height' : this.clonedSubmenuList.getHeight() + 'px'});
  379.  
  380.                 if ( Modernizr.csstransforms3d ) {
  381.  
  382.                     transformValue[transformPref] = "translate3d(" + (sliderPosition - document.body.offsetWidth) + "px, 0, 0)";
  383.  
  384.                 } else if ( Modernizr.csstransforms ) {
  385.  
  386.                     transformValue[transformPref] = "translate(" + (sliderPosition - document.body.offsetWidth) + "px, 0)";
  387.  
  388.                 }
  389.  
  390.                 $("nav-container").setStyle(transformValue);
  391.  
  392.                 sliderPosition = sliderPosition - document.body.offsetWidth;
  393.             });
  394.         };
  395.     });
  396.  
  397.     function getSupportedProp(proparray){
  398.         var root = document.documentElement;
  399.         for ( var i = 0; i < proparray.length; i++ ) {
  400.             if ( typeof root.style[proparray[i]] === "string") {
  401.                 return proparray[i];
  402.             }
  403.         }
  404.     }
  405.  
  406.     function NoClickDelay(el) {
  407.         if ( getSupportedProp(['OTransform']) ) {
  408.             return;
  409.         }
  410.         this.element = typeof el == 'object' ? el : document.getElementById(el);
  411.         if( window.Touch ) this.element.addEventListener('touchstart', this, false);
  412.     }
  413.  
  414.     NoClickDelay.prototype = {
  415.         handleEvent: function(e) {
  416.             switch(e.type) {
  417.                 case 'touchstart': this.onTouchStart(e); break;
  418.                 case 'touchmove': this.onTouchMove(e); break;
  419.                 case 'touchend': this.onTouchEnd(e); break;
  420.             }
  421.         },
  422.  
  423.         onTouchStart: function(e) {
  424.             this.moved = false;
  425.  
  426.             this.theTarget = document.elementFromPoint(e.targetTouches[0].clientX, e.targetTouches[0].clientY);
  427.             if(this.theTarget.nodeType == 3) this.theTarget = theTarget.parentNode;
  428.             this.theTarget.className+= ' pressed';
  429.  
  430.             this.element.addEventListener('touchmove', this, false);
  431.             this.element.addEventListener('touchend', this, false);
  432.         },
  433.  
  434.         onTouchMove: function() {
  435.             this.moved = true;
  436.             this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
  437.         },
  438.  
  439.         onTouchEnd: function(e) {
  440.             e.preventDefault();
  441.  
  442.             this.element.removeEventListener('touchmove', this, false);
  443.             this.element.removeEventListener('touchend', this, false);
  444.  
  445.             if( !this.moved && this.theTarget ) {
  446.                 this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
  447.                 var theEvent = document.createEvent('MouseEvents');
  448.                 theEvent.initEvent('click', true, true);
  449.                 this.theTarget.dispatchEvent(theEvent);
  450.             }
  451.  
  452.             this.theTarget = undefined;
  453.         }
  454.     };
  455.  
  456.     if (document.getElementById('nav')) {
  457.         new NoClickDelay(document.getElementById('nav'));
  458.     }
  459.  
  460.     //iPhone header menu
  461.  
  462.     $$('dt.menu a')[0].observe('click', function(e) {
  463.             var parent = this.up(), transformValue = {};
  464.             if (parent.hasClassName('active')) {
  465.                 parent.removeClassName('active');
  466.  
  467.                 if ( Modernizr.csstransforms3d ) {
  468.                     transformValue[transformPref] = 'translate3d(0, -100%, -1px)';
  469.                 } else if ( Modernizr.csstransforms ) {
  470.                     transformValue[transformPref] = 'translate3d(0, -100%)';
  471.                     transformValue['visibility']  = 'hidden';
  472.                 }
  473.  
  474.                 $$('.menu-box')[0].setStyle(transformValue);
  475.  
  476.             } else {
  477.  
  478.                 this.removeClassName('active');
  479.  
  480.                 if ( Modernizr.csstransforms3d ) {
  481.                     transformValue[transformPref] = 'translate3d(0, -100%, -1px)';
  482.                 } else if ( Modernizr.csstransforms ) {
  483.                     transformValue[transformPref] = 'translate3d(0, -100%)';
  484.                     transformValue['visibility']  = 'hidden';
  485.                 }
  486.  
  487.                 $$('.menu-box')[0].setStyle(transformValue);
  488.  
  489.                 parent.addClassName('active');
  490.  
  491.                 if ( Modernizr.csstransforms3d ) {
  492.                     transformValue[transformPref] = 'translate3d(0, 0%, -1px)';
  493.                     transformValue['visibility']  = 'visible';
  494.                 } else if ( Modernizr.csstransforms ) {
  495.                     transformValue[transformPref] = 'translate3d(0, 0%)';
  496.                     transformValue['visibility']  = 'visible';
  497.                 }
  498.                 parent.next().setStyle(transformValue);
  499.             };
  500.             e.preventDefault();
  501.         });
  502.  
  503.     if ( $('menu') ) {
  504.         $('menu').select('dd').each(function (elem) {
  505.             elem.observe('webkitTransitionEnd', function (e) {
  506.                 if ( !elem.previous().hasClassName('active') ) {
  507.                     elem.setStyle({'visibility' : 'hidden'});
  508.                 } else {
  509.                     elem.setStyle({'top' : '1px'});
  510.                 }
  511.             });
  512.         });
  513.     }
  514.  
  515.     //iPhone header menu switchers
  516.     if( $$('#language-switcher li.selected a')[0] ) {
  517.         var curLang = $$('#language-switcher li.selected a')[0].innerHTML;
  518.         $('current-language').update(curLang);
  519.  
  520.         $$('#language-switcher > a')[0].observe('click', function (e) {
  521.             if ( !this.next().visible() )
  522.                 $$('.switcher-options').invoke('hide');
  523.             this.next().toggle().toggleClassName('visible');
  524.             e.preventDefault();
  525.         });
  526.     }
  527.  
  528.     if( $$('#store-switcher li.selected a')[0] ) {
  529.         var curStore = $$('#store-switcher li.selected a')[0].innerHTML;
  530.         $('current-store').update(curStore);
  531.  
  532.         $$('#store-switcher > a')[0].observe('click', function (e) {
  533.             if ( !ithis.next().visible() )
  534.                 $$('.switcher-options').invoke('hide');
  535.             this.next().toggle().toggleClassName('visible');
  536.             e.preventDefault();
  537.         });
  538.      }
  539.  
  540.     //Slider
  541.  
  542.     var Carousel = Class.create({
  543.         initialize: function (carousel, itemsContainer, options) {
  544.             this.options  = Object.extend({
  545.                 visibleElements: 3,
  546.                 drawCounter: true,
  547.                 threshold: {
  548.                     x: 50,
  549.                     y: 40
  550.                 },
  551.                 preventDefaultEvents: false
  552.             }, options || {});
  553.  
  554.             this.currentPage = 1;
  555.             this.carousel = carousel;
  556.             this.carouselWidth =  this.carousel.getStyle('width') ? this.carousel.getStyle('width').replace('px', '') : $$('body')[0].getStyle('width').replace('px', '');
  557.             this.items    = itemsContainer.addClassName('carousel-items');
  558.             this.itemsWrap = this.items.wrap('div', {'class' : 'carousel-items-wrap'});
  559.             this.itemsLength = this.items.childElements().size();
  560.             if (this.options.drawCounter) {
  561.                 this.counter  = this.carousel.insert(new Element('div', {'class' : 'counter'})).select('.counter')[0];
  562.             }
  563.             this.controls = carousel.select('.controls')[0] || this.carousel.insert({ top: new Element('div', { 'class' : 'controls'}) }).select('.controls')[0];
  564.             this.prevButton = carousel.select('.prev')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'prev'}) }).select('.prev')[0].addClassName('disabled');
  565.             this.nextButton = carousel.select('.next')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'next'}) }).select('.next')[0];
  566.             this.originalCoord = { x: 0, y: 0 };
  567.             this.finalCoord    = { x: 0, y: 0 };
  568.  
  569.             this.carousel.wrap('div', { 'class' : 'carousel-wrap' });
  570.  
  571.             this.nextButton.observe('click', this.moveRight.bind(this));
  572.             this.prevButton.observe('click', this.moveLeft.bind(this));
  573.             this.itemsWrap.observe('touchstart', this.touchStart.bind(this));
  574.             this.itemsWrap.observe('touchmove', this.touchMove.bind(this));
  575.             this.itemsWrap.observe('touchend', this.touchEnd.bind(this));
  576.             Event.observe(window, 'resize', this.orientationChange.bind(this));
  577.         },
  578.  
  579.         init: function () {
  580.            this.currentPage = 0;
  581.            this.itemPos  = 0;
  582.            this.lastItemPos = (this.itemsLength-this.options.visibleElements) * this.carouselWidth/this.options.visibleElements;
  583.            this.itemWidth = this.carouselWidth/this.options.visibleElements + 'px';
  584.            this.screens  = Math.ceil(this.itemsLength/this.options.visibleElements);
  585.  
  586.            this._resizeChilds();
  587.            if (this.options.drawCounter) {
  588.                this.drawCounter();
  589.            }
  590.  
  591.            return this;
  592.         },
  593.  
  594.         resize: function(visibleElements) {
  595.             var transformValue = {};
  596.             this.options.visibleElements = visibleElements;
  597.             if (this.options.drawCounter) {
  598.                 this.counter.childElements().invoke('remove');
  599.             }
  600.             if ( Modernizr.csstransforms3d ) {
  601.                 transformValue[transformPref] = 'translateX(' + 0 + ')';
  602.             } else if ( Modernizr.csstransforms ) {
  603.                 transformValue['left'] = '0';
  604.             }
  605.             this.items.setStyle(transformValue);
  606.             this.prevButton.addClassName('disabled');
  607.             this.nextButton.removeClassName('disabled');
  608.             this.init();
  609.         },
  610.  
  611.         _resizeChilds: function () {
  612.             this.items.childElements().each( function(n) {
  613.                 n.setStyle({
  614.                     'width': this.itemWidth
  615.                 });
  616.             }, this);
  617.         },
  618.  
  619.         orientationChange: function() {
  620.             this._recalculate();
  621.             this._resizeChilds();
  622.             this.toPage(this.currentPage);
  623.         },
  624.  
  625.         drawCounter: function () {
  626.             if (this.screens > 1) {
  627.                  if (this.controls)
  628.                      this.controls.show();
  629.                  for (var i = 0; i < this.screens; i++) {
  630.                    if (i === 0) {
  631.                        this.counter.insert(new Element('span', {'class': 'active'}));
  632.                    } else {
  633.                        this.counter.insert(new Element('span'));
  634.                    }
  635.                }
  636.            } else {
  637.                if (this.controls)
  638.                    this.controls.hide();
  639.            }
  640.         },
  641.  
  642.         _recalculate: function() {
  643.             this.carouselWidth =  this.carousel.getStyle('width') ? this.carousel.getStyle('width').replace('px', '') : $$('body')[0].getStyle('width').replace('px', '');
  644.             this.lastItemPos = (this.itemsLength-this.options.visibleElements) * this.carouselWidth/this.options.visibleElements;
  645.             this.itemWidth = this.carouselWidth/this.options.visibleElements + 'px';
  646.         },
  647.  
  648.         _checkControls: function() {
  649.             if(this.itemPos === 0) {
  650.                 this.prevButton.addClassName('disabled');
  651.             } else {
  652.                 this.prevButton.removeClassName('disabled');
  653.             }
  654.  
  655.             if(Math.abs(this.itemPos) === this.lastItemPos) {
  656.                 this.nextButton.addClassName('disabled');
  657.             } else {
  658.                 this.nextButton.removeClassName('disabled');
  659.             }
  660.  
  661.             if (this.options.drawCounter) {
  662.                 this.counter.select('.active')[0].removeClassName('active');
  663.                 this.counter.select('span')[this.currentPage].addClassName('active');
  664.             }
  665.         },
  666.  
  667.         _setTransformCoordinates: function() {
  668.             var transformValue = {};
  669.             if ( Modernizr.csstransforms3d ) {
  670.                 transformValue[transformPref] = 'translateX(' + this.itemPos + 'px)';
  671.                 transformValue['position']    = 'relative';
  672.             } else if ( Modernizr.csstransforms ) {
  673.                 transformValue['left'] = this.itemPos + 'px';
  674.                 transformValue['position']    = 'relative';
  675.             }
  676.             setTimeout(function() {
  677.                 this.items.setStyle(transformValue);
  678.             }.bind(this), 1);
  679.  
  680.             return this;
  681.         },
  682.  
  683.         toPage: function (page) {
  684.             this.currentPage = page;
  685.             this.itemPos = -(this.carouselWidth / this.options.visibleElements * this.options.visibleElements) * page;
  686.  
  687.             this._setTransformCoordinates();
  688.             this._checkControls();
  689.  
  690.             this.finalCoord.x = this.originalCoord.x;
  691.         },
  692.  
  693.         moveRight: function () {
  694.             if(Math.abs(this.itemPos) < this.lastItemPos) {
  695.                 this.toPage(this.currentPage + 1);
  696.             }
  697.         },
  698.         moveLeft: function () {
  699.             if (this.itemPos !== 0) {
  700.                 this.toPage(this.currentPage - 1);
  701.             }
  702.         },
  703.         touchStart: function (e) {
  704.             changeX = 0;
  705.  
  706.             this.isScrolling = undefined;
  707.  
  708.             this.originalCoord.x = e.targetTouches[0].pageX;
  709.             this.originalCoord.y = e.targetTouches[0].pageY;
  710.         },
  711.         touchMove: function (e) {
  712.             this.finalCoord.x = e.targetTouches[0].pageX;
  713.             this.finalCoord.y = e.targetTouches[0].pageY;
  714.  
  715.             changeX = this.originalCoord.x - this.finalCoord.x;
  716.             changeY = this.originalCoord.y - this.finalCoord.y;
  717.  
  718.             if ( typeof this.isScrolling == 'undefined') {
  719.                 this.isScrolling = !!( this.isScrolling || Math.abs(changeX) < Math.abs(this.finalCoord.y - this.originalCoord.y) );
  720.             }
  721.  
  722.             if (!this.isScrolling) {
  723.                 e.preventDefault();
  724.             }
  725.         },
  726.         touchEnd: function (e) {
  727.             if ( e.preventSwipe ) {
  728.                 return;
  729.             }
  730.  
  731.             if (!this.isScrolling) {
  732.  
  733.                 if(changeX > this.options.threshold.x && Math.abs(changeY) < this.options.threshold.y) {
  734.                     this.moveRight(e);
  735.                 }
  736.                 if(changeX < this.options.threshold.x * -1 && Math.abs(changeY) < this.options.threshold.y) {
  737.                     this.moveLeft(e);
  738.                 }
  739.                 changeX = changeY = 0;
  740.  
  741.             }
  742.         }
  743.     });
  744.  
  745.     if ( $$('.box-up-sell')[0] ) {
  746.         var upSellCarousel = new Carousel($$('.box-up-sell')[0], $$('.products-grid')[0], {
  747.             visibleElements: 2,
  748.             preventDefaultEvents: true
  749.         }).init();
  750.     }
  751.  
  752.     /*
  753.     if ( $$('.product-gallery')[0] ) {
  754.         var galleryCarousel = new Carousel($$('.product-gallery')[0], $$('.product-gallery > ul')[0], {
  755.             visibleElements: 1,
  756.             preventDefaultEvents: false
  757.         }).init();
  758.     }
  759.     */
  760.  
  761.     if ( $$('.product-view .product-image li').size() > 1 ) {
  762.         var productGallery = new Carousel($$('.product-view .product-image')[0], $$('.product-image ul')[0], {
  763.             visibleElements: 1,
  764.             preventDefaults: false
  765.         }).init();
  766.     }
  767.  
  768.     if ( $$('.crosssell li').size() > 1 ) {
  769.         var crossSells = new Carousel($$('.crosssell')[0], $$('.crosssell ul')[0], {
  770.             visibleElements: 2,
  771.             preventDefaults: false
  772.         }).init();
  773.     }
  774.  
  775.     // Swipe Functionality
  776.  
  777.     var Swipe = Class.create( Carousel, {
  778.         initialize: function (elem, swipeLeft, swipeRight, options) {
  779.             this.options  = Object.extend({
  780.                 threshold: {
  781.                     x: 50,
  782.                     y: 20
  783.                 },
  784.                 preventDefaultEvents: false
  785.             }, options || {});
  786.  
  787.             this.elem = elem;
  788.             this.originalCoord = { x: 0, y: 0 };
  789.             this.finalCoord    = { x: 0, y: 0 };
  790.  
  791.             this.elem.observe('touchstart', this.touchStart.bind(this));
  792.             this.elem.observe('touchmove', this.touchMove.bind(this));
  793.             this.elem.observe('touchend', this.touchEnd.bind(this));
  794.             this.moveLeft = swipeRight;
  795.             this.moveRight = swipeLeft;
  796.         }
  797.     });
  798.  
  799.     /*
  800.  
  801.     var verticalSwipe = Class.create( Carousel, {
  802.         initialize: function (elem, swipeUp, swipeDown, options) {
  803.             this.options  = Object.extend({
  804.                 threshold: {
  805.                     x: 10,
  806.                     y: 10
  807.                 },
  808.                 preventDefaultEvents: false
  809.             }, options || {});
  810.  
  811.             this.elem = elem;
  812.             this.originalCoord = { x: 0, y: 0 };
  813.             this.finalCoord    = { x: 0, y: 0 };
  814.  
  815.             this.elem.observe('touchstart', this.touchStart.bind(this));
  816.             this.elem.observe('touchmove', this.touchMove.bind(this));
  817.             this.elem.observe('touchend', this.touchEnd.bind(this));
  818.             this.moveLeft = swipeDown;
  819.             this.moveRight = swipeUp;
  820.         },
  821.         touchStart: function (e) {
  822.             e.preventDefault();
  823.             this.originalCoord.x = event.targetTouches[0].pageX;
  824.             this.originalCoord.y = event.targetTouches[0].pageY;
  825.         },
  826.         touchMove: function (e) {
  827.             this.finalCoord.x = e.targetTouches[0].pageX;
  828.             this.finalCoord.y = e.targetTouches[0].pageY;
  829.         },
  830.         touchEnd: function (e) {
  831.             var changeY = this.originalCoord.y - this.finalCoord.y;
  832.             if(changeY > this.options.threshold.y) {
  833.                 this.moveRight();
  834.             }
  835.             if(changeY < this.options.threshold.y * -1) {
  836.                 this.moveLeft();
  837.             }
  838.         }
  839.     });
  840.  
  841.     if ( $$('.block-cart')[0] ) {
  842.         new verticalSwipe($$('dt.cart')[0],
  843.             function () {
  844.             },
  845.             function () {
  846.                 $$('.block-cart')[0].setStyle({'webkitTransform':'translate3d(0, 42px, 0)'})
  847.             }
  848.         );
  849.     };
  850.  
  851.     */
  852.  
  853.     zoomGallery = Class.create({
  854.         initialize: function (gallery, options) {
  855.             this.options  = Object.extend({
  856.                 threshold: {
  857.                   x: 30,
  858.                   y: 40
  859.               }
  860.             }, options || {});
  861.  
  862.             this.gallery = gallery;
  863.             this.counter  = this.gallery.insert({after : new Element('div', {'class' : 'counter'})}).next();
  864.             this.controls = gallery.select('.controls')[0] || this.gallery.insert({ bottom: new Element('div', { 'class' : 'controls'}) }).select('.controls')[0];
  865.             this.prevButton = gallery.select('.prev')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'prev'}) }).select('.prev')[0].addClassName('disabled');
  866.             this.nextButton = gallery.select('.next')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'next'}) }).select('.next')[0];
  867.             this.wrap = this.gallery.down();
  868.             this.scale = 1.0;
  869.             this.dimensions;
  870.             this.items    = gallery.select('img');
  871.             this.itemsLength = this.items.size();
  872.             this.pos = 0;
  873.             this.step = (100/this.itemsLength).toFixed(2) * 1;
  874.             this.lastPos = this.step * this.itemsLength;
  875.             this.originalCoord = { x: 0, y: 0 };
  876.             this.finalCoord    = { x: 0, y: 0 };
  877.             this.offset = { x: 0, y: 0 };
  878.             this.ret = { x: 0, y: 0 };
  879.             this.hash = window.location.href.split('#')[1];
  880.  
  881.             this.nextButton.observe('click', this.moveRight.bind(this));
  882.             this.prevButton.observe('click', this.moveLeft.bind(this));
  883.  
  884.             if (this.itemsLength < 2) {
  885.                 this.controls.hide();
  886.             }
  887.  
  888.             this.items.each(function (item) {
  889.                 item.observe('touchstart', this.touchStart.bind(this));
  890.                 item.observe('touchmove', this.touchMove.bind(this));
  891.                 item.observe('touchend', this.touchEnd.bind(this));
  892.                 item.observe('gesturestart', this.gestureStart.bind(this));
  893.                 item.observe('gesturechange', this.gestureChange.bind(this));
  894.                 item.observe('gestureend', this.gestureEnd.bind(this));
  895.             }.bind(this));
  896.  
  897.             this.wrap.setStyle({
  898.                 'width' : this.itemsLength * 100 + '%'
  899.             });
  900.  
  901.             this.drawCounter();
  902.  
  903.             if (this.hash) {
  904.                 this.pos += this.step * this.hash;
  905.  
  906.                 var transformValue = {};
  907.                 if ( Modernizr.csstransforms3d ) {
  908.                     this.wrap.setStyle({
  909.                         'webkitTransform' : 'translate3d(' + this.pos*-1 + '%, 0, 0)'
  910.                     });
  911.                 } else if ( Modernizr.csstransforms ) {
  912.                     transformValue[transformPref] = 'translate(' + this.pos*-1 + '%, 0)';
  913.                     this.wrap.setStyle(transformValue);
  914.                 }
  915.  
  916.                 if (this.pos.toFixed(2) >= this.lastPos - this.step) {
  917.                     this.nextButton.addClassName('disabled');
  918.                 }
  919.  
  920.                 if (this.prevButton.hasClassName('disabled')) {
  921.                     this.prevButton.removeClassName('disabled');
  922.                 };
  923.  
  924.                 this.counter.select('.active')[0].removeClassName('active').next(this.hash - 1).addClassName('active');
  925.             }
  926.         },
  927.         drawCounter: function () {
  928.             if (this.itemsLength > 1) {
  929.                 for (var i = 0; i < this.itemsLength; i++) {
  930.                     if (i === 0) {
  931.                         this.counter.insert(new Element('span', {'class': 'active'}));
  932.                     } else {
  933.                     this.counter.insert(new Element('span'));
  934.                     }
  935.                 };
  936.             }
  937.         },
  938.         moveRight: function (elem) {
  939.             if (this.pos.toFixed(2) < this.lastPos - this.step) {
  940.  
  941.                 if(elem == event) {
  942.                     this.items.each(function (elm) {
  943.                         elm.setStyle({
  944.                             'webkitTransition' : '300ms linear',
  945.                             'webkitTransform' : 'scale3d(1, 1, 1)'
  946.                         });
  947.                     });
  948.                 } else if (elem) {
  949.                     elem.setStyle({
  950.                         'webkitTransition' : '300ms linear',
  951.                         'webkitTransform' : 'scale3d(1, 1, 1)'
  952.                     });
  953.                 }
  954.  
  955.                 this.scale = 1.0;
  956.  
  957.                 this.pos += this.step;
  958.  
  959.                 var transformValue = {};
  960.                 if ( Modernizr.csstransforms3d ) {
  961.                     this.wrap.setStyle({
  962.                         'webkitTransition' : '300ms linear',
  963.                         'webkitTransform' : 'translate3d(' + this.pos*-1 + '%, 0, 0)'
  964.                     });
  965.                 } else if ( Modernizr.csstransforms ) {
  966.                     transformValue[transformPref] = 'translate(' + this.pos*-1 + '%, 0)';
  967.                     this.wrap.setStyle(transformValue);
  968.                 }
  969.  
  970.                 if (this.pos.toFixed(2) >= this.lastPos - this.step) {
  971.                     this.nextButton.addClassName('disabled');
  972.                 }
  973.  
  974.                 if (this.prevButton.hasClassName('disabled')) {
  975.                     this.prevButton.removeClassName('disabled');
  976.                 };
  977.  
  978.                 this.counter.select('.active')[0].removeClassName('active').next().addClassName('active');
  979.  
  980.             }
  981.         },
  982.         moveLeft: function (elem) {
  983.  
  984.             if (this.pos.toFixed(2) > 0) {
  985.  
  986.                 if(elem == event) {
  987.                     this.items.each(function (elm) {
  988.                         elm.setStyle({
  989.                             'webkitTransition' : '300ms linear',
  990.                             'webkitTransform' : 'scale3d(1, 1, 1)'
  991.                         });
  992.                     });
  993.                 } else {
  994.                     elem.setStyle({
  995.                         'webkitTransition' : '300ms linear',
  996.                         'webkitTransform' : 'scale3d(1, 1, 1)'
  997.                     });
  998.                 }
  999.  
  1000.                 this.scale = 1.0;
  1001.  
  1002.                 this.pos -= this.step;
  1003.  
  1004.                 var transformValue = {};
  1005.                 if ( Modernizr.csstransforms3d ) {
  1006.                     this.wrap.setStyle({
  1007.                         'webkitTransition' : '300ms linear',
  1008.                         'webkitTransform' : 'translate3d(' + this.pos*-1 + '%, 0, 0)'
  1009.                     });
  1010.                 } else if ( Modernizr.csstransforms ) {
  1011.                     transformValue[transformPref] = 'translate(' + this.pos*-1 + '%, 0)';
  1012.                     this.wrap.setStyle(transformValue);
  1013.                 }
  1014.  
  1015.                 if (this.pos.toFixed(2) <= 0) {
  1016.                     this.prevButton.addClassName('disabled');
  1017.                 }
  1018.  
  1019.                 if (this.nextButton.hasClassName('disabled')) {
  1020.                     this.nextButton.removeClassName('disabled');
  1021.                 };
  1022.  
  1023.  
  1024.                 this.counter.select('.active')[0].removeClassName('active').previous().addClassName('active');
  1025.             }
  1026.         },
  1027.         gestureStart : function (e) {
  1028.             var $this = e.target;
  1029.  
  1030.             e.preventDefault();
  1031.  
  1032.             this.gestureStart = true;
  1033.             this.dimensions = $this.getDimensions();
  1034.         },
  1035.         gestureChange : function (e) {
  1036.             e.preventDefault();
  1037.             var $this = e.target;
  1038.  
  1039.             if ( (e.scale * this.scale) > 2 )
  1040.                 return;
  1041.  
  1042.             $this.setStyle({
  1043.                 'webkitTransition' : '',
  1044.                 'webkitTransform' : 'scale3d(' + (e.scale * this.scale) + ', ' + (e.scale * this.scale) + ', 1)',
  1045.             });
  1046.         },
  1047.         gestureEnd : function (e) {
  1048.             var $this = e.target;
  1049.  
  1050.             if ( (e.scale * this.scale) < 1 ) {
  1051.                 $this.setStyle({
  1052.                     'webkitTransition' : '300ms linear',
  1053.                     'webkitTransform' : 'scale3d(1, 1, 1)'
  1054.                 });
  1055.                 this.scale = 1.0;
  1056.             } else if ( e.scale > 2 ) {
  1057.                 this.scale = 2;
  1058.             } else {
  1059.                 this.scale *= e.scale;
  1060.             }
  1061.  
  1062.             setTimeout(function () {
  1063.                 this.gestureStart = false;
  1064.             }.bind(this), 50);
  1065.  
  1066.             this.originalCoord.x = this.originalCoord.y = this.finalCoord.x = this.finalCoord.y = this.offset.x = this.offset.y = 0;
  1067.         },
  1068.         touchStart: function (e) {
  1069.             var $this = e.target;
  1070.  
  1071.             this.isScrolling = undefined;
  1072.  
  1073.             if (e.targetTouches.length != 1) {
  1074.                 return false;
  1075.             }
  1076.  
  1077.             this.t1 = Date.now();
  1078.  
  1079.             this.originalCoord.x = e.targetTouches[0].clientX;
  1080.             this.originalCoord.y = e.targetTouches[0].clientY;
  1081.  
  1082.             $this.setStyle({ 'webkitTransition' : '' });
  1083.         },
  1084.         touchMove: function (e) {
  1085.  
  1086.             var $this = e.target;
  1087.  
  1088.             this.finalCoord.x = e.targetTouches[0].clientX;
  1089.             this.finalCoord.y = e.targetTouches[0].clientY;
  1090.  
  1091.             if ( typeof this.isScrolling == 'undefined') {
  1092.                 this.isScrolling = !!( this.isScrolling || Math.abs(this.finalCoord.x - this.originalCoord.x) < Math.abs(this.finalCoord.y - this.originalCoord.y) );
  1093.             }
  1094.  
  1095.             if (!this.isScrolling) {
  1096.                 e.preventDefault();
  1097.             }
  1098.  
  1099.             if (e.targetTouches.length != 1 || this.scale === 1.0 || this.gestureStart) {
  1100.                 return false;
  1101.             }
  1102.  
  1103.             e.preventDefault();
  1104.  
  1105.             var changeX = this.offset.x + this.finalCoord.x - this.originalCoord.x,
  1106.                 changeY = this.offset.y + this.finalCoord.y - this.originalCoord.y,
  1107.                 topX = (this.dimensions.width  * (this.scale - 1))/2,
  1108.                 topY = (this.dimensions.height * (this.scale - 1))/2,
  1109.                 tension = 1.55;
  1110.  
  1111.             if ( topX < Math.abs(changeX) ) {
  1112.                 if ( changeX < 0 ) {
  1113.                     changeX = changeX - (changeX + topX)/tension;
  1114.                 } else {
  1115.                     changeX = changeX - (changeX - topX)/tension;
  1116.                 }
  1117.             }
  1118.  
  1119.             if ( topY < Math.abs(changeY) ) {
  1120.                 if ( changeY < 0 ) {
  1121.                     changeY = changeY - (changeY + topY)/tension;
  1122.                 } else {
  1123.                     changeY = changeY - (changeY - topY)/tension;
  1124.                 }
  1125.             }
  1126.  
  1127.             $this.setStyle({
  1128.                 'webkitTransform' : 'translate3d(' + changeX + 'px,' + changeY + 'px, 0) scale3d(' + this.scale + ',' + this.scale  + ',1)'
  1129.             });
  1130.  
  1131.         },
  1132.         touchEnd: function (e) {
  1133.  
  1134.             if (!this.isScrolling) {
  1135.  
  1136.                 this.t2 = Date.now();
  1137.  
  1138.                 var $this = e.target,
  1139.                     timeDelta = this.t2 - this.t1,
  1140.                     changeX = this.originalCoord.x - this.finalCoord.x,
  1141.                     changeY = this.originalCoord.y - this.finalCoord.y;
  1142.  
  1143.                 if(changeX > this.options.threshold.x && Math.abs(changeY) < 40 && timeDelta < 300) {
  1144.                     this.moveRight($this);
  1145.                 }
  1146.                 if(changeX < this.options.threshold.x * -1 && Math.abs(changeY) < 40 && timeDelta < 300) {
  1147.  
  1148.                     this.moveLeft($this);
  1149.                 }
  1150.  
  1151.                 if (e.targetTouches.length > 0 || this.gestureStart || timeDelta < 100)
  1152.                     return false;
  1153.  
  1154.                 this.offset.x += this.finalCoord.x - this.originalCoord.x;
  1155.                 this.offset.y += this.finalCoord.y - this.originalCoord.y;
  1156.  
  1157.                 var topX = (this.dimensions.width  * (this.scale - 1))/2,
  1158.                     topY = (this.dimensions.height * (this.scale - 1))/2,
  1159.                     moved = false;
  1160.  
  1161.                 if ( Math.abs(this.offset.x) > topX ) {
  1162.  
  1163.                     moved = true;
  1164.                     $this.setStyle({
  1165.                         'webkitTransition' : '-webkit-transform 100ms ease-out',
  1166.                         'webkitTransform' : 'translate3d(' + (this.offset.x  < 0 ? topX*-1 : topX) + 'px,' + this.offset.y + 'px, 0) scale3d(' + this.scale + ',' + this.scale  + ',1)'
  1167.                     });
  1168.  
  1169.                     this.offset.x = this.offset.x  < 0 ? topX*-1 : topX;
  1170.  
  1171.                 }
  1172.  
  1173.                 if ( Math.abs(this.offset.y) > topY ) {
  1174.                     moved = true;
  1175.                     $this.setStyle({
  1176.                         'webkitTransition' : '-webkit-transform 100ms ease-out',
  1177.                         'webkitTransform' : 'translate3d(' + this.offset.x + 'px,' + (this.offset.y  < 0 ? topY*-1 : topY) + 'px, 0) scale3d(' + this.scale + ',' + this.scale  + ',1)'
  1178.                     });
  1179.  
  1180.                     this.offset.y = this.offset.y  < 0 ? topY*-1 : topY;
  1181.  
  1182.                 }
  1183.  
  1184.                 if ( Math.abs(this.offset.x) > topX && Math.abs(this.offset.y) > topY && !moved ) {
  1185.  
  1186.                     $this.setStyle({
  1187.                         'webkitTransition' : '-webkit-transform 100ms ease-out',
  1188.                         'webkitTransform' : 'translate3d(' + (this.offset.x  < 0 ? topX*-1 : topX) + 'px,' + (this.offset.y  < 0 ? topY*-1 : topY) + 'px, 0) scale3d(' + this.scale + ',' + this.scale  + ',1)'
  1189.                     });
  1190.  
  1191.                     this.offset.x = this.offset.x  < 0 ? topX*-1 : topX;
  1192.                     this.offset.y = this.offset.y  < 0 ? topY*-1 : topY;
  1193.  
  1194.                 }
  1195.  
  1196.             }
  1197.  
  1198.         },
  1199.     });
  1200.  
  1201.     if ( $$('.c-list') && supportsTouchCallout() ) {
  1202.  
  1203.         $$('.c-list .product-image').each(function(n) {
  1204.             var parent = n.up('a'),
  1205.                 clone  = n.up().clone(true).addClassName('cloned');
  1206.             parent.insert(clone.wrap('div', {'class' : 'cloned-wrap'}));
  1207.  
  1208.             new webkit_draggable(clone.up(), { handle : clone.select('.product-image')[0], revert : true, scroll : true, onStart : function(r, e) {
  1209.                     r.setStyle({'opacity':'100'}).down('.wrap').addClassName('drop-start');
  1210.                 },
  1211.                 onEnd : function(r, e) {
  1212.                     r.setStyle({'opacity':'0'}).down('.wrap').removeClassName('drop-start');
  1213.                 }
  1214.             });
  1215.         });
  1216.         webkit_drop.add($('menu'),
  1217.         {
  1218.             onDrop : function(elem, e) { e.preventDefault(); setLocation(elem.up('li').down('.actions li:last-child a').readAttribute('href')); elem.remove(); },
  1219.             onOver : function(elem, e) { e.preventDefault(); elem.down().addClassName('to-cart-animate'); },
  1220.             onOut  : function(elem) { elem.down().removeClassName('to-cart-animate'); }
  1221.         });
  1222.  
  1223.     }
  1224.  
  1225.     if ( $('customer-reviews') ) {
  1226.         $('customer-reviews').select('dt > a').each(function (a) {
  1227.             a.replace('<h3>' + a.innerHTML + '</h3>');
  1228.         });
  1229.     }
  1230.  
  1231.     var filters = $$('.filters-block .currently')[0];
  1232.     if ( filters ) {
  1233.         $$('.toolbar')[0].insert({ 'after' : Element.clone(filters, true) });
  1234.     }
  1235.  
  1236. });

Paste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.