PageSourceSearch

https://fernandoclaro.com/modules/leofeature/views/js/leofeature_cart.js

js fernandoclaro.com collected 2026-10-04 17:47:21 UTC 75,501 bytes, 2,237 lines download raw bytes

1/**
2 * 2007-2017 Leotheme
3 *
4 * NOTICE OF LICENSE
5 *
6 * Leo feature for prestashop 1.7: ajax cart, review, compare, wishlist at product list 
7 *
8 * DISCLAIMER
9 *
10 *  @Module Name: Leo Feature
11 *  @author    leotheme <[email protected]>
12 *  @copyright 2007-2018 Leotheme
13 *  @license   http://leotheme.com - prestashop template provider
14 */
15$(document).ready(function(){
16	if(typeof leo_allow_ajax !== "undefined" && !leo_allow_ajax){
17    	return;
18	}
19	//DONGND:: check safari on window
20	var is_safari = false;
21	if (navigator.userAgent.toLowerCase().indexOf("chrome/") !== -1)
22	{
23		is_safari = false;
24	}
25	else if (navigator.userAgent.toLowerCase().indexOf("safari/") !== -1)
26	{
27		is_safari = true;
28	}
29	if (navigator.appVersion.indexOf("Win")!=-1 && is_safari)
30	{
31		$('html').addClass('safari-win');
32	}
33	//DONGND:: clone blockcart when turn off show popup
34	if (typeof show_popup != 'undefined' && !show_popup)
35	{
36		$(".blockcart.cart-preview").addClass('leo-blockcart').removeClass('blockcart');		
37	}
38	
39	createModalAndDropdown(0, 0);
40	
41	leoSelectAttr();
42        leoChooseAttr();
43	leoBtCart();
44	
45	prestashop.on('updateProductList', function() {
46		leoSelectAttr();
47                leoChooseAttr();
48		leoBtCart();	
49	});	
50		
51	// prestashop.on('updatedCart', function (event) {
52		// console.log('aaa111');
53		// console.log($('#blockcart-modal'));
54		// $('#blockcart-modal').on('hidden.bs.modal', function (e) {
55		
56			// $('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
57			// $('.leo-bt-cart.active').find('.leo-loading').hide();
58			// $('.leo-bt-cart.active').removeClass('active reset');
59		// });
60	// });
61
62	// $('.blockcart.cart-preview').data('refresh-url','');
63	// $('.blockcart.cart-preview').removeAttr('refresh-url');
64	// $('.blockcart.cart-preview').wrap('<div class="leo-blockcart-wapper"></div>');
65	prestashop.on('updateCart', function (event) {
66		
67		// console.log('aaa');
68		// console.log(event);
69		//DONGND:: refresh cart if turn off show popup
70		if (typeof show_popup != 'undefined' && !show_popup)
71		{
72			//DONGND:: loading default cart
73			if ($('.leo-blockcart.cart-preview .cssload-piano').length)
74			{
75				$('.leo-blockcart.cart-preview .cssload-piano').show();
76			}
77			// console.log('test');
78			var refresh_url = $('.leo-blockcart').data('refresh-url');
79			$.ajax({
80				type: 'POST',
81				headers: {"cache-control": "no-cache"},
82				url: refresh_url,
83				async: true,
84				cache: false,										
85				success: function (resp)
86				{
87					$('.leo-blockcart').replaceWith($(resp.preview).find('.blockcart'));
88					$(".blockcart.cart-preview").addClass('leo-blockcart').removeClass('blockcart');
89					// createModalAndDropdown(1, 0);
90					//DONGND:: refresh at product page with cart button default
91					if (event.reason.linkAction == 'add-to-cart' && event.resp.success)
92					{
93						// console.log('test');
94						prestashop.emit('updateProduct', {
95						  reason: ''
96						});
97					}
98				},
99				error: function (XMLHttpRequest, textStatus, errorThrown) {
100					console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
101				}
102			});
103		}
104		//DONGND:: show notification if add cart success
105		if (event.reason.linkAction == 'add-to-cart' && event.resp.success)
106		{		
107			// console.log($('.leo-bt-cart.active'));		
108			
109			//DONGND:: run fly cart
110			if (typeof enable_flycart_effect != 'undefined' && enable_flycart_effect)
111			{
112				if ($('.leo-bt-cart.active').length)
113				{
114					//DONGND:: product list
115					flyCartEffect($('.leo-bt-cart.active'));
116				}
117				else if (prestashop.page.page_name == 'product' || $('.product-add-to-cart .add-to-cart').length)
118				{
119					//DONGND:: product page or quickview
120					flyCartEffect($('.product-add-to-cart .add-to-cart'));
121				}
122			}
123			
124			if ($('.leo-notification').length && typeof enable_notification != 'undefined' && enable_notification)
125			{
126				//DONGND:: show notification
127				var id_product = event.resp.id_product;
128				var product_name = false;
129				$.each(event.resp.cart.products, function(key, value){
130					// console.log(value);
131					// console.log(value.id_product);			
132					// console.log(value.name);
133					if (id_product == value.id_product)
134					{
135						product_name = value.name;
136						return false;
137					}
138				})				
139				showLeoNotification('success', 'add', product_name);				
140			}
141		}
142		
143		//DONGND:: hide cart item has been deleted from page cart
144		// if ($('.leo-dropdown-cart-item.deleting').length)
145		// {
146			// if (event.reason.idProduct)
147			// {
148				// var id_product = event.reason.idProduct;
149				// var id_product_attribute = event.reason.idProductAttribute;
150				// var id_customization = event.reason.idCustomization;
151							
152				// var object_parent = $('.leo-remove-from-cart[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]').parents('.leo-dropdown-cart-item');
153				// object_parent.find('.leo-dropdown-overlay').hide();
154				// object_parent.find('.leo-dropdown-cssload-speeding-wheel').hide();
155				// object_parent.fadeOut(function(){
156					
157					// object_parent.remove();
158					// updateClassCartItem();
159				// });
160								
161				// showLeoNotification('success','delete', false);
162			// }
163			// else
164			// {				
165				// showLeoNotification('error','delete', false);
166			// }
167		// }
168		
169		//DONGND:: update cart item has been updated from page cart
170		// if ($('.leo-dropdown-cart-item.updating').length)
171		// {		
172			// if (event.reason.success)
173			// {
174				// var id_product = event.reason.id_product;
175				// var id_product_attribute = '';
176				// if (event.reason.id_product_attribute)
177				// {
178					// id_product_attribute = event.reason.id_product_attribute;
179				// }
180				// var object_element = $('.leo-input-product-quantity[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"]');
181				// var object_parent = object_element.parents('.leo-dropdown-cart-item');
182				// if (object_parent.hasClass('updating'))
183				// {
184					// object_parent.find('.leo-dropdown-overlay').hide();
185					// object_parent.find('.leo-dropdown-cssload-speeding-wheel').hide();
186					// object_parent.removeClass('updating');
187					
188					// object_parent.find('.leo-input-product-quantity').data('product-quantity', object_parent.find('.leo-input-product-quantity').val());
189					// var id_customization = object_parent.find('.leo-input-product-quantity').data('id-customization');
190					// $('.leo-input-product-quantity[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]').val(object_parent.find('.leo-input-product-quantity').val()).data('product-quantity', object_parent.find('.leo-input-product-quantity').val());
191				// }
192			
193				// showLeoNotification('success','update', false);
194			// }
195			// else
196			// {
197				// showLeoNotification('error','update', false);
198			// }
199			// $('.leo-dropdown-cart-item.updating').removeClass('updating');
200			
201		// }
202		
203		// console.log('test1');
204		if (typeof show_popup != 'undefined' && show_popup)
205		{
206			// console.log('test');
207			check_active_modal_cart = setInterval(function(){
208				
209				if ($('.leo-bt-cart.active').length && $('#blockcart-modal').length && $('#blockcart-modal').hasClass('modal fade in'))
210				{
211					
212					$('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
213					$('.leo-bt-cart.active').find('.leo-loading').hide();
214					$('.leo-bt-cart.active').removeClass('active reset');
215					
216					clearInterval(check_active_modal_cart);
217				}
218				
219			}, 200);
220		}
221		
222		if (typeof show_popup != 'undefined' && !show_popup)
223		{
224			if ($('.leo-bt-cart.active').length)
225			{
226				$('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
227				$('.leo-bt-cart.active').find('.leo-loading').hide();
228				$('.leo-bt-cart.active').removeClass('active reset');
229			}
230		}
231
232		// createModalAndDropdown(1, 0);	
233		//DONGND:: loading fly cart
234		if ($('.leo-fly-cart .leo-fly-cart-cssload-loader').length)
235		{
236			$('.leo-fly-cart .leo-fly-cart-cssload-loader').show();
237		}	
238                
239                
240	//prestashop.on('updatedCart', function (event) {
241		// console.log(event);
242		// var scrollToElement = false;
243			
244		// console.log('bbb');
245		// console.log(event);
246		
247		if ($('.leo-dropdown-cart-item.deleting').length)
248		{
249			$('.leo-dropdown-cart-item.deleting .leo-dropdown-overlay').hide();
250			$('.leo-dropdown-cart-item.deleting .leo-dropdown-cssload-speeding-wheel').hide();
251			$('.leo-dropdown-cart-item.deleting').fadeOut(function(){
252				$('.leo-dropdown-cart-item.deleting').remove();
253				updateClassCartItem();
254			})
255			showLeoNotification('success','delete', false);
256		}
257		
258		if ($('.leo-dropdown-cart-item.updating').length)
259		{		
260			$('.leo-dropdown-cart-item.updating .leo-dropdown-overlay').hide();
261			$('.leo-dropdown-cart-item.updating .leo-dropdown-cssload-speeding-wheel').hide();
262			$('.leo-dropdown-cart-item.updating').removeClass('updating');
263			showLeoNotification('success','update', false);
264		}
265		
266		// if ($('.leo-dropdown-cart-item.deleting').length || $('.leo-dropdown-cart-item.updating').length)
267		// {
268			
269			// createModalAndDropdown(1, 1);
270		// }
271		// else
272		// {
273			// if (typeof show_popup && show_popup)
274			// {
275				//DONGND:: remove do not close dropdown-dropup when delete at page cart
276				$('.leo-dropdown-cart.dropdown').removeClass('disable-close');
277				$('.leo-dropdown-cart.dropup').removeClass('disable-close');
278				createModalAndDropdown(1, 0);			
279			// }
280			
281		// }
282			
283	//});
284        
285        
286	});
287	
288	//DONGND:: call event for fly cart slide bar
289	activeEventFlyCartSlideBar();
290	$('.leo-fly-cart.enable-slidebar .leo-fly-cart-icon-wrapper').click(function(){
291		$('.leo-fly-cart.enable-slidebar .leo-fly-cart-icon').trigger('click');
292	});
293	$('.leo-fly-cart.enable-slidebar .leo-fly-cart-icon').click(function(){
294		showSlideBarCart($(this));
295		return false;
296	});
297	
298	$('.leo-fly-cart.enable-dropdown .leo-fly-cart-icon-wrapper , .leo-fly-cart.enable-dropdown .leo-fly-cart-icon').click(function(){		
299		showDropDownCart($(this), 'flycart');
300		return false;
301	});
302	
303	//DONGND:: click out to close dropdown-dropup cart
304	$(document).click(function (e) {
305		e.stopPropagation();
306		var container = $(".leo-dropdown-cart.dropdown.show");
307
308		//check if the clicked area is dropDown or not
309		if (container.length && container.has(e.target).length === 0) {
310			if (!container.hasClass('disable-close'))
311			{
312				container.removeClass('show');
313			}
314
315		}
316		var container1 = $(".leo-dropdown-cart.dropup.show");
317
318		//check if the clicked area is dropDown or not
319		if (container1.length && container1.has(e.target).length === 0) {
320			if (!container1.hasClass('disable-close'))
321			{
322				container1.removeClass('show');
323			}
324
325		}
326	})
327	
328	getOffsetFlycartIcon();
329	
330	//DONGND:: resize update scroll bar of fly cart slide bar
331	$(window).resize(function(){
332		//DONGND:: active scroll bar
333		$('.leo-dropdown-list-item').each(function(){
334			
335			//DONGND:: scroll bar for slidebar
336			if ($(this).parents('.leo-fly-cart-slidebar').length)
337			{
338				checkFlyCartScrollBar($(this));
339			}
340			//DONGND:: scroll bar for dropup/dropdown		
341			if ($(this).parents('.leo-fly-cart.type-fixed.enable-dropdown').length)
342			{
343				checkFlyCartScrollBarDropDown($(this));
344			}
345			
346		})
347		getOffsetFlycartIcon();
348	})
349});
350
351//DONGND:: event for button add cart
352function leoBtCart()
353{
354	$('.leo-bt-cart').each(function(){
355		if (!$(this).hasClass('leo-enable'))
356		{	
357			$(this).addClass('leo-enable');
358			$(this).click(function(event){
359				if ($(this).hasClass('active') || $(this).hasClass('reset') || $('.leo-bt-cart.active').length || $(this).hasClass('disabled'))
360				{
361					return false;
362				}
363				
364				$(this).find('.leo-bt-cart-content').hide();
365				$(this).find('.leo-loading').css({'display':'block'});
366				$(this).addClass('active');
367				// console.log('aaa');
368				// return false;
369				// var object_button_container = $(this).parents('.button-container');
370				var object_button_container = $(this).parents('.product-miniature');
371				if (object_button_container.find('.leo_cart_quantity').length)
372				{
373					object_button_container.find('.qty_product').val(object_button_container.find('.leo_cart_quantity').val());
374				}
375				
376				var qty_product = object_button_container.find('.qty_product').val();
377				var min_qty = object_button_container.find('.minimal_quantity').val();
378				var quantity_product = object_button_container.find('.quantity_product').val();
379				// console.log(qty_product);
380				// console.log(min_qty);
381				// console.log(quantity_product);
382				if(Math.floor(qty_product) == qty_product && $.isNumeric(qty_product) && qty_product > 0)
383				{
384					// return true;
385				}
386				else
387				{
388					$(this).addClass('reset');
389					// $(this).siblings('.qty_product').val(min_qty);
390					$('.leo-modal-cart .modal-header').addClass('warning-mess');
391					$('.leo-modal-cart .leo-warning').show();
392					$('.leo-modal-cart').modal('show');
393					return false;
394				}
395				// $('.leo-modal-cart .modal-header').addClass('block-mess');
396				// $('.leo-modal-cart .leo-block').show();
397				// $('.leo-modal-cart').modal('show');
398				if (parseInt(qty_product) < parseInt(min_qty))
399				{
400					$(this).addClass('reset');
401					$('.leo-modal-cart .modal-header').addClass('info-mess');
402					$('.leo-modal-cart .leo-info .alert-min-qty').text(min_qty);
403					$('.leo-modal-cart .leo-info').show();
404					$('.leo-modal-cart').modal('show');
405					return false;
406				}
407				
408				//DONGND:: check product out stock
409				var id_product = object_button_container.find('.id_product').val();
410				var id_product_attribute = object_button_container.find('.id_product_attribute').val();
411				var id_customization = object_button_container.find('.id_customization').val();
412				// var check_product_outstock = checkProductOutStock(id_product, id_product_attribute, qty_product);
413				// console.log(check_product_outstock);
414				// if (parseInt(qty_product) > parseInt(quantity_product))
415				// {
416					// $(this).addClass('reset');
417					// $('.leo-modal-cart .modal-header').addClass('block-mess');			
418					// $('.leo-modal-cart .leo-block').show();
419					// $('.leo-modal-cart').modal('show');
420					// return false;
421				// }
422				// return false;
423				// console.log(check_product_outstock);
424				var $element = $(this);
425				$(this).removeData('check-outstock');
426				
427				// $.when(checkProductOutStock(id_product, id_product_attribute, id_customization, qty_product, $element, true)).done(function(data){
428					checkProductOutStock(id_product, id_product_attribute, id_customization, qty_product, $element, true);
429					check_data_outstock = setInterval(function(){					
430						if (typeof $element.data('check-outstock') != 'undefined')
431						{							
432							clearInterval(check_data_outstock);
433							if (!$element.data('check-outstock'))
434							{
435								// console.log('bbbb');
436								$element.addClass('reset');
437								$('.leo-modal-cart .modal-header').addClass('block-mess');			
438								$('.leo-modal-cart .leo-block').show();
439								$('.leo-modal-cart').modal('show');
440								// return false;
441								event.preventDefault();
442								event.stopPropagation();
443								// check_product_outstock = false;
444							}
445							else
446							{
447								var $form = $element.closest('form');
448								var query = $form.serialize() + '&add=1&action=update';
449								var actionURL = $form.attr('action');
450								
451								//DONGND:: run add to cart
452								$.ajax({
453									type: 'POST',
454									headers: {"cache-control": "no-cache"},
455									url: actionURL,
456									async: true,
457									cache: false,
458									data: query,
459									dataType: 'json',
460									success: function (result)
461									{
462										if(result.success)
463										{							
464											if ($('.leo-notification').length && typeof enable_notification != 'undefined' && enable_notification)
465											{
466												//DONGND:: show notification
467												var id_product = result.id_product;
468												var product_name = false;
469												$.each(result.cart.products, function(key, value){
470													// console.log(value);
471													// console.log(value.id_product);			
472													// console.log(value.name);
473													if (id_product == value.id_product)
474													{
475														product_name = value.name;
476														return false;
477													}
478												})				
479												showLeoNotification('success', 'add', product_name);				
480											}
481											
482											//DONGND:: run fly cart
483											if (typeof enable_flycart_effect != 'undefined' && enable_flycart_effect)
484											{
485												if ($('.leo-bt-cart.active').length)
486												{
487													//DONGND:: product list
488													flyCartEffect($('.leo-bt-cart.active'));
489												}
490											}
491											
492											//DONGND:: loading fly cart
493											if ($('.leo-fly-cart .leo-fly-cart-cssload-loader').length)
494											{
495												$('.leo-fly-cart .leo-fly-cart-cssload-loader').show();
496											}
497											
498											//DONGND:: loading default cart
499											if ($('.leo-blockcart.cart-preview .cssload-piano').length)
500											{
501												$('.leo-blockcart.cart-preview .cssload-piano').show();
502											}
503											
504											//DONGND:: reset button add cart
505											if (typeof show_popup != 'undefined' && !show_popup)
506											{
507												if ($('.leo-bt-cart.active').length)
508												{
509													$('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
510													$('.leo-bt-cart.active').find('.leo-loading').hide();
511													$('.leo-bt-cart.active').removeClass('active reset');
512												}
513												
514												//DONGND:: refresh default cart
515												var refresh_url = $('.leo-blockcart').data('refresh-url');
516												$.ajax({
517													type: 'POST',
518													headers: {"cache-control": "no-cache"},
519													url: refresh_url,
520													async: true,
521													cache: false,										
522													success: function (resp)
523													{
524														$('.leo-blockcart').replaceWith($(resp.preview).find('.blockcart'));
525														$(".blockcart.cart-preview").addClass('leo-blockcart').removeClass('blockcart');
526														//DONGND:: refresh default cart
527														createModalAndDropdown(1, 0);
528														
529													},
530													error: function (XMLHttpRequest, textStatus, errorThrown) {
531														console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
532													}
533												});
534											}
535																		
536											if (typeof show_popup != 'undefined' && show_popup)
537											{
538												var refreshURL = $('.blockcart').data('refresh-url');
539												var requestData = {};
540											
541												requestData = {
542													id_product_attribute: result.id_product_attribute,
543													id_product: result.id_product,
544													action: 'add-to-cart'
545												};
546												
547												$.ajax({
548													type: 'POST',
549													headers: {"cache-control": "no-cache"},
550													url: refreshURL,
551													async: true,
552													cache: false,
553													data: requestData,
554													dataType: 'json',
555													success: function (resp)
556													{
557														if ($('.leo-bt-cart.active').length)
558														{
559															$('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
560															$('.leo-bt-cart.active').find('.leo-loading').hide();
561															$('.leo-bt-cart.active').removeClass('active reset');
562														}
563														
564														//DONGND:: refresh default cart
565														$('.blockcart').replaceWith($(resp.preview).find('.blockcart'));
566														//DONGND:: show modal popup
567														if (resp.modal) {													
568															showModalPopupCart(resp.modal);
569														}
570														
571														//DONGND:: refresh dropdown cart
572														createModalAndDropdown(1, 0);	
573													},
574													error: function (XMLHttpRequest, textStatus, errorThrown) {
575														console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
576													}
577												});
578																
579											}																
580																			
581										}
582										else
583										{
584											//DONGND:: show notification
585											showLeoNotification('error','add', false);
586										}
587									},
588									error: function (XMLHttpRequest, textStatus, errorThrown) {
589										// alert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
590										showLeoNotification('error','add', false);
591									}
592								});
593							}
594						}			
595					}, 10);
596					// console.log($element);
597					// console.log($element.data('check-outstock'));
598					
599				// });
600				
601				
602				return false;
603			});
604		};
605	});
606	
607	$('.leo_cart_quantity').each(function(){
608		//DONGND:: hide input quantity when cart buton does not show
609		if ($(this).parents('.product-miniature').find('.qty_product').val())
610		{
611			$(this).val($(this).parents('.product-miniature').find('.qty_product').val());
612		}
613		else
614		{
615			$(this).hide();
616		}
617	})
618	// $('.leo_cart_quantity').change(function(){
619		// console.log($(this).val());
620		// $(this).parents('.product-miniature').find('.qty_product').val($(this).val());
621	// })
622}
623
624//DONGND:: event for button add cart
625function leoSelectAttr()
626{
627	$('.leo-select-attr').click(function(e){
628		e.preventDefault();
629		var id_product = $(this).data('id-product');
630		var attr_txt = $(this).text();
631		var id_attr = $(this).data('id-attr');
632		var qty_attr = $(this).data('qty-attr');
633		var min_qty_attr = $(this).data('min-qty-attr');
634		// var parent_e = $(this).parents('.button-container');
635		var parent_e = $(this).parents('.product-miniature');
636		
637		// console.log(attr_txt);
638		if (!$(this).hasClass('selected'))
639		{
640			$(this).siblings().removeClass('selected');
641			$(this).addClass('selected');
642			parent_e.find('.dropdownListAttrButton_'+id_product).text(attr_txt);
643			if($(this).hasClass('disable'))
644			{
645				if(!parent_e.find('.leo-bt-cart_'+id_product).hasClass('disabled'))
646				{
647					parent_e.find('.leo-bt-cart_'+id_product).addClass('disabled');
648				}
649			}
650			else
651			{
652				if(parent_e.find('.leo-bt-cart_'+id_product).hasClass('disabled'))
653				{
654					parent_e.find('.leo-bt-cart_'+id_product).removeClass('disabled');
655				}
656			};
657			
658			var $product_article_e = $(this).parents('.product-miniature[data-id-product=' + id_product+']');
659			// console.log($product_article_e);
660			$product_article_e.find('.leo-bt-cart .leo-bt-cart-content').hide();
661			$product_article_e.find('.leo-bt-cart .leo-loading').css({'display':'block'});
662			$product_article_e.find('.leo-bt-cart').addClass('active');
663			
664			$.ajax({
665				type: 'POST',
666				headers: {"cache-control": "no-cache"},
667				url: prestashop.urls.base_url + 'modules/leofeature/psajax.php?rand=' + new Date().getTime(),
668				async: true,
669				cache: false,
670				data: {
671					"action": "get-attribute-data",
672					"id_product": id_product,
673					"id_product_attribute": id_attr,
674					"token": leo_token
675				},
676				success: function (result)
677				{
678					if(result != '')
679					{						
680						var obj = $.parseJSON(result);
681						// console.log($(this));
682						// console.log($('.product-miniature[data-id-product=' + id_product+']'));
683						
684						$product_article_e.find('.product-thumbnail img').attr('src', obj.product_cover.bySize.home_default.url).attr('alt', obj.product_cover.legend);
685						$product_article_e.find('.product-thumbnail').attr('href', obj.product_url);
686						$product_article_e.find('.product-price-and-shipping').empty().append(obj.price_attribute);
687						// if (typeof enable_product_label != 'undefined' && enable_product_label)
688						// {							
689							// updatePostionLabel($product_article_e);
690						// }
691					}
692					else
693					{
694						alert(add_cart_error);
695					}
696					$('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
697					$('.leo-bt-cart.active').find('.leo-loading').hide();
698					$('.leo-bt-cart.active').removeClass('active reset');
699				},
700				error: function (XMLHttpRequest, textStatus, errorThrown) {
701					alert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
702				}
703			});
704		}
705		
706		// $('#quantity_product_'+id_product).val(qty_attr);
707		// $('#id_product_attribute_'+id_product).val(id_attr);
708		// $('#minimal_quantity_'+id_product).val(min_qty_attr);
709		// $('#qty_product_'+id_product).val(min_qty_attr).attr('min',min_qty_attr);
710		
711		parent_e.find('.quantity_product_'+id_product).val(qty_attr);
712		parent_e.find('.id_product_attribute_'+id_product).val(id_attr);
713		parent_e.find('.minimal_quantity_'+id_product).val(min_qty_attr);
714		parent_e.find('.qty_product_'+id_product).val(min_qty_attr).data('min',min_qty_attr);
715		
716		parent_e.find('.leo_cart_quantity').val(min_qty_attr);
717		// $('#dropdownListAttrButton_'+id_product).trigger('click');
718		parent_e.find('.dropdownListAttrButton_'+id_product).trigger('click');
719		
720		// leoBtCart();
721		// return false;
722		
723	});
724	
725	// leoBtCart();
726}
727
728//DONGND:: event for module popup after add cart
729function activeEventModal()
730{
731	$('.leo-modal-cart').on('hide.bs.modal', function (e) {
732		// console.log('test');
733		$('.leo-modal-cart .modal-header').removeClass('block-mess info-mess warning-mess');
734		$('.leo-modal-cart .modal-title').hide();
735		var min_qty = $('.leo-bt-cart.reset').parents('.button-container').find('.minimal_quantity').val(); 
736		$('.leo-bt-cart.reset').parents('.button-container').find('.qty_product').val(min_qty);
737		$('.leo-bt-cart.reset').parents('.product-miniature').find('.leo_cart_quantity').val(min_qty);
738		$('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
739		$('.leo-bt-cart.active').find('.leo-loading').hide();
740		$('.leo-bt-cart.active').removeClass('active reset');
741		
742	  // do something...
743	});
744	
745	// $('.leo-modal-cart').on('show.bs.modal', function (e) {
746		// $('.leo-bt-cart.active').find('.leo-bt-cart-content').show();
747		// $('.leo-bt-cart.active').find('.leo-loading').hide();
748	// })
749}
750
751//DONGND:: update position label
752function updatePostionLabel($parent)
753{
754	var FLAG_MARGIN = 10;
755      var $percent = $parent.find('.discount-percentage');
756      var $onsale =  $parent.find('.on-sale');
757      var $new = $parent.find('.new');
758      if($percent.length){
759        $new.css('top', $percent.height() * 2 + FLAG_MARGIN);
760        $percent.css('top',-$parent.find('.thumbnail-container').height() + $parent.find('.product-description').height() + FLAG_MARGIN);
761      }
762      if($onsale.length){
763        $percent.css('top', parseFloat($percent.css('top')) + $onsale.height() + FLAG_MARGIN);
764        $new.css('top', ($percent.height() * 2 + $onsale.height()) + FLAG_MARGIN * 2);
765      }
766}
767
768//DONGND:: show dropdown cart
769function showDropDownCart($element, $type)
770{
771	var object_element = '';
772	if ($type == 'defaultcart')
773	{
774		object_element = $element.siblings('.leo-dropdown-cart');
775	}
776	if ($type == 'flycart')
777	{
778		object_element = $element.parents('.leo-fly-cart').find('.leo-dropdown-cart');
779	}
780	
781	if (!object_element.hasClass('show'))
782	{
783		object_element.addClass('show');
784	}
785	else
786	{
787		object_element.removeClass('show');
788	}
789	
790}
791
792//DONGND:: show dropdown cart
793function showSlideBarCart($element)
794{
795	if (!$('.leo-fly-cart-slidebar.disable').length)
796	{
797		if (!$element.hasClass('active-slidebarcart'))
798		{
799			var type = $element.data('type');
800			var pusheffect = $element.data('pusheffect');
801			$element.addClass('active-slidebarcart');
802			
803			$('.leo-fly-cart-slidebar.'+type).addClass('active');
804			if ($('.leo-fly-cart-mask').length)
805			{
806				$('.leo-fly-cart-mask').first().addClass('active');
807				$('body').addClass('leoflycart-active-slidebar');
808			}
809			//DONGND:: update scrollbar of slidebar cart for safari win
810			if ($('html').hasClass('safari-win'))
811			{				
812				$('.leo-fly-cart-slidebar .leo-dropdown-list-item').each(function(){		
813					//DONGND:: scroll bar for slidebar
814					checkFlyCartScrollBar($(this));
815				})
816			};
817
818			if (pusheffect)
819			{
820				$('.leo-fly-cart-slidebar.'+type).addClass('push');
821				$('body').addClass('leoflycart-active-push');
822				var push_value;
823				var push_type;
824				if (type == 'slidebar_top' || type == 'slidebar_bottom')
825				{
826					push_type = "Y";
827					if (type == 'slidebar_top')
828					{
829						// push_value = $('.leo-fly-cart-slidebar.push.'+type).outerHeight()+$('.leo-fly-cart-slidebar.push.'+type+' .leo-fly-cart').outerHeight();
830						push_value = $('.leo-fly-cart-slidebar.push.'+type).outerHeight();
831					}
832					if (type == 'slidebar_bottom')
833					{
834						// push_value = -($('.leo-fly-cart-slidebar.push.'+type).outerHeight()+$('.leo-fly-cart-slidebar.push.'+type+' .leo-fly-cart').outerHeight());
835						push_value = -$('.leo-fly-cart-slidebar.push.'+type).outerHeight();
836					}
837
838				}
839				if (type == 'slidebar_right' || type == 'slidebar_left')
840				{
841					push_type = "X";
842					if (type == 'slidebar_left')
843					{
844						// push_value = $('.leo-fly-cart-slidebar.push.'+type).outerWidth()+$('.leo-fly-cart-slidebar.push.'+type+' .leo-fly-cart').outerWidth();
845						push_value = $('.leo-fly-cart-slidebar.push.'+type).outerWidth();
846					}
847					if (type == 'slidebar_right')
848					{
849						// push_value = -($('.leo-fly-cart-slidebar.push.'+type).outerWidth()+$('.leo-fly-cart-slidebar.push.'+type+' .leo-fly-cart').outerWidth());
850						push_value = -$('.leo-fly-cart-slidebar.push.'+type).outerWidth();
851					}
852
853				}
854				$('body.leoflycart-active-push main').css({
855					"-moz-transform": "translate"+push_type+"("+push_value+"px)",
856					"-webkit-transform": "translate"+push_type+"("+push_value+"px)",
857					"-o-transform": "translate"+push_type+"("+push_value+"px)",
858					"-ms-transform": "translate"+push_type+"("+push_value+"px)",
859					"transform": "translate"+push_type+"("+push_value+"px)",
860				})
861			}
862			
863		}
864		else
865		{
866			$('.leo-fly-cart-slidebar .leo-fly-cart-icon').trigger('click');
867		}
868	}
869}
870
871//DONGND:: event for dropdown cart
872function activeDropdownEvent()
873{
874	//DONGND:: active scroll bar
875	$('.leo-dropdown-list-item').each(function(){
876		// console.log($(this).parents('.leo-fly-cart-slidebar'));
877		var check_number_cartitem = 3;
878		if (typeof number_cartitem_display != 'undefined')
879		{
880			check_number_cartitem = number_cartitem_display;
881		}
882		//DONGND:: scroll bar for dropdown
883		// checkFlyCartScrollBarDropDown($(this));
884		// if (!$(this).parents('.leo-fly-cart-slidebar').length && $(this).find('.leo-dropdown-cart-item').length > check_number_cartitem)
885		// {
886		if (!$(this).parents('.leo-fly-cart-slidebar').length)
887		{			
888			// if (typeof height_cart_item != 'undefined')
889			// {
890				// $(this).addClass('active-scrollbar').css({'max-height': height_cart_item*number_cartitem_display});
891			// }
892			// else
893			// {
894				// $(this).addClass('active-scrollbar').css({'max-height': $(this).find('.leo-dropdown-cart-item').outerHeight()*check_number_cartitem});
895			// }
896			
897			
898			// $(this).mCustomScrollbar({
899				// theme:"dark",
900				// scrollInertia: 200,
901				// callbacks:{
902					// onInit:function(){
903					  
904					// }
905				// },
906				// keyboard:{
907					// enable:true,						
908				// }
909			// });
910			
911			// $(this).mCustomScrollbar('update');
912			// console.log('test');
913			checkFlyCartScrollBarDropDown($(this));
914			// if ($scrollToElement != false)
915			// {
916				// $(this).mCustomScrollbar('scrollTo',$(this).find('.mCSB_container').find('.leo-dropdown-cart-item:eq('+$scrollToElement+')'),{scrollInertia:0});
917			// }
918			
919			// $(this).scrollbar();
920		}
921		
922		//DONGND:: scroll bar for slidebar
923		if ($(this).parents('.leo-fly-cart-slidebar').length)
924		{
925			checkFlyCartScrollBar($(this));
926			
927		}
928	})
929	
930	//DONGND:: highlight dropdown cart item
931	$('.leo-remove-from-cart, .view-leo-dropdown-additional').hover(function(){
932		
933		if ($(this).hasClass('leo-remove-from-cart'))
934		{
935			$(this).parents('.leo-dropdown-cart-item').addClass('high-light');
936		}
937		
938	},function(){
939		if ($(this).hasClass('leo-remove-from-cart'))
940		{
941			$(this).parents('.leo-dropdown-cart-item').removeClass('high-light');
942		}
943	})
944	
945	//DONGND:: show additional info
946	$('.view-leo-dropdown-additional').click(function(){
947		var parent_obj = $(this).parents('.leo-dropdown-cart-item');
948		
949		var wrapper_parent_obj = $(this).parents('.leo-dropdown-list-item');
950			
951		if (!$(this).hasClass('show'))
952		{
953			if (wrapper_parent_obj.find('.leo-dropdown-cart-item.show-additional'))
954			{
955				wrapper_parent_obj.find('.leo-dropdown-cart-item.show-additional').removeClass('show-additional');
956				wrapper_parent_obj.find('.view-leo-dropdown-additional.show').removeClass('show');
957				wrapper_parent_obj.find('.fake-element').fadeOut('200',function(){
958					$(this).remove();
959				});
960				wrapper_parent_obj.mCustomScrollbar("update");
961				
962				setTimeout(function() {
963					wrapper_parent_obj.parents('.leo-dropdown-list-item-warpper').mCustomScrollbar("update");				
964				},500);
965			}
966			$(this).addClass('show');
967			
968			if (wrapper_parent_obj.hasClass('active-scrollbar') && parent_obj.hasClass('last'))			
969			{				
970				// if ($(this).parents('.leo-fly-cart-slidebar.push_slidebar_top').length || $(this).parents('.leo-fly-cart-slidebar.
970slidebar_top').length || $(this).parents('.leo-fly-cart-slidebar.push_slidebar_bottom').length || $(this).parents('.leo-fly-cart-slidebar.slidebar_bottom').length)
971				// {				
972					// var width_clone_obj = parent_obj.width();
973					// wrapper_parent_obj.find('.leo-dropdown-list-item').append('<li class="fake-element" style="width:'+width_clone_obj+'px"></li>');
974					// wrapper_parent_obj.mCustomScrollbar("update");
975					// wrapper_parent_obj.mCustomScrollbar("scrollTo","100%",{
976						// callbacks: parent_obj.addClass('show-additional')
977					// });
978				// }
979				// else
980				// {
981					var height_clone_obj = parent_obj.find('.leo-dropdown-additional').height();
982					wrapper_parent_obj.find('.mCSB_container').append('<p class="fake-element" style="height:'+height_clone_obj+'px"></p>');
983					wrapper_parent_obj.mCustomScrollbar("update");
984					wrapper_parent_obj.mCustomScrollbar("scrollTo","bottom",{
985						callbacks: parent_obj.addClass('show-additional')
986					});
987				// }
988	
989			} else if(wrapper_parent_obj.parents('.leo-dropdown-list-item-warpper').hasClass('active-scrollbar') && parent_obj.hasClass('last') && parent_obj.hasClass('first'))
990			{
991				wrapper_parent_obj.append('<li class="leo-dropdown-cart-item clearfix has-view-additional fake-element" style="width:'+width_cart_item+'px; height:'+height_cart_item+'px"></p>');
992				wrapper_parent_obj.parents('.leo-dropdown-list-item-warpper').mCustomScrollbar("update");
993				wrapper_parent_obj.parents('.leo-dropdown-list-item-warpper').mCustomScrollbar("scrollTo","last",{
994					callbacks: parent_obj.addClass('show-additional')
995				});
996			}
997			else
998			{
999				parent_obj.addClass('show-additional');
1000			}
1001			//DONGND:: disable scrollbar with fly cart slide bar top
1002			// if ($(this).parents('.leo-fly-cart-slidebar.push_slidebar_top.active-scroll').length || $(this).parents('.leo-fly-cart-slidebar.slidebar_top.active-scroll').length)
1003			// {
1004				// $(this).parents('.leo-fly-cart-slidebar').find('.leo-dropdown-list-item-warpper.active-scrollbar').mCustomScrollbar("destroy");
1005				// $(this).parents('.leo-fly-cart-slidebar').addClass('disable-scrollbar');
1006			// }
1007		}
1008		else
1009		{
1010			parent_obj.removeClass('show-additional');
1011			if (wrapper_parent_obj.hasClass('active-scrollbar') && parent_obj.hasClass('last'))			
1012			{			
1013				wrapper_parent_obj.find('.fake-element').fadeOut('200',function(){
1014					$(this).remove();
1015				});
1016				wrapper_parent_obj.mCustomScrollbar("update");
1017				
1018			}
1019			else if(wrapper_parent_obj.parents('.leo-dropdown-list-item-warpper').hasClass('active-scrollbar') && parent_obj.hasClass('last') && parent_obj.hasClass('first'))
1020			{
1021				wrapper_parent_obj.find('.fake-element').fadeOut('200',function(){
1022					$(this).remove();
1023				});
1024				parent_obj.removeClass('show-additional');
1025				$(this).removeClass('show');
1026				// wrapper_parent_obj.find('.fake-element').remove();
1027				setTimeout(function() {
1028					wrapper_parent_obj.parents('.leo-dropdown-list-item-warpper').mCustomScrollbar("update");				
1029				},500);
1030				
1031			}
1032			parent_obj.removeClass('show-additional');
1033			$(this).removeClass('show');
1034			//DONGND:: disable scrollbar with fly cart slide bar top
1035			// if ($(this).parents('.leo-fly-cart-slidebar.push_slidebar_top.active-scroll').length || $(this).parents('.leo-fly-cart-slidebar.slidebar_top.active-scroll').length)
1036			// {
1037				// if ($(this).parents('.leo-fly-cart-slidebar').hasClass('disable-scrollbar'))
1038				// {
1039					// $(this).parents('.leo-fly-cart-slidebar').removeClass('disable-scrollbar');
1040					// $(this).parents('.leo-fly-cart-slidebar').find('.leo-dropdown-list-item-warpper.active-scrollbar').mCustomScrollbar("update");
1041				// }
1042				
1043			// }
1044		}
1045		return false;
1046	})
1047	
1048	//DONGND:: remove dropdown cart item
1049	$('.leo-remove-from-cart').click(function(){
1050		var id_product = $(this).data('id-product');
1051		var id_product_attribute = $(this).data('id-product-attribute');
1052		var id_customization = $(this).data('id-customization');
1053		 
1054		var parent_obj = $(this).parents('.leo-dropdown-cart-item');
1055		
1056		parent_obj.addClass('deleting');
1057		if (parent_obj.hasClass('show-additional'))
1058		{
1059			parent_obj.find('.view-leo-dropdown-additional').trigger('click');
1060		}
1061		parent_obj.find('.leo-dropdown-overlay').show();
1062		parent_obj.find('.leo-dropdown-cssload-speeding-wheel').show();
1063		if ($('.remove-from-cart').length)
1064		{
1065			//DONGND:: do not close dropdown-dropup when delete at page cart
1066			$('.leo-dropdown-cart.dropdown').addClass('disable-close');
1067			$('.leo-dropdown-cart.dropup').addClass('disable-close');
1068			//DONGND:: page cart
1069			// console.log($('.remove-from-cart[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]'));
1070			$('.remove-from-cart[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]').trigger('click');
1071		}
1072		else
1073		{
1074			var link_url = $(this).data('link-url');
1075			var refresh_url = $('.leo-blockcart.cart-preview').data('refresh-url');
1076			// var scrollToElement = parent_obj.index()-1;
1077			
1078			$.ajax({
1079				type: 'POST',
1080				headers: {"cache-control": "no-cache"},
1081				url: link_url,
1082				async: true,
1083				cache: false,
1084				data: {
1085					"ajax": 1,
1086					"action": "update",					
1087				},					
1088				success: function (result)
1089				{
1090					var obj = $.parseJSON(result);
1091					parent_obj.find('.leo-dropdown-overlay').hide();
1092					parent_obj.find('.leo-dropdown-cssload-speeding-wheel').hide();
1093					
1094					// console.log(obj);
1095					if(obj.success)
1096					{	
1097						parent_obj.fadeOut(function(){
1098							// if (parent_obj.hasClass('last'))
1099							// {
1100								// parent_obj.prev().addClass('last');
1101							// }
1102							// if (parent_obj.hasClass('first'))
1103							// {
1104								// parent_obj.next().addClass('first');
1105							// }
1106							parent_obj.remove();
1107							$('.leo-remove-from-cart[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]').parents('.leo-dropdown-cart-item').remove();
1108							updateClassCartItem();						
1109							
1110						});
1111						//DONGND:: show notification
1112						showLeoNotification('success','delete', false);
1113						
1114						//DONGND:: refresh cart
1115						$.ajax({
1116							type: 'POST',
1117							headers: {"cache-control": "no-cache"},
1118							url: refresh_url,
1119							async: true,
1120							cache: false,										
1121							success: function (resp)
1122							{
1123								$('.leo-blockcart').replaceWith($(resp.preview).find('.blockcart'));								
1124								$(".blockcart.cart-preview").addClass('leo-blockcart');	
1125								if (typeof show_popup != 'undefined' && !show_popup)
1126								{
1127									$(".blockcart.cart-preview").removeClass('blockcart')
1128								}
1129								createModalAndDropdown(1, 1);
1130								
1131							},
1132							error: function (XMLHttpRequest, textStatus, errorThrown) {
1133								console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1134							}
1135						});
1136						
1137					}
1138					else
1139					{
1140						//DONGND:: show notification
1141						showLeoNotification('error','delete', false);
1142					}
1143					
1144				},
1145				error: function (XMLHttpRequest, textStatus, errorThrown) {
1146					console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1147				}
1148			});
1149		}
1150		
1151		return false;
1152	})
1153	
1154	//DONGND:: change quantity product dropdown with input
1155	// $("body").on('focusout','.leo-input-product-quantity',function (event) {
1156		// updateQuantityProductDropDown(event.currentTarget);
1157		
1158	// });
1159	// $("body").on('keyup','.leo-input-product-quantity',function (event) {
1160		// if (event.keyCode == 13) {
1161			// updateQuantityProductDropDown(event.currentTarget);
1162		// }
1163	// });
1164	$('.leo-input-product-quantity').focusout(function(){
1165		updateQuantityProductDropDown($(this));
1166	})
1167	$('.leo-input-product-quantity').keyup(function(event){
1168		if (event.keyCode == 13) {
1169			updateQuantityProductDropDown($(this));
1170		}
1171	})
1172	
1173	// var update_quantity = false;
1174	var timer;
1175	var flag = false;
1176	
1177	//DONGND:: change quantity product dropdown with button up-down
1178	$('.leo-bt-product-quantity-down, .leo-bt-product-quantity-up').on('touchstart click', function(){
1179		if(flag == true)
1180		{
1181			flag = false;
1182			clearTimeout(timer);
1183		}
1184		flag = true;
1185		// console.log('test');
1186		var action = 'up';
1187		var input_target = $(this).parents('.leo-dropdown-cart-item').find('.leo-input-product-quantity');
1188		var input_quantity = parseInt(input_target.val());
1189		var quantity_update;
1190		if ($(this).hasClass('leo-bt-product-quantity-down'))
1191		{
1192			action = 'down';
1193		}
1194		
1195		if (action == 'up')
1196		{
1197			quantity_update = input_quantity+1;
1198		}
1199		if (action == 'down')
1200		{
1201			quantity_update = input_quantity-1;
1202		}
1203		input_target.val(quantity_update);
1204		// updateQuantityProductDropDown(input_target);
1205		// console.log(update_quantity);
1206		
1207		timer = setTimeout(
1208			function() 
1209			{
1210				flag = false;
1211				// update_quantity = true;
1212				// if (update_quantity)
1213				// {
1214					// console.log(update_quantity);
1215					updateQuantityProductDropDown(input_target);
1216				// }
1217			}, 800);
1218		
1219		return false;
1220	})
1221}
1222
1223function updateQuantityProductDropDown($element)
1224{
1225	// var $this = $(event.currentTarget);
1226	// if (obj instanceof jQuery)
1227	var $this = $element;
1228	var product_quantity = $this.data('product-quantity');
1229	var min_quantity = $this.data('min-quantity');
1230	var max_quantity = $this.data('quantity-available');
1231	var input_quantity = $this.val();
1232	// console.log(product_quantity);
1233	// console.log(input_quantity);
1234	
1235	// if (input_quantity != parseInt(input_quantity) || input_quantity < 0 || isNaN(input_quantity)) {
1236		// console.log('test');
1237		// showLeoNotification('normal','check');
1238		// $this.val(product_quantity);
1239		// return;
1240    // }
1241	
1242	//DONGND:: validate input
1243	if(Math.floor(input_quantity) == input_quantity && $.isNumeric(input_quantity) && input_quantity > 0)
1244	{
1245		// return true;
1246	}
1247	else
1248	{
1249		showLeoNotification('normal', 'check', false);
1250		$this.val(product_quantity);
1251		return;
1252	}
1253	
1254	//DONGND:: check min quantity
1255	if (parseInt(input_quantity) < parseInt(min_quantity))
1256	{
1257		showLeoNotification('warning', 'min', min_quantity);
1258		$this.val(product_quantity);
1259		return false;
1260	}
1261	
1262	//DONGND:: do not change
1263    var qty = parseInt(input_quantity) - parseInt(product_quantity);
1264	// console.log(qty);
1265	// console.log(product_quantity);
1266	
1267    if (qty == 0) {
1268      return;
1269    }
1270	
1271	//DONGND:: check stock
1272	// if (parseInt(input_quantity) > parseInt(max_quantity))
1273	// {
1274		// showLeoNotification('warning', 'max', false);
1275		// $this.val(product_quantity);
1276		// return false;
1277	// }
1278	var id_product = $this.data('id-product');
1279	var id_product_attribute = $this.data('id-product-attribute');
1280	var id_customization = $this.data('id-customization');
1281	
1282	$this.removeData('check-outstock');
1283	
1284	var check_product_outstock = true;
1285	var parent_obj = $this.parents('.leo-dropdown-cart-item');
1286				
1287	parent_obj.addClass('updating');
1288	
1289	parent_obj.find('.leo-dropdown-overlay').show();
1290	parent_obj.find('.leo-dropdown-cssload-speeding-wheel').show();
1291	// $.when(checkProductOutStock(id_product, id_product_attribute, id_customization, input_quantity, $this, false)).done(function(data){
1292		checkProductOutStock(id_product, id_product_attribute, id_customization, input_quantity, $this, false);
1293		// console.log($element);
1294		// console.log($this.data('check-outstock'));
1295		check_data_outstock = setInterval(function(){					
1296			if (typeof $element.data('check-outstock') != 'undefined')
1297			{							
1298				clearInterval(check_data_outstock);
1299				if (!$this.data('check-outstock'))
1300				{
1301					// console.log('bbbb');
1302					showLeoNotification('warning', 'max', false);
1303					$this.val(product_quantity);
1304					// console.log(event);
1305					// return false;
1306					// return;
1307					// break;
1308					// event.preventDefault();
1309					// event.stopPropagation();
1310					check_product_outstock = false;
1311					parent_obj.find('.leo-dropdown-overlay').hide();
1312					parent_obj.find('.leo-dropdown-cssload-speeding-wheel').hide();
1313					parent_obj.removeClass('updating');
1314				}
1315				if (!check_product_outstock)
1316				{
1317					return false;
1318				}
1319				
1320				if ($('.js-cart-line-product-quantity').length)
1321				{
1322					//DONGND:: page cart
1323					var e = $.Event("keyup");
1324					e.keyCode = 13; // # Some key code value
1325					// console.log($('.remove-from-cart[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]'));
1326					$('.remove-from-cart[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]').parents('.cart-item').find('.js-cart-line-product-quantity').val(input_quantity).trigger(e);	
1327				}
1328				else
1329				{				
1330					var link_url = $this.data('update-url');
1331					var refresh_url = $('.leo-blockcart.cart-preview').data('refresh-url');
1332					var op = '';
1333					if (qty > 0)
1334					{
1335						op = 'up';
1336					}
1337					else
1338					{
1339						op = 'down';
1340					}
1341					// var scrollToElement = parent_obj.index()-1;
1342					
1343					$.ajax({
1344						type: 'POST',
1345						headers: {"cache-control": "no-cache"},
1346						url: link_url,
1347						async: true,
1348						cache: false,
1349						data: {
1350							"ajax": 1,
1351							"action": "update",	
1352							"qty": Math.abs(qty),
1353							"op": op,			
1354						},					
1355						success: function (result)
1356						{
1357							var obj = $.parseJSON(result);
1358							parent_obj.find('.leo-dropdown-overlay').hide();
1359							parent_obj.find('.leo-dropdown-cssload-speeding-wheel').hide();
1360							parent_obj.removeClass('updating');
1361							
1362							// console.log(obj);
1363							if(obj.success)
1364							{							
1365								// $this.data('product-quantity', input_quantity);
1366								$('.leo-input-product-quantity[data-id-product="'+id_product+'"][data-id-product-attribute="'+id_product_attribute+'"][data-id-customization="'+id_customization+'"]').val(input_quantity).data('product-quantity', input_quantity);				
1367								//DONGND:: show notification
1368								showLeoNotification('success','update', false);
1369								
1370								//DONGND:: refresh cart
1371								$.ajax({
1372									type: 'POST',
1373									headers: {"cache-control": "no-cache"},
1374									url: refresh_url,
1375									async: true,
1376									cache: false,										
1377									success: function (resp)
1378									{
1379										$('.leo-blockcart').replaceWith($(resp.preview).find('.blockcart'));
1380										$(".blockcart.cart-preview").addClass('leo-blockcart');
1381										if (typeof show_popup != 'undefined' && !show_popup)
1382										{
1383											$(".blockcart.cart-preview").removeClass('blockcart')
1384										}
1385										createModalAndDropdown(1, 1);
1386										
1387									},
1388									error: function (XMLHttpRequest, textStatus, errorThrown) {
1389										console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1390									}
1391								});
1392								
1393							}
1394							else
1395							{
1396								//DONGND:: show notification
1397								showLeoNotification('error','update', false);
1398							}
1399							
1400						},
1401						error: function (XMLHttpRequest, textStatus, errorThrown) {
1402							console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1403						}
1404					});
1405				}
1406			}
1407		}, 10);
1408		
1409	// });
1410	
1411}
1412
1413function createModalAndDropdown($only_dropdown, $only_total)
1414{
1415
1416	//DONGD:: add loading
1417	// $('.blockcart.cart-preview .header').append('<span class="leo-dropdown-cssload-speeding-wheel"></span>');
1418	// $('.blockcart.cart-preview .leo-dropdown-cssload-speeding-wheel').css({'display':'inline-block'});
1419	// console.log(enable_dropdown_defaultcart);
1420	if (typeof enable_dropdown_defaultcart != 'undefined')
1421	{
1422		// console.log(enable_dropdown_defaultcart);
1423		if (enable_dropdown_defaultcart)
1424		{
1425			if ($('.blockcart.cart-preview').length)
1426			{
1427				$('.blockcart.cart-preview').addClass('leo-blockcart show-leo-loading').append('<div class="cssload-piano"><div class="cssload-rect1"></div><div class="cssload-rect2"></div><div class="cssload-rect3"></div></div>');
1428			}
1429			else
1430			{
1431				$('.leo-blockcart.cart-preview').addClass('show-leo-loading').append('<div class="cssload-piano"><div class="cssload-rect1"></div><div class="cssload-rect2"></div><div class="cssload-rect3"></div></div>');
1432			}
1433			
1434			$('.leo-blockcart.cart-preview .cssload-piano').show();
1435			// $('.blockcart.cart-preview a').attr('href', 'javascript:void(0)');
1436			// $('.blockcart.cart-preview').addClass('dropdown-toggle').data('toggle','dropdown').attr('aria-haspopup','true').attr('aria-expanded','false').attr('id','dropdownCartNormal');
1437			// $('.blockcart.cart-preview').parent().addClass('dropdown');
1438			$('.leo-blockcart.cart-preview.show-leo-loading').data('type',type_dropdown_defaultcart);
1439			// if (typeof enable_dropdown_defaultcart != 'undefined')
1440			// {
1441				// $('.leo-blockcart.cart-preview.show-leo-loading').data('pusheffect', enable_pusheffect_defaultcart);
1442			// }
1443			//DONGND:: action dropdown	
1444			if (typeof type_dropdown_defaultcart != 'undefined')
1445			{
1446				if (type_dropdown_defaultcart == 'dropdown' || type_dropdown_defaultcart == 'dropup')
1447				{
1448					$('.leo-blockcart.cart-preview.show-leo-loading').click(function(){
1449						// console.log('test');
1450						showDropDownCart($(this), 'defaultcart');
1451						return false;
1452					})
1453				}
1454				if (type_dropdown_defaultcart == 'slidebar_left' || type_dropdown_defaultcart == 'slidebar_right' || type_dropdown_defaultcart == 'slidebar_top' || type_dropdown_defaultcart == 'slidebar_bottom')
1455				{
1456					$('.leo-blockcart.cart-preview.show-leo-loading').click(function(){
1457						showSlideBarCart($(this));
1458						return false;
1459					})
1460				}
1461			}
1462		}
1463		else
1464		{
1465			// console.log('test');
1466			$('.blockcart.cart-preview').addClass('leo-blockcart');
1467		}
1468	}
1469	
1470	//DONGND:: loading fly cart
1471	if ($('.leo-fly-cart .leo-fly-cart-cssload-loader').length)
1472	{
1473		$('.leo-fly-cart .leo-fly-cart-cssload-loader').show();
1474	}
1475	$.ajax({
1476		type: 'POST',
1477		headers: {"cache-control": "no-cache"},
1478		url: prestashop.urls.base_url + 'modules/leofeature/psajax.php?rand=' + new Date().getTime(),
1479		async: true,
1480		cache: false,
1481		data: {
1482			"action": "render-modal",
1483			"only_dropdown": $only_dropdown,
1484			"only_total": $only_total,
1485			"token": leo_token
1486		},
1487		success: function (result)
1488		{
1489			if (result != '')
1490			{
1491				// $('.blockcart.cart-preview .leo-dropdown-cssload-speeding-wheel').hide();
1492				$('.leo-blockcart.cart-preview .cssload-piano').hide();
1493				if ($('.leo-fly-cart .leo-fly-cart-cssload-loader').length)
1494				{
1495                                    setTimeout(function(){
1496                                        $('.leo-fly-cart .leo-fly-cart-cssload-loader').hide();
1497                                    }, 2000); 
1498				}
1499				if(result.dropdown != '')
1500				{
1501					if ($('.leo-fly-cart-slidebar.disable').length)
1502					{
1503						$('.leo-fly-cart-slidebar').removeClass('disable');
1504					}
1505					if (!$('.leo-dropdown-cart').length)
1506					{
1507						if (typeof type_dropdown_defaultcart != 'undefined' && (type_dropdown_defaultcart == 'dropdown' || type_dropdown_defaultcart == 'dropup'))
1508						{
1509							$('.leo-blockcart.cart-preview.show-leo-loading').after('<div class="leo-dropdown-cart defaultcart '+type_dropdown_defaultcart+'"></div>');
1510						}				
1511						
1512						//DONGND:: add dropdown to flycart
1513						if ($('.leo-fly-cart.enable-dropdown').length)
1514						{
1515							$('.leo-fly-cart.enable-dropdown').append('<div class="leo-dropdown-cart flycart '+$('.leo-fly-cart.enable-dropdown').data('type')+'"></div>');
1516						}
1517						
1518						//DONGND:: add dropdown to flycart slide bar
1519						if ($('.leo-fly-cart-slidebar').length)
1520						{
1521							
1522							$('.leo-fly-cart-slidebar').append('<div class="leo-dropdown-cart"></div>');
1523						}
1524					}
1525					else
1526					{
1527						$('.leo-dropdown-cart').addClass('update');
1528					}
1529					
1530					if ($('.leo-dropdown-cart-content').length)
1531					{
1532						// console.log('test');
1533						// $('.leo-dropdown-cart-content').remove();
1534						// $('.leo-dropdown-cart-content').replaceWith(result.dropdown);
1535						
1536						if ($only_total == 1)
1537						{
1538							$('.leo-dropdown-cart-content .leo-dropdown-total').replaceWith(result.dropdown);
1539							var check_number_cartitem = 3;
1540							if (typeof number_cartitem_display != 'undefined')
1541							{
1542								check_number_cartitem = number_cartitem_display;
1543							}
1544							//DONGND:: turn off scroll bar
1545							$('.leo-dropdown-list-item').each(function(){
1546								// if (!$(this).parents('.leo-fly-cart-slidebar').length && $(this).find('.leo-dropdown-cart-item').length <= check_number_cartitem && $(this).hasClass('active-scrollbar'))
1547								// {
1548								if (!$(this).parents('.leo-fly-cart-slidebar').length)
1549								{
1550									// $(this).removeClass("active-scrollbar").css({'max-height': 'none'});
1551									// $(this).mCustomScrollbar("destroy");
1552									// $(this).mCustomScrollbar("disable",true);
1553									checkFlyCartScrollBarDropDown($(this));
1554								}
1555								//DONGND:: scroll bar for slidebar
1556								if ($(this).parents('.leo-fly-cart-slidebar').length && $(this).parents('.leo-fly-cart-slidebar').find('.active-scrollbar'))
1557								{
1558									// console.log('test');
1559									checkFlyCartScrollBar($(this));
1560								}
1561							})						
1562						}
1563						else
1564						{
1565							$('.leo-dropdown-cart-content').replaceWith(result.dropdown);
1566							activeDropdownEvent();
1567						}
1568						
1569					}
1570					else
1571					{
1572						// console.log('test1');
1573						$('.leo-dropdown-cart').append(result.dropdown);
1574						activeDropdownEvent();
1575					}
1576					
1577					
1578				}
1579				else
1580				{
1581					//DONGND:: clear cart
1582					if ($('.leo-dropdown-cart').length)
1583					{
1584						$('.leo-dropdown-cart').remove();
1585					}
1586					$('.leo-fly-cart-slidebar').addClass('disable');
1587					if ($('.leo-fly-cart-slidebar.active').length)
1588					{
1589						$('.leo-fly-cart-slidebar.active').find('.leo-fly-cart-icon').trigger('click');
1590					}
1591				}
1592				
1593				//DONGND:: create modal popup
1594				if(result.modal != '')
1595				{						
1596					$('body').append(result.modal);
1597					activeEventModal();
1598				}
1599				//DONGND:: create notification
1600				if(result.notification != '')
1601				{						
1602					$('body').append(result.notification);								
1603				}
1604				
1605				//DONGND:: update cart total for fly cart
1606				if ($('.leo-fly-cart-total').length)
1607				{
1608					if ($('.leo-dropdown-total').length)
1609					{
1610						$('.leo-fly-cart-total').text($('.leo-dropdown-total').data('cart-total'));
1611					}
1612					else
1613					{
1614						$('.leo-fly-cart-total').text("0");
1615					}
1616						
1617				}
1618			}
1619			else
1620			{
1621				alert(add_cart_error);
1622			}
1623						
1624		},
1625		error: function (XMLHttpRequest, textStatus, errorThrown) {
1626			console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1627			// alert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1628		}
1629	});
1630}
1631
1632//DONGND:: event for notification
1633function activeEventNotification()
1634{
1635	$(".leo-notification .notification").click(function(){
1636		$(this).removeClass('show').addClass("closed").parent().addClass('disable');
1637		// var obj = $(this);
1638		// setTimeout(
1639		  // function() 
1640		  // {
1641			// obj.parent().addClass('disable');
1642		  // }, 700);
1643		// if (!$(".leo-notification .notification.show").length)
1644		// {
1645			// setTimeout(
1646			  // function() 
1647			  // {
1648				// $(".leo-notification").removeClass('active');
1649			  // }, 700);
1650			
1651		// }
1652	})
1653}
1654
1655function showLeoNotification($status, $action, $special_parameter)
1656{
1657	if (!$('.leo-notification').hasClass('active'))
1658	{
1659		$('.leo-notification').addClass('active');
1660	}
1661	var clone_obj = '';
1662	
1663	clone_obj = $('.leo-temp-'+$status+'>div').clone();
1664	clone_obj.find('.noti-'+$action).addClass('active');
1665	if ($special_parameter && $special_parameter != '')
1666	{
1667		clone_obj.find('.noti-'+$action).find('.noti-special').text($special_parameter);
1668	}
1669	// clone_obj.height(clone_obj.find('.notification').height());
1670	// clone_obj.find('.notification').addClass('show');
1671	$('.leo-notification').append(clone_obj);
1672	setTimeout(
1673		  function() 
1674		  {
1675			// $('.leo-notification .notification').last().addClass('show');
1676			clone_obj.find('.notification').addClass('show');
1677			// var height_wrapper = $('.leo-notification .notification').last().height();
1678			// $('.leo-notification .notification-wrapper').last().height(height_wrapper);
1679		  }, 100);
1680	
1681	activeEventNotification();
1682	setTimeout(
1683		  function() 
1684		  {
1685			// clone_obj.find('.notification').trigger('click');
1686			clone_obj.find('.notification').removeClass('show').addClass("closed").parent().addClass('disable');
1687		  }, 5000);
1688}
1689
1690//DONGND:: check product out stock
1691function checkProductOutStock($id_product, $id_product_attribute, $id_customization, $quantity, $element, $check_product_in_cart)
1692{
1693	// console.log($element);
1694	// return $.ajax({
1695	$.ajax({
1696		type: 'POST',
1697		headers: {"cache-control": "no-cache"},
1698		url: prestashop.urls.base_url + 'modules/leofeature/psajax.php?rand=' + new Date().getTime(),
1699		async: true,
1700		cache: false,
1701		data: {
1702			"action": "check-product-outstock",
1703			"id_product": $id_product,
1704			"id_product_attribute": $id_product_attribute,
1705			"id_customization": $id_customization,
1706			"quantity": $quantity,
1707			"check_product_in_cart": $check_product_in_cart,
1708			"token": leo_token
1709		},
1710		success: function (result)
1711		{
1712			if (result != '')
1713			{
1714				var obj = $.parseJSON(result);
1715				// console.log('bbb');
1716				// console.log(obj.success);
1717				
1718				$element.data('check-outstock', obj.success)
1719				// console.log($element.data('check-outstock'));
1720			}
1721			else
1722			{
1723				alert(add_cart_error);
1724			}
1725			
1726		},
1727		error: function (XMLHttpRequest, textStatus, errorThrown) {
1728			console.log("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1729			// alert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
1730		}
1731	});
1732}
1733
1734//DONGND:: update class first last of cart item
1735function updateClassCartItem()
1736{
1737	$('.leo-dropdown-list-item').each(function(){
1738		$(this).find('.leo-dropdown-cart-item').first().addClass('first');
1739		$(this).find('.leo-dropdown-cart-item').last().addClass('last');
1740	})
1741}
1742
1743//DONGND:: create fly cart effect
1744function flyCartEffect($element)
1745{
1746	if ($element.hasClass('leo-bt-cart'))
1747	{
1748		var parent_e = $element.parents('.product-miniature');
1749		var product_img = parent_e.find('.product-thumbnail').find("img").eq(0);
1750	}
1751	else
1752	{
1753		var product_img = '';
1754		if ($('.quickview .product-cover').length)
1755		{
1756			//DONGND:: quickview in produc page
1757			product_img = $('.quickview .product-cover').find("img").eq(0);
1758		}
1759		else
1760		{
1761			//DONGND:: product page
1762			product_img = $('.product-cover').find("img").eq(0);
1763		}	
1764	}
1765	if (typeof product_img != 'undefined' && product_img.length)
1766	{		
1767		var obj_element = '';
1768		if ($('.leo-fly-cart-slidebar.active .leo-fly-cart-icon').length)
1769		{
1770			obj_element = $('.leo-fly-cart-slidebar.active .leo-fly-cart-icon');
1771		}
1772		else if ($('.leo-fly-cart.solo .leo-fly-cart-icon').length)
1773		{
1774			obj_element = $('.leo-fly-cart.solo .leo-fly-cart-icon');
1775		}
1776		else if ($('.leo-blockcart.cart-preview').length)
1777		{
1778			obj_element = $('.leo-blockcart.cart-preview');
1779		}
1780		else if ($('.blockcart.cart-preview').length)
1781		{
1782			obj_element = $('.blockcart.cart-preview');
1783		}else
1784		{
1785			return;
1786		}
1787		$('body').addClass('enable-leo-fly-cart');
1788		var divider = 4;
1789		var flyerClone = product_img.clone();
1790		
1791		var clone_offset_top = product_img.offset().top;
1792		var clone_offset_left = product_img.offset().left;
1793		//DONGND:: update for body boxed
1794		if ($('body').offset().left != 0)
1795		{
1796			clone_offset_left = clone_offset_left - $('body').offset().left;
1797		}
1798		flyerClone.css({position: 'absolute', top: clone_offset_top + "px", left: clone_offset_left + "px", opacity: 1, 'z-index': 1000, width: product_img.width(), height: product_img.height()});
1799		
1800		$('body').append(flyerClone);
1801		var gotoX = obj_element.offset().left + (obj_element.width() / 2) - (product_img.width()/divider)/2;
1802		//DONGND:: update for body boxed
1803		if ($('body').offset().left != 0)
1804		{
1805			gotoX = gotoX - $('body').offset().left;
1806		}
1807		if ($('html').hasClass('safari-win') && $('.leo-fly-cart-slidebar.active .leo-fly-cart-icon').length)
1808		{
1809			//DONGND:: update position of fly cart icon on slidebar cart for safari win
1810			var gotoY = $(window).scrollTop()+obj_element.offset().top + (obj_element.height() / 2) - (product_img.height()/divider)/2;
1811		}
1812		else
1813		{
1814			var gotoY = obj_element.offset().top + (obj_element.height() / 2) - (product_img.height()/divider)/2;
1815		}
1816		 
1817		flyerClone.animate({
1818			opacity: 0.4,
1819			left: gotoX,
1820			top: gotoY,
1821			width: product_img.width()/divider,
1822			height: product_img.height()/divider
1823		}, 1000,
1824		function () {		
1825			flyerClone.fadeOut('fast', function () {
1826				flyerClone.remove();
1827				$('body').removeClass('enable-leo-fly-cart');
1828			});
1829			if (typeof type_flycart_effect != 'undefined')
1830			{
1831				if (type_flycart_effect == 'shake')
1832				{
1833					obj_element.parents('.leo-fly-cart').find('.leo-fly-cart-total').css({'opacity':0});
1834					setTimeout(function () {
1835						obj_element.effect("shake", {
1836							times: 2
1837						}, 200, function(){
1838							obj_element.parents('.leo-fly-cart').find('.leo-fly-cart-total').css({'opacity':1});
1839						});
1840					}, 500);
1841				}
1842				if (type_flycart_effect == 'fade')
1843				{
1844					obj_element.fadeOut('fast', function () {
1845						obj_element.fadeIn('fast', function () {
1846						});
1847					});
1848				}
1849			}
1850			// obj_element.fadeOut('fast', function () {
1851				// obj_element.fadeIn('fast', function () {
1852					// flyerClone.fadeOut('fast', function () {
1853						// flyerClone.remove();
1854					// });
1855				// });
1856			// });
1857		});
1858		
1859		// var divider = 1;
1860		// var imgclone = product_img.clone()
1861                // .offset({
1862                // top: product_img.offset().top,
1863                // left: product_img.offset().left
1864            // })
1865                // .css({
1866                // 'opacity': '0.5',
1867                    // 'position': 'absolute',
1868                    // 'height': product_img.width()/divider,
1869                    // 'width': product_img.height()/divider,
1870                    // 'z-index': '100'
1871            // })
1872                // .appendTo($('body'))
1873                // .animate({
1874                // 'top': obj_element.offset().top + 10,
1875                    // 'left': obj_element.offset().left + 10,
1876                    // 'width': product_img.width()/divider/2,
1877                    // 'height': product_img.height()/divider/2
1878            // }, 1000, 'easeInOutExpo');
1879            
1880		// setTimeout(function () {
1881			// obj_element.effect("shake", {
1882				// times: 2
1883			// }, 200);
1884		// }, 1500);
1885
1886		// imgclone.animate({
1887			// 'width': 0,
1888				// 'height': 0
1889		// }, function () {
1890			// $(this).detach()
1891		// });
1892	}
1893}
1894
1895//DONGND:: event for fly cart slidebar
1896function activeEventFlyCartSlideBar()
1897{
1898	$('.leo-fly-cart-mask, .leo-fly-cart-slidebar .leo-fly-cart-icon, .leo-fly-cart-slidebar .leo-fly-cart-icon-wrapper, .leo-fly-cart-slidebar .leo-fly-cart').click(function(){
1899		// console.log('test');
1900		$('.leo-fly-cart-mask.active').removeClass('active');
1901		$('.leo-fly-cart-icon.active-slidebarcart').removeClass('active-slidebarcart');
1902		$('.leo-blockcart.cart-preview.active-slidebarcart').removeClass('active-slidebarcart');
1903		$('body.leoflycart-active-push main').css({
1904			"-moz-transform": "translateX(0px)",
1905			"-webkit-transform": "translateX(0px)",
1906			"-o-transform": "translateX(0px)",
1907			"-ms-transform": "translateX(0px)",
1908			"transform": "translateX(0px)",
1909			"-moz-transform": "translateY(0px)",
1910			"-webkit-transform": "translateY(0px)",
1911			"-o-transform": "translateY(0px)",
1912			"-ms-transform": "translateY(0px)",
1913			"transform": "translateY(0px)",
1914		});
1915		setTimeout(function(){
1916			$('body').removeClass('leoflycart-active-slidebar leoflycart-active-push');
1917		},300);
1918			
1919		$('.leo-fly-cart-slidebar.active').removeClass('active');
1920	});
1921	
1922	$(document).keyup(function(e) {
1923		//DONGND:: press esc
1924		if (e.keyCode == 27) { 
1925			if ($('.leo-fly-cart-mask').hasClass('active'))
1926			{
1927				$('.leo-fly-cart-mask.active').trigger('click');
1928			}
1929			else if ($('.leo-fly-cart-slidebar.active .leo-fly-cart-icon').length)
1930			{
1931				$('.leo-fly-cart-slidebar .leo-fly-cart-icon').trigger('click');
1932			}
1933		}
1934	});
1935}
1936
1937//DONGND:: update scroll bar for slidebar cart
1938function checkFlyCartScrollBar($element)
1939{
1940	var object_parent = $element.parents('.leo-fly-cart-slidebar');
1941	if (object_parent.hasClass('slidebar_top') || object_parent.hasClass('slidebar_bottom'))
1942	{
1943		// console.log('test');
1944		var width_bottom = object_parent.find('.leo-dropdown-bottom').outerWidth();
1945		var window_width = $(window).width();		
1946		var element_width = '';
1947		if (typeof width_cart_item != 'undefined')
1948		{
1949			element_width = $element.find('.leo-dropdown-cart-item').length * width_cart_item;
1950		}
1951		else
1952		{
1953			element_width = $element.find('.leo-dropdown-cart-item').length * $element.find('.leo-dropdown-cart-item').outerWidth();
1954		}
1955		// console.log(width_bottom);	
1956		// console.log(element_width);
1957		// console.log(window_width);
1958		if (element_width+width_bottom > window_width)
1959		{
1960			object_parent.addClass('active-scroll');
1961			object_parent.find('.leo-dropdown-list-item-warpper').addClass('active-scrollbar');
1962			object_parent.find('.leo-dropdown-list-item-warpper').css({'width': window_width-width_bottom});
1963			object_parent.find('.leo-dropdown-list-item-warpper').mCustomScrollbar({
1964				theme:"dark",
1965				axis: "x",
1966				scrollInertia: 200,
1967				callbacks:{
1968					onInit:function(){
1969					  
1970					}
1971				},
1972				advanced:{
1973					autoExpandHorizontalScroll:true
1974				},
1975				keyboard:{
1976					enable:true,
1977					// scrollType:"stepless",
1978					// scrollAmount:"auto"
1979				}
1980			});
1981			object_parent.find('.leo-dropdown-list-item-warpper').mCustomScrollbar('update');
1982		}
1983		else
1984		{
1985			object_parent.removeClass('active-scroll');
1986			object_parent.find('.leo-dropdown-list-item-warpper').removeClass("active-scrollbar").css({'width': 'auto'});
1987			object_parent.find('.leo-dropdown-list-item-warpper').mCustomScrollbar("destroy");
1988		}
1989	}
1990	
1991	if (object_parent.hasClass('slidebar_left') || object_parent.hasClass('slidebar_right'))
1992	{
1993		var height_bottom = object_parent.find('.leo-dropdown-bottom').outerHeight();
1994		var window_height = $(window).height();		
1995		var element_height = '';
1996		if (typeof height_cart_item != 'undefined')
1997		{
1998			element_height = $element.find('.leo-dropdown-cart-item').length * height_cart_item;
1999		}
2000		else
2001		{
2002			element_height = $element.find('.leo-dropdown-cart-item').length * $element.find('.leo-dropdown-cart-item').outerHeight();
2003		}
2004		if (element_height+height_bottom > window_height)
2005		{		
2006			object_parent.addClass('active-scroll');
2007			$element.addClass('active-scrollbar');
2008			$element.css({'max-height': window_height-height_bottom});
2009			$element.mCustomScrollbar({
2010				theme:"dark",
2011				scrollInertia: 200,
2012				callbacks:{
2013					onInit:function(){
2014					  
2015					}
2016				},
2017				keyboard:{
2018					enable:true,
2019					// scrollType:"stepless",
2020					// scrollAmount:"auto"
2021				}
2022
2023			});
2024			$element.mCustomScrollbar('update');
2025		}
2026		else
2027		{		
2028			object_parent.removeClass('active-scroll');
2029			$element.removeClass("active-scrollbar").css({'max-height': 'none'});
2030			$element.mCustomScrollbar("destroy");
2031		}
2032	}
2033	
2034}
2035
2036//DONGND:: update scroll bar for dropdown/dropup
2037function checkFlyCartScrollBarDropDown($element)
2038{
2039	var object_parent = $element.parents('.leo-fly-cart.type-fixed.enable-dropdown');
2040	var type = object_parent.data('type');
2041	var height_bottom = object_parent.find('.leo-dropdown-bottom').outerHeight();
2042	
2043	var height_real = height_cart_item*$element.find('.leo-dropdown-cart-item').length;
2044	var height_icon = object_parent.find('.leo-fly-cart-icon-wrapper').outerHeight();
2045	var window_height = $(window).height();
2046	var check_number_cartitem = 3;
2047	if (typeof number_cartitem_display != 'undefined')
2048	{
2049		check_number_cartitem = number_cartitem_display;
2050	}
2051	var height_default = height_cart_item*number_cartitem_display;
2052	
2053	if (object_parent.length > 0 && type == 'dropup' && height_real+height_bottom > object_parent.position().top && height_default+height_bottom > object_parent.position().top)
2054	{
2055		// console.log('test0');
2056		$element.addClass('active-scrollbar').css({'max-height': object_parent.position().top-height_icon-height_bottom});
2057		$element.mCustomScrollbar({
2058			theme:"dark",
2059			scrollInertia: 200,
2060			callbacks:{
2061				onInit:function(){
2062				  
2063				}
2064			},
2065			keyboard:{
2066				enable:true,					
2067			}
2068
2069		});
2070		$element.mCustomScrollbar('update');
2071	}
2072	else if (object_parent.length > 0 && type == 'dropdown' && height_real+height_bottom > $(window).height()-object_parent.position().top && height_default+height_bottom > $(window).height()-object_parent.position().top)
2073	{
2074		// console.log('test1');
2075		$element.addClass('active-scrollbar').css({'max-height': $(window).height()-object_parent.position().top-height_icon-height_bottom});
2076		$element.mCustomScrollbar({
2077			theme:"dark",
2078			scrollInertia: 200,
2079			callbacks:{
2080				onInit:function(){
2081				  
2082				}
2083			},
2084			keyboard:{
2085				enable:true,					
2086			}
2087
2088		});
2089		$element.mCustomScrollbar('update');
2090	}
2091	else if ($element.find('.leo-dropdown-cart-item').length > check_number_cartitem)
2092	{
2093		// console.log('test2');
2094		// console.log($(this).find('.leo-dropdown-cart-item').innerHeight());
2095		if (typeof height_cart_item != 'undefined')
2096		{
2097			$element.addClass('active-scrollbar').css({'max-height': height_cart_item*number_cartitem_display});
2098		}
2099		else
2100		{
2101			$element.addClass('active-scrollbar').css({'max-height': $element.find('.leo-dropdown-cart-item').outerHeight()*check_number_cartitem});
2102		}
2103		
2104		$element.mCustomScrollbar({
2105			theme:"dark",
2106			scrollInertia: 200,
2107			callbacks:{
2108				onInit:function(){
2109				  
2110				}
2111			},
2112			keyboard:{
2113				enable:true,
2114				// scrollType:"stepless",
2115				// scrollAmount:"auto"					
2116			}
2117		});
2118		// $(this).mCustomScrollbar('update');
2119		
2120		// if ($scrollToElement != false)
2121		// {
2122			// $(this).mCustomScrollbar('scrollTo',$(this).find('.mCSB_container').find('.leo-dropdown-cart-item:eq('+$scrollToElement+')'),{scrollInertia:0});
2123		// }
2124		
2125		// $(this).scrollbar();
2126	}
2127	else
2128	{
2129		// console.log('test3');
2130		// object_parent.removeClass('active-scroll');
2131		$element.removeClass("active-scrollbar").css({'max-height': 'none'});
2132		$element.mCustomScrollbar("destroy");
2133	}
2134}
2135
2136//DONGND:: set class by position of fly cart icon
2137function getOffsetFlycartIcon()
2138{
2139	if ($('.leo-fly-cart.solo .leo-fly-cart-icon').length)
2140	{
2141		var offset_top = $('.leo-fly-cart.solo .leo-fly-cart-icon').offset().top;
2142		var offset_left = $('.leo-fly-cart.solo .leo-fly-cart-icon').offset().left;
2143		var window_width = $(window).width();
2144		
2145		if (offset_left <= window_width/2)
2146		{
2147			$('.leo-fly-cart.solo').removeClass('offset-right').addClass('offset-left');
2148		}
2149		else
2150		{
2151			$('.leo-fly-cart.solo').removeClass('offset-left').addClass('offse
2151t-right');
2152		}
2153		
2154		//DONGND:: update rtl
2155		if (lf_is_gen_rtl && prestashop.language.is_rtl == 1)
2156		{			
2157			if ($('.leo-fly-cart.solo').hasClass('offset-right'))
2158			{
2159				$('.leo-fly-cart.solo').removeClass('offset-right').addClass('offset-left');
2160			}
2161			else if ($('.leo-fly-cart.solo').hasClass('offset-left'))
2162			{
2163				$('.leo-fly-cart.solo').removeClass('offset-left').addClass('offset-right');
2164			}
2165		}
2166	}
2167}
2168
2169//DONGND:: show modal popup cart
2170function showModalPopupCart(modal)
2171{
2172	if ($('#blockcart-modal').length)
2173	{
2174		$('#blockcart-modal').remove();
2175	}
2176	
2177	$('body').append(modal);
2178	
2179	$('#blockcart-modal').modal('show');	
2180}
2181
2182function leoChooseAttr()
2183{
2184    $(document).on('change','.variants-product [data-product-attribute]', function(e) {
2185        var id_product = parseInt($(this).parents('.addToCartFormWrapper:eq(0)').attr('data-product-id'));
2186        var group_value = $(this).parents('.addToCartFormWrapper:eq(0)').find('.addToCartForm').serialize() ;
2187        var parent_e = $(this).parents('.product-miniature');
2188
2189        var $product_article_e = $(this).parents('.product-miniature[data-id-product=' + id_product+']');
2190        $product_article_e.find('.leo-bt-cart .leo-bt-cart-content').hide();
2191        $product_article_e.find('.leo-bt-cart .leo-loading').css({'display':'block'});
2192        $product_article_e.find('.leo-bt-cart').addClass('active');
2193			
2194        $.ajax({
2195            type: 'GET',
2196            headers: {"cache-control": "no-cache"},
2197//            url: prestashop.urls.base_url + 'modules/leofeature/psajax.php?rand=' + new Date().getTime(),
2198            url: 'http://localhost/prestashop_17/ps_1765_dev/module/leofeature/leoproductattribute?ajax=1&action=getproductattribute&' + group_value,
2199            url: url_leoproductattribute + '?' + group_value,
2200            async: true,
2201            cache: false,
2202            data: {
2203                'ajax' : '1',
2204                'action' : 'getproductattribute',
2205                "id_product": id_product,
2206            },
2207            success: function (result)
2208            {
2209                if(result != '')
2210                {						
2211                    var obj = $.parseJSON(result);
2212
2213                    $product_article_e.find('.product-thumbnail img').attr('src', obj.product_cover.bySize.home_default.url).attr('alt', obj.product_cover.legend);
2214                    $product_article_e.find('.product-thumbnail').attr('href', obj.product_url);
2215                    $product_article_e.find('.product-price-and-shipping').empty().append(obj.price_attribute);
2216
2217                    parent_e.find('.id_product_attribute_'+id_product).val(obj.id_attr);
2218                    if(!obj.add_to_cart_url){
2219                        parent_e.find('.leo-bt-cart_'+id_product).addClass('disabled');
2220                    }else{
2221                        parent_e.find('.leo-bt-cart_'+id_product).removeClass('disabled');
2222                    }
2223                }
2224                else
2225                {
2226                    alert(add_cart_error);
2227                }
2228                $('.leo-bt-cart.active').find('.leo-bt-cart-content').fadeIn('fast');
2229                $('.leo-bt-cart.active').find('.leo-loading').hide();
2230                $('.leo-bt-cart.active').removeClass('active reset');
2231            },
2232            error: function (XMLHttpRequest, textStatus, errorThrown) {
2233                    alert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
2234            }
2235        });
2236    });
2237}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.