/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.data.old.format.Csv");
dojo.require("dojo.lang.assert");
dojo.data.old.format.Csv = new function () {
	this.getArrayStructureFromCsvFileContents = function (csvFileContents) {
		dojo.lang.assertType(csvFileContents, String);
		var lineEndingCharacters = new RegExp("\r\n|\n|\r");
		var leadingWhiteSpaceCharacters = new RegExp("^\\s+", "g");
		var trailingWhiteSpaceCharacters = new RegExp("\\s+$", "g");
		var doubleQuotes = new RegExp("\"\"", "g");
		var arrayOfOutputRecords = [];
		var arrayOfInputLines = csvFileContents.split(lineEndingCharacters);
		for (var i in arrayOfInputLines) {
			var singleLine = arrayOfInputLines[i];
			if (singleLine.length > 0) {
				var listOfFields = singleLine.split(",");
				var j = 0;
				while (j < listOfFields.length) {
					var space_field_space = listOfFields[j];
					var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, "");
					var field = field_space.replace(trailingWhiteSpaceCharacters, "");
					var firstChar = field.charAt(0);
					var lastChar = field.charAt(field.length - 1);
					var secondToLastChar = field.charAt(field.length - 2);
					var thirdToLastChar = field.charAt(field.length - 3);
					if ((firstChar == "\"") && ((lastChar != "\"") || ((lastChar == "\"") && (secondToLastChar == "\"") && (thirdToLastChar != "\"")))) {
						if (j + 1 === listOfFields.length) {
							return null;
						}
						var nextField = listOfFields[j + 1];
						listOfFields[j] = field_space + "," + nextField;
						listOfFields.splice(j + 1, 1);
					} else {
						if ((firstChar == "\"") && (lastChar == "\"")) {
							field = field.slice(1, (field.length - 1));
							field = field.replace(doubleQuotes, "\"");
						}
						listOfFields[j] = field;
						j += 1;
					}
				}
				arrayOfOutputRecords.push(listOfFields);
			}
		}
		return arrayOfOutputRecords;
	};
	this.loadDataProviderFromFileContents = function (dataProvider, csvFileContents) {
		dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base);
		dojo.lang.assertType(csvFileContents, String);
		var arrayOfArrays = this.getArrayStructureFromCsvFileContents(csvFileContents);
		if (arrayOfArrays) {
			var arrayOfKeys = arrayOfArrays[0];
			for (var i = 1; i < arrayOfArrays.length; ++i) {
				var row = arrayOfArrays[i];
				var item = dataProvider.getNewItemToLoad();
				for (var j in row) {
					var value = row[j];
					var key = arrayOfKeys[j];
					item.load(key, value);
				}
			}
		}
	};
	this.getCsvStringFromResultSet = function (resultSet) {
		dojo.unimplemented("dojo.data.old.format.Csv.getCsvStringFromResultSet");
		var csvString = null;
		return csvString;
	};
}();

