var RankingObj = Class.create(Abstract, {
	actualSystema:null,
	actualTipo:null,
	actualGenero:null,
	actualEtiqueta:null,
	actualIMG:null,
	cacheEtiquetaRanking:{},
	cacheRanking:{},
	container:null,
	blockChange:false,
	first: true,
	initialize: function(){

		
	},
	setTiposContainer:function(container){
		container = $(container);
		container.select('img').each(this._addEventInTypes.bind(this));
	},
	_addEventInTypes:function(item){
		item.stopObserving('click');
		item.observe('click', this.listCambioDeTipo.bind(this));
		if(this.actualTipo == null){
			this.cambioDeTipo(item);
		}
	},
	muestroLoading:function(_soloCambioEtiqueta){
		if(typeof(_soloCambioEtiqueta) == 'undefined'){
			_soloCambioEtiqueta = false;
		}
		var toShow = 'Buscando Rankings...';
		if(_soloCambioEtiqueta){
			this.container.select('.rankingJugadores')[0].update(toShow);
		}else{
			this.container.update(toShow);
		}
	},
	muestroErrorRanking:function(_soloCambioEtiqueta){
		if(typeof(_soloCambioEtiqueta) == 'undefined'){
			_soloCambioEtiqueta = false;
		}
		var toShow = 'Esta Categoria no tiene Ranking';
		if(_soloCambioEtiqueta){
			this.container.select('.rankingJugadores')[0].update(toShow);
		}else{
			this.container.update(toShow);
		}
	},
	listCambioDeTipo: function(event){
		if(this.blockChange == true){
			return;
		}
		this.muestroLoading();
		this.cambioDeTipo(event.element());
	},
	cambioSistema: function(item){
		if(this.blockChange == true){
			return false;
		}
		this.actualSystema = parseInt(item.readAttribute('systema'));
		
		this.actualEtiqueta = null;
		this.container = item;
		this.muestroLoading();
		this.cambioRanking();
		return true;
	},
	cambioDeTipo: function(item){
		if(this.actualIMG){
			this.actualIMG.src = cambiarNombreFile(this.actualIMG.src, false);
		}
		this.actualEtiqueta = null;
		this.actualTipo = parseInt(item.readAttribute('tipo'));
		this.actualGenero = parseInt(item.readAttribute('genero'));
		this.actualIMG = item;
		this.actualIMG.src = cambiarNombreFile(this.actualIMG.src, true);
		this.cambioRanking();
	},
	cambioRanking:function(_soloCambioEtiqueta){
		if(!Object.isNumber(this.actualGenero) || !Object.isNumber(this.actualTipo) || !Object.isNumber(this.actualSystema)){
			return false;
		}
		this.blockChange = true;
		if(typeof(_soloCambioEtiqueta) == 'undefined'){
			_soloCambioEtiqueta = false;
		}
		this.muestroLoading(_soloCambioEtiqueta);
		var etiquetaInCache = this.cacheEtiquetaRanking[this.actualGenero+'_'+this.actualTipo];
		if(etiquetaInCache){
			if(!Object.isNumber(this.actualEtiqueta)){
				this.actualEtiqueta = Object.keys(etiquetaInCache)[0];
			}
			var rankInCache = this.cacheRanking[this.actualSystema+'_'+this.actualGenero+'_'+this.actualTipo+'_'+this.actualEtiqueta];
	
			if(rankInCache){
				if(!_soloCambioEtiqueta)
					this.creoViewEtiquetas(etiquetaInCache);
				this.creoViewRanking(rankInCache);
			}else{
				if(!_soloCambioEtiqueta)
					this.creoViewEtiquetas(etiquetaInCache);
				new Ajax.Request(_base_url + 'home/buscoInfoRanking/'+this.actualSystema+'/'+this.actualTipo+'/'+this.actualGenero+'/'+this.actualEtiqueta+'.html',{
					onSuccess:this._listbuscoInfoRanking.bind(this)
				});
			}
		}else{
			new Ajax.Request(_base_url + 'home/buscoInfoRanking/'+this.actualSystema+'/'+this.actualTipo+'/'+this.actualGenero+'.html',{
				onSuccess:this._listbuscoInfoRanking.bind(this)
			});
		}
	},
	listCambioEtiqueta:function(event){
		if(this.blockChange == true){
			return;
		}
		this.actualEtiqueta = parseInt(event.element().readAttribute('idEtiqueta'));
		this.setEtiquetaSelected();
		this.cambioRanking(true);
	},
	_listbuscoInfoRanking: function(transport){
		var json = transport.responseText.evalJSON();
		if(json){
			if(json.etiquetas != null){
				if(json.etiquetas == ''){
					this.blockChange = false;
					this.muestroErrorRanking();
					return;
				}
				this.cacheEtiquetaRanking[this.actualGenero+'_'+this.actualTipo] = json.etiquetas;
				this.actualEtiqueta = Object.keys(json.etiquetas)[0];
				this.creoViewEtiquetas(json.etiquetas);
			}
			this.cacheRanking[this.actualSystema+'_'+this.actualGenero+'_'+this.actualTipo+'_'+this.actualEtiqueta] = json.data;
			this.creoViewRanking(json.data);
			
			if(this.first) {
				this.createInterval();
				this.first = false;
			}
		}
	},
	creoViewEtiquetas:function(etiquetasInfo){
		
		var etContainer = new Element('div',{className:'etiquetas'});
		var keysEt = Object.keys(etiquetasInfo);
		
		for(var i=0; i<keysEt.length; i++) {
			etContainer.insert(
					new Element('span',
							{
								className:'etiqueta idEtiqueta'+keysEt[i], 
								'idEtiqueta':keysEt[i], 
								style:(i+1 == keysEt.length)?'margin-right: 0px;':''
							}).insert(
									etiquetasInfo[keysEt[i]]
								).observe('click', this.listCambioEtiqueta.bind(this)));
		}
		etContainer.insert(new Element('div',{className:'clear'}));
		this.container.update(etContainer);
		this.setEtiquetaSelected();
	},
	setEtiquetaSelected:function(){
		this.container.select('.etiquetas .etiqueta.selected').invoke('removeClassName', 'selected');
		this.container.select('.etiquetas .etiqueta.idEtiqueta'+this.actualEtiqueta).invoke('addClassName', 'selected');
	},
	creoViewRanking:function(rankngInfo){
		var jContainer = this.container.select('.rankingJugadores');
		if(jContainer.length == 0){
			jContainer = new Element('div',{className:'rankingJugadores'});
			this.container.insert(jContainer);
		}else{
			jContainer = jContainer[0];
		}
		rankngInfo.each(function(item){
			
			if(this.childElements().length == 0){
				this.update(new Element('div',{className:'rankingLine'})
					.insert(new Element('span',{className:'pos'}).insert('POS'))
					.insert(new Element('span',{className:'nombre title'}).insert('NOMBRE'))
					.insert(new Element('span',{className:'puntos'}).insert('PTOS')));
					//.insert(new Element('span',{className:'tj'}).insert('TJ')));
			}
			
			this.insert(new Element('div',{className:'rankingLine'})
				.insert(new Element('span',{className:'pos'}).insert(item.pos))
				.insert(new Element('a',{ className:'nombre', 'href' : '/jugador/ver/'+item.idJugador+'.html' })
					.insert(						
						new Element('img', {
								src: (item.foto) ? 
										_base_url + 'asset/people/foto/'+cambiarNombreFile(item.foto, true, item.foto.substring(item.foto.lastIndexOf('.') + 1), '_26x18') : 
										_base_url + 'images/frontend/nacional/ranking/noimage.jpg'})
						)
					.insert(item.nombre)
				)										
				.insert(new Element('a',{className:'puntos', 'href' : '/rank.html '}).insert(item.puntos)));
				//.insert(new Element('span',{className:'tj'}).insert(item.cantUP)));
		}, jContainer);
		
		if(rankngInfo != ''){
			jContainer.insert(new Element('div', {className:'clear'}));
		}else{
			if(this.container.childElements().length){
				this.muestroErrorRanking(true);
			}else{
				this.muestroErrorRanking();
			}
		}
		this.blockChange = false;
	},
	/**
	 * Crea el interval para ir rotando
	 * los rankings mostrados
	 */
	carActualType: 0,
	carActualEtiqueta: 0,
	
	createInterval: function() {
		/*
		 * Seleccionamos un ranking al azar
		 */
		function carousel(){
			
			var ranks			= $$('#rankingTypes img');
			
			var spans 			= $$('span.etiqueta');
				
			if(!spans[this.carActualEtiqueta]) {
				this.carActualType = this.carActualType + 1;
				this.carActualEtiqueta = 0;
				if(!ranks[this.carActualType]) {
					this.carActualType = 0;
				} 
				Utils.fire(ranks[this.carActualType], 'click');		
			}else{
	
			
				Utils.fire(spans[this.carActualEtiqueta], 'click');
				
				if(spans[this.carActualEtiqueta]) {
					this.carActualEtiqueta += 1;
				}
			}

		}
		carousel.bind(this);
		setInterval(carousel.bind(this), 8000);
	}
});

function rand(a, b) {
	return Math.floor((b-a+1)*Math.random()) + a;
}

function rrand(a, b) {
	return b - (b%parseInt((+(new Date())+"").slice(10, 11)) || rand(a, b));		
}
