var MyTableOrderer = Class.create(TableOrderer, {
	selected : null,
	selectedTr : null,
	selectedElementInitial : null,
	
	perform : function(){
		this.tools.pages = Math.ceil(this.cache.size() / this.options.pageCount);
		this.setColumnsName();
		this.clearCache();
		this.createTable();
		if(this.selectedElementInitial){
			this.setSelected($(this.selectedElementInitial));
		}
	},
	
	setSelected : function(elt){
		if(this.selectedTr){
			this.selectedTr.removeClassName('selected');
			this.selectedTr	= null;
		}
		if (this.options.allowMultiselect){
			if(elt.hasClassName('selected')) { elt.removeClassName('selected'); } else { elt.addClassName('selected'); this.selectedTr	= elt; }
		}
	},
	
	createRow : function(obj,index){
		var line = index % 2;
		var row = '<tr class="data line'+line+'" id="'+this.table.id+'-'+index+'">\n';
		var values = Object.values(obj);
		
		this.tableColumnsName.each(function(s,index){
			row += '\t<td class="'+this.table.id+'-column-'+s+'">'+values[index].truncate(40)+'</td>\n';
		}.bind(this));
		row += '\n</tr>';
		return row;
	}
});

var TableOrdererGeneros = Class.create(MyTableOrderer, {
	selected : {nome:'TODOS'},
	
	perform : function(){
		this.tools.pages = Math.ceil(this.cache.size() / this.options.pageCount);
		this.setColumnsName();
		this.clearCache();
		this.createTable();
		if(this.selectedElementInitial){
			this.setSelected($(this.selectedElementInitial));
		}
		else{
			this.setSelected($('data-grid-listaGeneros-0'));
		}
	},

	trClick : function(e){
		Carregando.reference = 'listaArtistasHolder';
		var me	= Event.findElement(e,'tr');
		this.setSelected(me);
		var items = Event.findElement(e,'tr').descendants().pluck('innerHTML');
		var selected = {
			nome: 			items[0],
			numArtistas: 	items[1],
			numAlbuns: 		items[2],
			numMusicas: 	items[3]
		};
		
		this.selected	= selected;
		ML.changeGenero(selected);
	}
});

var TableOrdererArtistas = Class.create(MyTableOrderer, {
	trClick : function(e){
		Carregando.reference = 'listaAlbunsHolder';
		var me	= Event.findElement(e,'tr');
		this.setSelected(me);
		var items = Event.findElement(e,'tr').descendants().pluck('innerHTML');
		var selected = {
			nome: 			items[0],
			genero:			items[1],
			numAlbuns: 		items[2],
			numMusicas: 	items[3]
		};
		
		this.selected	= selected;
		ML.Tables.generos.selected.nome	= selected.genero;
		ML.changeArtista(selected);
	}
});

var TableOrdererAlbuns = Class.create(MyTableOrderer, {
	trClick : function(e){
		Carregando.reference = 'listaFaixasHolder';
		var me	= Event.findElement(e,'tr');
		this.setSelected(me);
		var items = Event.findElement(e,'tr').descendants().pluck('innerHTML');
		var selected = {
			nome: 			items[0],
			ano: 			items[1],
			numMusicas: 	items[2]
		};
		
		this.selected	= selected;
		ML.changeAlbum(selected);
	}
});

var TableOrdererMusicas = Class.create(MyTableOrderer, {
	trClick : function(e){
		var me	= Event.findElement(e,'tr');
		this.setSelected(me);
		var items = Event.findElement(e,'tr').descendants().pluck('innerHTML');
		var selected = {
			faixa: 		items[0],
			nome: 		items[1],
			album: 		items[2],
			artista: 	items[3],
			genero: 	items[4]
		};
		
		ML.clickMusica(selected);
	}
});