/* *************************************************************
** tourDev.JS - JS Form Validation and Calculation Library
** =======================================
** This library contains code to validate and calculate the values
** of steps 1 to 11 of the Tourist Development Tax online form. 
** This form is located inside the Entry.cfm cf file.
**
** To load this library in an HTML doc, put the following
** line in the doc's HEAD (before any other SCRIPT tags):
**
** <SCRIPT SRC="tourDev.js" LANGUAGE="JavaScript"></SCRIPT>
************************************************************* */

/* ********************************************************** */
/* Global Variables and Constants *************************** */
/* ********************************************************** */

var frmName = "entry"
var blanks = " \t\n\r";  // aka whitespace chars
/* ********************************************************** */
/* Init Utility Functions *********************************** */
/* ********************************************************** */



// This function formats a number string into a dollar format
// javascript.internet.com/forms/currency-format.html

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);
}

// Returns true if string s is empty

function isEmpty(s)
  {
  return ((s == null) || (s.length == 0));
  }


// Returns true if string s is empty or all blank chars

function isBlank(s)
  {
  var i;

  // Is s empty?
  if (isEmpty(s))
    return true;

  // Search through string's chars one by one until we find first
  // non-blank char, then return false; if we don't, return true
  for (i=0; i<s.length; i++)
    {   
    // Check that current character isn't blank
    var c = s.charAt(i);
    if (blanks.indexOf(c) == -1) 
      return false;
    }
  // All characters are blank
  return true;
  }


/* ********************************************************** */
/* Tax Form Validation & Calculations Functions ************* */
/* ********************************************************** */


// Validate line one of the Tax form
function valLineOne() {
	
	if (isBlank(document.getElementById("GrossRental").value))
		{
		alert("Gross Rental Receipt is Required")
     	document.getElementById("GrossRental").focus()
     	return false;
	} else if (isNaN(document.getElementById("GrossRental").value)) {
		document.getElementById("GrossRental").focus()
		alert("Gross Rental Receipt must be a valid dollar amount \r Please only use a numeric entry\r Please do not use $ in this field")
     	
     	return false;
	} else if ( document.getElementById("GrossRental").value <= 0) {
	 	alert("Gross Rental Receipt must be greater than zero")
 		document.getElementById("GrossRental").focus()
     	return false;
	} else {
		document.getElementById("GrossRental").value = formatCurrency(document.getElementById("GrossRental").value)
	 	document.getElementById("ExemptRental").disabled = false
		document.getElementById("TaxableRental").disabled = false
		return formatCurrency(document.getElementById("GrossRental").value); 
			
	}
	
		
}

function valLineTwo() {
	if (isBlank(document.getElementById("ExemptRental").value))
	{
		document.getElementById("ExemptRental").value = formatCurrency(0)
    	return formatCurrency(document.getElementById("ExemptRental").value);
	}
	else if ( document.getElementById("ExemptRental").value < 0) {
	 	alert("Less Exempt Receipts must be a positive number, greater than zero")
     	document.getElementById("ExemptRental").focus()
     	return false;
	}
	else if (isNaN(document.getElementById("ExemptRental").value)) {
	 	alert("Less Exempt Receipts must be a valid dollar amount\r Please only use a numeric entry\r Please do not use $ in this field")
     	document.getElementById("ExemptRental").focus()
     	return false;
	} else {
		return formatCurrency(document.getElementById("ExemptRental").value);
	}
}

function valLineThree() {
		if ( (valLineOne()) - (valLineTwo()) < 0 ) {
			alert("Total Taxable Receipts cannot be a negative value.\r Please check the values you have entered for Gross Rental and Exempt Receipts ")
    		document.getElementById("ExemptRental").value = ""
			document.getElementById("ExemptRental").focus()
			return false;
		} else {
			document.getElementById("TaxableRental").value = formatCurrency(document.getElementById("GrossRental").value - document.getElementById("ExemptRental").value);
			document.getElementById("TotalTaxCollected").disabled = false;
			document.getElementById("Adjustments").disabled = false;
			document.getElementById("TotalDue").disabled = false;
			valLineFour()
			return true;
		}
}

function radio_val(pct_val) {
	document.getElementById("pct").value = pct_val;
}

function valLineFour() {
	if (isBlank(document.getElementById("pct").value)) {
		document.getElementById("pct").value = 4;
		}

	var daVar = document.getElementById("pct").value / 100 * document.getElementById("TaxableRental").value;
	document.getElementById("TotalTaxCollected").value = formatCurrency(daVar)
	document.getElementById("Adjustments").focus()
}

function valLineFive() {
	if (isBlank(document.getElementById("Adjustments").value))
	{
		document.getElementById("Adjustments").value = formatCurrency(0)
    	return formatCurrency(document.getElementById("Adjustments").value);
	}
	else if (isNaN(document.getElementById("Adjustments").value)) {
	 	alert("Adjustments must be a valid dollar amount\r Please only use a numeric entry\r Please do not use $ in this field")
     	document.getElementById("Adjustments").focus()
     	return false;
	} else {
		return formatCurrency(document.getElementById("Adjustments").value);
	}
}

function valLineSix() {
	if (valLineFive()) {
		if (valLineFive() >= 0) {
			document.getElementById("TotalDue").value = formatCurrency(parseFloat(document.getElementById("TotalTaxCollected").value) + parseFloat(document.getElementById("Adjustments").value));			
		}
		else if (valLineFive() < 0) {
			document.getElementById("TotalDue").value = formatCurrency(parseFloat(document.getElementById("TotalTaxCollected").value) + parseFloat(document.getElementById("Adjustments").value));
		}
		
		var line8 = formatCurrency(Math.round((document.getElementById("TotalDue").value * 0.025) * 100) / 100);
		if(line8 > 30){
			document.getElementById("CollectionAllowance").value = 	"30.00";
		} else {
			document.getElementById("CollectionAllowance").value = formatCurrency(Math.round((document.getElementById("TotalDue").value * 0.025) * 100) / 100);
		}
		
		document.getElementById("Adjustments").value = formatCurrency(document.getElementById("Adjustments").value);
		document.getElementById("CollectionAllowance").disabled = false;
		document.getElementById("Penalty").disabled = false;
		document.getElementById("CurrentPeriodDue").disabled = false;
		return document.getElementById("TotalDue").value;
	} else {
		alert("Unable to calculate Total Taxs Due.\r Please check the value you have entered for Adjustments ")
		return false;
	}
}

function valLineSeven() {
	if (isBlank(document.getElementById("CollectionAllowance").value)) {
		document.getElementById("CollectionAllowance").value = formatCurrency(0);
		document.getElementById("Outstanding").disabled = false;
		document.getElementById("Amount").disabled = false;
		return document.getElementById("CollectionAllowance").value;
	}
	else if (isNaN(document.getElementById("CollectionAllowance").value)) {
	 	alert("Collection Allowance must be a valid dollar amount\r Please only use a numeric entry\r Please do not use $ in this field")
     	document.getElementById("CollectionAllowance").focus()
     	return false;
	}
	else if (document.getElementById("CollectionAllowance").value > 30 | document.getElementById("CollectionAllowance").value < 0) {
		alert("No negative symbol required. Collection Allowance can not be greater than $30.00")
    	document.getElementById("CollectionAllowance").value = formatCurrency(0)
		return false;
	} else {
		document.getElementById("CollectionAllowance").value = formatCurrency(document.getElementById("CollectionAllowance").value)
		document.getElementById("Outstanding").disabled = false;
		document.getElementById("Amount").disabled = false;  
		return document.getElementById("CollectionAllowance").value;
	} 
}

function valLineEight() {
	if (isBlank(document.getElementById("Penalty").value)) {
		document.getElementById("Penalty").value = formatCurrency(0);
		document.getElementById("Outstanding").disabled = false;
		document.getElementById("Amount").disabled = false;
		return document.getElementById("Penalty").value;
	}
	else if (isNaN(document.getElementById("Penalty").value)) {
	 	alert("Penalty must be a valid dollar amount\r Please only use a numeric entry\r Please do not use $ in this field")
     	document.getElementById("Penalty").focus()
     	return false;
	}
	else if (document.getElementById("Penalty").value < 0) {
		alert("Penalty must be greater than zero")
    	document.getElementById("Penalty").value = formatCurrency(0)
		return false;
	} else {
		document.getElementById("Penalty").value = formatCurrency(document.getElementById("Penalty").value)
		document.getElementById("Outstanding").disabled = false;
		document.getElementById("Amount").disabled = false;  
		return document.getElementById("Penalty").value;
	} 
}

function valLineNine() {
	/*
	if(!isNaN(document.getElementById("CollectionAllowance").value) && !isNaN(document.getElementById("Penalty").value)){
		if(document.getElementById("CollectionAllowance").value != 0 && document.getElementById("Penalty").value != 0){
			alert('You cannot have numbers greater than zero in both line 7 and line 8.');
			document.getElementById("CollectionAllowance").value='0.00';
			document.getElementById("Penalty").value='0.00';
		}
	}
	
	*/

	if(document.getElementById("Penalty").value <= 0){
		return document.getElementById("CurrentPeriodDue").value = formatCurrency((parseFloat(valLineSix()) - parseFloat(valLineSeven())) + parseFloat(valLineEight()));
	} else {
		return document.getElementById("CurrentPeriodDue").value = formatCurrency(parseFloat(valLineSix()) + parseFloat(document.getElementById("Penalty").value));
	}


}

function valLineTen() {
	if (isBlank(document.getElementById("Outstanding").value)) {
		document.getElementById("Outstanding").value = formatCurrency(0);
		return document.getElementById("Outstanding").value;
	}
	else if (isNaN(document.getElementById("Outstanding").value)) {
	 	alert("Prior Outstanding must be a valid dollar amount\r Please only use a numeric entry\r Please do not use $ in this field")
     	document.getElementById("Outstanding").focus()
     	return false;
	}
	else if (document.getElementById("Outstanding").value < 0) {
		alert("Prior Outstanding must be greater than zero")
    	document.getElementById("Outstanding").value = formatCurrency(0)
		return false;
	} else {
		document.getElementById("Outstanding").value = formatCurrency(document.getElementById("Outstanding").value)
		return document.getElementById("Outstanding").value;
	}
}

function valLineEleven() {
	return document.getElementById("Amount").value = formatCurrency(parseFloat(valLineNine()) + parseFloat(valLineTen()));
}

function reCalc() {
if (Trim(document.getElementById("TaxableRental").value) != "") {
	valLineThree()
	}
if (Trim(document.getElementById("TotalDue").value) != "" ) {
	valLineThree()
	valLineSix()
	}
if (Trim(document.getElementById("CurrentPeriodDue").value) != "") {
	valLineThree()
	valLineSix()
	valLineNine()
	}
if (Trim(document.getElementById("Amount").value) != "") {
	valLineThree()
	valLineSix()
	valLineNine()
	valLineEleven()
	}
}

function enableAll() {
	if (Trim(document.getElementById("GrossRental").value) != "") {
		
		document.getElementById("Outstanding").disabled = false;
		document.getElementById("Amount").disabled = false;
		document.getElementById("ExemptRental").disabled = false;
		document.getElementById("TaxableRental").disabled = false;
		document.getElementById("TotalTaxCollected").disabled = false;
		document.getElementById("Adjustments").disabled = false;
		document.getElementById("TotalDue").disabled = false;
		document.getElementById("CollectionAllowance").disabled = false;
		document.getElementById("Penalty").disabled = false;
		document.getElementById("CurrentPeriodDue").disabled = false;
	}
}