﻿function currency(Amount) { 
	// returns the amount in the .99 format 
	Amount -= 0; 
	Amount = (Math.round(Amount*100))/100; 
	return (Amount == Math.floor(Amount)) ? Amount + '.00' : ( (Amount*10 == Math.floor(Amount*10)) ? Amount + '0' : Amount); 
} 

function IsRequired(RequiredElements, SelectedElement){
	// Checks if field is required
	if (RequiredElements == "") return false;
	SelectedElement = SelectedElement.toLowerCase();
	RequiredElements = RequiredElements.toLowerCase();
	
	var ArrayRequired = RequiredElements.split(",");

	for (i=0;i<ArrayRequired.length;i++){
		if (ArrayRequired[i] == SelectedElement) return true;		
	}
	
	return false;
}

function CalcPrice(thatForm){
    var ShowTextboxName = true;
    var Delimiter = "{br}";
var StockCodeDelimiter = "|";
	var TempProductOptionArray, ProductElement;
	var Submitted = false;
	if(arguments.length>1){Submitted = true;}
	
	var FormFields = thatForm.elements.length;
	var Required = "";
	if (thatForm.required) Required = thatForm.required.value;
	
	var Name = "";
	var Price = 0;
	var Units = 0;
	var StockCode = "";	
	thatForm.product.value = "";
	thatForm.price.value = "";
	// Checks each productoption
	for (var i = 1; i<FormFields; i++) {
		
		// Checks if element is checkbox and adds to price if checked
		var ElementType = thatForm.elements[i].type;
		var ElementName = thatForm.elements[i].name.toLowerCase();

		if (ElementType=='checkbox' || ElementType=='radio'){
			if (thatForm.elements[i].checked){
				ProductElement = thatForm.elements[i].value;
			}else{
				ProductElement = ":0.00";
			}
		}else{
			ProductElement = thatForm.elements[i].value;
		}
		
		// Get Name, Price, Units, StockCode per option
		if (thatForm.elements[i].disabled==false){		
			TempProductOptionArray = ProductElement.split(":");

			// Name

			// Check if required
			if (Submitted && IsRequired(Required, ElementName) && (TempProductOptionArray[0]== null || TempProductOptionArray[0]== "")){alert(RequiredMessage); thatForm.elements[i].focus(); return false;}

			// Name of textbox beside option
			if (TempProductOptionArray[0]!= null && TempProductOptionArray[0]!= "" && ElementName.indexOf("product") > -1){				
				if (ShowTextboxName && (ElementType=='text' || ElementType=='textarea')){
					var CorrectTextboxName = thatForm.elements[i].name;
					CorrectTextboxName = CorrectTextboxName.replace(/product/gi,"");
					Name += CorrectTextboxName + " - " + (TempProductOptionArray[0]) + Delimiter;
				}else{
					Name += (TempProductOptionArray[0]) + Delimiter;
				}
			}
			
			// Price
			if (TempProductOptionArray[1]!=null && isNaN(TempProductOptionArray[1])==false) {Price += parseFloat(TempProductOptionArray[1])};
			
			// Units
			if (TempProductOptionArray[2]!= null) Units += parseFloat(TempProductOptionArray[2]);

			// StockCode
			if (TempProductOptionArray[3]!= null) StockCode += (TempProductOptionArray[3]) + StockCodeDelimiter;

		}

	}
	
	// Creates price for product
	Price = currency(Price + (thatForm.price.value-0));	
	var TotalPrice = currency(Price*(thatForm.qty.value-0));	// not currently utilised

	// Currencies
//	if(CurrencyList.length > 0){
//		var CurrencyMessage = "";
//		
//		for (i=1; i<=TotalCurrencies; i++){
//			CurrencyMessage += CurrencyList[i][0] + currency(Price*CurrencyList[i][1]) + ", ";
//		}
//	
//		if (CurrencyMessage != "") CurrencyMessage = CurrencyMessage.substring(0,CurrencyMessage.length-2);
//		CurrencyMessage = CurrencyText + CurrencyMessage;
//		if (thatForm.PriceMessage) thatForm.PriceMessage.value = CurrencyMessage;
//	}

	// Displays price
	thatForm.DisplayPrice.value = Price;
	
	// Updates StockCode for cart
	if (StockCodeDelimiter != "") StockCode = StockCode.substring(0,StockCode.length-StockCodeDelimiter.length);

	// Updates product for cart
	Name = Name.replace(/'/g,"");
	Name = Name.replace(/"/g,"");
	Name = Name.replace(/:/g,"");
	Name = Name.replace(/\//g,"");
	Name = Name.replace(/\\/g,"");
	if (Name != "") Name = Name.substring(0,Name.length-Delimiter.length);

	// Submitted to Cart
	if (Submitted){
		thatForm.product.value = cleanProduct(Name);
		thatForm.price.value = Price;
		if (thatForm.units) thatForm.units.value = Units;
		if (thatForm.scode) thatForm.scode.value = StockCode;
	}

	return true;
}
function cleanProduct(Product){
	// Gets rid of all [ArrayNames] if used in 
	// conjunction with Dynamic List Script
	// Also, gets rid of (ImageName) if used in
	// conjunction with Image Options Script
	
	var ArrayNameStart = 0;
	var ArrayNameEnd = 0; 
	var ProductTemp = "";
	var ProductTempDelete = "";
	
	ProductTemp = Product;
	
	// Loops each text character in ing and removes [arraynames]
	for (var i=0;i<Product.length;i++){
		if (Product.substring(i, i+1)=='['){ArrayNameStart = (i)};
		if (Product.substring(i, i+1)==']'){ArrayNameEnd = (i+1)};
		
		if (ArrayNameEnd>0){
			ProductTempDelete = Product.substring(ArrayNameStart, ArrayNameEnd);
			ProductTemp = ProductTemp.replace(ProductTempDelete, "");
			ArrayNameEnd = 0;
			ArrayNameStart = 0;
		}
	}
	
	for (var i=0;i<Product.length;i++){
		if (Product.substring(i, i+1)=='('){ArrayNameStart = (i)};
		if (Product.substring(i, i+1)==')'){ArrayNameEnd = (i+1)};
		
		if (ArrayNameEnd>0){
			ProductTempDelete = Product.substring(ArrayNameStart, ArrayNameEnd);
			ProductTemp = ProductTemp.replace(ProductTempDelete, "");
			ArrayNameEnd = 0;
			ArrayNameStart = 0;
		}
	}

	return ProductTemp;
}