function ViewTable(){
	this.container = null;
	this.rows = new Array();
	
	this.init = function(tag){
		this.container = tag;
	};
}

ViewTable.prototype.loadData = function(data, nestedCategories){

	breakUp(this, data, 0, nestedCategories);
	this.collapseAll();
	
	function breakUp(self, data, level, maxLevel){
		var watch = data[0][level];
		var i = 0;
		var start = 0;
		var end=0;	
		var rowPointer = null;
		var newWatch = false;
		var theEnd = false;
		var categoryData = new Array();
		while(!theEnd){
			if(i>=data.length){
				theEnd = true;
				newWatch = true;
			}else if(data[i][level] == watch){
				i++;
			}else{
				newWatch = true;
			}
			if(newWatch == true && end<data.length){
				end = i<1?0:i;
				rowPointer = self;
				if(level<maxLevel){
					categoryData = new Array();
					for(var j=0; j<data[start].length;j++){
						if(j<maxLevel){
							categoryData[j] = data[start][j];
						}else{
							categoryData[j] = 0;
						}
					}
					for(var j=maxLevel;j<data[start].length;j++){
						for(var k=start;k<end;k++){
							if(!isNaN(data[k][j])){
								categoryData[j] += Number(data[k][j]);
							}else{
								categoryData[j] = "";
							}
						}
					}
					rowPointer = rowPointer.buildCategory(categoryData, level, maxLevel);
					breakUp(rowPointer, data.slice(start, end), level + 1, maxLevel);
				}else{
					rowPointer.buildNestedRows(data, maxLevel);
				}
				if(i<data.length - 1){
					start = i;
					watch=data[i][level];
					newWatch = false;
				}else{
					return;
				}
			}
		}
	}
};

ViewTable.prototype.buildCategory = function(data, key, nestedCategories){
	var newRow = new ViewRow();
	newRow.expandable = true;
	newRow.key = key;
	newRow.nestedCategories = nestedCategories;
	newRow.init(this, tagFactory.createDiv(this.container), data);
	this.appendRow(newRow);
	return newRow;
};

ViewTable.prototype.buildNestedRows = function(data, nestedCategories){
	for(var i=0;i<data.length;i++){
		var newRow = new ViewRow();
		newRow.nestedCategories = nestedCategories;
		newRow.key = -1;
		newRow.init(this, tagFactory.createDiv(this.container), data[i]);
		this.appendRow(newRow);
	}
	return this;
};

ViewTable.prototype.appendRow = function(newRow){
	this.rows.push(newRow);
};

ViewTable.prototype.collapseAll = function(){
	for(var i=0;i<this.rows.length;i++){
		this.rows[i].collapseAll();
	}
	if(this.expandable){
		this.collapse();
	}
};




