/*
'Author					: Stefan Kruger
'Date Created			: 05-Apr-2006
'Last Changed by		: Stefan Kruger
'Date Last Changed		: 05-Apr-2006
'Version				: 1.0.05042006
'Comments/Changes:
'Date:			Person:					Desc:
'------------------------------------------------------------------------------------------------------
'05-Apr-2006	Stefan Kruger			Created file from aw102 template

'ToDo List:
'Date:			Person:					Desc:
'------------------------------------------------------------------------------------------------------
*/

/******************
Custom grid classes
******************/
if (!window.Expert) var Expert = {};
if (!Expert.CSV) Expert.CSV = {};

Expert.CSV.Table = AW.HTTP.Request.subclass();
Expert.CSV.Table.create = function(){
	var obj = this.prototype;
	//Start new properties
	obj.defineProperty("currentPage","");
	obj.defineProperty("maxPage","");
	obj.defineProperty("rowLimit","");
	obj.defineProperty("recordCount","");
	//End new properties
	obj.response = function(input){//Parameter used to be called "text"
		//Start new code
		//Handle paging info
		var self = this;
		var text = "";
		var splitArray;
		//Workaround for filtering blank result set error.
		if (input != "") {
			splitArray = input.split("|^^|")
		}
		else {
			splitArray = [""];
		}
		//Process array and display
		//Case : Only one split element --> Assume no paging info present, only data.
		if (splitArray.length == 1) {
			//Set grid datatext
			self.setProperty("currentPage",1);
			self.setProperty("maxPage",1);
			if (splitArray[0]) {
				text = splitArray[0];
			}
		}
		//Case : Two split elements --> Assume paging first, then data.
		else if (splitArray.length == 2) {
			//Set properties
			if (splitArray[0]) {
				var piSplit = splitArray[0].split("^||^");
				if (piSplit.length == 4) {
					self.setProperty("currentPage",parseInt(piSplit[0]));
					self.setProperty("maxPage",parseInt(piSplit[1]));
					self.setProperty("rowLimit",parseInt(piSplit[2]));
					//Update recordCount to reflect the page size limit
					if (parseInt(piSplit[3]) > parseInt(piSplit[2])){
						self.setProperty("recordCount",parseInt(piSplit[2]));
					}
					else {
						self.setProperty("recordCount",parseInt(piSplit[3]));
					}
				}
			}
			//Set grid datatext
			if (splitArray[1]) {
				text = splitArray[1];
			}
		}
		//Else : Unrecognised response --> Don't do anything.
		else {
			return;
		}
		
		//Update fix for empty grid search
		if (text == "") {
			this._rows = [];
			alert("No matches were found for the specified search.");
		}
		else {
			//This used to be the only line of code, now replaced by this whole IF block.
			this._rows = text.split(/\r*\n/);
		}
		//End new code
		this._data = [];
		if (this.$owner) {
	        this.$owner.clearScrollModel();
			this.$owner.clearSelectionModel();
			this.$owner.clearSortModel();
			this.$owner.clearRowModel();
			this.$owner.setRowCount(this.getCount());
			this.$owner.refresh();
		}
	};
	obj._rows = [];
	obj._data = [];
	obj.getCount = function(){
		return this._rows.length;
	};
	var pattern = new RegExp("(^|\\t|,)(\"*|'*)(.*?)\\2(?=,|\\t|$)", "g");
	obj.getData = function(c, r){
		if (!this._data[r]){
			var s = this._rows[r].replace(/""/g, "'");
			s = s.replace(pattern, "$3\t");
			s = s.replace(/\t$/, "");
			this._data[r] = s ? s.split(/\t/) : [];
		}
		return this._data[r][c];
	};
};