Number to String Converter

Simply converts integers (up to 45-digits long) into their proper, written format. Accepts negative numbers and commas in the input.

HTML

<table id="page-content">
  <tr>
    <td colspan="2">
      Enter your number:
    </td>
  </tr>
  <tr>
    <td id="input-td">
      <input id="input" type="text" />
    </td>
    <td id="button-td">
      <button id="convert-btn">Convert to String</button>
    </td>
  </tr>
  <tr>
    <td colspan="2" id="output"></td>
  </tr>
</table>

CSS

html, body {
  font-family: Helvetica, Arial, sans-serif;
}

#input, #convert-btn {
  width: 100%;
  font-size: 18px;
}
#page-content {
  width: 800px;
  margin: auto;
}
#page-content td {
  padding: 3px 10px;
}
#input-td {
  width:70%;
}
#button-td {
  width:30%;
}

@media (max-width: 800px) {
  #page-content {
    width: 100%;
  }
  #input-td {
    width:60%;
  }
  #button-td {
    width:40%;
  }
}

JavaScript

var $input, $output, $convertBtn;
var writtenNum;

function main() {
	$input = $("#input");
	$output = $("#output");
  $convertBtn = $("#convert-btn");
  writtenNum = {};
  
  // $input.bind("input", updateOutput);
  
  $convertBtn.click(function(){
  	updateOutput();
  });
  
  // Initialize demo
  $input.val("-12,758,174,013");
  updateOutput();
}

function updateOutput() {
	try { 
    writtenNum = new WrittenNumber($input.val().trim());
    $output.text(writtenNum.toString());
  } catch (ex) {
  	if ($input.val().trim() === '') $output.text("");
    else $output.text(ex);
  }
}

function WrittenNumber(numStr) {
	if (numStr === "" || typeof numStr === "undefined") throw "ERROR: No number was provided. Please provide a valid integer.";
  
  var str = numStr;
	var validChars = ['0','1','2','3','4','5','6','7','8','9',','];
  var teenStrs = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
  var numStrs = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
  var tenStrs = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
  var magnitudes = ["", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion"];
  var numChunks = [];
  var textValue = "";
  var _self = this;
  this.isNegative = false;
  
  // Verify the string is a valid integer, else throw an error
	var num = parseInt(numStr);
  for (var i = 0; i < numStr.length; i++) {
  	if (i === 0 && numStr[i] === '-') {
    	continue;
    }
  	if (validChars.indexOf(numStr[i]) < 0) {
    	throw "ERROR: A valid integer was expected. '" + numStr + "' provided.";
    }
  }
  
  // Remove the commas from the number string
  numStr = numStr.split(',').join('');
  
  // set this.isNegative and then remove the negative sign from the number string
  this.isNegative = num <...