/*Flooring class to pass flooring objects and calculations*/
//function Flooring (id, collectionID, imgUrl, title, h, w, l, regPrice, sqFtPerCarton, cartonWeight, cartonsPerHalfPallet, cartonsPerPallet, arprices)
function Flooring (oArgs)
{
	var o = this;// scope protection for this
	// key fields
	o.ID = oArgs.id; 
	o.CollectionID = oArgs.collectionID;
	// string fields
	o.ImgUrl = oArgs.imgUrl;
	o.Title = oArgs.title;
	o.H = oArgs.h;	// Height (string)
	o.W = oArgs.w;	// Width (string)
	o.L = oArgs.l; //Length (string)

	// numeric fields
	o.RegPrice = oArgs.regPrice; // Regular price (double)
	o.SqFtPerCarton = oArgs.sqFtPerCarton; // SqFt Per carton (double)
	o.CartonWeight = oArgs.cartonWeight; // Weight in pounds (double)
	o.CartonsPerHalfPallet = oArgs.cartonsPerHalfPallet; // Number of cartons per half pallet (int)
	o.CartonsPerPallet = oArgs.cartonsPerPallet; // Number of cartons per pallet (int)
	o.Prices = oArgs.arprices; // array literal of prices (2 dimensions: [index][qty,cartonprice])

	// methods
	o.CalculateWeight = function(qty){
		return qty * o.CartonWeight;
	}
	o.CalculateCartonQuantity = function(sqFtCoverage){
		return Math.ceil(sqFtCoverage / o.SqFtPerCarton);
	}
	o.CalculateSqFtCoverage = function(cartonQty){
		var coverage = o.SqFtPerCarton * cartonQty;
		//round down
		return Math.floor(coverage);
	}
	o.CalculateSqFtPrice = function(cartonQty){
		var sfPrice = 0.0;
		var cartonPrice = o.GetPriceForProduct(cartonQty);
		sfPrice = cartonPrice/o.SqFtPerCarton;
		return sfPrice.toFixed(2);
	}
	o.CalculateSubTotal = function(qty){
		var price = o.GetPriceForProduct(qty);
		var subtotal =  price * qty;
		return subtotal.toFixed(2);
	}
	o.GetPriceForProduct = function(qty){
		var price = 0.0;
		for(var i=0; i < o.Prices.length; i++){
			if(qty >= o.Prices[i][0]){
				price = o.Prices[i][1];
			}
		}
		//return price.toFixed(2);
		return price;
	}
	// calculated fields
	o.PalletSqFtPrice = o.CalculateSqFtPrice(o.CartonsPerPallet); // Pallet SqFt price (##.##)
	o.HalfPalletSqFtPrice = o.CalculateSqFtPrice(o.CartonsPerHalfPallet); //Half Pallet SqFt price (##.##)
	o.CartonSqFtPrice = o.CalculateSqFtPrice(0); // Carton SqFt price (##.##)
	
	o.SqFtPerPallet = o.CalculateSqFtCoverage(o.CartonsPerPallet); // (format to string?)
	o.SqFtPerHalfPallet = o.CalculateSqFtCoverage(o.CartonsPerHalfPallet); // (format to string?)
	
	// formatting functions
	function addCommas(nStr)
	{
		nStr += '';
		var x = nStr.split('.');
		var x1 = x[0];
		var x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}
	// formatMoney(x){} ??
}



//TODO? write an Accessory Object in JS
function Accessory(id, title, imgUrl, h, w, l, price, priceunit){}

//TODO? add a calculator singleton;