/* This script calculates sub-totals and a total order amount
Original author: My Colorful Treasures
Last Updated: Mar. 21, 2010
*/

function calculateSubTotal(frm, totaltype, item) {
    var quantity = parseInt(document.getElementById(item).value);
	var subTotalId = item.split('_')[0] + "_" + totaltype;
	if (document.getElementById(item).value == "") {
	    document.getElementById(item).value = "";
	    document.getElementById(subTotalId).value = "";
    } else if (isNaN(quantity) || quantity == 0) {
	    alert("Please enter a valid number greater than 0!");
	    document.getElementById(item).value = "";
	    document.getElementById(subTotalId).value = "";
    } else {
		var price = parseFloat(item.substring(item.lastIndexOf("_") + 1)) / 100;
		var subTotal = quantity * price;
		document.getElementById(subTotalId).value = "$" + roundDecimals(quantity * price, 2);
	}

    calculateTotals(frm);
}

function calculateTotals(frm) {
    var comSubTotal = 0;
	var noncomSubTotal = 0;
    var orderTotal = 0;
	var comQtyTotal = 0;

    for (var i=0; i < frm.elements.length; ++i) {
        var formField = frm.elements[i];
        var formId = formField.id;
        if (formId.match(/_comtotal/)) {
			var itemPrice = parseFloat(document.getElementById(formId).value.split('$')[1]);
            if (itemPrice >= 0) {
                comSubTotal += itemPrice;
            }
        }
		if (formId.match(/_noncomtotal/)) {
			var itemPrice = parseFloat(document.getElementById(formId).value.split('$')[1]);
            if (itemPrice >= 0) {
                noncomSubTotal += itemPrice;
            }
        }
		if (formId.match(/_\d+/)) {
		   var totalField = document.getElementById(formId.replace(/_\d+/, '_comtotal'));
		   if (totalField) {
		   	  var quantity = parseInt(document.getElementById(formId).value);
		   	  if (quantity >= 0) {
		   	  	 comQtyTotal += quantity;
		   	  }
		   }
		}
    }
	document.getElementById("comtotalamount").value = "$" + roundDecimals(comSubTotal, 2);
	document.getElementById("noncomtotalamount").value = "$" + roundDecimals(noncomSubTotal, 2);
	orderTotal = comSubTotal + noncomSubTotal;
    document.getElementById("totalorderamount").value = "$" + roundDecimals(orderTotal, 2);
	document.getElementById("comqtytotalamount").value = comQtyTotal;
}

function roundDecimals(originalNumber, decimals) {
    var result1 = originalNumber * Math.pow(10, decimals);
    var result2 = Math.round(result1);
    var result3 = result2 / Math.pow(10, decimals);
    return padWithZeros(result3, decimals);
}

function padWithZeros(roundedValue, decimalPlaces) {
    var valueString = roundedValue.toString();
    var decimalLocation = valueString.indexOf(".");

    if (decimalLocation == -1) {
        decimalPartLength = 0;
        valueString += decimalPlaces > 0 ? "." : "";
    }
    else {
        decimalPartLength = valueString.length - decimalLocation - 1;
    }
    
    var padTotal = decimalPlaces - decimalPartLength;
    
    if (padTotal > 0) {
        for (var counter = 1; counter <= padTotal; counter++) { 
            valueString += "0";
		}
    }
    return valueString;
}

function processOrder(frm) {
    var passedvalidation = validateInfo();
	if (!passedvalidation) {
	    return false;
	}
	 
    var orderdetails = "";
    var inputs = frm.elements;
    for(var i=0;i<inputs.length;i++){
        if(inputs[i].type == 'text' && inputs[i].id.match(/_\d+/) && inputs[i].value != "") {
	        if (orderdetails != "") {
	            orderdetails += "|";
	        }
	        var price = roundDecimals(parseFloat(inputs[i].id.split("_")[1]) / 100, 2);
	        var totalField = document.getElementById(inputs[i].id.replace(/_\d+/, '_comtotal'));
			if (!totalField) {
	            totalField = document.getElementById(inputs[i].id.replace(/_\d+/, '_noncomtotal'));
			}
	        orderdetails += inputs[i].name + "_" + inputs[i].value + "_$" + price + "_" + totalField.value;
	    }
    }
	frm.blockspambots.value = 7*6*2001;
	frm.orderdetails.value = orderdetails;
    return true;
}

function validateInfo() {
    if (!validcharacters(document.form1.distributorname.value) || !document.form1.distributorname.value.length) {
	   alert("Please enter a valid distributor name!");
	   return false;
	
	} else if (!validcharacters(document.form1.distributoremail.value) || !document.form1.distributoremail.value.length) {
	   alert("Please enter a valid distributor email!");
	   return false;
	
	} else if (!validcharacters(document.form1.repnumber.value) || !document.form1.repnumber.value.length) {
	   alert("Please enter a valid rep id number!");
	   return false;
	}
	return true;
}

function validcharacters(text)
{
	var currentText = text;
	var character;
	var code;
	for(var j=0; j< currentText.length; j++)
	{
		  character = currentText.charAt(j);
		  code = character.charCodeAt(0);
		  if((code < 32 || code > 126) && code != 13 && code != 10)
		  {
		    return false;
		  }
	}
    return true;
}
