
Date.prototype.soloFecha=function()
{
	var tx = this.toLocaleString();
	var i  = tx.indexOf(",");
	var j  = tx.indexOf(this.getFullYear());
	return tx.substring(i+1, j+4);
}

function UTIL()
{
}

UTIL.sprintf=function()
{
	var i;
	var ia = 1;
	var ar = arguments[0].split("%");
	var txt = ar[0];
	for(i = 1; i< ar.length;i++){
		switch(ar[i].charAt(0)){
			case "s":
				txt += arguments[ia++] + ar[i].substring(1);
				break;
			case "S":
				txt += "\"" + arguments[ia++] + "\"" + ar[i].substring(1);
				break;
				 
			default:
				txt += ar[i];
				break; 
		}
	}
	return txt;
}

function HTML()
{
}

HTML.linkFalse = function(tx, js)
{
	return "<a href=\"#\" onclick=\"" + js + "return false;\">" + tx + "</a>"; 
}

HTML.propiedades = function (props)
{
	var i, salida;
	salida = "";
	for(i in props){
		salida += " " + i + "=\"" + props[i] + "\"";
	}
	return salida;
}

HTML.table = function (txt, props)
{
	if(!props) props = new Array();
	return "<table" + HTML.propiedades(props) + ">" + txt + "</table>";
}
HTML.tr = function (txt, props)
{
	if(!props) props = new Array();
	return "<tr" + HTML.propiedades(props) + ">" + txt + "</tr>";
}
HTML.td=function (txt, props)
{
	if(!props) props = new Array();
	return "<td" + HTML.propiedades(props) + ">" + txt + "</td>";
}
//////////////////////////////////////////////////////////////////////////////
var static_calendario_abierto=null;
function Calendario(id, f)
{
	this.id = id;
	this.dia = f ? new Date(f) : new Date();
	
	var txt = UTIL.sprintf(
		  "<input disabled size=23 name=%S id=%S><span class=%S><image src=%S onclick=%S></image><div class=%S id=%S></div></span>",
		  id + "_input", id + "_input",
		  "calendario_span", "calendario.gif",
		  id + ".onClick()", "calendario_div",
		  id + "_div");
	$(id).innerHTML = txt;
	this.updateInput();
}
Calendario.prototype.onClick = function()
{
	var div = $(this.id + "_div");
	if(static_calendario_abierto == this){
	   static_calendario_abierto = null;
	   div.style.display = "none";
	   return;
	}
	if(static_calendario_abierto != null){
		static_calendario_abierto.onClick();
	}
	this.updateDiv();
	this.updateInput();
	static_calendario_abierto = this;
	div.style.display         = "block";
}
Calendario.prototype.updateDiv = function()
{
	$(this.id + "_div").innerHTML = Calendario.generaHoja(this.dia);
}
Calendario.prototype.updateInput = function()
{
	$(this.id + "_input").value = this.dia.soloFecha();
}

Calendario.generaDias= function (dat)
{
	var cel, txt, lin, x, y;
	
	var diames  = dat.getDay();
	var estedia = dat.getDate();
	var maxdia  = 31;
	switch(dat.getMonth()){
		case 2:
			x = dat.getYear();
			maxdia = 28;
			if(x%4   == 0) maxdia = 29;
			if(x%100 == 0) maxdia = 28;
			if(x%400 == 0) maxdia = 29;
			break;
		case 4: case 6: case 9: case 11:
			maxdia = 30;
			break;
	}
	
	var dia = estedia;
	if(diames == 0) diames = 7;
	while(diames > 1) {diames--; dia--;}
	while(dia > 1) dia -= 7;

	txt = "";
	
	while(dia <= maxdia){
		lin = "";
		for(x=0;x<7;x++){
			if(dia < 1 || dia > maxdia) cel = "&nbsp;";
			else                        cel = HTML.linkFalse(dia, "Calendario.onClickDia("+dia+");");
			if(x > 4) cel = "<i>" + cel + "</i>";
			lin += HTML.td(cel, dia == estedia ? {"align":"center", "bgcolor" : "#FFFFCC"} : {"align":"center"});
			dia++;
		}
		lin = HTML.tr(lin);
		txt += lin;
	}
	
	return txt;
}
Calendario.generaHoja=function(dat)
{
	var txt="";
	var hd, up, dn, mes;
	var dias;

	//generar tabla cabecera	
	mes  = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
	mes = mes[dat.getMonth()] + " de " + dat.getFullYear();
	mes = HTML.td(mes, {"align" : "center"});
	
	up = HTML.td(HTML.linkFalse("&gt;", "Calendario.onClickUp();"), {"align" : "right"});
	dn = HTML.td(HTML.linkFalse("&lt;", "Calendario.onClickDn();"), {"align" : "left"});

	hd   = HTML.table(HTML.tr( dn + mes + up ), {"border":1, "width" : "100%"} );
	
	dias = HTML.table(Calendario.generaDias(dat), {"border":1, "width" : "100%"});
	
	
	txt = HTML.tr(HTML.td(hd)) + HTML.tr(HTML.td(dias));
//	txt = HTML.table(txt, {"border":1, "width" : "200"});
	txt = HTML.table(txt, {"bgcolor" : "#E8E8FF", "cellpadding":0, "cellspacing":0, "width" : "200"});
	
	return txt;
}

Calendario.onClickUp=function()
{
	var dia = static_calendario_abierto.dia;
	var y   = dia.getFullYear();
	var m   = dia.getMonth();
	if(m < 11){
		dia.setMonth(m+1);
	}
	else{
		dia.setFullYear(y+1);
		dia.setMonth(0);
	}
	static_calendario_abierto.updateDiv();
	static_calendario_abierto.updateInput();
}
Calendario.onClickDn=function()
{
	var dia = static_calendario_abierto.dia;
	var y   = dia.getFullYear();
	var m   = dia.getMonth();
	if(m > 0){
		dia.setMonth(m-1);
	}
	else{
		dia.setFullYear(y-1);
		dia.setMonth(11);
	}
	static_calendario_abierto.updateDiv();
	static_calendario_abierto.updateInput();
}
Calendario.onClickDia=function(dia)
{
	static_calendario_abierto.dia.setDate(dia);
	static_calendario_abierto.updateDiv();
	static_calendario_abierto.updateInput();
	static_calendario_abierto.onClick();
}

 

