2016-04-14 16:14:31 +02:00
/ *
* 2007 - 2014 PrestaShop
*
* 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 . 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 @ prestashop . com so we can send you a copy immediately .
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future . If you wish to customize PrestaShop for your
* needs please refer to http : //www.prestashop.com for more information.
*
* @ author PrestaShop SA < contact @ prestashop . com >
* @ copyright 2007 - 2014 PrestaShop SA
* @ license http : //opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
* /
$ ( document ) . ready ( function ( ) {
ajaxCart . overrideButtonsInThePage ( ) ;
$ ( document ) . on ( 'click' , '.block_cart_collapse' , function ( e ) {
e . preventDefault ( ) ;
ajaxCart . collapse ( ) ;
} ) ;
$ ( document ) . on ( 'click' , '.block_cart_expand' , function ( e ) {
e . preventDefault ( ) ;
ajaxCart . expand ( ) ;
} ) ;
var cart _qty = 0 ;
var current _timestamp = parseInt ( new Date ( ) . getTime ( ) / 1000 ) ;
if ( typeof $ ( '.ajax_cart_quantity' ) . html ( ) == 'undefined' || ( typeof generated _date != 'undefined' && generated _date != null && ( parseInt ( generated _date ) + 30 ) < current _timestamp ) )
ajaxCart . refresh ( ) ;
else
cart _qty = parseInt ( $ ( '.ajax_cart_quantity' ) . html ( ) ) ;
/* roll over cart */
var cart _block = new HoverWatcher ( '#header .cart_block' ) ;
var shopping _cart = new HoverWatcher ( '#header .shopping_cart' ) ;
if ( 'ontouchstart' in document . documentElement )
{
$ ( '.shopping_cart > a:first' ) . on ( 'click' , function ( e ) {
e . preventDefault ( ) ;
} ) ;
}
$ ( document ) . on ( 'touchstart' , '#header .shopping_cart' , function ( ) {
if ( $ ( this ) . next ( '.cart_block:visible' ) . length )
$ ( "#header .cart_block" ) . stop ( true , true ) . slideUp ( 0 ) ;
else
$ ( "#header .cart_block" ) . stop ( true , true ) . slideDown ( 0 ) ;
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
} ) ;
$ ( "#header .shopping_cart" ) . hover (
function ( ) {
if ( ajaxCart . nb _total _products > 0 || cart _qty > 0 )
$ ( "#header .cart_block" ) . stop ( true , true ) . slideDown ( 0 ) ;
} ,
function ( ) {
setTimeout ( function ( ) {
if ( ! shopping _cart . isHoveringOver ( ) && ! cart _block . isHoveringOver ( ) )
$ ( "#header .cart_block" ) . stop ( true , true ) . slideUp ( 0 ) ;
} , 0 ) ;
}
) ;
$ ( "#header .cart_block" ) . hover (
function ( ) {
} ,
function ( ) {
setTimeout ( function ( ) {
if ( ! shopping _cart . isHoveringOver ( ) )
$ ( "#header .cart_block" ) . stop ( true , true ) . slideUp ( 0 ) ;
} , 0 ) ;
}
) ;
$ ( document ) . on ( 'click' , '.delete_voucher' , function ( e ) {
e . preventDefault ( ) ;
$ . ajax ( {
type : 'POST' ,
headers : { "cache-control" : "no-cache" } ,
async : true ,
cache : false ,
url : $ ( this ) . attr ( 'href' ) + '?rand=' + new Date ( ) . getTime ( )
} ) ;
$ ( this ) . parent ( ) . parent ( ) . remove ( ) ;
if ( $ ( 'body' ) . attr ( 'id' ) == 'order' || $ ( 'body' ) . attr ( 'id' ) == 'order-opc' )
{
if ( typeof ( updateAddressSelection ) != 'undefined' )
updateAddressSelection ( ) ;
else
location . reload ( ) ;
}
} ) ;
$ ( document ) . on ( 'click' , '#cart_navigation input' , function ( e ) {
$ ( this ) . prop ( 'disabled' , 'disabled' ) . addClass ( 'disabled' ) ;
$ ( this ) . closest ( "form" ) . get ( 0 ) . submit ( ) ;
} ) ;
$ ( document ) . on ( 'click' , '#layer_cart .cross, .layer_cart_overlay' , function ( e ) {
e . preventDefault ( ) ;
$ ( '.layer_cart_overlay' ) . hide ( ) ;
$ ( '#layer_cart' ) . fadeOut ( 'fast' ) ;
} ) ;
$ ( '#columns #layer_cart, #columns .layer_cart_overlay' ) . detach ( ) . prependTo ( '#columns' ) ;
} ) ;
//JS Object : update the cart by ajax actions
var ajaxCart = {
nb _total _products : 0 ,
//override every button in the page in relation to the cart
overrideButtonsInThePage : function ( ) {
//for every 'add' buttons...
$ ( document ) . on ( 'click' , '.ajax_add_to_cart_button' , function ( e ) {
e . preventDefault ( ) ;
var idProduct = $ ( this ) . data ( 'id-product' ) ;
if ( $ ( this ) . prop ( 'disabled' ) != 'disabled' )
ajaxCart . add ( idProduct , null , false , this ) ;
} ) ;
//for product page 'add' button...
$ ( document ) . on ( 'click' , '#add_to_cart button' , function ( e ) {
e . preventDefault ( ) ;
ajaxCart . add ( $ ( '#product_page_product_id' ) . val ( ) , $ ( '#idCombination' ) . val ( ) , true , null , $ ( '#quantity_wanted' ) . val ( ) , null ) ;
} ) ;
//for 'delete' buttons in the cart block...
$ ( document ) . on ( 'click' , '.cart_block_list .ajax_cart_block_remove_link' , function ( e ) {
e . preventDefault ( ) ;
// Customized product management
var customizationId = 0 ;
var productId = 0 ;
var productAttributeId = 0 ;
var customizableProductDiv = $ ( $ ( this ) . parent ( ) . parent ( ) ) . find ( "div[data-id^=deleteCustomizableProduct_]" ) ;
var idAddressDelivery = false ;
if ( customizableProductDiv && $ ( customizableProductDiv ) . length )
{
var ids = customizableProductDiv . data ( 'id' ) . split ( '_' ) ;
if ( typeof ( ids [ 1 ] ) != 'undefined' )
{
customizationId = parseInt ( ids [ 1 ] ) ;
productId = parseInt ( ids [ 2 ] ) ;
if ( typeof ( ids [ 3 ] ) != 'undefined' )
productAttributeId = parseInt ( ids [ 3 ] ) ;
if ( typeof ( ids [ 4 ] ) != 'undefined' )
idAddressDelivery = parseInt ( ids [ 4 ] ) ;
}
}
// Common product management
if ( ! customizationId )
{
//retrieve idProduct and idCombination from the displayed product in the block cart
var firstCut = $ ( this ) . parent ( ) . parent ( ) . data ( 'id' ) . replace ( 'cart_block_product_' , '' ) ;
firstCut = firstCut . replace ( 'deleteCustomizableProduct_' , '' ) ;
ids = firstCut . split ( '_' ) ;
productId = parseInt ( ids [ 0 ] ) ;
if ( typeof ( ids [ 1 ] ) != 'undefined' )
productAttributeId = parseInt ( ids [ 1 ] ) ;
if ( typeof ( ids [ 2 ] ) != 'undefined' )
idAddressDelivery = parseInt ( ids [ 2 ] ) ;
}
// Removing product from the cart
ajaxCart . remove ( productId , productAttributeId , customizationId , idAddressDelivery ) ;
} ) ;
} ,
// try to expand the cart
expand : function ( ) {
if ( $ ( '.cart_block_list' ) . hasClass ( 'collapsed' ) )
{
$ ( '.cart_block_list.collapsed' ) . slideDown ( {
duration : 450 ,
complete : function ( ) {
$ ( this ) . addClass ( 'expanded' ) . removeClass ( 'collapsed' ) ;
}
} ) ;
// save the expand statut in the user cookie
$ . ajax ( {
type : 'POST' ,
headers : { "cache-control" : "no-cache" } ,
url : baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date ( ) . getTime ( ) ,
async : true ,
cache : false ,
data : 'ajax_blockcart_display=expand' ,
complete : function ( ) {
$ ( '.block_cart_expand' ) . fadeOut ( 'fast' , function ( ) {
$ ( '.block_cart_collapse' ) . fadeIn ( 'fast' ) ;
} ) ;
}
} ) ;
}
} ,
// try to collapse the cart
collapse : function ( ) {
if ( $ ( '.cart_block_list' ) . hasClass ( 'expanded' ) )
{
$ ( '.cart_block_list.expanded' ) . slideUp ( 'slow' , function ( ) {
$ ( this ) . addClass ( 'collapsed' ) . removeClass ( 'expanded' ) ;
} ) ;
// save the expand statut in the user cookie
$ . ajax ( {
type : 'POST' ,
headers : { "cache-control" : "no-cache" } ,
url : baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date ( ) . getTime ( ) ,
async : true ,
cache : false ,
data : 'ajax_blockcart_display=collapse' + '&rand=' + new Date ( ) . getTime ( ) ,
complete : function ( ) {
$ ( '.block_cart_collapse' ) . fadeOut ( 'fast' , function ( ) {
$ ( '.block_cart_expand' ) . fadeIn ( 'fast' ) ;
} ) ;
}
} ) ;
}
} ,
// Fix display when using back and previous browsers buttons
refresh : function ( ) {
$ . ajax ( {
type : 'POST' ,
headers : { "cache-control" : "no-cache" } ,
url : baseUri + '?rand=' + new Date ( ) . getTime ( ) ,
async : true ,
cache : false ,
dataType : "json" ,
data : 'controller=cart&ajax=true&token=' + static _token ,
success : function ( jsonData )
{
ajaxCart . updateCart ( jsonData ) ;
}
} ) ;
} ,
// Update the cart information
updateCartInformation : function ( jsonData , addedFromProductPage ) {
ajaxCart . updateCart ( jsonData ) ;
//reactive the button when adding has finished
if ( addedFromProductPage )
{
$ ( '#add_to_cart button' ) . removeProp ( 'disabled' ) . removeClass ( 'disabled' ) ;
if ( ! jsonData . hasError || jsonData . hasError == false )
$ ( '#add_to_cart button' ) . addClass ( 'added' ) ;
else
$ ( '#add_to_cart button' ) . removeClass ( 'added' ) ;
}
else
$ ( '.ajax_add_to_cart_button' ) . removeProp ( 'disabled' ) ;
} ,
// close fancybox
updateFancyBox : function ( ) { } ,
// add a product in the cart via ajax
add : function ( idProduct , idCombination , addedFromProductPage , callerElement , quantity , whishlist ) {
if ( addedFromProductPage && ! checkCustomizations ( ) )
{
if ( ! ! $ . prototype . fancybox )
$ . fancybox . open ( [
{
type : 'inline' ,
autoScale : true ,
minHeight : 30 ,
content : '<p class="fancybox-error">' + fieldRequired + '</p>'
}
] , {
padding : 0
} ) ;
else
alert ( fieldRequired ) ;
return ;
}
emptyCustomizations ( ) ;
//disabled the button when adding to not double add if user double click
if ( addedFromProductPage )
{
$ ( '#add_to_cart button' ) . prop ( 'disabled' , 'disabled' ) . addClass ( 'disabled' ) ;
$ ( '.filled' ) . removeClass ( 'filled' ) ;
}
else
$ ( callerElement ) . prop ( 'disabled' , 'disabled' ) ;
if ( $ ( '.cart_block_list' ) . hasClass ( 'collapsed' ) )
this . expand ( ) ;
//send the ajax request to the server
$ . ajax ( {
type : 'POST' ,
headers : { "cache-control" : "no-cache" } ,
url : baseUri + '?rand=' + new Date ( ) . getTime ( ) ,
async : true ,
cache : false ,
dataType : "json" ,
data : 'controller=cart&add=1&ajax=true&qty=' + ( ( quantity && quantity != null ) ? quantity : '1' ) + '&id_product=' + idProduct + '&token=' + static _token + ( ( parseInt ( idCombination ) && idCombination != null ) ? '&ipa=' + parseInt ( idCombination ) : '' ) ,
success : function ( jsonData , textStatus , jqXHR )
{
// add appliance to whishlist module
if ( whishlist && ! jsonData . errors )
WishlistAddProductCart ( whishlist [ 0 ] , idProduct , idCombination , whishlist [ 1 ] ) ;
if ( ! jsonData . hasError )
{
if ( contentOnly )
window . parent . ajaxCart . updateCartInformation ( jsonData , addedFromProductPage ) ;
else
ajaxCart . updateCartInformation ( jsonData , addedFromProductPage ) ;
if ( jsonData . crossSelling )
$ ( '.crossseling' ) . html ( jsonData . crossSelling ) ;
if ( idCombination )
$ ( jsonData . products ) . each ( function ( ) {
if ( this . id != undefined && this . id == parseInt ( idProduct ) && this . idCombination == parseInt ( idCombination ) )
if ( contentOnly )
window . parent . ajaxCart . updateLayer ( this ) ;
else
ajaxCart . updateLayer ( this ) ;
} ) ;
else
$ ( jsonData . products ) . each ( function ( ) {
if ( this . id != undefined && this . id == parseInt ( idProduct ) )
if ( contentOnly )
window . parent . ajaxCart . updateLayer ( this ) ;
else
ajaxCart . updateLayer ( this ) ;
} ) ;
if ( contentOnly )
parent . $ . fancybox . close ( ) ;
}
else
{
if ( contentOnly )
window . parent . ajaxCart . updateCart ( jsonData ) ;
else
ajaxCart . updateCart ( jsonData ) ;
if ( addedFromProductPage )
$ ( '#add_to_cart button' ) . removeProp ( 'disabled' ) . removeClass ( 'disabled' ) ;
else
$ ( callerElement ) . removeProp ( 'disabled' ) ;
}
} ,
error : function ( XMLHttpRequest , textStatus , errorThrown )
{
var error = "Impossible to add the product to the cart.<br/>textStatus: '" + textStatus + "'<br/>errorThrown: '" + errorThrown + "'<br/>responseText:<br/>" + XMLHttpRequest . responseText ;
if ( ! ! $ . prototype . fancybox )
$ . fancybox . open ( [
{
type : 'inline' ,
autoScale : true ,
minHeight : 30 ,
content : '<p class="fancybox-error">' + error + '</p>'
} ] ,
{
padding : 0
} ) ;
else
alert ( error ) ;
//reactive the button when adding has finished
if ( addedFromProductPage )
$ ( '#add_to_cart button' ) . removeProp ( 'disabled' ) . removeClass ( 'disabled' ) ;
else
$ ( callerElement ) . removeProp ( 'disabled' ) ;
}
} ) ;
} ,
//remove a product from the cart via ajax
remove : function ( idProduct , idCombination , customizationId , idAddressDelivery ) {
//send the ajax request to the server
$ . ajax ( {
type : 'POST' ,
headers : { "cache-control" : "no-cache" } ,
url : baseUri + '?rand=' + new Date ( ) . getTime ( ) ,
async : true ,
cache : false ,
dataType : "json" ,
data : 'controller=cart&delete=1&id_product=' + idProduct + '&ipa=' + ( ( idCombination != null && parseInt ( idCombination ) ) ? idCombination : '' ) + ( ( customizationId && customizationId != null ) ? '&id_customization=' + customizationId : '' ) + '&id_address_delivery=' + idAddressDelivery + '&token=' + static _token + '&ajax=true' ,
success : function ( jsonData ) {
ajaxCart . updateCart ( jsonData ) ;
if ( $ ( 'body' ) . attr ( 'id' ) == 'order' || $ ( 'body' ) . attr ( 'id' ) == 'order-opc' )
deleteProductFromSummary ( idProduct + '_' + idCombination + '_' + customizationId + '_' + idAddressDelivery ) ;
} ,
error : function ( )
{
var error = 'ERROR: unable to delete the product' ;
if ( ! ! $ . prototype . fancybox )
{
$ . fancybox . open ( [
{
type : 'inline' ,
autoScale : true ,
minHeight : 30 ,
content : error
}
] , {
padding : 0
} ) ;
}
else
alert ( error ) ;
}
} ) ;
} ,
//hide the products displayed in the page but no more in the json data
hideOldProducts : function ( jsonData ) {
//delete an eventually removed product of the displayed cart (only if cart is not empty!)
if ( $ ( '.cart_block_list:first dl.products' ) . length > 0 )
{
var removedProductId = null ;
var removedProductData = null ;
var removedProductDomId = null ;
//look for a product to delete...
$ ( '.cart_block_list:first dl.products dt' ) . each ( function ( ) {
//retrieve idProduct and idCombination from the displayed product in the block cart
var domIdProduct = $ ( this ) . data ( 'id' ) ;
var firstCut = domIdProduct . replace ( 'cart_block_product_' , '' ) ;
var ids = firstCut . split ( '_' ) ;
//try to know if the current product is still in the new list
var stayInTheCart = false ;
for ( aProduct in jsonData . products )
{
//we've called the variable aProduct because IE6 bug if this variable is called product
//if product has attributes
if ( jsonData . products [ aProduct ] [ 'id' ] == ids [ 0 ] && ( ! ids [ 1 ] || jsonData . products [ aProduct ] [ 'idCombination' ] == ids [ 1 ] ) )
{
stayInTheCart = true ;
// update the product customization display (when the product is still in the cart)
ajaxCart . hideOldProductCustomizations ( jsonData . products [ aProduct ] , domIdProduct ) ;
}
}
//remove product if it's no more in the cart
if ( ! stayInTheCart )
{
removedProductId = $ ( this ) . data ( 'id' ) ;
if ( removedProductId != null )
{
var firstCut = removedProductId . replace ( 'cart_block_product_' , '' ) ;
var ids = firstCut . split ( '_' ) ;
$ ( 'dt[data-id="' + removedProductId + '"]' ) . addClass ( 'strike' ) . fadeTo ( 'slow' , 0 , function ( ) {
$ ( this ) . slideUp ( 'slow' , function ( ) {
$ ( this ) . remove ( ) ;
// If the cart is now empty, show the 'no product in the cart' message and close detail
if ( $ ( '.cart_block:first dl.products dt' ) . length == 0 )
{
$ ( "#header .cart_block" ) . stop ( true , true ) . slideUp ( 200 ) ;
$ ( '.cart_block_no_products:hidden' ) . slideDown ( 450 ) ;
$ ( '.cart_block dl.products' ) . remove ( ) ;
}
} ) ;
} ) ;
$ ( 'dd[data-id="cart_block_combination_of_' + ids [ 0 ] + ( ids [ 1 ] ? '_' + ids [ 1 ] : '' ) + ( ids [ 2 ] ? '_' + ids [ 2 ] : '' ) + '"]' ) . fadeTo ( 'fast' , 0 , function ( ) {
$ ( this ) . slideUp ( 'fast' , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
} ) ;
}
}
} ) ;
}
} ,
hideOldProductCustomizations : function ( product , domIdProduct ) {
var customizationList = $ ( 'ul[data-id="customization_' + product [ 'id' ] + '_' + product [ 'idCombination' ] + '"]' ) ;
if ( customizationList . length > 0 )
{
$ ( customizationList ) . find ( "li" ) . each ( function ( ) {
$ ( this ) . find ( "div" ) . each ( function ( ) {
var customizationDiv = $ ( this ) . data ( 'id' ) ;
var tmp = customizationDiv . replace ( 'deleteCustomizableProduct_' , '' ) ;
var ids = tmp . split ( '_' ) ;
if ( ( parseInt ( product . idCombination ) == parseInt ( ids [ 2 ] ) ) && ! ajaxCart . doesCustomizationStillExist ( product , ids [ 0 ] ) )
$ ( 'div[data-id="' + customizationDiv + '"]' ) . parent ( ) . addClass ( 'strike' ) . fadeTo ( 'slow' , 0 , function ( ) {
$ ( this ) . slideUp ( 'slow' ) ;
$ ( this ) . remove ( ) ;
} ) ;
} ) ;
} ) ;
}
var removeLinks = $ ( '.deleteCustomizableProduct[data-id="' + domIdProduct + '"]' ) . find ( '.ajax_cart_block_remove_link' ) ;
if ( ! product . hasCustomizedDatas && ! removeLinks . length )
$ ( 'div[data-id="' + domIdProduct + '"]' + ' span.remove_link' ) . html ( '<a class="ajax_cart_block_remove_link" rel="nofollow" href="' + baseUri + '?controller=cart&delete=1&id_product=' + product [ 'id' ] + '&ipa=' + product [ 'idCombination' ] + '&token=' + static _token + '"> </a>' ) ;
if ( product . is _gift )
$ ( 'div[data-id="' + domIdProduct + '"]' + ' span.remove_link' ) . html ( '' ) ;
} ,
doesCustomizationStillExist : function ( product , customizationId ) {
var exists = false ;
$ ( product . customizedDatas ) . each ( function ( ) {
if ( this . customizationId == customizationId )
{
exists = true ;
// This return does not mean that we found nothing but simply break the loop
return false ;
}
} ) ;
return ( exists ) ;
} ,
//refresh display of vouchers (needed for vouchers in % of the total)
refreshVouchers : function ( jsonData ) {
if ( typeof ( jsonData . discounts ) == 'undefined' || jsonData . discounts . length == 0 )
$ ( '.vouchers' ) . hide ( ) ;
else
{
$ ( '.vouchers tbody' ) . html ( '' ) ;
for ( i = 0 ; i < jsonData . discounts . length ; i ++ )
{
if ( parseFloat ( jsonData . discounts [ i ] . price _float ) > 0 )
{
var delete _link = '' ;
if ( jsonData . discounts [ i ] . code . length )
delete _link = '<a class="delete_voucher" href="' + jsonData . discounts [ i ] . link + '" title="' + delete _txt + '"><i class="icon-remove-sign"></i></a>' ;
$ ( '.vouchers tbody' ) . append ( $ (
'<tr class="bloc_cart_voucher" data-id="bloc_cart_voucher_' + jsonData . discounts [ i ] . id + '">'
+ ' <td class="quantity">1x</td>'
+ ' <td class="name" title="' + jsonData . discounts [ i ] . description + '">' + jsonData . discounts [ i ] . name + '</td>'
+ ' <td class="price">-' + jsonData . discounts [ i ] . price + '</td>'
+ ' <td class="delete">' + delete _link + '</td>'
+ '</tr>'
) ) ;
}
}
$ ( '.vouchers' ) . show ( ) ;
}
} ,
// Update product quantity
updateProductQuantity : function ( product , quantity ) {
$ ( 'dt[data-id=cart_block_product_' + product . id + '_' + ( product . idCombination ? product . idCombination : '0' ) + '_' + ( product . idAddressDelivery ? product . idAddressDelivery : '0' ) + '] .quantity' ) . fadeTo ( 'fast' , 0 , function ( ) {
$ ( this ) . text ( quantity ) ;
$ ( this ) . fadeTo ( 'fast' , 1 , function ( ) {
$ ( this ) . fadeTo ( 'fast' , 0 , function ( ) {
$ ( this ) . fadeTo ( 'fast' , 1 , function ( ) {
$ ( this ) . fadeTo ( 'fast' , 0 , function ( ) {
$ ( this ) . fadeTo ( 'fast' , 1 ) ;
} ) ;
} ) ;
} ) ;
} ) ;
} ) ;
} ,
//display the products witch are in json data but not already displayed
displayNewProducts : function ( jsonData ) {
//add every new products or update displaying of every updated products
$ ( jsonData . products ) . each ( function ( ) {
//fix ie6 bug (one more item 'undefined' in IE6)
if ( this . id != undefined )
{
//create a container for listing the products and hide the 'no product in the cart' message (only if the cart was empty)
if ( $ ( '.cart_block:first dl.products' ) . length == 0 )
{
$ ( '.cart_block_no_products' ) . before ( '<dl class="products"></dl>' ) ;
$ ( '.cart_block_no_products' ) . hide ( ) ;
}
//if product is not in the displayed cart, add a new product's line
var domIdProduct = this . id + '_' + ( this . idCombination ? this . idCombination : '0' ) + '_' + ( this . idAddressDelivery ? this . idAddressDelivery : '0' ) ;
var domIdProductAttribute = this . id + '_' + ( this . idCombination ? this . idCombination : '0' ) ;
if ( $ ( 'dt[data-id="cart_block_product_' + domIdProduct + '"]' ) . length == 0 )
{
var productId = parseInt ( this . id ) ;
var productAttributeId = ( this . hasAttributes ? parseInt ( this . attributes ) : 0 ) ;
var content = '<dt class="unvisible" data-id="cart_block_product_' + domIdProduct + '">' ;
var name = $ . trim ( $ ( '<span />' ) . html ( this . name ) . text ( ) ) ;
name = ( name . length > 12 ? name . substring ( 0 , 10 ) + '...' : name ) ;
content += '<a class="cart-images" href="' + this . link + '" title="' + name + '"><img src="' + this . image _cart + '" alt="' + this . name + '"></a>' ;
content += '<div class="cart-info"><div class="product-name">' + '<span class="quantity-formated"><span class="quantity">' + this . quantity + '</span> x </span><a href="' + this . link + '" title="' + this . name + '" class="cart_block_product_name">' + name + '</a></div>' ;
if ( this . hasAttributes )
content += '<div class="product-atributes"><a href="' + this . link + '" title="' + this . name + '">' + this . attributes + '</a></div>' ;
if ( typeof ( freeProductTranslation ) != 'undefined' )
content += '<span class="price">' + ( parseFloat ( this . price _float ) > 0 ? this . priceByLine : freeProductTranslation ) + '</span></div>' ;
if ( typeof ( this . is _gift ) == 'undefined' || this . is _gift == 0 )
content += '<span class="remove_link"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&token=' + static _token + ( this . hasAttributes ? '&ipa=' + parseInt ( this . idCombination ) : '' ) + '"> </a></span>' ;
else
content += '<span class="remove_link"></span>' ;
content += '</dt>' ;
if ( this . hasAttributes )
content += '<dd data-id="cart_block_combination_of_' + domIdProduct + '" class="unvisible">' ;
if ( this . hasCustomizedDatas )
content += ajaxCart . displayNewCustomizedDatas ( this ) ;
if ( this . hasAttributes ) content += '</dd>' ;
$ ( '.cart_block dl.products' ) . append ( content ) ;
}
//else update the product's line
else
{
var jsonProduct = this ;
if ( $ . trim ( $ ( 'dt[data-id="cart_block_product_' + domIdProduct + '"] .quantity' ) . html ( ) ) != jsonProduct . quantity || $ . trim ( $ ( 'dt[data-id="cart_block_product_' + domIdProduct + '"] .price' ) . html ( ) ) != jsonProduct . priceByLine )
{
// Usual product
if ( ! this . is _gift )
$ ( 'dt[data-id="cart_block_product_' + domIdProduct + '"] .price' ) . text ( jsonProduct . priceByLine ) ;
else
$ ( 'dt[data-id="cart_block_product_' + domIdProduct + '"] .price' ) . html ( freeProductTranslation ) ;
ajaxCart . updateProductQuantity ( jsonProduct , jsonProduct . quantity ) ;
// Customized product
if ( jsonProduct . hasCustomizedDatas )
{
customizationFormatedDatas = ajaxCart . displayNewCustomizedDatas ( jsonProduct ) ;
if ( ! $ ( 'ul[data-id="customization_' + domIdProductAttribute + '"]' ) . length )
{
if ( jsonProduct . hasAttributes )
$ ( 'dd[data-id="cart_block_combination_of_' + domIdProduct + '"]' ) . append ( customizationFormatedDatas ) ;
else
$ ( '.cart_block dl.products' ) . append ( customizationFormatedDatas ) ;
}
else
{
$ ( 'ul[data-id="customization_' + domIdProductAttribute + '"]' ) . html ( '' ) ;
$ ( 'ul[data-id="customization_' + domIdProductAttribute + '"]' ) . append ( customizationFormatedDatas ) ;
}
}
}
}
$ ( '.cart_block dl.products .unvisible' ) . slideDown ( 450 ) . removeClass ( 'unvisible' ) ;
var removeLinks = $ ( 'dt[data-id="cart_block_product_' + domIdProduct + '"]' ) . find ( 'a.ajax_cart_block_remove_link' ) ;
if ( this . hasCustomizedDatas && removeLinks . length )
$ ( removeLinks ) . each ( function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
}
} ) ;
} ,
displayNewCustomizedDatas : function ( product ) {
var content = '' ;
var productId = parseInt ( product . id ) ;
var productAttributeId = typeof ( product . idCombination ) == 'undefined' ? 0 : parseInt ( product . idCombination ) ;
var hasAlreadyCustomizations = $ ( 'ul[data-id="customization_' + productId + '_' + productAttributeId + '"]' ) . length ;
if ( ! hasAlreadyCustomizations )
{
if ( ! product . hasAttributes )
content += '<dd data-id="cart_block_combination_of_' + productId + '" class="unvisible">' ;
if ( $ ( 'ul[data-id="customization_' + productId + '_' + productAttributeId + '"]' ) . val ( ) == undefined )
content += '<ul class="cart_block_customizations" data-id="customization_' + productId + '_' + productAttributeId + '">' ;
}
$ ( product . customizedDatas ) . each ( function ( ) {
var done = 0 ;
customizationId = parseInt ( this . customizationId ) ;
productAttributeId = typeof ( product . idCombination ) == 'undefined' ? 0 : parseInt ( product . idCombination ) ;
content += '<li name="customization"><div class="deleteCustomizableProduct" data-id="deleteCustomizableProduct_' + customizationId + '_' + productId + '_' + ( productAttributeId ? productAttributeId : '0' ) + '"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&ipa=' + productAttributeId + '&id_customization=' + customizationId + '&token=' + static _token + '"></a></div>' ;
// Give to the customized product the first textfield value as name
$ ( this . datas ) . each ( function ( ) {
if ( this [ 'type' ] == CUSTOMIZE _TEXTFIELD )
{
$ ( this . datas ) . each ( function ( ) {
if ( this [ 'index' ] == 0 )
{
content += ' ' + this . truncatedValue . replace ( /<br \/>/g , ' ' ) ;
done = 1 ;
return false ;
}
} )
}
} ) ;
// If the customized product did not have any textfield, it will have the customizationId as name
if ( ! done )
content += customizationIdMessage + customizationId ;
if ( ! hasAlreadyCustomizations ) content += '</li>' ;
// Field cleaning
if ( customizationId )
{
$ ( '#uploadable_files li div.customizationUploadBrowse img' ) . remove ( ) ;
$ ( '#text_fields input' ) . attr ( 'value' , '' ) ;
}
} ) ;
if ( ! hasAlreadyCustomizations )
{
content += '</ul>' ;
if ( ! product . hasAttributes ) content += '</dd>' ;
}
return ( content ) ;
} ,
updateLayer : function ( product ) {
$ ( '#layer_cart_product_title' ) . text ( product . name ) ;
$ ( '#layer_cart_product_attributes' ) . text ( '' ) ;
if ( product . hasAttributes && product . hasAttributes == true )
$ ( '#layer_cart_product_attributes' ) . html ( product . attributes ) ;
2016-08-12 11:33:35 +02:00
//Override #10402
//Ca ne prend pas en compte la quantité
//$('#layer_cart_product_price').text($('#our_price_display').html());
const price = parseFloat ( $ ( '#our_price_display' ) . html ( ) . substr ( 0 , $ ( '#our_price_display' ) . html ( ) . length - 2 ) . replace ( ',' , '.' ) ) * $ ( '#quantity_wanted' ) . val ( ) ;
const currency = $ ( '#our_price_display' ) . html ( ) . substr ( $ ( '#our_price_display' ) . html ( ) . length - 2 , $ ( '#our_price_display' ) . html ( ) . length ) ;
$ ( '#layer_cart_product_price' ) . text ( price . toFixed ( 2 ) + currency ) ;
//SAME HERE
//Override #10402
//Ca ne prend pas en compte la quantité
//$('#layer_cart_product_old_price').text($('#old_price_display').html());
const price _old = parseFloat ( $ ( '#old_price_display' ) . html ( ) . substr ( 0 , $ ( '#old_price_display' ) . html ( ) . length - 2 ) . replace ( ',' , '.' ) ) * $ ( '#quantity_wanted' ) . val ( ) ;
$ ( '#layer_cart_product_old_price' ) . text ( price _old . toFixed ( 2 ) + currency ) ;
2016-04-14 16:14:31 +02:00
$ ( '#layer_cart_product_reduc' ) . text ( $ ( '#reduction_percent_display' ) . html ( ) ) ;
$ ( '#layer_cart_product_unit_price' ) . html ( $ ( '.price .unit_price' ) . html ( ) ) ;
$ ( '#layer_cart_product_name_manu' ) . text ( $ ( '#name_manu' ) . html ( ) ) ;
$ ( '#layer_cart_product_quantity' ) . text ( $ ( '#quantity_wanted' ) . val ( ) ) ;
$ ( '.layer_cart_img' ) . html ( '<img class="layer_cart_img img-responsive" src="' + product . image + '" alt="' + product . name + '" title="' + product . name + '" />' ) ;
$ ( '#back_to_category' ) . attr ( 'href' , $ ( 'div.back-top > a' ) . attr ( 'href' ) ) ;
var nint = parseInt ( $ ( window ) . scrollTop ( ) ) + 50 ;
var n = nint + 'px' ;
$ ( '.layer_cart_overlay' ) . css ( 'width' , '100%' ) ;
$ ( '.layer_cart_overlay' ) . css ( 'height' , '100%' ) ;
$ ( '.layer_cart_overlay' ) . show ( ) ;
$ ( '#layer_cart' ) . css ( { 'top' : n } ) . fadeIn ( 'fast' ) ;
crossselling _serialScroll ( ) ;
} ,
//genarally update the display of the cart
updateCart : function ( jsonData ) {
//user errors display
if ( jsonData . hasError )
{
var errors = '' ;
for ( error in jsonData . errors )
//IE6 bug fix
if ( error != 'indexOf' )
errors += $ ( '<div />' ) . html ( jsonData . errors [ error ] ) . text ( ) + "\n" ;
if ( ! ! $ . prototype . fancybox )
$ . fancybox . open ( [
{
type : 'inline' ,
autoScale : true ,
minHeight : 30 ,
content : '<p class="fancybox-error">' + errors + '</p>'
}
] , {
padding : 0
} ) ;
else
alert ( errors ) ;
}
else
{
ajaxCart . updateCartEverywhere ( jsonData ) ;
ajaxCart . hideOldProducts ( jsonData ) ;
ajaxCart . displayNewProducts ( jsonData ) ;
ajaxCart . refreshVouchers ( jsonData ) ;
//update 'first' and 'last' item classes
$ ( '.cart_block .products dt' ) . removeClass ( 'first_item' ) . removeClass ( 'last_item' ) . removeClass ( 'item' ) ;
$ ( '.cart_block .products dt:first' ) . addClass ( 'first_item' ) ;
$ ( '.cart_block .products dt:not(:first,:last)' ) . addClass ( 'item' ) ;
$ ( '.cart_block .products dt:last' ) . addClass ( 'last_item' ) ;
}
} ,
//update general cart informations everywhere in the page
updateCartEverywhere : function ( jsonData ) {
$ ( '.ajax_cart_total' ) . text ( $ . trim ( jsonData . productTotal ) ) ;
if ( parseFloat ( jsonData . shippingCostFloat ) > 0 )
$ ( '.ajax_cart_shipping_cost' ) . text ( jsonData . shippingCost ) ;
else if ( typeof ( freeShippingTranslation ) != 'undefined' )
$ ( '.ajax_cart_shipping_cost' ) . html ( freeShippingTranslation ) ;
$ ( '.ajax_cart_tax_cost' ) . text ( jsonData . taxCost ) ;
$ ( '.cart_block_wrapping_cost' ) . text ( jsonData . wrappingCost ) ;
$ ( '.ajax_block_cart_total' ) . text ( jsonData . total ) ;
$ ( '.ajax_block_products_total' ) . text ( jsonData . productTotal ) ;
$ ( '.ajax_total_price_wt' ) . text ( jsonData . total _price _wt ) ;
if ( parseFloat ( jsonData . freeShippingFloat ) > 0 )
{
$ ( '.ajax_cart_free_shipping' ) . html ( jsonData . freeShipping ) ;
$ ( '.freeshipping' ) . fadeIn ( 0 ) ;
}
else if ( parseFloat ( jsonData . freeShippingFloat ) == 0 )
$ ( '.freeshipping' ) . fadeOut ( 0 ) ;
this . nb _total _products = jsonData . nbTotalProducts ;
if ( parseInt ( jsonData . nbTotalProducts ) > 0 )
{
$ ( '.ajax_cart_no_product' ) . hide ( ) ;
$ ( '.ajax_cart_quantity' ) . text ( jsonData . nbTotalProducts ) ;
$ ( '.ajax_cart_quantity' ) . fadeIn ( 'slow' ) ;
$ ( '.ajax_cart_total' ) . fadeIn ( 'slow' ) ;
if ( parseInt ( jsonData . nbTotalProducts ) > 1 )
{
$ ( '.ajax_cart_product_txt' ) . each ( function ( ) {
$ ( this ) . hide ( ) ;
} ) ;
$ ( '.ajax_cart_product_txt_s' ) . each ( function ( ) {
$ ( this ) . show ( ) ;
} ) ;
}
else
{
$ ( '.ajax_cart_product_txt' ) . each ( function ( ) {
$ ( this ) . show ( ) ;
} ) ;
$ ( '.ajax_cart_product_txt_s' ) . each ( function ( ) {
$ ( this ) . hide ( ) ;
} ) ;
}
}
else
{
$ ( '.ajax_cart_quantity, .ajax_cart_product_txt_s, .ajax_cart_product_txt, .ajax_cart_total' ) . each ( function ( ) {
$ ( this ) . hide ( ) ;
} ) ;
$ ( '.ajax_cart_no_product' ) . show ( 'slow' ) ;
}
}
} ;
function HoverWatcher ( selector )
{
this . hovering = false ;
var self = this ;
this . isHoveringOver = function ( ) {
return self . hovering ;
}
$ ( selector ) . hover ( function ( ) {
self . hovering = true ;
} , function ( ) {
self . hovering = false ;
} )
}
function crossselling _serialScroll ( )
{
if ( ! ! $ . prototype . bxSlider )
$ ( '#blockcart_caroucel' ) . bxSlider ( {
minSlides : 2 ,
maxSlides : 4 ,
slideWidth : 178 ,
slideMargin : 20 ,
moveSlides : 1 ,
infiniteLoop : false ,
hideControlOnEnd : true ,
pager : false
} ) ;
}