
function $(element){ return document.getElementById(element) }
function $c(element){ return document.createElement(element) }
function $i(element){ return parseInt(element) }
function $dm(mes, anno){var arreglomes = new Array(31,28 +((anno % 4 == 0) && (anno % 100 != 0)) || ((anno % 100 == 0) && (anno % 400 == 0)),31,30,31,30,31,31,30,31,30,31); return arreglomes[mes];}

//Add a day
function $ad(date){
	var day = date.getDate();
	var month = date.getMonth();
	var year = date.getFullYear();
	//Hay que cambiar de mes
	day++;
	if($dm(month, year) < $i(day)){
		//Hay que cambiar de anno
		day=1; month++;
		if(month == 12){month=0; year++;}
	}
	return new Date(year, month, day);
}

//Remove a day
function $rd(date){
	var day = date.getDate();
	var month = date.getMonth();
	var year = date.getFullYear();
	//Hay que cambiar de mes
	day--;
	if(1 > day){
		//Hay que cambiar de mes
		month--;
		if(month < 0){month = 11; year--;}
		day = $dm(month, year);
	}
	return new Date(year, month, day);	
}

var currentDate;
var fecha;
var entradas;

function calendarInit(){
	fecha = new Date();
	currentDate = new Date();
	
	var printCalendar = function(){
		var div = $('pr');
		
		//Hay que crear 3 divs: cabecera, cuerpo y pie
		var calendarDiv = $c('div');
		calendarDiv.setAttribute('id', 'calendarDiv');
		
		var divCabecera = $c('div');
		divCabecera.setAttribute('class', 'calendarHead');
		divCabecera.style.backgroundImage = 'url(galerias/calendar/calendarHead.png)';
		divCabecera.style.styleFloat = 'left';
		divCabecera.style.textAlign = 'left';
		divCabecera.style.display = 'block';
		divCabecera.style.height = '12px';
		divCabecera.style.paddingTop = '23px';
		divCabecera.style.textAlign = 'center';
		divCabecera.style.width = '149px';
		var izq = $c('a');
		izq.setAttribute('id', 'izq');
		izq.setAttribute('class', 'leftarrow');
		izq.style.backgroundImage = 'url(galerias/calendar/leftarrow.png)';
		izq.style.styleFloat = 'left';
		izq.style.display = 'block';
		izq.style.height = '12px';
		izq.style.marginLeft = '25px';
		izq.style.marginRight = '15px';
		izq.style.width = '12px';
		izq.onclick = removeMonth;
		var der = $c('a');
		der.setAttribute('id', 'der');
		der.setAttribute('class', 'rightarrow');
		der.style.backgroundImage = 'url(galerias/calendar/rightarrow.png)';
		der.style.styleFloat = 'left';
		der.style.marginLeft = '15px';
		der.style.display = 'block';
		der.style.height = '12px';
		der.style.width = '12px';
		der.onclick = addMonth;
		var mesAnno = $c('span');
		mesAnno.setAttribute('class', 'mesAnno');
		mesAnno.style.styleFloat = 'left';
		mesAnno.style.fontFamily = 'Verdana,Geneva,sans-serif';
		mesAnno.style.fontSize = '0.7em';
		mesAnno.style.fontWeight = 'bold';
		if(fecha.getYear() < 1900)
			mesAnno.innerHTML = (fecha.getMonth()+1)+' / '+(fecha.getYear()+1900);
		else
			mesAnno.innerHTML = (fecha.getMonth()+1)+' / '+(fecha.getYear());
		divCabecera.appendChild(izq);
		divCabecera.appendChild(mesAnno);
		divCabecera.appendChild(der);
		
		var divCuerpo = $c('div');
		divCuerpo.setAttribute('class', 'calendarBody');
		divCuerpo.style.backgroundImage = 'url(galerias/calendar/calendarBody.png)';
		divCuerpo.style.paddingLeft = '7px';
		divCuerpo.style.width = '142px';
		divCuerpo.style.textAlign = 'left';
		//var tCuerpo = $c('table');
		
		//Buscar el primer lunes anterior al mes en curso
		fecha = new Date(fecha.getFullYear(), fecha.getMonth(), 1);
		while(fecha.getDay() != 1) fecha = $rd(fecha);
		
		var clase = ""; 
		var tcode = '';
		tcode = '<table style=\"text-align: center;\"><tr class=\"frow\"><td>L</td><td>M</td><td>X</td><td>J</td><td>V</td><td>S</td><td>D</td></tr>';
		for(var i = 0; i < 6; i++){
			tcode += '<tr>';
			for(var j = 0; j < 7; j++){
				if(fecha.getMonth() != currentDate.getMonth() && j == 6) clase  = 'mondayDisabled';
				else if(fecha.getMonth() != currentDate.getMonth()) clase = 'disabled';
				else if(j == 6) clase = 'monday';
				else clase = 'normal';
				var indice = formatDate();
				if(entradas[indice] != null)
					tcode += '<td style=\"height: 12px\" class=\"entrada ' +clase +'\">' + '<a href=\"' +entradas[indice] +'\">' + fecha.getDate() + '</td>';
				else
					tcode += '<td style=\"height: 12px\" class=\"' +clase  +'\">' + fecha.getDate() + '</td>';
				fecha = $ad(fecha);
			}
			tcode += '</tr>';
		}
		tcode = tcode += "</table>";
		var newdiv = document.createElement("div");
		newdiv.innerHTML = tcode ;
		divCuerpo.appendChild(newdiv);
		
		var divPie = $c('div');
		divPie.setAttribute('class', 'calendarFoot');
		divPie.style.backgroundImage = 'url(galerias/calendar/calendarFoot.png)';
		divPie.style.width = '149px';
		divPie.style.height = '21px';
		divPie.style.backgroundPosition = 'top left';
		divPie.style.backgroundRepeat = 'repeat-y';
		divPie.style.display = 'block';	
		divPie.style.float = 'left';
		
		calendarDiv.appendChild(divCabecera);
		calendarDiv.appendChild(divCuerpo);	
		calendarDiv.appendChild(divPie);
		
		div.appendChild(calendarDiv);
	}
	
	var addMonth = function(){
		var day = currentDate.getDate(); var month = currentDate.getMonth(); var year = currentDate.getFullYear();
		month++; if(month == 12){month=0; year++;}
		fecha.setDate(1);fecha.setMonth(month);fecha.setFullYear(year);
		currentDate.setDate(1);currentDate.setMonth(month);currentDate.setFullYear(year);
		reprint();
	}
	
	var removeMonth = function(){
		var day = currentDate.getDate(); var month = currentDate.getMonth(); var year = currentDate.getFullYear();
		month--; if(month < 0){month = 11; year--;}
		fecha.setDate(1);fecha.setMonth(month);fecha.setFullYear(year);
		currentDate.setDate(1);currentDate.setMonth(month);currentDate.setFullYear(year);
		reprint();
	}
	
	var formatDate = function(){
		var day = fecha.getDate();
		var month = fecha.getMonth() +1; //Los meses en java van del 1 al 12, en js del 0 al 11
		var year = fecha.getFullYear();
		if(day.toString().length == 1)
			day = '0' + day;
		if(month.toString().length == 1)
			month = '0' + month;
		return 'd' + day.toString() + month.toString() + year.toString();
	}
	
	var reprint = function(){var div = $('pr');
		//Borrado preventivo
		var borrar = $('calendarDiv');
		if(borrar != null && borrar != '')
			borrar.parentNode.removeChild(borrar);
		printCalendar();
	}
	
	printCalendar();
}
