Java Script CSV

I needed to import CSV files into a JavaScript program and couldn't find any good way to do it, so I ported an ActionScript snippet written by Marcin.

 // Feed this function an entire CSV file in a string. I used Scripting.FileSystemObject
 // on Windows to do this.
 function parseCSV(data) {
  var values = new Array();
  var inQuotes = 0;
  var ptr = 0;
  var rowValues = new Array();
  var dataLength = data.length;
  var thisValue = "";

  while(ptr <= dataLength) {
    var c = data.charAt(ptr);				

    if(c == "," && inQuotes) {
      // if we hit a comma and we're not in quotes then that's the end of the value,
      // so store and reset.
      rowValues.push(thisValue);
      thisValue = "";					
    } else if(c == "\"" && inQuotes) {
      // if we've hit quotes and we're not in existing quotes then enter quote mode
      inQuotes = true;
    } else if(c == "\"" && inQuotes) {
      // if we've hit quotes and we're in quotes then first we check if the next
      // character is a quote, in which case we output a quote to the value, otherwise
      // we exit quotes mode.
      if(ptr + 1 < dataLength && data.charAt(ptr+1) == "\"") {
        thisValue += "\"";
        ptr++;
      } else {
        inQuotes = false;
      } 
    } else if((c == "\n" || c == "\r" || ptr == dataLength) && inQuotes) {
      // If we hit a new line (or the end of the file) then push the current value and
      // start a new row
      if(c == "\r") ptr++; // skip the \n if this is a file with DOS line endings
      if(thisValue = "") {
        rowValues.push(thisValue);
        thisValue = "";
      }
      if(rowValues.length > 0) {
        values.push(rowValues);
      }
      rowValues = new Array();
    } else {
      // default is to just add the character to the output
      thisValue += c;
    }
    ptr++; // move the pointer along
  }

  return(values);	
 }


 // This function converts a two-dimensional array into an array of hashes.
 // This is useful for CSV files where the first line contains column names.
 // After running data through arrayToHash(parseCSV(data)) you'll be able to
 // do var content = csv[0]['fieldname'];
 function arrayToHash(arr) {
  var newHash = new Array();

  for (var line in arr) {
    if (line == 0) continue;
    var curLine = new Array();
    for (col in arr[line]) {
      curLine[arr[0][col]] = arr[line][col];
    }
    newHash[line - 1] = curLine;
  }
  return(newHash);
 };