// fcp.Calendar - simple Calendar control for Javascript
// Copyright (C) 2006 Felix Plesoianu
// This file is distributed under the MIT license.
// http://www.opensource.org/licenses/mit-license.php

if (!fcp)
	var fcp = new Object();
if (!fcp.msg)
	fcp.msg = new Object();

fcp.week_days = ["Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"];
fcp.months = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
	    	  "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
fcp.msg.prev_year = "A&ntilde;o sig.";
fcp.msg.prev_month = "A&ntilde;o ant.";
fcp.msg.next_month = "Mes sig.";
fcp.msg.next_year = "Mes ant.";
var cal;

fcp.Calendar = function(element, show_clock) {
	if (!element.childNodes)
		throw "HTML element expected";
	this.element = element;
	this.selection = new Date(); //Fecha que muestra el calendario
	this.actual=new Date();
	this.show_clock = show_clock;
	this.selected_cell = undefined;
	this.generate_month();
	this.render_calendar();	
}

fcp.Calendar.prototype.set_date_time = function (date_time) {
	if (date_time.constructor == Date) {
		this.selection = date_time;
		this.generate_month();
		this.render_calendar();
	} else {
		throw "Date object expected (in fcp.Calendar.set_date_time)";
	}
}

fcp.Calendar.prototype.recupera_regatas = function () {
	this.regatas = new Array(31);	
	url = "regatas.php?accion=regatas&mes=" + this.selection.getMonth()+"&agno="+(this.selection.getYear());
	new Ajax.Request(url,
    {
  	  method:'get',
	  onSuccess: callback,
      onFailure: function(){ return false; }
    });	
}

function callback(response) {		
		var json_data = response.responseText; 
		var agenda = document.getElementById("agenda_lista");
		agenda.innerHTML = "";
		eval("var jsonObject = "+ json_data +";");
		for (i=0;i<jsonObject.datos.length;i++) {
			inicio = jsonObject.datos[i].inicio;
			fin = jsonObject.datos[i].fin;
			
			var el = document.createElement("li");
			if(i==jsonObject.datos.length-1)
				el.className="ult";
			var fecha = document.createElement("span");
			var titulo = document.createElement("h1");
			var p = document.createElement("p");
			var n = document.createTextNode(jsonObject.datos[i].nombre);
			var desc = document.createTextNode(jsonObject.datos[i].descripcion);
			fecha.className = "fecha";
			fecha.innerHTML = inicio+" - "+fin+" de "+ fcp.months[cal.selection.getMonth()] + ": ";
			clase = "";
			if(cal.esPasado(fin)) 
			 clase="titregpas";
			titulo.className=clase;
			titulo.appendChild(fecha);
			titulo.appendChild(n);
			p.appendChild(desc);
			el.appendChild(titulo);			
			el.appendChild(p);
			agenda.appendChild(el);
			
			while(inicio<=fin) {				
				cal.regatas[inicio] = jsonObject.datos[i].nombre;
				inicio++;
			}
		}		
		cal.element.selected_cell = undefined;
		cal.element.innerHTML = "";	
		cal.element.appendChild(cal.render_month());
}

fcp.Calendar.prototype.hay_regata = function(dia) {
	return this.regatas[dia]!=null;
}

fcp.Calendar.prototype.esHoy = function(dia) {
	return(dia == this.selection.getDate() && 
		   this.selection.getMonth() == this.actual.getMonth() &&  
		   this.selection.getYear() == this.actual.getYear()
		  );
}

fcp.Calendar.prototype.esPasado = function(dia) {
	respuesta = true;
	if (this.selection.getYear() > this.actual.getYear())
		respuesta = false;
	else if (this.selection.getMonth() > this.actual.getMonth())
		respuesta = false;
	else if (dia>=this.actual.getDate())
		respuesta= false;

	return respuesta;
}

// Acciones para botones de avanzar o retroceder mes
fcp.Calendar.prototype.next_month = function () {
	var month = this.selection.getMonth();
	if (month == 11) {
		this.selection.setMonth(0);
		this.selection.setYear(this.selection.getFullYear() + 1);
	} else {
		this.selection.setMonth(month + 1);
	}	
	this.generate_month();
	this.render_calendar();
}


fcp.Calendar.prototype.prev_month = function () {
	var month = this.selection.getMonth();
	if (month == 0) {
		this.selection.setMonth(11);
		this.selection.setYear(this.selection.getFullYear() - 1);
	} else {
		this.selection.setMonth(month - 1);
	}
	this.generate_month();
	this.render_calendar();
}

//Generador de contenido del mes

fcp.Calendar.prototype.generate_month = function () {
	this.raw_data = new Array();	
	var week = 0;
	this.raw_data[week] = new Array(7);

	var first_of_month = fcp.Calendar.clone_date(this.selection);
	first_of_month.setDate(1);
	var first_weekday = first_of_month.getDay();
	// Move Sunday last
	first_weekday = (first_weekday == 0) ? 6 : first_weekday - 1;
	// Fill in the last days from the previous month.
	for (var i = 0; i < first_weekday; i++) {
		this.raw_data[week][i] = 0;
	}

	var last_of_month = fcp.Calendar.days_in_month(
		this.selection.getYear(),
		this.selection.getMonth());
	var weekday = first_weekday;
	for (var i = 1; i <= last_of_month; i++) {
		this.raw_data[week][weekday] = i;
		weekday++;
		if (weekday > 6) {
			weekday = 0;
			week++;
			this.raw_data[week] = new Array(7);
		}
	}

	// Fill in the first days from the next month.
	for (var i = weekday; i < 7; i++) {
		this.raw_data[week][i] = 0;
	}
}

fcp.Calendar.prototype.render_calendar = function () {
	this.recupera_regatas();	
	//this.element.selected_cell = undefined;
	//this.element.innerHTML = "";	
	//this.element.appendChild(this.render_month());
}

fcp.Calendar.prototype.render_heading = function () {
	var heading = document.createElement("caption");

	/*var prev_year = document.createElement("a");
	prev_year.href = "#";
	prev_year.calendar = this;
	prev_year.onclick = function() {
		this.calendar.prev_year();
		return false;
	};
	prev_year.innerHTML = "<<";
	prev_year.title = fcp.msg.prev_year;
	*/
	
	var prev_month = document.createElement("a");
	prev_month.href = "#";
	prev_month.className="mes_menos";
	prev_month.calendar = this;
	prev_month.onclick = function() {
		this.calendar.prev_month();
		return false;
	};
	prev_month.innerHTML = "&nbsp;";
	prev_month.title = fcp.msg.prev_month;

	var month_year = document.createTextNode(
		fcp.months[this.selection.getMonth()]
		+ " " + this.selection.getFullYear());
	
	var next_month = document.createElement("a");
	next_month.href = "#";
	next_month.className="mes_mas";
	next_month.calendar = this;
	next_month.onclick = function() {
		this.calendar.next_month();
		return false;
	};
	next_month.innerHTML = "";
	next_month.title = fcp.msg.next_month;

	/*var next_year = document.createElement("a");
	next_year.href = "#";
	next_year.calendar = this;
	next_year.onclick = function() {
		this.calendar.next_year();
		return false;
	};
	next_year.innerHTML = ">>";
	next_year.title = fcp.msg.next_year;
	*/
	//heading.appendChild(prev_year);
	//heading.appendChild(document.createTextNode("\u00a0\u00a0"));
	heading.appendChild(prev_month);	
	
	heading.appendChild(next_month);
	heading.appendChild(month_year);
	//heading.appendChild(document.createTextNode("\u00a0\u00a0"));
	//heading.appendChild(next_year);
	return heading;
}

fcp.Calendar.prototype.render_month = function() {	
	var html_month = document.createElement("table");
	html_month.className = "calendar";
	html_month.cellPadding=0;
	html_month.cellSpacing=0;
	html_month.appendChild(this.render_heading());

	var thead = document.createElement("thead");
	var tr = document.createElement("tr");
	for (var i = 0; i < fcp.week_days.length; i++) {
		var th = document.createElement("th");
		th.innerHTML =  fcp.week_days[i];
		tr.appendChild(th);
	}
	thead.appendChild(tr);
	html_month.appendChild(thead);

	var tbody = document.createElement("tbody");
	for (var i = 0; i < this.raw_data.length; i++) {
		tbody.appendChild(this.render_week(this.raw_data[i]));
	}
	html_month.appendChild(tbody);
	return html_month;
}

fcp.Calendar.prototype.render_week = function (day_numbers) {
	var html_week = document.createElement("tr");
	html_week.align = "right";
	for (var i = 0; i < 7; i++) {
		html_week.appendChild(this.render_day(day_numbers[i]));
	}
	return html_week;
}

fcp.Calendar.prototype.render_day = function (day_number) {
	var td = document.createElement("td");
	td.className = "vacio";
	if (day_number >= 1 && day_number <= 31) {
		var anchor = document.createElement("a");
		anchor.href = "#";
		anchor.innerHTML = day_number;
		anchor.calendar = this;
		anchor.date = day_number;
		anchor.onclick = fcp.Calendar.handle_select;
		td.appendChild(anchor);

		if (this.esHoy(day_number)) {
			this.selected_cell = td;
			if(this.hay_regata(day_number))
				td.className = "in_month regata selected";
			else 
				td.className = "in_month selected";
		} else if(this.hay_regata(day_number)) {
			if(this.esPasado(day_number))
				td.className = "in_month regatapasada";			
			else
				td.className = "in_month regata";
		} else {
			td.className = "in_month";
		}
	}
	return td;
}

// Do nothing by default.
fcp.Calendar.prototype.onselect = function () {}

fcp.Calendar.clone_date = function (date_obj) {
	if (date_obj.constructor != Date)
		throw "Date object expected (in fcp.Calendar.clone_date)";
	else
		return new Date(
			date_obj.getFullYear(),
			date_obj.getMonth(),
			date_obj.getDate(),
			date_obj.getHours(),
			date_obj.getMinutes(),
			date_obj.getSeconds());
}

fcp.Calendar.days_in_month = function (year, month) {
	if (month < 0 || month > 11)
		throw "Month must be between 0 and 11";
	var day_count = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (month != 1) {
		return day_count[month];
	} else if ((year % 4) != 0) {
		return 28;
	} else if ((year % 400) == 0) {
		return 29;
	} else if ((year % 100) == 0) {
		return 28;
	} else {
		return 29;
	}
}

fcp.Calendar.handle_select = function () {
	/*if (this.calendar.selected_cell)
		this.calendar.selected_cell.className = "in_month";
	this.calendar.selected_cell = this.parentNode;
	this.parentNode.className = "in_month selected";
    */
	blur();
	//this.calendar.selection.setDate(this.date);
	//this.calendar.onselect(this.calendar.selection);
	this.calendar.onselect(this.date);
	return false;
}


// Created by: Simon Willison
// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(
 function() {
// function() {
  var contenedor = document.getElementById("cal_placeholder");
  cal = new fcp.Calendar(contenedor); 	
  cal.onselect = function(date) {
									if(this.hay_regata(date))
		  								alert(this.regatas[date]);
  							    }; 
 } 
)
