(function ($) {

	$('[data-toggle="tooltip"]').tooltip()

	window.refreshCart = function (cartObj) {

		if (cartObj == undefined) {
			// TODO : fetch cart
			$.ajax({
				url: "/api/cart",
				method: "GET",				
				success: function (xhrdata) {
					if (xhrdata.data != null) {
						refreshCart(xhrdata.data);
					}
				}
			})
		} else {
			$('.cart-count').show();
			$('.cart-count').html(cartObj.items.length);
			$('.cart-total-price-amount').html(cartObj.total_price);
			$('.cart-total-tax-amount').html(cartObj.total_tax);
			$('.cart-sub-total-amount').html(cartObj.sub_total);

			$('.dropdown-cart-products').html('');
			for (var i = 0; i < cartObj.items.length; i++) {
				var pItem = { id: cartObj.items[i].product_id };
				var price = (cartObj.items[i].reduced_total_price > 0) ? '<strike>&euro;' + cartObj.items[i].total_price.toFixed(2) + '</strike> &euro;' + cartObj.items[i].reduced_total_price.toFixed(2) + '</strike>' : '&euro;' + cartObj.items[i].total_price.toFixed(2);
				var html = '<div class="product"> \
                <div class="product-details"> \
                    <h4 class="product-title"> \
                        <a href="#">' + cartObj.items[i].title + ' x <span class="cart-product-qty">' + cartObj.items[i].quantity + '</span> \
						</a> \
                    </h4> \
                        <span class="cart-product-info"> \
                             ' + price + ' \
                        </span> \
                    </div><!-- End .product-details --> \
                    <figure class="product-image-container"> \
                        <a href="#" class="product-image"> \
                            <img src="' + cartObj.items[i].image + '" alt="product"> \
                        </a> \
                        ' + ((cartObj.items[i].is_add_on == 0) ? '<a href="#" class="btn-remove" data-product=\'' + JSON.stringify(pItem) + '\' title="Remove Product"><i class="icon-cancel"></i></a>' : '') + ' \
                    </figure> \
                </div>';
				$('.dropdown-cart-products').append(html);
			}

		}

	}
	refreshCart();

	$('.dropdown-cart-products, .table-cart').on('click', '.btn-remove', function () {
		var p = $(this).data('product');
		if (!(p instanceof Object)) {
			p = JSON.parse(p);
		}
		var _this = this;
		$.ajax({
			url: "/api/cart/product/" + p.id,
			method: "POST",
			data: {
				_token: window.csrf,
				_method: "DELETE",
			},
			success: function (xhrdata) {
				if($(_this).data('refresh') == 1)
				{
					window.location.reload();
				}
				refreshCart(xhrdata.data);
				$(_this).closest('.product-row').remove();
			}
		})
	})

	$('.table-cart').on('change', '.product-quantity', function () {
		$('.btn-update-cart').addClass('pulse');
		$($(this).data('target')).html(($(this).data('price') * $(this).val()).toFixed(2));
	});

	$('.table-cart').on('click', '.btn-update-cart', function () {
		var products = [];
		$('.product-quantity').each(function () {
			var p = $(this).data('product');
			if (!(p instanceof Object)) {
				p = JSON.parse(p);
			}

			products.push({
				id: p.id,
				qty: $(this).val()
			})
		});
		$(this).removeClass('pulse');
		var _this = this;
		$.ajax({
			url: "api/cart/bulk",
			method: "POST",
			xhrFields: {
				withCredentials: true
			},
			data: {
				_token: window.csrf,
				products: products,
				_method: "PUT",
			},
			success: function (xhrdata) {
				window.location.reload();
				refreshCart(xhrdata.data);
				$.notify({
					message: 'Cart Updated Successfully '
				}, {
					type: 'success',
					delay: 3000,
					placement: { from: 'bottom' },
					template: '<div data-notify="container" class="alert alert-{0}" role="alert">' +
						'<button type="button" aria-hidden="true" class="close alert-close-btn" data-notify="dismiss">×</button>' +
						'<span data-notify="icon"></span> ' +
						'<span data-notify="title">{1}</span> ' +
						'<span data-notify="message">{2}</span>' +
						'<div class="progress" data-notify="progressbar">' +
						'<div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="999" style="width: 0%;"></div>' +
						'</div>' +
						'<a href="{3}" target="{4}" data-notify="url"></a>' +
						'</div>'
				});
			}
		})
	})

	$('.loyalty-card-no').on('change', function () {
		$.ajax({
			url: "/api/customer/points",
			method: "get",
			data: {
				_token: window.csrf,
				loyalty_card: $('.loyalty-card-no').val()
			},
			success: function (xhrdata) {
				try {
					if (xhrdata.code == 200 && xhrdata.data.points > 0) {
						$('.points-to-redeem').attr('max', xhrdata.data.points);
						$('.points-to-redeem-holder').show();
						$('.points-cart-offer').show();

						$('.points-cart-offer').html(xhrdata.data.offer_html);
						$('.horizontal-quantity').TouchSpin({
							verticalbuttons: false,
							buttonup_txt: '',
							buttondown_txt: '',
							buttondown_class: 'btn btn-outline btn-down-icon',
							buttonup_class: 'btn btn-outline btn-up-icon',
							initval: 1,
							min: 1,
							max: 999
						  });

						  $('.horizontal-quantity').on('touchspin.on.stopspin', function() {

							var details = $(this).parent().closest('.product-details');
							
							if(details.length <= 0)
							{
								var details = $(this).parent().closest('.product-single-details');
				
							}
				
							if($(this).hasClass('per-g-product')){
								details.find('.product-amount').find('.amount').html($(this).val() * 100 + "g");
							}
				
							var tPrice = details.find('.product-amount').find('.total-price').data('price') * $(this).val();
				
							details.find('.product-amount').find('.total-price').html( '&euro;' + tPrice.toFixed(2));
							 //$($(this).data('price-target')).find('.amount').html( ($(this).data('singe-price') * $(this).val()).toFixed(2) );
							 
						});
					}
					else {
						$('.points-to-redeem-holder').hide();
						$('.points-cart-offer').hide();
					}
				}
				catch (e) {
					console.log(e);
				}
			}
		})
	});

	if ($('.loyalty-card-no').val() != '') {
		$('.loyalty-card-no').trigger('change');
	}


	$('.points-to-redeem').on('change', function () {
		$('.points-to-redeem-holder').find('.err-msg').html('');
		if (($(this).val() / 200) % 1 !== 0) {
			$('.points-to-redeem').val(0);
			$('.points-to-redeem-holder').find('.err-msg').html('Points must be in increments of 200');
		}
		if (parseInt($(this).val()) > parseInt($(this).attr('max'))) {
			$('.points-to-redeem').val($(this).attr('max'));
			$('.points-to-redeem-holder').find('.err-msg').html('You do not have enough points. The maximum amount of points that can be redeemed is ' + $(this).attr('max'));
		}
	});

	$('body').on('click', '.add-cart', function () {
		var p = $(this).data('product');
		$.ajax({
			url: "/api/cart/product/" + p.id,
			method: "POST",
			xhrFields: {
				withCredentials: true
			},
			data: {
				_token: window.csrf,
				use_points: $(this).data('use-points') == '1' ? '1' : '0',
				qty: $($(this).data('qty-element')).val()
			},
			success: function (xhrdata) {
				refreshCart(xhrdata.data);
				try {
					$.notify({
						message: '"' + xhrdata.data.last_added_item.title + '" has been added to cart'
					}, {
						type: 'success',
						delay: 3000,
						placement: { from: 'bottom' },
						template: '<div data-notify="container" class="alert alert-{0}" role="alert">' +
							'<button type="button" aria-hidden="true" class="close alert-close-btn" data-notify="dismiss">×</button>' +
							'<span data-notify="icon"></span> ' +
							'<span data-notify="title">{1}</span> ' +
							'<span data-notify="message">{2}</span>' +
							'<div class="progress" data-notify="progressbar">' +
							'<div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="999" style="width: 0%;"></div>' +
							'</div>' +
							'<a href="{3}" target="{4}" data-notify="url"></a>' +
							'</div>'
					});
				}
				catch (e) {
					console.log(e);
				}
			}
		})
	});

	$('body').on('click', '.add-to-wishlist', function () {
		var p = $(this).data('product');
		if($(this).hasClass('remove'))
		{
			var _this = this;
			$.ajax({
				url: "/api/wishlist/product/" + p.id,
				method: "POST",
				xhrFields: {
					withCredentials: true
				},
				data: {
					_token: window.csrf,
					_method: 'DELETE'
				},
				success: function (xhrdata) {
					// refreshCart(xhrdata.data);
					if(xhrdata.code == 200)
					{
						try {
							$(_this).closest('.product-holder').remove();

							$.notify({
								message: '"' + xhrdata.data.title + '" has been removed from wishlist'
							}, {
								type: 'success',
								delay: 3000,
								placement: { from: 'bottom' },
								template: '<div data-notify="container" class="alert alert-{0}" role="alert">' +
									'<button type="button" aria-hidden="true" class="close alert-close-btn" data-notify="dismiss">×</button>' +
									'<span data-notify="icon"></span> ' +
									'<span data-notify="title">{1}</span> ' +
									'<span data-notify="message">{2}</span>' +
									'<div class="progress" data-notify="progressbar">' +
									'<div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="999" style="width: 0%;"></div>' +
									'</div>' +
									'<a href="{3}" target="{4}" data-notify="url"></a>' +
									'</div>'
							});
						}
						catch (e) {
							console.log(e);
						}
					}
				}
			})
		}
		else
		{
			$.ajax({
				url: "/api/wishlist/product/" + p.id,
				method: "POST",
				xhrFields: {
					withCredentials: true
				},
				data: {
					_token: window.csrf
				},
				success: function (xhrdata) {
					// refreshCart(xhrdata.data);
					try {
						$.notify({
							message: '"' + xhrdata.data.title + '" has been added to wishlist'
						}, {
							type: 'success',
							delay: 3000,
							placement: { from: 'bottom' },
							template: '<div data-notify="container" class="alert alert-{0}" role="alert">' +
								'<button type="button" aria-hidden="true" class="close alert-close-btn" data-notify="dismiss">×</button>' +
								'<span data-notify="icon"></span> ' +
								'<span data-notify="title">{1}</span> ' +
								'<span data-notify="message">{2}</span>' +
								'<div class="progress" data-notify="progressbar">' +
								'<div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="999" style="width: 0%;"></div>' +
								'</div>' +
								'<a href="{3}" target="{4}" data-notify="url"></a>' +
								'</div>'
						});
					}
					catch (e) {
						console.log(e);
					}
				}
			})
		}
	});

	$('#change-delivery-address').on('change', function () {
		if ($(this).is(':checked')) {
			$('#new-delivery-address').removeClass('show');
			return true;
		}
		$('#new-delivery-address').addClass('show');
	});

	$('.btn-have-account-login').on('click', function () {
		$('#frm-login-checkout').fadeIn();
	})



	if ($('#slt-sorting').length > 0) {
		$('#slt-sorting').on('change', function () {
			var url = new URLSearchParams(window.location.search);

			if (url.has('sortby')) {
				url.set('sortby', $(this).val());
			}
			else {
				url.append('sortby', $(this).val());
			}

			window.location.href = window.location.origin + window.location.pathname + '?' + url.toString();

		});
	}
	if ($('#delivery-date').length > 0) {
		window.updateDeliveryDates = function () {

			

			if ($('#change-delivery-address').is(':checked')) {
				var locationID = $('#slt-location').find('option:selected').data('id');
			}
			else {
				var locationID = $('#slt-delivery-location').find('option:selected').data('id');
			}

			if(!locationID)
			{
				locationID = window.locationID;
			}


			$.ajax({
				url: "/api/cart/delivery/availabledays",
				method: "GET",
				data: {
					_token: window.csrf,
					location: locationID,
					is_pickup: $('#chk-pickup').is(':checked') ? 1 : 0
				},
				success: function (xhrdata) {

					try {
						var oldDate = $('#delivery-date').datepicker('getDate');
						$('#delivery-date').datepicker('destroy');
						$('#inp-delivery-date').val('');
					} catch (e) { }

					$('#delivery-error').hide();
					if(locationID != undefined && xhrdata.data.length == 0)
					{
						$('#delivery-error').show();
						$('#delivery-error').html('We only deliver to a select number of locations. You can use the Express Delivery for delivery all over Malta');
					}

					$('#delivery-date').unbind("changeDate").datepicker('destroy');
					$('#delivery-date').datepicker({
						format: "dd/mm/yyyy",
						startDate: new Date(),
						endDate: moment().add(14, 'day').toDate(),
						beforeShowDay: function (date) {

							if (xhrdata.data.indexOf(moment(date).format('DD/MM/Y')) > -1) {
								return true;
							}

							return false;
						}
					}).on('changeDate', function (date) {
						$('#delivery-time').html('');
						$.ajax({
							url: "/api/cart/delivery/availableslots",
							method: "GET",
							data: {
								_token: window.csrf,
								location: locationID,
								date: moment(date.date).format('DD/MM/Y'),
								is_pickup: $('#chk-pickup').is(':checked') ? 1 : 0
							},
							success: function (xhrdata) {
								if (xhrdata.code == 200) {
									var html = '<div class="form-group required-field pickup-optional-holder"> \
												<label>Time Slot </label> \
												<select name="time_slot" class="form-control pickup-optional" required> \
													<option value="">Choose A Time Slot</option>';
									for (var key in xhrdata.data) {
										html += '<option value="' + xhrdata.data[key].id + '">' + xhrdata.data[key].value + '</option>';
									}
									if (xhrdata.data.length == 0) {
										html += '<option disabled>No time slots available</option>';
									}
									html += '</select>\
												</div>';

									$('#delivery-time').html(html);
									if($('#delivery-time').data('id'))
									{
										$('select[name=time_slot]').val($('#delivery-time').data('id'))
									}
								}
							}
						});
					});



					$("#delivery-date").on("changeDate", function () {

						$('#inp-delivery-date').val(moment($('#delivery-date').datepicker('getDate')).format('DD/MM/YYYY'));

					});

					if (oldDate != null) {
						if (xhrdata.data.indexOf(moment(oldDate).format('DD/MM/Y')) > -1) {
							$('#delivery-date').datepicker('setDate', oldDate);
						}
					}

					// $('#delivery-date').change(function() {
					// 	$('#inp-delivery-date').val(moment($('#delivery-date').datepicker('getDate')).format('DD/MM/YY'));
					// });

				}
			});
		};

		window.updateDeliveryDates();

		$('#slt-delivery-location').on('change', function () {
			window.updateDeliveryDates();
		});
		$('#slt-location').on('change', function () {
			window.updateDeliveryDates();
		});
		$('input[name=delivery_method]').on('change', function () {
			window.updateDeliveryDates();
		});
		$('#change-delivery-address').on('change', function () {
			window.updateDeliveryDates();
		});

		$('input[name=delivery_method]').on('change', function () {
			if($(this).val() == 'express_delivery')
			{
				$('#exp-del-map').show();
				$('#delivery-date').hide();
				window.map.invalidateSize();
			}
			else
			{
				$('#exp-del-map').hide();
				$('#delivery-date').show();
			}
		});

	}

	if ($('#admin-delivery-date').length > 0) {
		window.updateDeliveryDates = function () {

			if(!locationID)
			{
				locationID = window.locationID;
			}


			$.ajax({
				url: "/api/cart/delivery/availabledays",
				method: "GET",
				data: {
					_token: window.csrf,
					location: locationID,
					is_pickup: $('#chk-pickup').is(':checked') ? 1 : 0
				},
				success: function (xhrdata) {

					try {
						var oldDate = $('#admin-delivery-date').datepicker('getDate');
						$('#admin-delivery-date').datepicker('destroy');
						$('#inp-delivery-date').val('');
					} catch (e) { }
					$('#admin-delivery-date').unbind("changeDate").datepicker('destroy');
					$('#admin-delivery-date').datepicker({
						format: "dd/mm/yyyy",
						// startDate: new Date(),
						endDate: moment().add(14, 'day').toDate(),
						beforeShowDay: function (date) {

							// if (xhrdata.data.indexOf(moment(date).format('DD/MM/Y')) > -1) {
							// 	return true;
							// }

							return true;
						}
					}).on('changeDate', function (date) {
						$('#delivery-time').html('');
						$.ajax({
							url: "/api/cart/delivery/availableslots",
							method: "GET",
							data: {
								_token: window.csrf,
								location: locationID,
								is_pickup: 1,
								date: moment(date.date).format('DD/MM/Y'),
								// is_pickup: $('#chk-pickup').is(':checked') ? 1 : 0
							},
							success: function (xhrdata) {
								if (xhrdata.code == 200) {
									var html = '<div class="form-group required-field pickup-optional-holder"> \
												<label>Time Slot </label> \
												<select name="time_slot" class="form-control pickup-optional"> \
													<option value="">Choose A Time Slot</option>';
									for (var key in xhrdata.data) {
										html += '<option value="' + xhrdata.data[key].id + '">' + xhrdata.data[key].value + '</option>';
									}
									if (xhrdata.data.length == 0) {
										html += '<option disabled>No time slots available</option>';
									}
									html += '</select>\
												</div>';

									$('#delivery-time').html(html);
									if($('#delivery-time').data('id'))
									{
										$('select[name=time_slot]').val($('#delivery-time').data('id'))
									}
								}
							}
						});
					});



					$("#admin-delivery-date").on("changeDate", function () {

						$('#inp-delivery-date').val(moment($('#admin-delivery-date').datepicker('getDate')).format('DD/MM/YYYY'));

					});

					if (oldDate != null) {
						if (xhrdata.data.indexOf(moment(oldDate).format('DD/MM/Y')) > -1) {
							$('#admin-delivery-date').datepicker('setDate', oldDate);
						}
					}

					// $('#delivery-date').change(function() {
					// 	$('#inp-delivery-date').val(moment($('#delivery-date').datepicker('getDate')).format('DD/MM/YY'));
					// });

				}
			});
		};

		window.updateDeliveryDates();

		$('#slt-delivery-location').on('change', function () {
			window.updateDeliveryDates();
		});
		$('#slt-location').on('change', function () {
			window.updateDeliveryDates();
		});
		$('input[name=delivery_method]').on('change', function () {
			window.updateDeliveryDates();
		});
		$('#change-delivery-address').on('change', function () {
			window.updateDeliveryDates();
		});

	}

	$('.hpb-move-up').on('click', function () {
		var myself = $(this).closest('.home-page-banner-holder');
		myself.insertBefore(myself.prev());
		// myself.remove();
	});
	$('.hpb-move-down').on('click', function () {
		var myself = $(this).closest('.home-page-banner-holder');
		myself.insertAfter(myself.next());
		// myself.remove();
	});
	$('.hpb-remove').on('click', function () {
		var myself = $(this).closest('.home-page-banner-holder');
		myself.remove();
	});

	$('#register-password').on('keyup', function () {
		if ($('#register-password').val().length > 3) {
			$('.pass-confirmation').fadeIn(700);
		}
	})

	$('.sidebar-shop .widget-title .toggler').on('click tap', function () {
		$('#toggler-body').toggleClass('open');
		$('.sidebar-shop .widget-title .toggler i').toggleClass('fa-angle-down');
		$('.sidebar-shop .widget-title .toggler i').toggleClass('fa-angle-up');
	});

})(jQuery);