// Products JavaScript Document

    var added = false;

	$(document).ready(function() {
		"use strict";

		// Check for product items then match height
		/*if($.fn.matchHeight && $(".products .product-item").length > 0) {
			
			//
			$(".products .product-item").matchHeight({
				byRow: true,
				property: "height"
			});
		}*/
		
		// Open product images in magnific popup
		if($.fn.magnificPopup) {
			//
			$('a.product-details-image, a.product-details-images-img').magnificPopup({
				type:'image'
			});	
		}
		
		// Open product images in colorbox
		else if($.fn.colorbox) { 
			//
			$("a[class=\'product-details-image\'], a[class=\'product-details-images-img\']").colorbox({photo:true},function(){ 
				var titleheight = $("#cboxTitle").height(); 
				$("#colorbox").height($("#colorbox").height() + titleheight); 
				$("#cboxWrapper").height($("#cboxWrapper").height() + titleheight); 
				$("#cboxMiddleLeft").height($("#cboxMiddleLeft").height() + titleheight); 
				$("#cboxMiddleRight").height($("#cboxMiddleRight").height() + titleheight); 
				$("#cboxContent").height($("#cboxContent").height() + titleheight); 
				$("#cboxLoadedContent").height($("#cboxLoadedContent").height() + titleheight); 
			});
		}
        
        
        // Catch product click
        $('main').on('click','a.product-item, .product-item .module-image a, .product-item .module-text > a, .product-item .readmore',function(event) {
        
            // Get parent
            var $parent = ($(this).hasClass('product-item')) ? $(this) : $(this).closest('.product-item');

            // Check for product
            if($parent.data('type') == 'product' && window.google_tag_manager) {

                // Stop linking
                event.preventDefault();

                // Get product link
                var url = $(this).attr('href');
                
                // Fallback timeout of 3 seconds
                setTimeout(function() {
                    
                    // Direct to product
                    document.location = url;
                    
                },3000);

                // Push product click to data layer
                window.dataLayer = window.dataLayer || [];
                window.dataLayer.push({
                    'event': 'eec.productClick',
                    'ecommerce': {
                        'click': {
                            'actionField': {'list': $parent.data('list')},
                            'products': [{
                                'id': $parent.data('id'),
                                'name': $parent.data('name'),
                                'price': $parent.data('price'),
                                'brand': $parent.data('brand'),
                                'category': $parent.data('category'),
                                'variant': $parent.data('variant'),
                                'position': $parent.data('position')
                            }]
                        }
                    },
                    'eventCallback': function() {

                        // Direct to product
                        document.location = url;
                    }
                });
            }
        });
		
        // Catch add to cart summary click
        $('main').on('click','.product-item a.buynow',function(event) {

            // Get parent
            var $parent = $(this).closest('.product-item');

            // Check for product
            if($parent.data('type') == 'product' && window.google_tag_manager) {

                // Stop linking
                event.preventDefault();

                // Get add to cart link
                var url = $(this).attr('href');
                
                // Fallback timeout of 3 seconds
                setTimeout(function() {
                    
                    // Direct to cart to add product
                    document.location = url;
                    
                },3000);

                // Push product add to cart to data layer
                window.dataLayer = window.dataLayer || [];
                window.dataLayer.push({
                    'event': 'eec.addToCart',
                    'ecommerce': {
                        'add': {
                            'products': [{
                                'id': $parent.data('id'),
                                'name': $parent.data('name'),
                                'price': $parent.data('price'),
                                'brand': $parent.data('brand'),
                                'category': $parent.data('category'),
                                'variant': $parent.data('variant'),
                                'quantity': 1
                            }]
                        }
                    },
                    'eventCallback': function() {

                        // Direct to cart to add product
                        document.location = url;
                    }
                });
            }
        });
		
		// Change image
		if($(".product-details-thumbnails").length > 0) {
			
			//
			$(".product-details-thumbnails a").on("click",function(event) {
				
				//
				event.preventDefault();
				
				// Image
				var image = $(this).data('image');
				
				change_product_image(image);
			});
		}
		
		
		// Product details buy
		if($(".product-details-buy").length > 0) {
				
			// Show hidden areas
			$(".product-details-buy-price").show();
			$(".product-details-buy-add-quantity").show();
			
			// Create options dropdown/dropdowns/radio buttons in product details if more than one sub part
			if($(".product-details-buy .product-details-buy-add").length > 1) {
				
				// Master part
				var master = $(".product-details-buy-options").data('masterpart');
				
				//
				var displayType = 'standard';
				//
				if($(".product-details-buy-options").hasClass('radio-options')) {displayType = 'radio';}
				if($(".product-details-buy-options").hasClass('dropdown-options')) {displayType = 'dropdown';}
				
				
				// Create options
				var options = new Array();
				var optionFields = $(".product-details-buy-options").data('options');
				var optionTitles = $(".product-details-buy-options").data('option-titles');
				
				// First options
				var firstOptions = new Array();
				
				//
				var price = '';
				var count = 0;
				
				// Show hidden areas
				$(".product-details-buy-options").show();
				
				// For each option
				$(".product-details-buy .product-details-buy-add").each(function() {
							
					// Get part options
					var partOptions = $(this).data('options');
					
					// Switch display type
					switch(displayType) {
						case 'radio' :
						case 'dropdown' : {
							
							// Set titles of first options only
							var title = partOptions[0];
							
							// Create option
							if(firstOptions.indexOf(title) < 0) {
								//
								var optionsObject = {
									master:		master,
									recordid: 	$(this).data('recordid'),
									title: 		title,
									first:		partOptions[0],
									options:	partOptions,
								};
								
								// Add object to options array
								options.push(optionsObject);
								
								// Add title to first options array
								firstOptions.push(title);
							}
							
							//
							break;	
						}
						case 'standard' :
						default : {
							// Title
							{
								var title = '';
								
								// Add options to title
								if(partOptions.length > 0) {
									partOptions.forEach(function(item,index) {
										//
										title += (title !== '' && item !== '') ? ' - ' : '';
										title += (item !== '') ? item : '';
									});
								}
								
								// Set title
								else {
									title += $(this).data('title');
								}
								
								// Set price
								if($(this).data('price') !== '') {
									//
									title += ' - '+$(this).data('price');
									title += $(this).data('pricepost');
								}
								
								// Set out of stock
								if($(this).data('outofstock') !== '') {
									//
									title += ' - '+$(this).data('outofstock');
								}
							}
							
							// Create option
							{
								//
								var optionsObject = {
									master:		master,
									recordid: 	$(this).data('recordid'),
									title: 		title,
									first:		partOptions[0],
									options:	partOptions,
								};
								
								// Add object to options array
								options.push(optionsObject);
							}
							
							//
							break;
						}
					}
					
					// Set price to show
					if(count === 0) {
						//
						price = get_formatted_pricing($(this));
						
						// Hide all options if display type isn't standard
						if(displayType !== 'standard') {
							$(this).hide();
						}
					}
					else {
						// Hide others
						$(this).hide();
					}
					
					// Hide stacked titles
					$(this).find(".product-details-buy-add-title").hide();
					$(this).removeClass('stacked');
					
					count++;
				});
				
				
				// If there are options the generate dropdowns/radio buttons
				if(options.length > 0) {
					
					var html = '';
					
					switch(displayType) {
						// Create radio button options
						case 'radio' : {
							//
							html += '<div class="buy-radio-group '+optionFields[0]+'-option">';
							
							// Build title
							html += '<span class="buy-radio-group-title">'+optionTitles[0]+'</span>';
							
							// Build options
							options.forEach(function(item,index) {
								
								//
								html += '<input type="radio" id="'+optionFields[0]+'-'+item.recordid+'" name="'+optionFields[0]+'-option" value="'+item.recordid+'" class="buy-radio" data-option="'+optionFields[0]+'" />';
								html += '<label for="'+optionFields[0]+'-'+item.recordid+'">'+item.first+'</label>';
							});
								
							//
							html += '</div>';
							
							break;
						}
						// Create dropdown options
						case 'dropdown' : {
							//
							html += '<div class="buy-dropdowns '+optionFields[0]+'-option">';
							
							// Build title
							html += '<span class="buy-dropdowns-title">'+optionTitles[0]+'</span>';
							
							// Build select box
							html += '<select name="'+optionFields[0]+'-option" class="buy-dropdown" data-option="'+optionFields[0]+'">';
							html += '<option value="">Select a '+optionTitles[0].toLowerCase()+'...</option>';
							
							// Build options
							options.forEach(function(item,index) {
								
								//
								html += '<option value="'+item.recordid+'">'+item.title+'</option>';
							});
							
							//
							html += '</select>';
								
							//
							html += '</div>';
							
							break;
						}
						// Create single dropdown
						case 'standard' :
						default : {
							
							// Build select box
							html += '<select class="buy-standard" name="option">';
							
							// Build options
							options.forEach(function(item,index) {
								//
								html += '<option value="'+item.recordid+'">'+item.title+'</option>';
							});
							
							//
							html += '</select>';
					
							// Add price to dom
							$(".product-details-buy-price").html(price);
							
							break;
						}
					}	
					
					// Add dropdown to dom
					$(".product-details-buy-options").html(html);	
				}
			}
			
			// Else show single option
			else if($(".product-details-buy .product-details-buy-add").length === 1) {
				
				// Show price
				$(".product-details-buy .product-details-buy-add").each(function() {
					
					//
					var price = get_formatted_pricing($(this));
					
					// Add price to dom
					$(".product-details-buy-price").html(price);
					$(this).find(".product-details-buy-add-title .price").hide();
				});
			}
			
			
			// On dropdowns / radio button option select
			{            
                // On Weight dropdown changes
                $(".product-details-buy .buy-weight").on("change",function() {
                    
                    // Get the price of the selected weight
                    var isNull = (($(this).find(':selected').attr('data-null'))) ? true : false;
                    var priceVal = '$'+($(this).find(':selected').attr('data-price'));
                    var weightVal = ($(this).find(':selected').val());
                    var quantityText = ($(this).find(':selected').html());
                    
                    // priceVal will be null for the default, please select options
                    if(!isNull) {

                        // Set the price text
                        $(".product-details-buy-price h2").html(priceVal+'<span class="price-post">for '+quantityText+'</span>');

                        // Adjust visable quantity options, if needed
                        var maxWeight = ($(this).attr('data-maxweight'));

                        // loop through quantity options
                        $(".product-details-buy .buy-quantity option").each(function() {

                            // if this option exceeds max weight
                            if(($(this).val()*weightVal) > maxWeight) {
                                // hide option
                                $(this).hide();
                            }
                            else {
                                // Show option (used if selecting a smaller weight than previous)
                                $(this).show();
                            }
                        });

                        // Reset buy-quantity
                        $(".product-details-buy .buy-quantity").val('1');
                    
                    }
                    
                });
                
				$(".product-details-buy").on("change",".buy-radio, .buy-dropdown",function() {
					
					// Hide all add buttons
					$(".product-details-buy .product-details-buy-add").hide();
					
					//
					var value  = $(this).val();
					var option = $(this).data("option");
					var displayType = ($(this).hasClass("buy-radio")) ? 'radio' : 'dropdown';
					
					// Get list of option title
					var optionTitles = $(".product-details-buy-options").data('option-titles');
					
					// Get list of option fields
					var optionFields = $(".product-details-buy-options").data('options');
					var currentFound = false;
					
					// Delete all after current option
					optionFields.forEach(function(item,index) {
						//
						if(currentFound) {
							$("."+item+"-option").remove();
						}
						else if(item === option) {
							currentFound = true;	
						}
					});
					
					// Build list of options selected
					build_options_selected();
					
					// Get selected
					var master   = $(".product-details-buy-options").data("masterpart");
					var selected = $(".product-details-buy-options").data("selected");
					
					// Get available options
					$.ajax({
						type: "GET",
						url: pageRelativity+'edit/modules/products/products.ajax.php',
						dataType: "jsonp",
						jsonp: "callback",
						timeout: 5000,
						data: {
							type: 'get-product-options',
							option: option,
							master: master,
							selected: selected,
							titles: optionTitles,
							displayType: displayType,
							relative: pageRelativity
						},
						success: function(data) {
							// If data
							if(data.count === 1 && data.itemId !== '') {
								
								// Show add button
								show_add_button(data.itemId);
							}
							else if(data.count > 0 && data.html) {
								// Default price
								default_pricing();
								//
								$(".product-details-buy-options").append(data.html);
								
								// Check for single option
								if($(".product-details-buy ."+data.option+"-option input").length === 1) {
									
									// Select single option
									$(".product-details-buy ."+data.option+"-option input").prop("checked",true);
									$(".product-details-buy ."+data.option+"-option input").trigger("change");
								}
							}
							else {
								
							}
						},
						error: function(request, status, error) {
							//
							alert(request.responseText);
						}
					});
				});
			}
			
			
			// On single dropdown select
			{
				$(".product-details-buy").on("change",".buy-standard",function() {
					//
					var itemId = $(this).val();
					
					// Show add button
					show_add_button(itemId);
				});
			}
			
			
			// On quanity change
			{
				$(".product-details-buy-add-quantity .buy-quantity").on("keyup",function() {
					
					var value = parseInt($(this).val());
					
					//
					if(!isNaN(value) && value > 0) {
						
						//
						$(".buy-quantity").val(value);
					}
				});
			}
			
			
			// Automatically add item to cart
			{
				// Ajax action for product buy form
				$(".buy-product").submit(function(event) {
					
					// Stop submit
					event.preventDefault();
					
					// Time process
					var start = new Date();
					var minDelay = 1000;
					
					// Set button title
					var form      = $(this);
					var buyButton = $(form).children("input[type=submit]");
					
					$(buyButton).attr("value","Adding product to cart...");
					$(buyButton).attr("disabled","disabled");
					
					$(".message-input").hide();
					
					// Get form data
					var dataString = $(form).serialize();
                    var partno     = $(form).children('input[name="partno"]').val();
                    var basetitle  = $(form).children('input[name="basetitle"]').val();
                    var brand      = $(form).children('input[name="brandtitle"]').val();
                    var category   = $(form).children('input[name="categorytitle"]').val();
                    var variant    = $(form).children('input[name="variant"]').val();
                    var weight     = $(form).find('.buy-weight').find(':selected').html();
                    var quantity   = $(form).children('input[name="quantity"]').val();
                    
                    if(weight == 'Please select...') {
                        //
                        weight = $(form).find('.buy-weight').find(':nth-child(2)').html();
                    }
                    
                    //
                    if(weight != undefined) {
                        //
                        price = $(form).find('.buy-weight').find(':selected').attr('data-price');
                        
                        // Add weight to variant
                        variant = (variant != '') ? variant+' - ' : variant;
                        variant = weight;
                    }
                    else {
                        //
                        price = $(form).children('input[name="price"]').val();
                        
                        //
                        var priceSplit = String(price).split(".");
                        price = priceSplit[0]+'.'+priceSplit[1].substring(0, 2);
                    }
                    
                    // Fallback timeout of 3 seconds
                    setTimeout(function() {
                        
                        if(added === false) {
                            
                            added = true;
                            
                            $.ajax({  
                                type: "POST",  
                                url: pageRelativity+'edit/shop/cart.ajax.php?add=1',  
                                data: dataString,  
                                success: function(data) {

                                    // For timing
                                    var end = new Date();
                                    var timeInMilliseconds = end-start;

                                    // Delay till minimum time is reached
                                    if(timeInMilliseconds < minDelay) {
                                        setTimeout(function() {
                                            add_item_to_summary_cart(data,buyButton);
                                            },minDelay-timeInMilliseconds);
                                    }
                                    else {
                                        add_item_to_summary_cart(data,buyButton);
                                    }
                                },
                                error: function(request, status, error) {
                                    //
                                    $(form).submit();
                                }
                            });
                        }

                    },3000);
                    
                    // Push product add to cart
                    window.dataLayer = window.dataLayer || [];
                    window.dataLayer.push({
                        'event': 'eec.addToCart',
                        'ecommerce': {
                            'add': {  
                                'products': [{
                                    'id': ''+partno+'',
                                    'name': ''+basetitle+'',
                                    'price': price,
                                    'brand': ''+((brand) ? brand : '')+'',
                                    'category': ''+((category) ? category : '')+'',
                                    'variant': ''+((variant) ? variant : '')+'',
                                    'quantity': quantity
                                }]
                            }
                        },
                        'eventCallback': function() {
                            
                            if(added === false) {
                            
                                added = true;

                                $.ajax({  
                                    type: "POST",  
                                    url: pageRelativity+'edit/shop/cart.ajax.php?add=1',  
                                    data: dataString,  
                                    success: function(data) {

                                        // For timing
                                        var end = new Date();
                                        var timeInMilliseconds = end-start;

                                        // Delay till minimum time is reached
                                        if(timeInMilliseconds < minDelay) {
                                            setTimeout(function() {
                                                add_item_to_summary_cart(data,buyButton);
                                                },minDelay-timeInMilliseconds);
                                        }
                                        else {
                                            add_item_to_summary_cart(data,buyButton);
                                        }
                                    },
                                    error: function(request, status, error) {
                                        //
                                        $(form).submit();
                                    }
                                });
                            }
                        }
                    });
					
					//
					return false;
				});
			}
		}
	});
	
	
	// Build options selected data array
	function build_options_selected() {
		"use strict";
		
		// Get display type
		var displayType = 'standard';
		//
		if($(".product-details-buy-options").hasClass('radio-options')) {displayType = 'radio';}
		if($(".product-details-buy-options").hasClass('dropdown-options')) {displayType = 'dropdown';}
		
		// Set options array
		var options = [];
		
		switch(displayType) {
			case 'radio' : {
				//
				$(".product-details-buy .buy-radio-group").each(function() {
					//
					var option = $(this).find("input[type=radio]:checked").val();
					
					// Add option to array
					options.push(option);
				});
				
				//
				break;
			}
			case 'dropdown' : {
				//
				$(".product-details-buy .buy-dropdowns").each(function() {
					//
					var option = $(this).find("select").val();
					
					// Add option to array
					options.push(option);
				});
				
				//
				break;
			}
		}
		
		// Update selected list
		$(".product-details-buy-options").data("selected",options);
	}
	
	
	// Show add button
	function show_add_button(itemId) {
		"use strict";
		
		//
		var option = $("#"+itemId);
		var price  = get_formatted_pricing($(option));
		
		// Add price to dom
		$(".product-details-buy-price").html(price);
		
		// Change image
		if($(option).data('image')) {
			
			change_product_image($(option).data('image'));
		}
		
		// Hide all add buttons
		$(".product-details-buy .product-details-buy-add").hide();
		
		// Show option add button
		$(option).show();
	}
	
	
	// Change image
	function change_product_image(image) {
		"use strict";
		
		if($(".product-details-images #"+image).length > 0) {
			// Remove current
			$(".product-details-images .product-details-images-img").removeClass("current-image");
			$(".product-details-thumbnails a").removeClass("current-image");
			
			// Change current
			$(".product-details-images #"+image).addClass("current-image");
			$(".product-details-thumbnails #"+image+"_thumbnail").addClass("current-image");
		}
	}
	
	
	// Get formatted price
	function default_pricing() {
		"use strict";
		
		//
		var price     	= '';
		var priceVal  	= $(".product-details-buy-options").data('default-price');
		var normalVal 	= $(".product-details-buy-options").data('default-normal');
		var priceText	= $(".product-details-buy-options").data('default-pricetext');
		var specialText	= $(".product-details-buy-options").data('default-specialtext');
		var wasText   	= $(".product-details-buy-options").data('default-wastext');
		var pricePost 	= $(".product-details-buy-options").data('default-pricepost');
		
		//
		price += (priceVal !== normalVal) ? '<h4>'+specialText+'</h4>' : '<h4>'+priceText+'</h4>';
		price += '<h2>'+priceVal+'<span class="price-post">'+pricePost+'</span></h2>';
		price += (priceVal !== normalVal) ? '<span class="was">'+wasText+'<del>'+normalVal+'</del></span>' : '';	
		
		// Add price to dom
		$(".product-details-buy-price").html(price);
	}
	
	
	// Get formatted price
	function get_formatted_pricing(option) {
		"use strict";
		
		//
		var price     	= '';
		var priceVal  	= $(option).data('price');
		var normalVal 	= $(option).data('normal');
		var priceText	= $(option).data('pricetext');
		var specialText	= $(option).data('specialtext');
		var wasText   	= $(option).data('wastext');
		var pricePost 	= $(option).data('pricepost');
		
		//
		price += (priceVal !== normalVal) ? '<h4>'+specialText+'</h4>' : '<h4>'+priceText+'</h4>';
		price += '<h2>'+priceVal+'<span class="price-post">'+pricePost+'</span></h2>';
		price += (priceVal !== normalVal) ? '<span class="was">'+wasText+'<del>'+normalVal+'</del></span>' : '';	
		
		//
		return price;
	}
	
	
	// Add product to cart
	function add_item_to_summary_cart(data,buyButton) {
		"use strict";
		
		if(data === "error") {
			
			// Show error message
			update_messages();
			$(".message-input").show();
			
			$(buyButton).attr("value","Add to Cart");
			$(buyButton).attr("disabled","");
		}
		else if(data !== "") {
			
			// Change button to added
			$(buyButton).attr("value","Product added");
			$(".view-cart-link").show();
			
			// Add to side cart
			updateCartSummery();
			update_messages();
			$(".message-input").show();
		}
		else {
			
			//
			$(".message-input").show();
			$(buyButton).attr("value","Add to Cart");
			$(buyButton).attr("disabled","");
		}
	}
	
	
	