if(!window.TBP) window.TBP = {};
TBP.DataGrid = Class.create();
TBP.DataGrid.prototype = {
	initialize: function(dataGridId, options) {
		this.dataGrid = $(dataGridId);
		this.input = $(dataGridId + "_dataGridInput");
	
		this.options = options;
	
		if (!this.options.disabled) {
			if (this.options.onchange != ""){
				this.eventChanged = new Function("event",this.options.onchange).bindAsEventListener(this);
			}
		}
		
		this.elements = new Array();
		var cells = this.dataGrid.getElementsByTagName("td");   
		var cellId = this.options.firstElementIndex;
		for (var i = 0; i < cells.length; i++) {   
			var cell = cells[i];
			if (cell.className.indexOf("rich-tbp-datagrid-element") >= 0) {
				this.elements.push(new TBP.DataGrid.DataCell(this, cell, cellId++)); 
			}
		}
		
		this.initialized = true;
	},
	

	setValue: function(element) {
		if (element && !this.options.disabled) {
			var newValue = element.id;
			if (this.input.value.length == 0 || newValue != this.input.value) {
				var oldValue = this.input.value;
				var oldSelectedElementIndex = this.findElementIndexById(oldValue);
				this.unselectElement(this.elements[oldSelectedElementIndex]);
				this.selectElement(element);
				
				this.input.value = newValue;
				
				if (this.eventChanged) {
					this.eventChanged();
				}
			}
		}
	},
	
	selectElement: function(element) {
		if (element) {
			Element.removeClassName(element.cell, "rich-tbp-datagrid-element");
			Element.addClassName(element.cell, "rich-tbp-datagrid-element-selected");
		}
	},
	
	unselectElement: function(element) {
		if (element) {
			Element.removeClassName(element.cell, "rich-tbp-datagrid-element-selected");
			Element.addClassName(element.cell, "rich-tbp-datagrid-element");
		}
	},
	
	findElementIndexById: function(value) {
		for(var i = 0; i < this.elements.length; i++) {
			if (this.elements[i].id == value) return i;
		}
		return 0;
	}
}

TBP.DataGrid.DataCell = Class.create();
TBP.DataGrid.DataCell.prototype = {

	initialize: function(dataGrid, cell, id){
		this.dataGrid = dataGrid;
		this.cell = cell;
		this.id = id;
		
		Event.observe(this.cell, "click", this.processOnClick.bindAsEventListener(this));
	},
	
	processOnClick: function(event) {
		this.dataGrid.setValue(this);
	}
}

