var BaseCost	= new Array(120.00, 135.00, 142.50);
var CostPerPage	= new Array(0.017, 0.020, 0.033);
var BindingCost	= new Array(0.85, 0.98, 0.98);
var QtyDiscount	= new Array(1.00, 0.92, 0.85, 0.80, 0.75);
var publisherDiscount = 0.80;
var customerMarkup = 1.23;

function formReset() {
	// Put the cursor in the first input field.
	document.forms.fieldForm.NumPages.focus();
	return true;
}

function clearResults() {
	var x = document.getElementsByName('output');
	for (var i = 0; i < x.length; i++)
		x[i].value = "";
}

function extractNumber(event) {
	var e = event ? event : window.event;
	var src = e.srcElement ? e.srcElement : e.target;
	var temp = src.value;

	// avoid changing things if already formatted correctly
	var reg0 = new RegExp('^[0-9]*$');
	if (reg0.test(temp))
		return true;

	// replace all non numbers
	var reg1 = new RegExp('[^0-9]', 'g');
	src.value = temp.replace(reg1, '');
}

function calculatePrice(pages, size, qty) {
	var qtyIndex = Math.floor(qty / 500);
	if (qtyIndex > 4)
		qtyIndex = 4;

	return (BaseCost[size] / qty + CostPerPage[size] * pages + BindingCost[size]) * QtyDiscount[qtyIndex];
}

function updatePrice(selectInvalid) {
	var y = document.getElementsByTagName('INPUT');
	for (var i = 0; i < y.length; i++) {
		var node = y[i];

		if (node.required && (node.value == "" || node.value == 0)) {
			clearResults(); // missing some required data
			if (selectInvalid) {
				node.focus();
				node.select();
			}
			return;
		}
	}
	var pages = document.forms.fieldForm.NumPages.value;
	var size  = document.forms.fieldForm.BookSize.value;
	var qty   = document.forms.fieldForm.Qty.value;
	var rows = document.getElementById("outputTable").rows;
	var multiplier = (rows.length == 2) ? publisherDiscount : customerMarkup;
	for (i = 1; i < rows.length; i++) {
		var q = qty * i;
		var priceEach = calculatePrice(pages, size, q) * multiplier;
		document.getElementById("Qty" + i).value = q;
		document.getElementById("Each" + i).value = "$" + priceEach.toFixed(2);
		document.getElementById("Total" + i).value = "$" + (priceEach * q).toFixed(2);
	}
}

function commandChange(event) {
	updatePrice(false);
}

function popupChange(event) {
	updatePrice(false);
}

function calculate_onclick() {
  var msg="";
  if(document.getElementById("binding").selectedIndex==0) {
    msg+="\nPlease select a Binding Type.";
  }
  if(document.getElementById("booksize").selectedIndex==0) {
    msg+="\nPlease select a Book Size.";
  }
  if(document.frm.pages.value=="") {
    msg+="\nPlease enter Number of Pages.";
  }
  if(document.frm.discount.value=="") {
    msg+="\nPlease enter Discount Rate.";
  }
  if(document.frm.retailprice.value=="") {
    msg+="\nPlease enter Suggested Retail Price.";
  }
  if(msg=="") {
    calculate_func_cost();
  }
  else {
    alert(msg);
  }
}

function retailprice_onchange() {
  if(  parseFloat(document.getElementById("retailprice").value) < parseFloat(document.frm.retailprice_min_hid.value) ) {
    alert("Retail Book Price can not be less than Min. Retail Book Price");
    document.frm.retailprice.value="";
    calculate_func_cost()
  }
  else {
    document.getElementById("txt_profit").innerHTML="Royalty. Wholesale cost less printing. You keep 100% of net profits."
    calculate_func_cost()
  }
}

function reset_page() {
  document.frm.pages.value=""
  document.frm.pages.disabled=true;
  document.frm.discount.value=""
  document.frm.discount.disabled=true;
  document.frm.retailprice.value="";	
  document.frm.retailprice.disabled=true;
  document.frm.netprofit.value="";	
  document.getElementById('binding').value = '';
  document.getElementById('booksize').value = '';
  document.frm.booksize.disabled=true;
  document.getElementById("txt_profit").innerHTML="";
  document.getElementById("txt_cost").style.display='none';
  document.getElementById("txt_rate1").style.display='none';
  document.getElementById("txt_rate2").style.display='none';
  document.getElementById("cost_div").innerHTML="";
  document.getElementById("retailprice_min_div").innerHTML="";
  document.getElementById("txt_size").innerHTML="";
  document.getElementById("txt_pages1").innerHTML="";
  document.getElementById("txt_pages2").innerHTML="";
  document.getElementById("txt_price1").innerHTML="";
  document.getElementById("txt_price2").innerHTML="";
  document.getElementById("txt_profit").innerHTML="";
  document.getElementById("desc_cost").innerHTML="";
  document.getElementById("desc_retailprice_min_div").innerHTML="";
}

function func_cost() {
  var cost;
  if(document.getElementById("binding").selectedIndex==1) {
    if(document.getElementById("booksize").selectedIndex==1 || document.getElementById("booksize").selectedIndex==2 || document.getElementById("booksize").selectedIndex==3) {
      if(parseFloat(document.frm.pages.value)<=104) {
        cost=3.5;
      }
      else {
        cost=1.50 + (.02 * parseFloat(document.frm.pages.value));
      }
    }
    else if(document.getElementById("booksize").selectedIndex==4 || document.getElementById("booksize").selectedIndex==5) {
      if(parseFloat(document.frm.pages.value)<=104) {
        cost=5.05;
      }
      else {
        cost=2.2 + (.028 * parseFloat(document.frm.pages.value));
      }
    }
  }
  else if(document.getElementById("binding").selectedIndex==2) {
    if(document.getElementById("booksize").selectedIndex==1 || document.getElementById("booksize").selectedIndex==2 ) {
      cost=11.85 + (.02 * parseFloat(document.frm.pages.value));
    }
    else if(document.getElementById("booksize").selectedIndex==3 ) {
      cost=8.1 + (.028 * parseFloat(document.frm.pages.value));
    }
  }
  var cost_div = document.getElementById("cost_div")
  cost_div.innerHTML =   formatCurrency(cost); 
  var retailprice_min_div = document.getElementById("retailprice_min_div")
  if(document.frm.discount.value!="") {
    retailprice_min_div.innerHTML = formatCurrency( cost/ (1- (parseFloat(document.frm.discount.value) / 100))); 
    document.frm.retailprice_min_hid.value = Math.round(( cost/ (1- (parseFloat(document.frm.discount.value) / 100))) *100)/100;
  }
  else {
    retailprice_min_div.innerHTML =  ""; 
    document.frm.retailprice_min_hid.value="";
  }

  if(document.frm.retailprice.value!="" && document.frm.discount.value!="") {
    document.frm.netprofit.value=formatCurrency ( (document.frm.retailprice.value * (1- (parseFloat(document.frm.discount.value) /  100 )) ) - cost  ) 
  }
  else {
    document.frm.netprofit.value=""
  }
}

function pages_onchange() {
  var msg="";
  msg=IsNumeric("Page Number",document.frm.pages.value)
  if(msg=="") {
    if (parseFloat(document.frm.pages.value)<document.frm.pages_min.value) {
      msg+=(document.frm.binding.value + " binding requireds a minimum of " + document.frm.pages_min.value  + " pages.  \n");
      document.frm.pages.value=document.frm.pages_min.value;
    }

    if(document.frm.pages.value%4!=0) {
      document.frm.pages.value=document.frm.pages.value-document.frm.pages.value%4+4
    }

    if(msg!="") {
      alert(msg);
    }
    else {
    }
  }
  else {
    alert(msg);
  }

  document.getElementById("desc_cost").innerHTML="Book Printing Cost";
  document.getElementById("txt_rate1").style.display='';
  document.getElementById("txt_rate2").style.display='';
  document.getElementById("txt_cost").style.display='';
  calculate_func_cost()
}

function calculate_func_cost() {
  if(document.frm.pages.value!="" && document.frm.booksize.value!="" && document.frm.binding.value!="" ) { 
    func_cost()
  }	
}

function size_onchange() {
  document.getElementById("txt_pages1").innerHTML="Interior B/W pages."
  document.getElementById("txt_pages2").innerHTML="For books with color interior pages, please call."
  document.frm.pages.disabled=false;
  document.frm.discount.disabled=false;
  document.frm.retailprice.disabled=false;
  calculate_func_cost()
}

function discount_onchange() {
  var msg="";
  msg=IsNumeric("Discount Rate",document.frm.discount.value)
  if(msg=="") {
    if (parseFloat(document.frm.discount.value)<20 || parseFloat(document.frm.discount.value)>55 ) {
      alert("Discount Rate must be between 20% and 55%.");
      document.frm.discount.value=document.frm.discount_hid.value;
    }
    else {
      document.frm.discount_hid.value=document.frm.discount.value;
    }
  }
  else {
    document.frm.discount.value=document.frm.discount_hid.value;
    alert(msg);
  }

  document.getElementById("desc_retailprice_min_div").innerHTML="Min. Retail Book Price";
  document.getElementById("txt_price1").innerHTML="You get to set the suggested retail price.";
  document.getElementById("txt_price2").innerHTML="We recommend a price ending in $.95 ";
  calculate_func_cost()
}

function binding_onchange() {
  document.frm.booksize.disabled=false;
  document.getElementById("txt_size").innerHTML="Select finished book size."
  if(document.getElementById("binding").selectedIndex==1) {
    document.frm.pages_min.value=48;
    document.getElementById("booksize").options[1].text='6" x 9"';
    document.getElementById("booksize").options[1].value='6 x 9';
    document.getElementById("booksize").options[2].text='5" x 8"'
    document.getElementById("booksize").options[2].value='5 x 8'
    document.getElementById("booksize").options[3].text='5.5" x 8.5"';
    document.getElementById("booksize").options[3].value='5.5 x 8.5';
    document.getElementById("booksize").options[4].text='7" x 10"';
    document.getElementById("booksize").options[4].value='7 x 10';
    document.getElementById("booksize").options[5].text='8.25" x 11"';
    document.getElementById("booksize").options[5].value='8.25 x 11';
  }
  else if(document.getElementById("binding").selectedIndex==2) {
    document.frm.pages_min.value=108;
    if(document.frm.pages.value < 108) {
      document.frm.pages.value="";
    }
    document.getElementById("booksize").options[1].text='6" x 9"';
    document.getElementById("booksize").options[1].value='6 x 9';
    document.getElementById("booksize").options[2].text='5.5" x 8.5"';
    document.getElementById("booksize").options[2].value='5.5 x 8.5';
    document.getElementById("booksize").options[3].text='7" x 10"';
    document.getElementById("booksize").options[3].value='7 x 10';
    document.getElementById("booksize").options[4].text='';
    document.getElementById("booksize").options[4].value='';
    document.getElementById("booksize").options[5].text='';
    document.getElementById("booksize").options[5].value='';
  }
  calculate_func_cost()
}

function IsNumeric(FormField,str){
  var ValidChars = "0123456789";
  var IsNumber=true;
  var Char;
  var strMessage =""	
  for (i = 0; i < str.length && IsNumber == true; i++){ 
    Char = str.charAt(i); 
    if (ValidChars.indexOf(Char) == -1){
      IsNumber=false;	
      strMessage = "\n" + FormField + " must be a numeric value."
    }
  }
  return strMessage;
}

function formatCurrency(num) {
  num = num.toString().replace(/\$|\,/g,'');
  if(isNaN(num))
    num = "0";
  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num*100+0.50000000001);
  cents = num%100;
  num = Math.floor(num/100).toString();
  if(cents < 10)
    cents = "0" + cents;
  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
  return (((sign)?'':'-') + '$' + num + '.' + cents);
}
