// JavaScript Document

var calendario, fechaMin, hoy, fechaSel, idCal, idioma;
var fecha = new Date();

function inicializaCalendario(len) {
	crearCalendario()

	$("txt_fecha1").disabled = $("txt_fecha2").disabled= true;

	$("fecha1").onclick = function(){insertaCalendario(this.id)};
	$("fecha2").onclick = function(){insertaCalendario(this.id)};
}

function insertaCalendario(id){
	if(!$("ASH_calendario")) {
		
		hoy = new Date();
		
		if($F("txt_"+id)=="") {
			fechaSel = null;
			fecha.setDate(1);
			fecha.setMonth(hoy.getMonth());
			fecha.setYear(hoy.getFullYear());
			switch(id){
				case "fecha1":
				break;
				
				case "fecha2":
				if($F("txt_fecha1")!=""){
					var fechaN = date_HTML_JS($F("txt_fecha1"));
					fecha.setDate(fechaN.getDate()+1);
					fecha.setMonth(fechaN.getMonth());
					fecha.setYear(fechaN.getFullYear());
				}
				break;
			}
		}else{
			fechaSel = date_HTML_JS($F("txt_"+id));
			fecha.setDate(1);
			fecha.setMonth(fechaSel.getMonth());
			fecha.setYear(fechaSel.getFullYear());
		}
		
		idCal = id;
		$(id).insertBefore(calendario,$$("#"+id+" input")[0]);
		$("cal-cerrar").onclick = function(e){$("ASH_calendario").oculta(0.9); /*e.stopPropagation()*/};	
		$("cal-prev").onclick = function(){fecha.setDate(1);fecha.setMonth(fecha.getMonth()-1);actualizaFecha()};	
		$("cal-next").onclick = function(){fecha.setDate(1);fecha.setMonth(fecha.getMonth()+1);actualizaFecha()};
		
		fechaMin = hoy;

		if(id=="fecha2"){
			if($F("txt_fecha1")!="") fechaMin = date_HTML_JS($F("txt_fecha1"));
			fechaMin.setDate(fechaMin.getDate()+1);
		}
		actualizaFecha();

		$("ASH_calendario").muestra(0.1);
	}
}

Element.addMethods({
	muestra: function(element, alfa){
		fade(element, alfa);
		if(element.style.visibility!="visible") element.style.visibility = "visible";
		alfa += 0.1;
		if(alfa<1) t = setTimeout(function(){element.muestra(alfa)}, 40);
		else fade(element, 1);
	},
	oculta: function(element, alfa){
		fade(element, alfa);
		element.style.visibility = "visible";
		alfa -= 0.1;
		if(alfa>0) t = setTimeout(function(){element.oculta(alfa)}, 40);
		else {
			element.select(".cal-dia").each(function(dia){dia.style.border = "solid 1px white"});
			element.parentNode.removeChild(element);
		}
	}
})

function fade(obj, op){
	obj.style.filter = "alpha(opacity="+(op*100)+")";
	obj.style.MozOpacity = op;
	obj.style.KhtmlOpacity = op;
	obj.style.opacity = op;
}

function seleccionaFecha(d){
	fecha.setDate(d);
	var fechaN = new Date();
	fechaN.setTime(fecha.getTime());
	
	switch(idCal){
		case "fecha1":
		if($F("txt_fecha2")!=""){
			if(Date.parse(fecha.toDateString())>=Date.parse(date_HTML_JS($F("txt_fecha2")).toDateString())){
				fechaN.setDate(fechaN.getDate()+1);
				$("txt_fecha2").value=date_JS_HTML(fechaN);
			}
		}
		break;
		
		case "fecha2":
		break;
	}
	
	$("txt_"+idCal).value = date_JS_HTML(fecha);
	$("ASH_calendario").oculta(0.9);
}

function date_JS_HTML(f) {
	return f.getDate()+"-"+(f.getMonth()+1)+"-"+f.getFullYear();
}
function date_HTML_JS(f) {
	f1 = f.split('-');
	var d = new Date();
	d.setYear(f1[2]);
	d.setMonth(f1[1]-1);
	d.setDate(f1[0]);
	
	return d;
}

function crearCalendario() {
	calendario = Builder.node("div", {id:"ASH_calendario"});
	
	var div = Builder.node("div", {className:"cal-cabecera1"} );
	div.innerHTML = "<a href=\"#\" id=\"cal-cerrar\">x</a>";
	calendario.insert(div);
	
	div = Builder.node("div", {className:"cal-cabecera2"} );
	var div1 = Builder.node("div", {className:"cal-mes-prev"});
	div1.innerHTML = "<a href=\"#\" id=\"cal-prev\"><</a>";
	div.insert(div1);
	div1 = Builder.node("div", {className:"cal-mes"});
	div1.innerHTML = "<a href=\"#\" id=\"cal-prev\"><</a>";
	div.insert(div1);
	div1 = Builder.node("div", {className:"cal-mes-sig"});
	div1.innerHTML = "<a href=\"#\" id=\"cal-next\">></a>";
	div.insert(div1);
	calendario.insert(div);
	
	div = Builder.node("div", {className:"cal-tit-dias"});
	var dias;
	switch(idioma){
		case "es":
		dias = ["L","M","M","J","V","S","D"];
		break;
		
		case "de":
		dias = ["M","D","M","D","F","S","S"];
		break;
		
		default:
		dias = ["M","T","W","T","F","S","S"];
		break;
	}
	for(var i=0; i<7; i++) {
		div1 = Builder.node("div", dias[i]);
		div.insert(div1);
	}
	calendario.insert(div);
	
	for(var i=0; i<6; i++) {
		div = Builder.node("div", {className:"cal-dias"});
		for(var j=1; j<=7; j++) {
			div1 = Builder.node("div");
			div.insert(div1);
		}
		calendario.insert(div);
	}
}

function actualizaFecha() {
	var tabla = calendario.childNodes;
	
	calendario.select(".cal-dias div").each(function(dia){
													 dia.style.border = "solid 1px white";
													 dia.onclick = null;
													 dia.onmouseover = null;
													 dia.onmouseout = null;
													 });

	var diaMes = 0;
	var meses;
	switch(idioma){
		case "es":
		meses = ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
		break;
		
		case "de":
		meses = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];
		break;
		
		default:
		meses = ["January","February","March","April","May","June","July","August","September","October","November","December"];
		break;
	}
	
	var fechaPrimerDia = new Date(fecha.getFullYear(),fecha.getMonth(),1);
	var fechaUltimoDia = new Date(fecha.getFullYear(),fecha.getMonth()+1,0);
	var primerDia = fechaPrimerDia.getDay()==0?7:fechaPrimerDia.getDay();
	
	var fechaMesPrev = new Date(fecha.getFullYear(),fecha.getMonth(),0);
	
	tabla[1].childNodes[1].innerHTML=meses[fecha.getMonth()]+" - "+fecha.getFullYear();

	for(var i=0; i<6; i++) {
		for(var j=1; j<=7; j++) {
			
			tabla[i+3].childNodes[j-1].innerHTML = "";
			
			if(i==0&&j==primerDia) diaMes = 1;
			
			if(diaMes>0 && diaMes<=fechaUltimoDia.getDate()) {
				fecha.setDate(diaMes);
				var div = tabla[i+3].childNodes[j-1];
				if(Date.parse(fecha.toDateString())<Date.parse(fechaMin.toDateString()))div.className="cal-diaPasado";
				else {

					div.className="cal-dia";
				}
				if(Date.parse(fecha.toDateString())==Date.parse(hoy.toDateString()))div.className+=" cal-hoy";
				if(fechaSel)
					if(Date.parse(fecha.toDateString())==Date.parse(fechaSel.toDateString()))div.className+=" cal-sel";
				
				div.innerHTML=diaMes++;
			}else{
				var div = tabla[i+3].childNodes[j-1];
				div.className="cal-dia-mesDistinto";
				div.innerHTML=fechaMesPrev.getDate();
				if(diaMes<fechaPrimerDia.getDate()) div.innerHTML=fechaMesPrev.getDate()-primerDia+j+1;
				else if(diaMes>fechaUltimoDia.getDate()) div.innerHTML=(diaMes++)-fechaUltimoDia.getDate();
			}
		}
	}
	$$(".cal-dia").each(function(dia){
								 dia.onclick = function(e){seleccionaFecha(this.innerHTML); /*e.stopPropagation()*/};
								 dia.onmouseover = function(e){dia.style.border="solid 1px red";};
								 dia.onmouseout = function(e){dia.style.border="solid 1px white";};
								 });
}
