$(document).ready(function() {
	resetReview();
	
	$("input#calculateprice").click(function(){
	
		errorArray = validatePage();
		if (errorArray.length > 0) {
			var alertText = "Before we can calculate the price:\n";
			for (i=0;i<errorArray.length;i++) {
				alertText = alertText + "\n* " + errorArray[i];
			}
			alert(alertText);
		} else {
			calculatePrice();
		}
	});
});

function isdefined(variable) {
    return eval('(typeof('+variable+') != "undefined");');
}

function validatePage() {
	var errorArray = new Array();
		
	if (($("input[name='widthcentimetres']").length && $("input[name='widthfeet']").length && $("input[name='widthin']").length)
		&& $("input[name='lengthcentimetres']").length && $("input[name='lengthfeet']").length && $("input[name='lengthin']").length) {
		
			if (
				($("input[name='widthcentimetres']").attr("value") === "" || $("input[name='widthcentimetres']").attr("value") === "0") &&
				($("input[name='lengthcentimetres']").attr("value") === "" || $("input[name='lengthcentimetres']").attr("value") === "0") &&
				($("input[name='widthfeet']").attr("value") === "" || $("input[name='widthfeet']").attr("value") === "0") &&
				($("input[name='lengthfeet']").attr("value") === "" || $("input[name='lengthfeet']").attr("value") === "0") &&
				($("input[name='widthin']").attr("value") === "" || $("input[name='widthin']").attr("value") === "0") &&
				($("input[name='lengthin']").attr("value") === "" || $("input[name='lengthin']").attr("value") === "0")
				) {
					// if all empty
					errorArray.push("Please choose dimensions");
			} else if (
				($("input[name='widthcentimetres']").attr("value") != "" && $("input[name='widthcentimetres']").attr("value") != "0") &&
				($("input[name='lengthcentimetres']").attr("value") === "" || $("input[name='lengthcentimetres']").attr("value") === "0")
			) {			
				// if width (cm) specified, but not length
				errorArray.push("Please choose dimensions");
			} else if (
				($("input[name='lengthcentimetres']").attr("value") != "" && $("input[name='lengthcentimetres']").attr("value") != "0") &&
				($("input[name='widthcentimetres']").attr("value") === "" || $("input[name='widthcentimetres']").attr("value") === "0")
			) {
				// if length (cm) specified, but not width
				errorArray.push("Please choose dimensions");
			} else if (
				((($("input[name='widthfeet']").attr("value") != "" && $("input[name='widthfeet']").attr("value") != "0") ||
					($("input[name='widthin']").attr("value") != "" && $("input[name='widthin']").attr("value") != "0")) &&
					(($("input[name='lengthfeet']").attr("value") === "" || $("input[name='lengthfeet']").attr("value") === "0") &&
					($("input[name='lengthin']").attr("value") === "" || $("input[name='lengthin']").attr("value") === "0")))
			) {
				// if width (feet/inches) specified, but not length
				errorArray.push("Please choose dimensions");
			} else if (
				((($("input[name='lengthfeet']").attr("value") != "" && $("input[name='lengthfeet']").attr("value") != "0") ||
					($("input[name='lengthin']").attr("value") != "" && $("input[name='lengthin']").attr("value") != "0")) &&
					(($("input[name='widthfeet']").attr("value") === "" || $("input[name='widthfeet']").attr("value") === "0") &&
					($("input[name='widthin']").attr("value") === "" || $("input[name='widthin']").attr("value") === "0")))
			) {
				// if length (feet/inches) specified, but not width
				errorArray.push("Please choose dimensions");
			}
	}
	
	return errorArray;
}

function calculatePrice() {
	optionArray = new Array();
	optionArray.push($("h1.designTitle").html());
	
	if (isdefined("underlayBasePrice")) {
		runningtotal = parseFloat(underlayBasePrice);
	} else {	
		runningtotal = 0;	
	}
	
	if (($("input[name='widthcentimetres']").length && $("input[name='widthfeet']").length && $("input[name='widthin']").length)
		&& $("input[name='lengthcentimetres']").length && $("input[name='lengthfeet']").length && $("input[name='lengthin']").length) {
		
		if (
			($("input[name='widthcentimetres']").attr("value") != "" && $("input[name='widthcentimetres']").attr("value") != "0") &&
			($("input[name='lengthcentimetres']").attr("value") != "" && $("input[name='lengthcentimetres']").attr("value") != "0")
			) {
			// if user has entered dimensions in CM
			widthcm = Math.round($("input[name='widthcentimetres']").attr("value"));
			lengthcm = Math.round($("input[name='lengthcentimetres']").attr("value"));
			
			cutInfoArray = getCutArea(widthcm,lengthcm).split("|");
			areaM2 = cutInfoArray[0];
			verticalCuts = cutInfoArray[1];
			
			if (underlaypricestep === "" || areaM2 < underlaypricestep) {
				runningtotal = runningtotal + parseFloat(areaM2 * underlayprice) + parseFloat(verticalCuts) + 7.50;
			} else {
				runningtotal = runningtotal + parseFloat(areaM2 * underlaypricegte) + parseFloat(verticalCuts) + 7.50;
			}
			
			dimensionText = "Dimensions: " + widthcm + "cm x " + lengthcm + "cm";			
			optionArray.push(dimensionText);
			
		} else {
			// if user has entered dimensions in feet/inches
			widthfeet = $("input[name='widthfeet']").attr("value");
			lengthfeet = $("input[name='lengthfeet']").attr("value");
			widthin = $("input[name='widthin']").attr("value");
			lengthin = $("input[name='lengthin']").attr("value");
			
			widthtotalcm = Math.round((parseFloat(widthfeet * 12) + parseFloat(widthin))*2.54);
			lengthtotalcm = Math.round((parseFloat(lengthfeet * 12) + parseFloat(lengthin))*2.54);
			
			cutInfoArray = getCutArea(widthtotalcm,lengthtotalcm).split("|");
			areaM2 = cutInfoArray[0];
			verticalCuts = cutInfoArray[1];
			
			if (underlaypricestep === "" || areaM2 < underlaypricestep) {
				runningtotal = runningtotal + parseFloat(areaM2 * underlayprice) + parseFloat(verticalCuts) + 7.50;
			} else {
				runningtotal = runningtotal + parseFloat(areaM2 * underlaypricegte) + parseFloat(verticalCuts) + 7.50;
			}
			
			dimensionText = "Dimensions: " + widthtotalcm + "cm x " + lengthtotalcm + "cm";
			optionArray.push(dimensionText);
			
		}
	}
	
	if ($("select#quantity").length){
		quantity = $("select#quantity").attr("value");
		runningtotal = runningtotal * quantity;
		optionArray.push("Quantity: " + quantity);
	}
		
	convertedPrice = runningtotal * eval('conversionRate' + currencyCode);
	displayPrice = eval('currencySymbol' + currencyCode) + convertedPrice.toFixed(2);
	
	htmlReviewCode = "<ul>";
	for (i=0;i<optionArray.length;i++) {
		htmlReviewCode = htmlReviewCode + "<li>" + optionArray[i] + "</li>";
	}
	htmlReviewCode = htmlReviewCode + "</ul>";
	
	$("div#reviewitem").html(htmlReviewCode);
	$("p#product_price").html(displayPrice);
	$("input#addToBasket").removeClass("disabled").removeAttr('disabled');
}

function getCutArea(width,length) {
	var smallestLeftover = "";
	var smallestLeftoverArea = "";
	var rollArray = rollwidths.split(",");
	var maxRollWidth = Math.max.apply( Math, rollArray);
	
	if (width > maxRollWidth && length > maxRollWidth) {
		for(var i=0; i<rollArray.length; i++){
			var finalrollcut = width - (Math.floor(width/rollArray[i]) * rollArray[i]);			
			smallestLeftover = "";
			thisRollChargeWidth = "";
			for(var i2=0; i2<rollArray.length; i2++){
				if ((rollArray[i2] - finalrollcut >= 0) && ((rollArray[i2] - finalrollcut < smallestLeftover) || (smallestLeftover === ""))) {
					smallestLeftover = rollArray[i2] - finalrollcut;
					thisRollChargeWidth = rollArray[i2];
				}
			}
			if (((smallestLeftover * length) <= smallestLeftoverArea) || (smallestLeftoverArea === "")) {
				smallestLeftoverArea = smallestLeftover * length;
				rollCutWidth = width;
				rollCutLength = length;
				rollChargeWidth = (Math.floor(width/rollArray[i]) * rollArray[i]) + parseFloat(thisRollChargeWidth);
			}
		}
		
		for(var i=0; i<rollArray.length; i++){
			var finalrollcut = length - (Math.floor(length/rollArray[i]) * rollArray[i]);			
			smallestLeftover = "";
			thisRollChargeWidth = "";
			for(var i2=0; i2<rollArray.length; i2++){
				if ((rollArray[i2] - finalrollcut >= 0) && ((rollArray[i2] - finalrollcut < smallestLeftover) || (smallestLeftover === ""))) {
					smallestLeftover = rollArray[i2] - finalrollcut;
					thisRollChargeWidth = rollArray[i2];
				}
			}
			if (((smallestLeftover * width) <= smallestLeftoverArea) || (smallestLeftoverArea === "")) {
				smallestLeftoverArea = smallestLeftover * width;
				rollCutWidth = length;
				rollCutLength = width;
				rollChargeWidth = (Math.floor(length/rollArray[i]) * rollArray[i]) + parseFloat(thisRollChargeWidth);
			}
		}		
		
	} else {
		
		
		if (width <= maxRollWidth) {
			for(var i=0; i<rollArray.length; i++){
				if ((rollArray[i] - width >= 0) && ((rollArray[i] - width < smallestLeftover) || (smallestLeftover === ""))) {
					smallestLeftover = (rollArray[i] - width);
					rollCutWidth = width;
					rollCutLength = length;
					rollChargeWidth = rollArray[i];
				}
			}
		}
					
		
		if (length <= maxRollWidth) {
			for(var i=0; i<rollArray.length; i++){
				if ((rollArray[i] - length >= 0) && ((rollArray[i] - length < smallestLeftover) || (smallestLeftover === ""))) {
					smallestLeftover = (rollArray[i] - length);
					rollCutWidth = length;
					rollCutLength = width;
					rollChargeWidth = rollArray[i];
				}
			}
		}
	}
	
	var areaM2 = (rollChargeWidth/100) * (rollCutLength/100);
	if (rollChargeWidth != rollCutWidth) {
		var verticalCuts = 1;
	} else {
		var verticalCuts = 0;
	}	
	var returnvar = areaM2 + "|" + verticalCuts;
	return returnvar;
}


function decimaldisplay(thisdecimal) {
		
	if (Math.floor(thisdecimal) == thisdecimal) {
		var displaystring = parseFloat(thisdecimal).toFixed(0);
	} else {
		var displaystring = parseFloat(thisdecimal).toFixed(1);
	}	
	
	return displaystring;
}

function resetReview() {
	htmlReviewCode = "<ul>";
	htmlReviewCode = htmlReviewCode + "<li>" + $("h1.designTitle").html() + "</li>";
	htmlReviewCode = htmlReviewCode + "</ul>";
	
	$("div#reviewitem").html(htmlReviewCode);
	$("p#product_price").html("&nbsp;");
	$("input#addToBasket").addClass("disabled").attr('disabled', 'disabled');
}
