mostrarCalendario = false;
elemCal = "";
asociado = "";
ahora = "";
fechaAux = "";
txtMes = "";
txtAnyo = "";
tabla = "";
lugar = "";

function muestraCalendario(lug, asoc, fecha) {
	if(mostrarCalendario) {
		return;
	}

	expFecha = /^\d{2}\/\d{2}\/\d{4}$/i;
	
	lugar = lug;

	elemCal = document.createElement('div');
	
	elemCal.className = 'tabla_cal';
	elemCal.name = 'calendario_arturo';

	cab =  document.createElement('div');
	cab.className = 'cabecera_cal';

	if(!expFecha.test(fecha)) {
		ahora = new Date();
	} else {
		ahora = new Date(fecha.substr(6,4),parseInt(fecha.substr(3,2), 10) - 1,fecha.substr(0,2));
	}
	fechaAux = new Date(ahora);
	anyo = ahora.getFullYear();
	mes = ahora.getMonth();

	mesAnt =  document.createElement('a');
	mesAnt.href = '#';
	mesAnt.innerHTML = '&lt;';
	mesAnt.title = 'Mes anterior';
	mesAnt.onclick = function() {cambiaMes(-1); return false;};

	mesPost =  document.createElement('a');
	mesPost.href = '#';
	mesPost.innerHTML = '&gt;';
	mesPost.title = 'Mes posterior';
	mesPost.onclick = function() {cambiaMes(1); return false;};

	txtMes = document.createTextNode(' ' + getMes(mes) + ' ');

	cabMes =  document.createElement('div');
	cabMes.className = 'cabecera_cal_mes';
	cabMes.appendChild(mesAnt);
	cabMes.appendChild(txtMes);
	cabMes.appendChild(mesPost);
	cab.appendChild(cabMes);

	anyoAnt =  document.createElement('a');
	anyoAnt.href = '#';
	anyoAnt.innerHTML = '&lt;';
	anyoAnt.title = 'Año anterior';
	anyoAnt.onclick = function() {cambiaAnyo(-1); return false;};

	anyoPost =  document.createElement('a');
	anyoPost.href = '#';
	anyoPost.innerHTML = '&gt;';
	anyoPost.title = 'Año posterior';
	anyoPost.onclick = function() {cambiaAnyo(1); return false;};

	enlCerrar =  document.createElement('a');
	enlCerrar.href = '#';
	enlCerrar.innerHTML = '[X]';
	enlCerrar.title = 'Cerrar calendario';
	enlCerrar.onclick = function() {cierraCalendario(); return false;};
	cabCerrar =  document.createElement('div');
	cabCerrar.className = 'cabecera_cal_cerrar';
	cabCerrar.appendChild(enlCerrar);
	cab.appendChild(cabCerrar);

	txtAnyo = document.createTextNode(' ' + anyo + ' ');

	cabAnyo =  document.createElement('div');
	cabAnyo.className = 'cabecera_cal_anyo';
	cabAnyo.appendChild(anyoAnt);
	cabAnyo.appendChild(txtAnyo);
	cabAnyo.appendChild(anyoPost);
	cab.appendChild(cabAnyo);

	tabla = document.createElement('table');
	th=document.createElement('thead');
	tabla.appendChild(th);

	fila = document.createElement('tr');
	for(i = 0; i < 7; i++) {
		celda =  document.createElement('th');
		txt = document.createTextNode(getDiaSem(i));
		celda.appendChild(txt);
		fila.appendChild(celda);
	}
	th.appendChild(fila);

	for(i = 0; i < 42; i++) {
		if(i % 7 === 0) {
			fila = document.createElement('tr');
			th.appendChild(fila); 
		}
		celda =  document.createElement('td');
		celda.id = 'dia_cal' + i;
		txt = document.createTextNode(String(i));
		celda.appendChild(txt);
		fila.appendChild(celda);
	}

	elemCal.appendChild(cab);
	elemCal.appendChild(tabla);

	lugar.appendChild(elemCal);
	

	mostrarCalendario = true;
	asociado = asoc;

	cambiaCal();
}

function cambiaCal() {
	txtMes.data = ' ' + getMes(fechaAux.getMonth()) + ' ';
	txtAnyo.data = ' ' + fechaAux.getFullYear() + ' ';

	empiezaDia = false;
	fechaAux.setDate(1);
	anyoAct = fechaAux.getFullYear();
	mesAct = fechaAux.getMonth();
	diaSem = fechaAux.getDay();

	for(i = 0; i < 42; i++) {
		casilla = document.getElementById('dia_cal' + String(i));
		if((i + 1) % 7 === diaSem) {
			empiezaDia = true;
		}
		if(mesAct !== fechaAux.getMonth()) {
			empiezaDia = false;
		}

		casilla.removeChild(casilla.childNodes[0]);
		if(empiezaDia) {
			enlDia =  document.createElement('a');
			enlDia.href = '#';
			diaAct = fechaAux.getDate();
			enlDia.innerHTML = diaAct;
			enlDia.onclick = function() {asignaFecha(this.innerHTML); cierraCalendario(); return false;};
			casilla.appendChild(enlDia);
			if(fechaAux.getDate() === ahora.getDate() && fechaAux.getMonth() === ahora.getMonth()  && 
			   fechaAux.getFullYear() === ahora.getFullYear()) {
				casilla.className = 'dia_sel';
			} else {
				casilla.className = '';
			}
			fechaAux.setDate(fechaAux.getDate() + 1);
		} else {
			casilla.appendChild(document.createTextNode(''));
			casilla.className = '';
		}
	}

	fechaAux.setFullYear(anyoAct);
	fechaAux.setMonth(mesAct);
	fechaAux.setDate(1);
}

function cierraCalendario() {
	mostrarCalendario = false;
	lugar.removeChild(elemCal);
	elemCal = null;
}

function getMes(numero) {
	meses = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiem.','Octubre','Noviem.','Diciemb.');
	return meses[numero];
}

function getDiaSem(numero) {
	meses = new Array('Lu','Ma','Mi','Ju','Vi','Sa','Do');
	return meses[numero];
}

function cambiaMes(cant) {
	fechaAux.setMonth(fechaAux.getMonth() + cant);
	cambiaCal();
}

function cambiaAnyo(cant) {
	fechaAux.setFullYear(fechaAux.getFullYear() + cant);
	cambiaCal();
}

function asignaFecha(dia) {
	ahora.setFullYear(fechaAux.getFullYear());
	ahora.setMonth(fechaAux.getMonth());
	ahora.setDate(parseInt(dia));
	diaAct = dia.length === 1? '0' + dia:dia;
	mesAct = (fechaAux.getMonth() + 1) < 10? '0' + (fechaAux.getMonth() + 1):fechaAux.getMonth() + 1;
	asociado.value = diaAct + '/' + mesAct + '/' + fechaAux.getFullYear();

	cambiaCal();
}