/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE_AFL.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category design
* @package default_iphone
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
*/
// Homepage categories and subcategories slider
document.observe("dom:loaded", function() {
transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd',
'msTransition' : 'MSTransitionEnd',
'transition' : 'transitionend'
},
transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
function handler(position) {
var lat = position.coords.latitude,
lng = position.coords.longitude;
//alert(latitude + ' ' + longitude);
var geocoder = new google.maps.Geocoder();
function codeLatLng() {
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
alert(results[0].formatted_address);
}
} else {
alert("Geocoder failed due to: " + status);
}
});
}
//codeLatLng();
}
var loadMore = Class.create({
initialize: function (list, href, pattern) {
var that = this;
this.list = list;
this.list.insert({ after : '
More
'});
this.href = href.readAttribute('href');
this.button = $('more_button');
this.holder = new Element('div', { 'class': 'response-holder' });
this.button.observe('click', function () {
if ( !that.button.hasClassName('loading') ) {
new Ajax.Request(that.href, {
onCreate: function () {
that.button.addClassName('loading');
},
onComplete: function(response) {
if (200 == response.status) {
that.holder.innerHTML = response.responseText;
that.holder.select(pattern).each(function(elem) {
that.list.insert({ bottom : elem });
});
that.href = that.holder.select('.next-page')[0].readAttribute('href');
that.button.removeClassName('loading');
if ( !that.href ) {
that.button.up().remove();
}
}
}
});
}
});
}
});
if ( $$('.c-list')[0] && $$('.next-page')[0] ) {
var loadMoreCategory = new loadMore(
$$('.c-list')[0],
$$('.next-page')[0],
'.c-list > li'
)
}
if ( $$('.downloadable-products-history .list')[0] && $$('.next-page')[0] ) {
var loadMoreCategory = new loadMore(
$$('.downloadable-products-history .list')[0],
$$('.next-page')[0],
'.downloadable-products-history .list > li'
)
}
if ( $$('.review-history .list')[0] && $$('.next-page')[0] ) {
var loadMoreCategory = new loadMore(
$$('.review-history .list')[0],
$$('.next-page')[0],
'.review-history .list > li'
)
}
if ( $$('.recent-orders .data-table')[0] && $$('.next-page')[0] ) {
var loadMoreCategory = new loadMore(
$$('.recent-orders .data-table')[0],
$$('.next-page')[0],
'.recent-orders .data-table tbody > tr'
)
}
//-----------------------------//
$$('label[for]').each(function(label) {
label.observe('click', function() {});
});
$$('input.validate-email').each(function (input) {
input.writeAttribute('type', 'email');
});
$$('.form-list img[src*="calendar.gif"]').each(function (img) {
img.up().insert({ 'top' : img });
});
if ( navigator.geolocation ) {
//navigator.geolocation.getCurrentPosition(handler);
}
if ( $('my-reviews-table') ) {
$('my-reviews-table').wrap('div', { 'class' : 'my-reviews-table-wrap' });
}
$$('.my-account .dashboard .box-title').each(function (elem) {
elem.observe('click', function (e) {
if ( e.target.hasClassName('box-title') ) {
this.toggleClassName('collapsed').next().toggle();
}
}).next().hide();
});
var transformPref = Modernizr.prefixed('transform');
function supportsTouchCallout () {
var div = document.createElement('div'),
supports = div.style['webkitTouchCallout'] !== undefined || div.style['touchCallout'] !== undefined;
return supports
}
$$('input[name=qty], input[name*=super_group], input[name*=qty]').each(function (el) {
var defaultValue = el.value;
el.observe('focus', function () {
if (this.value == defaultValue) this.value = '';
});
el.observe('blur', function () {
if (this.value == "") this.value = defaultValue;
});
});
if ( $('product-review-table') ) {
$('product-review-table').wrap('div', {'class' : 'review-table-wrap'}).on('click', 'input[type="radio"]', function (e) {
var $this = e.target;
$this.up('tr').select('td').invoke('removeClassName', 'checked');
if ( $this.up().hasClassName('value') ) {
$this.up().addClassName('checked').previousSiblings().each(function (td) {
if (td.hasClassName('value')) td.addClassName('checked');
});
}
});
}
function is_touch_device() {
try {
document.createEvent("TouchEvent");
return true;
} catch (e) {
return false;
}
}
var touch = is_touch_device();
$$('select[multiple]').each(function (select) {
var select_options = new Element('ol', {'class': 'select-multiple-options'}).wrap('div', { 'class' : 'select-multiple-options-wrap' }),
selected;
select.wrap('div', { 'class': 'select-multiple-wrap' });
select.select('option').each(function(option) {
select_options.down().insert({ bottom : new Element('li', { 'class' : 'select-option', 'data-option-value' : option.value }).update(option.text) });
});
select_options.insert({ top : new Element('div', { 'class' : 'select-heading' }).update('Choose options...').insert({ top : new Element('span', { 'class' : 'select-close' }).update('×') }) });
var closeSelect = function() {
select_options.setStyle({ 'visibility' : 'hidden' });
selected = [];
select.select('option').each(function (option) {
if (option.selected) {
selected.push(option.text)
}
});
if (selected.size() > 0) {
select.previous().update('' + selected.join(', ')).addClassName('filled');
select.previous().select('span')[0].update(selected.size());
} else {
select.previous().update('Choose options...').removeClassName('filled');
}
document.stopObserving('click', closeSelect);
}
select_options.select('.select-close')[0].observe('click', closeSelect );
select_options.on('click', '.select-option', function(e, elem) {
var option = select.select('option[value=' + elem.readAttribute('data-option-value') + ']')[0];
elem.toggleClassName('active');
if (option.selected) {
option.selected = false
} else {
option.selected = true;
}
if (typeof bundle !== 'undefined') bundle.changeSelection(select);
});
select.insert({ before : select_options });
select.insert({
before: new Element('div', {'class': 'select-multiple'}).update("Choose options...").observe('click', function(e) {
select.previous('.select-multiple-options-wrap').setStyle({ 'visibility' : 'visible' }).observe('click', function(e) {
e.stopPropagation();
});
setTimeout(function() {
document.observe('click', closeSelect)
}, 1);
})
});
select.setStyle({ 'visibility' : 'hidden', 'position' : 'absolute' });
});
var supportsOrientationChange = "onorientationchange" in window,
orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";
Event.observe(window, orientationEvent, function() {
var orientation, page, transformValue = {};
switch(window.orientation){
case 0:
orientation = "portrait";
break;
case -90:
orientation = "landscape";
break;
case 90:
orientation = "landscape";
break;
}
if ( $('nav-container') ) {
setTimeout(function () {
$$("#nav-container ul").each(function(ul) {
ul.setStyle({'width' : document.body.offsetWidth + "px"});
});
page = Math.floor(Math.abs(sliderPosition/viewportWidth));
sliderPosition = (sliderPosition + viewportWidth*page) - document.body.offsetWidth*page;
viewportWidth = document.body.offsetWidth;
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = "translate3d(" + sliderPosition + "px, 0, 0)";
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = "translate(" + sliderPosition + "px, 0)";
}
$("nav-container").setStyle(transformValue);
if ( upSellCarousel ) {
if (orientation === 'landscape') {
upSellCarousel.resize(3);
} else {
upSellCarousel.resize(2);
}
}
}, 400);
}
});
//alert(Modernizr.prefixed('transform'));
// Home Page Slider
//alert(transformPref);
var sliderPosition = 0,
viewportWidth = document.body.offsetWidth,
last,
diff;
$$("#nav-container ul").each(function(ul) { ul.style.width = document.body.offsetWidth + "px"; });
$$("#nav a").each(function(sliderLink) {
if (sliderLink.next(0) !== undefined) {
sliderLink.clonedSubmenuList = sliderLink.next(0);
sliderLink.observe('click', function(e) {
e.preventDefault();
var transformValue = {}
//homeLink.hasClassName('disabled') ? homeLink.removeClassName('disabled') : '';
if (last) {
diff = e.timeStamp - last
}
last = e.timeStamp;
if (diff && diff < 200) {
return
}
if (!this.clonedSubmenuList.firstDescendant().hasClassName('subcategory-header')) {
var subcategoryHeader = new Element('li', {'class': 'subcategory-header'});
subcategoryHeader.insert({
top: new Element('button', {'class': 'previous-category'}).update("Back").wrap('div', {'class':'button-wrap'}),
bottom: this.innerHTML
});
this.clonedSubmenuList.insert({
top: subcategoryHeader
});
subcategoryHeader.insert({ after : new Element('li').update('All Products') });
this.clonedSubmenuList.firstDescendant().firstDescendant().observe('click', function(e) {
if (last) {
diff = e.timeStamp - last
}
last = e.timeStamp;
if (diff && diff < 200) {
return
}
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = "translate3d(" + (document.body.offsetWidth + sliderPosition) + "px, 0, 0)";
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = "translate(" + (document.body.offsetWidth + sliderPosition) + "px, 0)";
}
$("nav-container").setStyle(transformValue);
sliderPosition = sliderPosition + document.body.offsetWidth;
setTimeout(function() { $$("#nav-container > ul:last-child")[0].remove(); $("nav-container").setStyle({'height' : 'auto'}) }, 250)
});
new NoClickDelay(this.clonedSubmenuList);
};
$("nav-container").insert(this.clonedSubmenuList.setStyle({'width' : document.body.offsetWidth + 'px'}));
$('nav-container').setStyle({'height' : this.clonedSubmenuList.getHeight() + 'px'});
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = "translate3d(" + (sliderPosition - document.body.offsetWidth) + "px, 0, 0)";
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = "translate(" + (sliderPosition - document.body.offsetWidth) + "px, 0)";
}
$("nav-container").setStyle(transformValue);
sliderPosition = sliderPosition - document.body.offsetWidth;
});
};
});
function getSupportedProp(proparray){
var root = document.documentElement;
for ( var i = 0; i < proparray.length; i++ ) {
if ( typeof root.style[proparray[i]] === "string") {
return proparray[i];
}
}
}
function NoClickDelay(el) {
if ( getSupportedProp(['OTransform']) ) {
return
}
this.element = typeof el == 'object' ? el : document.getElementById(el);
if( window.Touch ) this.element.addEventListener('touchstart', this, false);
}
NoClickDelay.prototype = {
handleEvent: function(e) {
switch(e.type) {
case 'touchstart': this.onTouchStart(e); break;
case 'touchmove': this.onTouchMove(e); break;
case 'touchend': this.onTouchEnd(e); break;
}
},
onTouchStart: function(e) {
this.moved = false;
this.theTarget = document.elementFromPoint(e.targetTouches[0].clientX, e.targetTouches[0].clientY);
if(this.theTarget.nodeType == 3) this.theTarget = theTarget.parentNode;
this.theTarget.className+= ' pressed';
this.element.addEventListener('touchmove', this, false);
this.element.addEventListener('touchend', this, false);
},
onTouchMove: function() {
this.moved = true;
this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
},
onTouchEnd: function(e) {
e.preventDefault();
this.element.removeEventListener('touchmove', this, false);
this.element.removeEventListener('touchend', this, false);
if( !this.moved && this.theTarget ) {
this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
var theEvent = document.createEvent('MouseEvents');
theEvent.initEvent('click', true, true);
this.theTarget.dispatchEvent(theEvent);
}
this.theTarget = undefined;
}
};
if (document.getElementById('nav')) {
new NoClickDelay(document.getElementById('nav'));
}
//iPhone header menu
$$('dt.menu a')[0].observe('click', function(e) {
var parent = this.up(), transformValue = {};
if (parent.hasClassName('active')) {
parent.removeClassName('active');
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = 'translate3d(0, -100%, -1px)';
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = 'translate3d(0, -100%)';
transformValue['visibility'] = 'hidden';
}
$$('.menu-box')[0].setStyle(transformValue);
} else {
this.removeClassName('active');
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = 'translate3d(0, -100%, -1px)';
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = 'translate3d(0, -100%)';
transformValue['visibility'] = 'hidden';
}
$$('.menu-box')[0].setStyle(transformValue);
parent.addClassName('active');
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = 'translate3d(0, 0%, -1px)';
transformValue['visibility'] = 'visible';
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = 'translate3d(0, 0%)';
transformValue['visibility'] = 'visible';
}
parent.next().setStyle(transformValue);
};
e.preventDefault();
});
if ( $('menu') ) {
$('menu').select('dd').each(function (elem) {
elem.observe('webkitTransitionEnd', function (e) {
if ( !elem.previous().hasClassName('active') ) {
elem.setStyle({'visibility' : 'hidden'});
} else {
elem.setStyle({'top' : '1px'});
}
});
});
}
//iPhone header menu switchers
if( $$('#language-switcher li.selected a')[0] ) {
var curLang = $$('#language-switcher li.selected a')[0].innerHTML;
$('current-language').update(curLang);
$$('#language-switcher > a')[0].observe('click', function (e) {
if ( !this.next().visible() )
$$('.switcher-options').invoke('hide');
this.next().toggle().toggleClassName('visible');
e.preventDefault();
});
}
if( $$('#store-switcher li.selected a')[0] ) {
var curStore = $$('#store-switcher li.selected a')[0].innerHTML;
$('current-store').update(curStore);
$$('#store-switcher > a')[0].observe('click', function (e) {
if ( !ithis.next().visible() )
$$('.switcher-options').invoke('hide');
this.next().toggle().toggleClassName('visible');
e.preventDefault();
});
}
//Slider
var Carousel = Class.create({
initialize: function (carousel, itemsContainer, options) {
this.options = Object.extend({
visibleElements: 3,
drawCounter: true,
threshold: {
x: 50,
y: 40
},
preventDefaultEvents: false
}, options || {});
this.currentPage = 1;
this.carousel = carousel;
this.carouselWidth = this.carousel.getStyle('width') ? this.carousel.getStyle('width').replace('px', '') : $$('body')[0].getStyle('width').replace('px', '');
this.items = itemsContainer.addClassName('carousel-items');
this.itemsWrap = this.items.wrap('div', {'class' : 'carousel-items-wrap'});
this.itemsLength = this.items.childElements().size();
if (this.options.drawCounter) {
this.counter = this.carousel.insert(new Element('div', {'class' : 'counter'})).select('.counter')[0];
}
this.controls = carousel.select('.controls')[0] || this.carousel.insert({ top: new Element('div', { 'class' : 'controls'}) }).select('.controls')[0];
this.prevButton = carousel.select('.prev')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'prev'}) }).select('.prev')[0].addClassName('disabled');
this.nextButton = carousel.select('.next')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'next'}) }).select('.next')[0];
this.originalCoord = { x: 0, y: 0 };
this.finalCoord = { x: 0, y: 0 };
this.carousel.wrap('div', { 'class' : 'carousel-wrap' });
this.nextButton.observe('click', this.moveRight.bind(this));
this.prevButton.observe('click', this.moveLeft.bind(this));
this.itemsWrap.observe('touchstart', this.touchStart.bind(this));
this.itemsWrap.observe('touchmove', this.touchMove.bind(this));
this.itemsWrap.observe('touchend', this.touchEnd.bind(this));
Event.observe(window, 'resize', this.orientationChange.bind(this));
},
init: function () {
this.currentPage = 0;
this.itemPos = 0;
this.lastItemPos = (this.itemsLength-this.options.visibleElements) * this.carouselWidth/this.options.visibleElements;
this.itemWidth = this.carouselWidth/this.options.visibleElements + 'px';
this.screens = Math.ceil(this.itemsLength/this.options.visibleElements);
this._resizeChilds();
if (this.options.drawCounter) {
this.drawCounter();
}
return this;
},
resize: function(visibleElements) {
var transformValue = {};
this.options.visibleElements = visibleElements;
if (this.options.drawCounter) {
this.counter.childElements().invoke('remove');
}
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = 'translateX(' + 0 + ')';
} else if ( Modernizr.csstransforms ) {
transformValue['left'] = '0';
}
this.items.setStyle(transformValue);
this.prevButton.addClassName('disabled');
this.nextButton.removeClassName('disabled');
this.init();
},
_resizeChilds: function () {
this.items.childElements().each( function(n) {
n.setStyle({
'width': this.itemWidth
});
}, this);
},
orientationChange: function() {
this._recalculate();
this._resizeChilds();
this.toPage(this.currentPage);
},
drawCounter: function () {
if (this.screens > 1) {
if (this.controls)
this.controls.show();
for (var i = 0; i < this.screens; i++) {
if (i === 0) {
this.counter.insert(new Element('span', {'class': 'active'}));
} else {
this.counter.insert(new Element('span'));
}
}
} else {
if (this.controls)
this.controls.hide();
}
},
_recalculate: function() {
this.carouselWidth = this.carousel.getStyle('width') ? this.carousel.getStyle('width').replace('px', '') : $$('body')[0].getStyle('width').replace('px', '');
this.lastItemPos = (this.itemsLength-this.options.visibleElements) * this.carouselWidth/this.options.visibleElements;
this.itemWidth = this.carouselWidth/this.options.visibleElements + 'px';
},
_checkControls: function() {
if(this.itemPos === 0) {
this.prevButton.addClassName('disabled');
} else {
this.prevButton.removeClassName('disabled');
}
if(Math.abs(this.itemPos) === this.lastItemPos) {
this.nextButton.addClassName('disabled');
} else {
this.nextButton.removeClassName('disabled');
}
if (this.options.drawCounter) {
this.counter.select('.active')[0].removeClassName('active');
this.counter.select('span')[this.currentPage].addClassName('active');
}
},
_setTransformCoordinates: function() {
var transformValue = {};
if ( Modernizr.csstransforms3d ) {
transformValue[transformPref] = 'translateX(' + this.itemPos + 'px)';
transformValue['position'] = 'relative';
} else if ( Modernizr.csstransforms ) {
transformValue['left'] = this.itemPos + 'px';
transformValue['position'] = 'relative';
}
setTimeout(function() {
this.items.setStyle(transformValue);
}.bind(this), 1);
return this;
},
toPage: function (page) {
this.currentPage = page;
this.itemPos = -(this.carouselWidth / this.options.visibleElements * this.options.visibleElements) * page;
this._setTransformCoordinates();
this._checkControls();
this.finalCoord.x = this.originalCoord.x;
},
moveRight: function () {
if(Math.abs(this.itemPos) < this.lastItemPos) {
this.toPage(this.currentPage + 1);
}
},
moveLeft: function () {
if (this.itemPos !== 0) {
this.toPage(this.currentPage - 1);
}
},
touchStart: function (e) {
changeX = 0;
this.isScrolling = undefined;
this.originalCoord.x = e.targetTouches[0].pageX;
this.originalCoord.y = e.targetTouches[0].pageY;
},
touchMove: function (e) {
this.finalCoord.x = e.targetTouches[0].pageX;
this.finalCoord.y = e.targetTouches[0].pageY;
changeX = this.originalCoord.x - this.finalCoord.x;
changeY = this.originalCoord.y - this.finalCoord.y;
if ( typeof this.isScrolling == 'undefined') {
this.isScrolling = !!( this.isScrolling || Math.abs(changeX) < Math.abs(this.finalCoord.y - this.originalCoord.y) );
}
if (!this.isScrolling) {
e.preventDefault();
}
},
touchEnd: function (e) {
if ( e.preventSwipe ) {
return
}
if (!this.isScrolling) {
if(changeX > this.options.threshold.x && Math.abs(changeY) < this.options.threshold.y) {
this.moveRight(e);
}
if(changeX < this.options.threshold.x * -1 && Math.abs(changeY) < this.options.threshold.y) {
this.moveLeft(e);
}
changeX = changeY = 0;
}
}
});
if ( $$('.box-up-sell')[0] ) {
var upSellCarousel = new Carousel($$('.box-up-sell')[0], $$('.products-grid')[0], {
visibleElements: 2,
preventDefaultEvents: true
}).init();
}
/*
if ( $$('.product-gallery')[0] ) {
var galleryCarousel = new Carousel($$('.product-gallery')[0], $$('.product-gallery > ul')[0], {
visibleElements: 1,
preventDefaultEvents: false
}).init();
}
*/
if ( $$('.product-view .product-image li').size() > 1 ) {
var productGallery = new Carousel($$('.product-view .product-image')[0], $$('.product-image ul')[0], {
visibleElements: 1,
preventDefaults: false
}).init();
}
if ( $$('.crosssell li').size() > 1 ) {
var crossSells = new Carousel($$('.crosssell')[0], $$('.crosssell ul')[0], {
visibleElements: 2,
preventDefaults: false
}).init();
}
// Swipe Functionality
var Swipe = Class.create( Carousel, {
initialize: function (elem, swipeLeft, swipeRight, options) {
this.options = Object.extend({
threshold: {
x: 50,
y: 20
},
preventDefaultEvents: false
}, options || {});
this.elem = elem;
this.originalCoord = { x: 0, y: 0 };
this.finalCoord = { x: 0, y: 0 };
this.elem.observe('touchstart', this.touchStart.bind(this));
this.elem.observe('touchmove', this.touchMove.bind(this));
this.elem.observe('touchend', this.touchEnd.bind(this));
this.moveLeft = swipeRight;
this.moveRight = swipeLeft;
}
});
/*
var verticalSwipe = Class.create( Carousel, {
initialize: function (elem, swipeUp, swipeDown, options) {
this.options = Object.extend({
threshold: {
x: 10,
y: 10
},
preventDefaultEvents: false
}, options || {});
this.elem = elem;
this.originalCoord = { x: 0, y: 0 };
this.finalCoord = { x: 0, y: 0 };
this.elem.observe('touchstart', this.touchStart.bind(this));
this.elem.observe('touchmove', this.touchMove.bind(this));
this.elem.observe('touchend', this.touchEnd.bind(this));
this.moveLeft = swipeDown;
this.moveRight = swipeUp;
},
touchStart: function (e) {
e.preventDefault();
this.originalCoord.x = event.targetTouches[0].pageX;
this.originalCoord.y = event.targetTouches[0].pageY;
},
touchMove: function (e) {
this.finalCoord.x = e.targetTouches[0].pageX;
this.finalCoord.y = e.targetTouches[0].pageY;
},
touchEnd: function (e) {
var changeY = this.originalCoord.y - this.finalCoord.y;
if(changeY > this.options.threshold.y) {
this.moveRight();
}
if(changeY < this.options.threshold.y * -1) {
this.moveLeft();
}
}
});
if ( $$('.block-cart')[0] ) {
new verticalSwipe($$('dt.cart')[0],
function () {
},
function () {
$$('.block-cart')[0].setStyle({'webkitTransform':'translate3d(0, 42px, 0)'})
}
);
};
*/
zoomGallery = Class.create({
initialize: function (gallery, options) {
this.options = Object.extend({
threshold: {
x: 30,
y: 40
}
}, options || {});
this.gallery = gallery;
this.counter = this.gallery.insert({after : new Element('div', {'class' : 'counter'})}).next();
this.controls = gallery.select('.controls')[0] || this.gallery.insert({ bottom: new Element('div', { 'class' : 'controls'}) }).select('.controls')[0];
this.prevButton = gallery.select('.prev')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'prev'}) }).select('.prev')[0].addClassName('disabled');
this.nextButton = gallery.select('.next')[0] || this.controls.insert({ top: new Element('span', { 'class' : 'next'}) }).select('.next')[0];
this.wrap = this.gallery.down();
this.scale = 1.0;
this.dimensions;
this.items = gallery.select('img');
this.itemsLength = this.items.size();
this.pos = 0;
this.step = (100/this.itemsLength).toFixed(2) * 1;
this.lastPos = this.step * this.itemsLength;
this.originalCoord = { x: 0, y: 0 };
this.finalCoord = { x: 0, y: 0 };
this.offset = { x: 0, y: 0 };
this.ret = { x: 0, y: 0 };
this.hash = window.location.href.split('#')[1];
this.nextButton.observe('click', this.moveRight.bind(this));
this.prevButton.observe('click', this.moveLeft.bind(this));
if (this.itemsLength < 2) {
this.controls.hide();
}
this.items.each(function (item) {
item.observe('touchstart', this.touchStart.bind(this));
item.observe('touchmove', this.touchMove.bind(this));
item.observe('touchend', this.touchEnd.bind(this));
item.observe('gesturestart', this.gestureStart.bind(this));
item.observe('gesturechange', this.gestureChange.bind(this));
item.observe('gestureend', this.gestureEnd.bind(this));
}.bind(this));
this.wrap.setStyle({
'width' : this.itemsLength * 100 + '%'
});
this.drawCounter();
if (this.hash) {
this.pos += this.step * this.hash;
var transformValue = {};
if ( Modernizr.csstransforms3d ) {
this.wrap.setStyle({
'webkitTransform' : 'translate3d(' + this.pos*-1 + '%, 0, 0)'
});
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = 'translate(' + this.pos*-1 + '%, 0)';
this.wrap.setStyle(transformValue);
}
if (this.pos.toFixed(2) >= this.lastPos - this.step) {
this.nextButton.addClassName('disabled');
}
if (this.prevButton.hasClassName('disabled')) {
this.prevButton.removeClassName('disabled');
};
this.counter.select('.active')[0].removeClassName('active').next(this.hash - 1).addClassName('active');
}
},
drawCounter: function () {
if (this.itemsLength > 1) {
for (var i = 0; i < this.itemsLength; i++) {
if (i === 0) {
this.counter.insert(new Element('span', {'class': 'active'}));
} else {
this.counter.insert(new Element('span'));
}
};
}
},
moveRight: function (elem) {
if (this.pos.toFixed(2) < this.lastPos - this.step) {
if(elem == event) {
this.items.each(function (elm) {
elm.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'scale3d(1, 1, 1)'
});
});
} else if (elem) {
elem.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'scale3d(1, 1, 1)'
});
}
this.scale = 1.0;
this.pos += this.step;
var transformValue = {};
if ( Modernizr.csstransforms3d ) {
this.wrap.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'translate3d(' + this.pos*-1 + '%, 0, 0)'
});
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = 'translate(' + this.pos*-1 + '%, 0)';
this.wrap.setStyle(transformValue);
}
if (this.pos.toFixed(2) >= this.lastPos - this.step) {
this.nextButton.addClassName('disabled');
}
if (this.prevButton.hasClassName('disabled')) {
this.prevButton.removeClassName('disabled');
};
this.counter.select('.active')[0].removeClassName('active').next().addClassName('active');
}
},
moveLeft: function (elem) {
if (this.pos.toFixed(2) > 0) {
if(elem == event) {
this.items.each(function (elm) {
elm.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'scale3d(1, 1, 1)'
});
});
} else {
elem.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'scale3d(1, 1, 1)'
});
}
this.scale = 1.0;
this.pos -= this.step;
var transformValue = {};
if ( Modernizr.csstransforms3d ) {
this.wrap.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'translate3d(' + this.pos*-1 + '%, 0, 0)'
});
} else if ( Modernizr.csstransforms ) {
transformValue[transformPref] = 'translate(' + this.pos*-1 + '%, 0)';
this.wrap.setStyle(transformValue);
}
if (this.pos.toFixed(2) <= 0) {
this.prevButton.addClassName('disabled');
}
if (this.nextButton.hasClassName('disabled')) {
this.nextButton.removeClassName('disabled');
};
this.counter.select('.active')[0].removeClassName('active').previous().addClassName('active');
}
},
gestureStart : function (e) {
var $this = e.target;
e.preventDefault();
this.gestureStart = true;
this.dimensions = $this.getDimensions();
},
gestureChange : function (e) {
e.preventDefault();
var $this = e.target
if ( (e.scale * this.scale) > 2 )
return
$this.setStyle({
'webkitTransition' : '',
'webkitTransform' : 'scale3d(' + (e.scale * this.scale) + ', ' + (e.scale * this.scale) + ', 1)',
});
},
gestureEnd : function (e) {
var $this = e.target;
if ( (e.scale * this.scale) < 1 ) {
$this.setStyle({
'webkitTransition' : '300ms linear',
'webkitTransform' : 'scale3d(1, 1, 1)'
});
this.scale = 1.0;
} else if ( e.scale > 2 ) {
this.scale = 2;
} else {
this.scale *= e.scale;
}
setTimeout(function () {
this.gestureStart = false;
}.bind(this), 50);
this.originalCoord.x = this.originalCoord.y = this.finalCoord.x = this.finalCoord.y = this.offset.x = this.offset.y = 0;
},
touchStart: function (e) {
var $this = e.target;
this.isScrolling = undefined;
if (e.targetTouches.length != 1) {
return false
}
this.t1 = Date.now();
this.originalCoord.x = e.targetTouches[0].clientX;
this.originalCoord.y = e.targetTouches[0].clientY;
$this.setStyle({ 'webkitTransition' : '' });
},
touchMove: function (e) {
var $this = e.target;
this.finalCoord.x = e.targetTouches[0].clientX;
this.finalCoord.y = e.targetTouches[0].clientY;
if ( typeof this.isScrolling == 'undefined') {
this.isScrolling = !!( this.isScrolling || Math.abs(this.finalCoord.x - this.originalCoord.x) < Math.abs(this.finalCoord.y - this.originalCoord.y) );
}
if (!this.isScrolling) {
e.preventDefault();
}
if (e.targetTouches.length != 1 || this.scale === 1.0 || this.gestureStart) {
return false
}
e.preventDefault();
var changeX = this.offset.x + this.finalCoord.x - this.originalCoord.x,
changeY = this.offset.y + this.finalCoord.y - this.originalCoord.y,
topX = (this.dimensions.width * (this.scale - 1))/2,
topY = (this.dimensions.height * (this.scale - 1))/2,
tension = 1.55;
if ( topX < Math.abs(changeX) ) {
if ( changeX < 0 ) {
changeX = changeX - (changeX + topX)/tension;
} else {
changeX = changeX - (changeX - topX)/tension;
}
}
if ( topY < Math.abs(changeY) ) {
if ( changeY < 0 ) {
changeY = changeY - (changeY + topY)/tension;
} else {
changeY = changeY - (changeY - topY)/tension;
}
}
$this.setStyle({
'webkitTransform' : 'translate3d(' + changeX + 'px,' + changeY + 'px, 0) scale3d(' + this.scale + ',' + this.scale + ',1)'
});
},
touchEnd: function (e) {
if (!this.isScrolling) {
this.t2 = Date.now();
var $this = e.target,
timeDelta = this.t2 - this.t1,
changeX = this.originalCoord.x - this.finalCoord.x,
changeY = this.originalCoord.y - this.finalCoord.y;
if(changeX > this.options.threshold.x && Math.abs(changeY) < 40 && timeDelta < 300) {
this.moveRight($this);
}
if(changeX < this.options.threshold.x * -1 && Math.abs(changeY) < 40 && timeDelta < 300) {
this.moveLeft($this);
}
if (e.targetTouches.length > 0 || this.gestureStart || timeDelta < 100)
return false;
this.offset.x += this.finalCoord.x - this.originalCoord.x;
this.offset.y += this.finalCoord.y - this.originalCoord.y;
var topX = (this.dimensions.width * (this.scale - 1))/2,
topY = (this.dimensions.height * (this.scale - 1))/2,
moved = false;
if ( Math.abs(this.offset.x) > topX ) {
moved = true;
$this.setStyle({
'webkitTransition' : '-webkit-transform 100ms ease-out',
'webkitTransform' : 'translate3d(' + (this.offset.x < 0 ? topX*-1 : topX) + 'px,' + this.offset.y + 'px, 0) scale3d(' + this.scale + ',' + this.scale + ',1)'
});
this.offset.x = this.offset.x < 0 ? topX*-1 : topX;
}
if ( Math.abs(this.offset.y) > topY ) {
moved = true;
$this.setStyle({
'webkitTransition' : '-webkit-transform 100ms ease-out',
'webkitTransform' : 'translate3d(' + this.offset.x + 'px,' + (this.offset.y < 0 ? topY*-1 : topY) + 'px, 0) scale3d(' + this.scale + ',' + this.scale + ',1)'
});
this.offset.y = this.offset.y < 0 ? topY*-1 : topY;
}
if ( Math.abs(this.offset.x) > topX && Math.abs(this.offset.y) > topY && !moved ) {
$this.setStyle({
'webkitTransition' : '-webkit-transform 100ms ease-out',
'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)'
});
this.offset.x = this.offset.x < 0 ? topX*-1 : topX;
this.offset.y = this.offset.y < 0 ? topY*-1 : topY;
}
}
},
});
if ( $$('.c-list') && supportsTouchCallout() ) {
$$('.c-list .product-image').each(function(n) {
var parent = n.up('a'),
clone = n.up().clone(true).addClassName('cloned');
parent.insert(clone.wrap('div', {'class' : 'cloned-wrap'}));
new webkit_draggable(clone.up(), { handle : clone.select('.product-image')[0], revert : true, scroll : true, onStart : function(r, e) {
r.setStyle({'opacity':'100'}).down('.wrap').addClassName('drop-start');
},
onEnd : function(r, e) {
r.setStyle({'opacity':'0'}).down('.wrap').removeClassName('drop-start');
}
});
});
webkit_drop.add($('menu'),
{
onDrop : function(elem, e) { e.preventDefault(); setLocation(elem.up('li').down('.actions li:last-child a').readAttribute('href')); elem.remove(); },
onOver : function(elem, e) { e.preventDefault(); elem.down().addClassName('to-cart-animate'); },
onOut : function(elem) { elem.down().removeClassName('to-cart-animate'); }
});
}
if ( $('customer-reviews') ) {
$('customer-reviews').select('dt > a').each(function (a) {
a.replace('' + a.innerHTML + '
');
});
}
var filters = $$('.filters-block .currently')[0];
if ( filters ) {
$$('.toolbar')[0].insert({ 'after' : Element.clone(filters, true) });
}
});