var CalendarioHomeObj = Class.create(Abstract, {
	container:null,
	calendarObj:null,
	toolTip:null,
	cacheData:{},
	initialize: function(calendarContainer){
		this.container = $(calendarContainer);
		this.loadCalendar();
	},
	working : false,
	loadCalendar: function() {		
		this.calendarObj = new scal(this.container, 'selectcalendario',	{
				titleformat:'mmmm yyyy',
				closebutton:'X', 
				dayheadlength:2,
				weekdaystart:1, 
				prevbutton: '&nbsp;', 
				nextbutton: '&nbsp;',
				planner: [], 
				oncalchange: this.changeCalendar.bindAsEventListener(this)
		});
		if(typeof(CalendarioData) == 'object'){
			this.cacheData['m'+(this.calendarObj.currentdate.getMonth() + 1)] = CalendarioData;
			this.loadCalendarData(CalendarioData);
		}
	},
	/**
	 * Handler para el cambio de mes
	 * Busca la informacion referida al mes actual y la guarda en cache
	 * 
	 * @param Event event
	 */
	changeCalendar:function(event){
		if(this.working) {
			//return;
		}
		this.setWorking(true);
		var __key__ = this.calendarObj.currentdate.getFullYear()+'_'+(parseInt(this.calendarObj.currentdate.getMonth()) + 1);
		
		if(this.cacheData[__key__] == null){
			new Ajax.Request(_base_url+'home/buscoInfoCalendario/'+(parseInt(this.calendarObj.currentdate.getMonth()) + 1)+'.html', {
				parameters : {
					'year' : this.calendarObj.currentdate.getFullYear()
				},
				onSuccess:this.listChangeCalendar.bind(this, __key__)
			});
			return;
		}
		this.loadCalendarData(this.cacheData[__key__]);
	},
	listChangeCalendar:function(__key__, xhr){
		var json = xhr.responseText.evalJSON();
		if(!json){
			return false;
		}
		this.cacheData[__key__] = json;
		this.loadCalendarData(json);		
	},
	loadCalendarData:function(data){
		if(typeof(data['insc']) == 'object'){
			data['insc'].each(this._addCalendarDataInsc.bind(this));
		}
		
		if(typeof(data['apt']) == 'object'){
			data['apt'].each(this._addCalendarDataApt.bind(this));
		}
		this.setWorking(false);
	},
	setWorking : function(status) {
		this.working = status;
		$('_loading_calendar').setStyle({ display: this.working ? 'block' : 'none'});
		//console.log('Working: '+this.working);
	},
	_addCalendarDataInsc: function(item){
		this._addCalendarData(item, 'fechaInscIni', 'dayInsc');
	},
	_addCalendarDataApt: function(item){
		this._addCalendarData(item, 'fechaApertura', 'dayApt');
	},
	_addCalendarData:function(item, fechaField, cssClass){
		var dateObj = item[fechaField].split('-');
		dateObj = new Date(dateObj[0],(dateObj[1] - 1), dateObj[2]);
		var date = this.calendarObj.getElementByDate(dateObj);
		date.addClassName(cssClass);
		if(typeof(date.data) == 'undefined'){
			date.data = new Array();
			date.data.push(dateObj);
			date.down('.dayboxdate').observe('click', this.showDayData.bind(this));
			//date.down('.dayboxdate').observe('mouseout', this.hideDayData.bind(this));
		}
		date.data.push(item);
	},
	/**
	 * Handler para el cliqui cliqui de las
	 * fechas del calendario
	 * 
	 * @param {Event} event
	 * @return {void}
	 */
	showDayData:function(event){
		var data 	= null,
			el 		= event.element();
		
		if(!el.hasClassName('daybox')){
			data = el.up('div.daybox').data;
		} else {
			data = el.data;
		}
		
		var dateObj 	= data[0],
			className 	= 'tipMonth_' + dateObj.getMonth() + dateObj.getDate();
		
		if($('calendarTip') && $('calendarTip').className == className){
			return;
		}
		
		if(this.toolTip != null){
			this.toolTip.tooltip.remove();
			this.toolTip = null;
		}
		
		if(!$('calendarTip')){
			//$('calendarioAgenda').insert(new Element('div',{id:'calendarTip'}).observe('click', this.hideDayData.bind(this)));
			this.container./*up().*/insert(new Element('div',{id:'calendarTip'}).observe('click', this.hideDayData.bind(this)));
		}
		
		$('calendarTip').className = className;
		
		if(!this.createInfoView($('calendarTip'), data)){
			return;
		}
		
		var pos = this.container.select('.calweekswrapper')[0];

		this.toolTip = new Tooltip('calendarTip', {
			backgroundColor: "#000", 
			borderColor: "#000", 
			textColor: "#FFF", 
			textShadowColor: "", 
			pos: pos
		});
		
		this.toolTip.show(event);
	},
	hideDayData:function(event){
		if(this.toolTip != null){
			this.toolTip.hide(event);
			this.toolTip = null;
		}
	},
	createInfoView: function(container, data){
		container.update();
		
		if(data.length <= 1){
			return false;
		}
		var ObjHelper;
		for(var i=1; i<data.length; i++) {
			ObjHelper = data[i];
			if(i == 1){
				
				container.insert(new Element('div', {className: 'torneoName'}).insert(ObjHelper.Torneo));
				
				var bandera_container = new Element('div', {className: 'torneoBandera'});
				
				if(ObjHelper.bandera && ObjHelper.bandera != '') {
					bandera_container.insert(new Element('img', { src:ObjHelper.bandera } ));
				}
				container.insert(bandera_container);
				
				container.insert(new Element('div', {className: 'separador'}));
				
				container.insert(new Element('div',{className:'left'})
					.insert(new Element('div', {id:'tipoTorneos', className: 'tipoTorneos torneo_'+ObjHelper.idTorneo}))
					.insert(new Element('div', {className: 'tipoPuntaje'}).insert(ObjHelper.STP).insert(new Element('br')).insert(ObjHelper.TP.split(' - ')[1]))
				);
				
				container.insert(new Element('div',{className:'right'})
					.insert(new Element('div', {className: 'puntaje'}).insert(new Element('span',{className:'puntajeTitle'}).insert('Puntaje')).insert(new Element('span',{id:'pelotitasContainer', className:'pelotitas'})))
					.insert(new Element('div', {className: 'bonus'}).insert(new Element('span',{className:'bonusTitle'}).insert('Bonus')).insert(new Element('span',{className:'bonusPrice'}).insert('$' + ObjHelper.bonus)))
				);
				
				if(ObjHelper.pelotitas){
					ObjHelper.pelotitas.toArray().each(
						function(item){
							$('pelotitasContainer').insert(new Element('img', {src:(item == 'O')?_base_url+'images/frontend/nacional/pelotita.gif':_base_url+'images/frontend/nacional/minipelotita.gif'}));
						}
					)
				}
				container.insert(new Element('div',{className:'clear'}));
			}
			if($('tipoTorneos').hasClassName('torneo_'+ObjHelper.idTorneo)){
				
				$('tipoTorneos').insert(new Element('span',{className:'valoresTorneo'}).insert((ObjHelper.idTipo == 1) ? ObjHelper.Tipo+ ' $'+ObjHelper.costoT : ObjHelper.Tipo+ ' $'+ObjHelper.costo)).insert(new Element('br'));
			}
		}
		return true;
		
	}
});
