/*
 * zlstCsv.js
 *
 * Copyright (c) 2007-2008 by Zelestra, ZELESTRA.COM. All Rights Reserved.
 * Version 2.6 2008-12-10
 */

// Public Functions

var CSV = {

	parse: function(str) {
		var delimiter = ",";
		if (arguments.length > 1)
			delimiter = arguments[1];
		str = str.replace(/^\s+/, '').replace(/\s+$/, ''); // strip whitespace
		var len = str.length;
		if (len == 0)
			return "";
		var array = new Array();
		var i = 0;
		do {
			if ((i < len) && str.charAt(i) == "\"")
				i = CSV._getQuotedField(str,++i,delimiter,array);
			else
				i = CSV._getPlainField(str,i,delimiter,array);
		} while (i < len);
		return array;
	},

	_getPlainField : function(str,i,delimiter,array) {
		var j = str.indexOf(delimiter,i);
		if (j == -1) {
			array.push(str.substring(i,str.length));
			return str.length;
		}
		array.push(str.substring(i,j));
		return ++j;
	},

	_getQuotedField : function(str,i,delimiter,array) {
		var len = str.length;
		var result = "";
		for (var j=i; j<len; j++) {
			var c = str.charAt(j);
			if (c == "\"") {
				if (j + 1 < len) {
					c = str.charAt(j + 1);
					if (c == delimiter) {
						++j;
						++j;
						break;
					} else if (c == "\"") {
						result += "\"";
						++j;
					}
				} else {
					++j;
					break;
				}
			} else {
				result += c;
			}
		}
		array.push(result);
		return j;
	}
}