/**
 * @param String container 
 * @param String tableId 
 * @param Array columns
 * @param Function itemClickHandler
 * @param Boolean tdAsItem
 */
function DataGrid(container, tableId, columns, itemClickHandler, tdAsItem){
	this.container = container;
	this.tableId = tableId;
	this.columns = columns;
	this.itemClickHandler = itemClickHandler;
	this.tdAsItem = tdAsItem;
	this.tbody = null;
	this.data = null;
	
	this.createChildren();
}

/**
 * @private
 */
DataGrid.prototype.createChildren = function(){
	
	var cols = this.columns;
	var cont = $('#'+this.container);
	var t; 
	var tHead; 
	var tHeadTr; 
	var tBody; 
	
	cont.append('<table id="'+this.tableId+'"/>');
	
	t = $('#'+this.container+' table');
	t.append('<thead/>');
	tHead = $('#'+this.container+' table thead');
	tHead.append('<tr/>');
	tHeadTr = $('#'+this.container+' table thead tr');
	
	for(var i=0; i<cols.length; i++){
		tHeadTr.append('<th class="th'+i+'">'+cols[i].title+'</th>');
	}
	
	t.append('<tbody/>');
	this.tbody = $('#'+this.container+' table tbody');
	
	
}


/**
 * @param String title
 * @param int colIndex
 */
DataGrid.prototype.setColumnTitle = function(title, colIndex){
	var th = $('#'+this.container+' table thead tr th.th'+colIndex);
	th.empty();
	th.append(title);
}

/**
 * @private
 */
DataGrid.prototype.refresh = function(){
	this.tbody.empty();
	
	var data = this.data;
	var cols = this.columns;
	
	var tr;
	
	for(var i=0; i<data.length; i++){
		tr = '<tr class="'+ (i%2==0 ? 'pair' : 'notpair') +'">';
			
		for(var x=0; x<cols.length; x++){
//			if(cols[x].labelFunction){
//				tr += '<td class="td'+x+'">'+ cols[x].labelFunction(data[i], cols[x]) + '</td>';
//			}else{
//				tr += '<td class="td'+x+'">' + data[i][cols[x].dataField] + '</td>';
//			}
			
			var tdContent = cols[x].labelFunction ?  cols[x].labelFunction(data[i], cols[x]) : data[i][cols[x].dataField];
			var tdClass = "td"+x+(tdContent ? " content" : "");
			
			tr += '<td class="'+tdClass+'">' + tdContent + '</td>';
		}
		tr += '</tr>';
		
		this.tbody.append(tr);
		
	}
	
	if(this.tdAsItem){
		this.tbody.find("td").hover( BoundMethod.create(this, this._tdOverHandler), BoundMethod.create(this, this._tdOutHandler) );
		this.tbody.find("td").click( BoundMethod.create(this, this._tdClickHandler) );
	}else{
		this.tbody.find("tr").hover( BoundMethod.create(this, this._rowOverHandler), BoundMethod.create(this, this._rowOutHandler) );
		this.tbody.find("tr").click( BoundMethod.create(this, this._rowClickHandler) );
	}
	
}	

/**
 * @private
 */
DataGrid.prototype._tdOverHandler = function(event){
	var td = event.currentTarget;
	//var index = tr.rowIndex -1; //-1 becouse thead already has 1 tr
	//tr.className = (index%2==1) ? "notpair-over" : "pair-over";
}
/**
 * @private
 */
DataGrid.prototype._tdOutHandler = function(event){
	var td = event.currentTarget;
	//var index = tr.rowIndex -1; //-1 becouse thead already has 1 tr
	//tr.className = (index%2==1) ? "notpair" : "pair";
}
/**
 * @private
 */
DataGrid.prototype._tdClickHandler = function(event){
	var rowIndex = event.target.parentNode.rowIndex -1; //-1 becouse thead already has 1 tr
	var colIndex = event.target.cellIndex;
	this.itemClickHandler({rowIndex:rowIndex, colIndex:colIndex});
}

/**
 * @private
 */
DataGrid.prototype._rowOverHandler = function(event){
	var tr = event.currentTarget;
	var index = tr.rowIndex -1; //-1 becouse thead already has 1 tr
	tr.className = (index%2==1) ? "notpair-over" : "pair-over";;
}
/**
 * @private
 */
DataGrid.prototype._rowOutHandler = function(event){
	var tr = event.currentTarget;
	var index = tr.rowIndex -1; //-1 becouse thead already has 1 tr
	tr.className = (index%2==1) ? "notpair" : "pair";
}
/**
 * @private
 */
DataGrid.prototype._rowClickHandler = function(event){
	var index = event.currentTarget.rowIndex -1; //-1 becouse thead already has 1 tr
	this.itemClickHandler(index);
}

/**
 * @return Array
 */
DataGrid.prototype.getData = function(){
	return this.data;
}

/**
 * @param Array data 
 */
DataGrid.prototype.setData = function(data){
	this.data = data ? data : [];
	this.refresh();
}

DataGrid.prototype.destroy = function(){
	this.container.innerHTML = "";
	this.container = null;
	this.columns = null;
	this.data = null;
	this.tbody = null;
}

