/* =================================================================================================================

yzak_calendar: creado por I. Blanco, Agosto 2006

Ruta para incluirlo

			<script type="text/javascript" src="./##ruta##/yzak_calendar.js"></script>

			- ##ruta##: dependera de donde se situe el fichero javascript, p.e. "../lib"

Codigo de para crear un calendario en un elemento de pagina:

	<a href="#" onclick="javascript:yzak_cal_mostrarCalendario( '##yzak_calendario_nombre##', '##destino##', ##mes##, ##aņo## );" 
		onMouseOver="window.status='Selector de fecha';return true;" 
		onMouseOut="window.status='';return true;"><img src="./../imagenes/show-calendar.gif" border="0" alt="Seleccionar fecha" /></a>
		<span id="##yzak_calendario_nombre##" style="position: absolute; display: none; width: 120px; height: 100; background-color: #FFFFFF;"> </span>

	Donde:
		
			- ##yzak_calendario_nombre##: es un identificador del objeto en el que se crea el calendario
			- ##destino##: es el identificador del objeto en el que se incluira la fecha seleccionada
			- ##mes##: codigo de mes 1..12 inicial
			- ##aņo##: aņo inicial en el que se muestra el calendario

// -----------------------------------------------------------------------------------------------------------------
Pendiente

	- Marcar el dia actual
====================================================================================================================
*/


/*
devuelve valores:
0: son iguales.
<0: la primera fecha es menor.
>0: la primera fecha es mayor.
*/
function dateCompareTo(fecha1, fecha2) {
  return fecha1.getTime() - fecha2.getTime();
}


var yzak_cal_linesCellColor = "#999999";

var yzak_cal_cabeceraTextColor = "#F0F0F0";
var yzak_cal_cabeceraBackColor = "#999999";
var yzak_cal_numberTextColor = "#008469";
var yzak_cal_numberBackColor = "#F5F5F5";
var yzak_cal_festivoTextColor = "#333333";
var yzak_cal_festivoBackColor = "#DDDDDD";

var yzak_cal_idcal = "";
var yzak_cal_ofjref = "";
var yzak_cal_mes = "";
var yzak_cal_ano = "";

// Mostramos el calendario
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_mostrarCalendario( idcal, objref, mes, ano )
	{
		var d = document;
		var objrefValue = d.getElementById( objref );
		var cal = d.getElementById( idcal );
		var ref = idcal;
		var mesFecha = mes;
		var anoFecha = ano;
		
		// Si ya tenemos un dato en el campo, usamos el mes y aņo de dicho valor
		if ( objrefValue.value != "" ) {
			var str  = new String( objrefValue.value );
			if ( str.length = 10 ) {
				mesFecha = str.substr( 3, 2 );
				if ( ! isNaN( mesFecha ) ) { mesFecha = parseInt( mesFecha ); }
				anoFecha = str.substr( 6, 4 );
			}
		}
		
		yzak_cal_crearCalendario( idcal, objref, mesFecha, anoFecha, ref );

		if ( cal.style.display == "block" ) {
			cal.style.display = "none";
		} else {
			cal.style.display = "block";
		}
		
		//objrefValue.value = "Seleccione fecha";
	}

// Ocultamos el calendario
// -----------------------------------------------------------------------------------------------------------------
	function yzak_cal_ocultarCalendario( idcal, nombreObjetoDestino, dia, mes, ano )
	{
		var d = document;
		var cal = d.getElementById( idcal );
		cal.style.display = "none";
		cal.innerHTML = "";

		var objDestino = d.getElementById( nombreObjetoDestino );

		objDestino.value = dia + "/" + mes + "/" + ano;
	}
	
// Aplicamos el valor
// -----------------------------------------------------------------------------------------------------------------	
	function aplicarValor( obj ) {
		window.status = "";
	}

// Nos devuelve el ultimo dia del mes especificado para el aņo especificado
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_diasMes( mesNu, ano ) {
	var arrMeses = new Array ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
	
	if ( ( ano % 4 == 0 ) && ( mesNu == 2 ) ) { 
		return 29; 
	} else {
		return arrMeses[ mesNu - 1 ];
	}
}

// Nos devuelve la posicion de 0 a 6, para iniciar el pintado de los numeros
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_primerDia( mes, ano ) {
	var dt = new Date( ano, mes-1, 01, 00, 00, 00); 
	var str = dt.getMonth(); // 0..11
	var dia = dt.getDay();
	
	// Domingo = 0, se cambia a 6, resto se resta 1
	if ( dia == 0 ) {
		return 6; // Domingo
	} else {
		return --dia; // Resto de los dias
	}	
}

// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_showMeses( ref ) {
	var obj = document.getElementById("yzak_tit_meses_" + ref);
	if ( obj != null ) {
			obj.style.display = "block";
	}
}

// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_hideMeses( ref ) {
	var obj = document.getElementById("yzak_tit_meses_" + ref );
	if ( obj != null ) {
			obj.style.display = "none";
	}
}

// Crear el calendario en el objeto especificado, para un mes y un aņo
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_crearCalendario( nombreObjContenedor, objdestino, mes, ano, ref )
{
	yzak_cal_idcal = nombreObjContenedor;
	yzak_cal_ofjref = objdestino;

  var hoy = new Date();
	if ( mes == "" ) { mes = hoy.getMonth() + 1; } // obtener el mes actual, como va de 0 a 11 le sumamos 1, a diferencia de ASP que devuelve de 1 a 12
	if ( ano == "" ) { ano = hoy.getFullYear(); } // obtener el aņo actual, 20XX, con 4 digitos
	
	yzak_cal_mes = mes;
	yzak_cal_ano = ano;
	
	var totalmes = yzak_cal_diasMes( mes, ano );
	var posPrimerDia = yzak_cal_primerDia( mes, ano );
	var posDiaCalendario = posPrimerDia;
	
	// Calculo del ultimo dia del mes
	var objContenedorDestino = document.getElementById( nombreObjContenedor );
	
	var str = "";
	
	// Cabecera de la tabla
	str += '<table border="0" cellpadding="1" cellspacing="0" style="border: 1px outset; background-color: #FFFFFF; width: 160px;">';
	str += '  <tr style="background: ' + yzak_cal_cabeceraBackColor + '">';
	str += '			<td colspan="7" align="center"><table style="width: 100%; background: ' + yzak_cal_cabeceraBackColor + '; color: ' + yzak_cal_cabeceraTextColor + ';" cellpadding="1" cellspacing="0"><tr>';
	
	if ( mes > 1 )
	{
		str += "<td style=\"width: 12px;\"><a href=\"javascript:yzak_cal_crearCalendario( '" + nombreObjContenedor + "','" + objdestino + "'," + ( mes - 1 ) + "," + ano + ");\" title=\"" + yzak_cal_nombreMes( mes - 1 ) + "\" style=\"color: " + yzak_cal_cabeceraTextColor + "; text-decoration: none;\">&laquo;</a></td>";
	} else { 
		str += "<td style=\"width: 12px;\">&nbsp;</td>";
	}
	
	str += '<td style="text-align: center; width: 90px; font-size: 11px;" onmouseover="yzak_cal_showMeses( \'' + ref + '\');">';
	str += '<div id="yzak_tit_meses_' + ref + '" style="display: none; position: absolute; border: 1px solid #CCCCCC; font-size: 10px;" onmouseout="yzak_cal_hideMeses( \'' + ref + '\');">';
	for ( n=1; n < 13; n++ ) {
			str += "<div style=\"background-color: #DDDDDD; color: #666666; cursor: pointer;\"";
			str += " onmouseover=\"this.style.color='#FFFFFF'; this.style.backgroundColor='"+yzak_cal_cabeceraBackColor+"';\"";
			str += " onmouseout=\"this.style.color='#666666'; this.style.backgroundColor='#DDDDDD';\"";
			str += ' onclick="yzak_cal_hideMeses( \'' + ref + '\'); yzak_cal_crearCalendario( \'' + nombreObjContenedor + '\',\'' + objdestino + '\',\'' + n + '\',\'' + ano + '\');">' + yzak_cal_nombreMes( n ) + '</div>';
	}
	str += "</div>";
	str += yzak_cal_nombreMes( mes ) + "</td>" ;
	
	if ( mes < 12 )
	{
		str += "<td style=\"width: 12px;\"><a href=\"javascript:yzak_cal_crearCalendario( '" + nombreObjContenedor + "','" + objdestino + "'," + ( parseInt( mes ) + 1 ) + "," + ano + ");\" title=\"" + yzak_cal_nombreMes( parseInt( mes ) + 1 ) + "\" style=\"color: " + yzak_cal_cabeceraTextColor + "; text-decoration: none;\">&raquo;</a></td>";
	} else { 
		str += '<td style="width: 12px;">&nbsp;</td>';
	}
	
	str += '<td>/<a href="javascript:yzak_cal_crearCalendario( \'' + nombreObjContenedor + '\',\'' + objdestino + '\',' + mes + ',' + ( ano-1 ) + ');" title="' + ( ano-1 ) + '" style="color: ' + yzak_cal_cabeceraTextColor + '; text-decoration: none;">&laquo;</a></td><td><div id="yzak_cal_zonaAnio_' + ref + '" style="display: inline; cursor: pointer;"><a href="javascript:yzak_cal_setYear( \'' + ref + '\', \'' + ano + '\' );" style="color: ' + yzak_cal_cabeceraTextColor + ';text-decoration: none;">' + ano + '</a></div></td><td><a href="javascript:yzak_cal_crearCalendario( \'' + nombreObjContenedor + '\',\'' + objdestino + '\',\'' + mes + ',' + ( parseInt( ano ) + 1 ) + ');" title="' + ( parseInt( ano ) + 1 ) + '" style="color: ' + yzak_cal_cabeceraTextColor + '; text-decoration: none;">&raquo;</a></td>';
	str += "</tr></table>";
	str += "		</td></tr>";
	str += "		<tr>";	
	
	// Rellenamos los primeros dias hasta que empieza el mes
	//alert( posPrimerDia );
	if ( posPrimerDia != 7 ) {
		for ( n = 0; n < posPrimerDia; n++ )
		{
			str += '<td style="background-color: #DDDDDD; border-bottom: 1px solid ' + yzak_cal_linesCellColor + ';border-right: 1px solid ' + yzak_cal_linesCellColor + ';\"></td>';
		}
	}
	
	for ( var n = 1; n < totalmes + 1;  n++ )
	{
		literal_dia = n;
		literal_mes = mes;
		if ( n < 10 ) { literal_dia = "0" + n; }
		if ( mes < 10 ) { literal_mes = "0" + mes; }
		
		posDiaCalendario++;
		if ( posDiaCalendario == 8 )
		{
			posDiaCalendario = 1;
		}
		
		
		//VAMOS A HACER LA COMPARACION DE FECHAS
		var currentTime = new Date();
		var month = currentTime.getMonth();
		var day = currentTime.getDate();
		var year = currentTime.getFullYear();
		
		resultado_valor = dateCompareTo(day+"/"+month+"/"+year, literal_dia+"/"+literal_mes+"/"+ano);	
		
		
		if ( posDiaCalendario == 6 || posDiaCalendario == 7 )
		{
			str += '<td align="right" style="font-size: 10px; border-bottom: 1px solid ' + yzak_cal_linesCellColor + ';border-right: 1px solid ' + yzak_cal_linesCellColor + ' ; background-color: #EEEEEE; cursor: pointer;" onclick="yzak_cal_ocultarCalendario( \'' + nombreObjContenedor + '\', \'' + objdestino + '\', \'' + literal_dia + '\', \'' + literal_mes + '\', \'' + ano + '\');">';
			str += '<a href="javascript:yzak_cal_ocultarCalendario( \'' + nombreObjContenedor + '\', \'' + objdestino + '\', \'' + literal_dia + '\', \'' + literal_mes + '\', \'' + ano + '\');" style="text-decoration: none; color: ' + yzak_cal_festivoTextColor + '" title="Ocultar calendario">' + n + '</a></td>';
		}
		else
		{
			str += '<td align="right" style="font-size: 10px; border-bottom: 1px solid ' + yzak_cal_linesCellColor + ';border-right: 1px solid ' + yzak_cal_linesCellColor + '; cursor: pointer;" onclick="javascript:yzak_cal_ocultarCalendario( \'' + nombreObjContenedor + '\', \'' + objdestino + '\', \'' + literal_dia + '\', \'' + literal_mes + '\', \'' + ano + '\');">';
		  str += '<a href="javascript:yzak_cal_ocultarCalendario( \'' + nombreObjContenedor + '\', \'' + objdestino + '\', \'' + literal_dia + '\', \'' + literal_mes + '\', \'' + ano + '\');" style="text-decoration: none; color: ' + yzak_cal_numberTextColor + ';" title="Ocultar calendario">' + n + '</a></td>';
		}
		
		if ( posDiaCalendario % 7 == 0 ) 
		{
			str += '</tr>'; // Final de la linea
		}
	}
	
	for ( n = posDiaCalendario; n < 7; n++ )
	{
		str += '<td style="background-color: #DDDDDD; border-bottom: 1px solid ' + yzak_cal_linesCellColor + ';border-right: 1px solid ' + yzak_cal_linesCellColor + ';"></td>';
	}
	str += '</tr>'
	str += '</table>';
	
	objContenedorDestino.innerHTML = str;
}

// Devuelve el nombre del mes
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_nombreMes( numero )
{
	var nombreMeses = Array ( "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" );

	var str  = new String( nombreMeses[ numero - 1 ] );
	if ( str.length > 7 ) {
			str = str.substr( 0, 6 ) + "..";
	}

	return str;
}

// Devuelve el nombre del mes en formato corto
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_nombreMesCorto( numero )
{
	var nombreMeses = Array ( "ENE", "FEB", "MAR", "ABR", "MAY", "JUN", "JUL", "AGO", "SEP", "OCT", "NOV", "DIC" );
	var str  = new String( nombreMeses[ numero - 1 ] );
	return str;
}

// Cambia el mes
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_cambioMenu( numero )
{
	
}

/*
d = new Date()    //today's date
mill=new Date(3001, 00, 01, 00, 00, 00)    //Next millennium start date
diff = mill-d    //difference in milliseconds
mtg = new String(diff/86400000)    //calculate days and convert to string
point=mtg.indexOf(".")    //find the decimal point
days=mtg.substring(0,point)    //get just the whole days
document.write("There are only " + days + " days remaining to the start of the next millennium.")
*/

// yzak_cal_setYear()
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_setYear( ref, ano ) {
	var valor = ano;
	var obj = document.getElementById("yzak_cal_zonaAnio_" + ref );
	if ( obj != null ) {
		obj.innerHTML = '<input type="text" id="yzal_cal_zonaAnioText_' + ref + '" value="' + valor + '" style="background: #FFF; font-size: 10px; width: 28px; border: 0px solid #DDD; overflow: hidden;" maxlength="4" onblur="yzak_cal_checkRightYear( \'' + ref + '\' );" />';
		obj = document.getElementById("yzal_cal_zonaAnioText_" + ref);
		if ( obj != null ) { obj.focus(); }
	}
	else
	{
		alert("Err in cal_setYear");
	}
}

//
// -----------------------------------------------------------------------------------------------------------------
function yzak_cal_checkRightYear( ref ) {
	var obj = document.getElementById("yzal_cal_zonaAnioText_" + ref);
	if ( obj != null ) {
			obj.value = yzak_cal_clearCharsNoNumeric( obj.value );
			var str  = new String( obj.value );
			if ( ! isNaN( obj.value ) && str.length == 4 ) {
				yzak_cal_crearCalendario( yzak_cal_idcal, yzak_cal_ofjref, yzak_cal_mes, str  );
			}
	}
	else
	{
		alert("Err in cal_checkRightYear");
	}
}

// clearCharsNoNumeric( valor ) : devuelve una cadena que solo contiene los numeros de otra cadena dada
// ------------------------------------------------------------------------------------------------------------------------------------
function yzak_cal_clearCharsNoNumeric( valor ) {
	var str = new String( valor );
	var res = "";
	for ( n = 0; n < str.length; n++ ) {
		if ( str.charCodeAt( n ) > 47 && str.charCodeAt( n ) < 58 ) {
			res += str.charAt( n );
		}
	}
	return res;
}
