<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>
<html>
<head>
<title>Horarios</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
#ContenedorCalendario{background-color:#EEEEEE;padding-top:20px;border: 1px solid #C9C9C9;width:800px;}
.calFondoCalendario {background-color:#EEEEEE;border: 1px solid #C9C9C9;}
#calFondoMes, .calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {background-color:#C9C9C9;}
#calFondoMes {font:bold 11px Arial, Helvetica, sans-serif; text-align:center;}
.calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {font:900 9px Arial, Helvetica, sans-serif;}
#calDias, #calFinSemana {font:700 11px Arial, Helvetica, sans-serif;text-decoration:none;}
#calDias a{color:#333333;}
#calFinSemana {color:#FF0000;}
#calDiasMarcado, #calFinSemanaMarcado {background-color:#C9C9C9; font:700 11px Arial, Helvetica, sans-serif;}
#calDiasMarcado a{color:#FFFFFF;text-decoration:none;}
#calFinSemanaMarcado a {color:#FF0000;text-decoration:none;}
#calDiasMarcado div, #calFinSemanaMarcado div {display:none;}
#calDiasMarcado:hover div, #calFinSemanaMarcado:hover div {display:block;position:absolute;border:1px solid #C9C9C9;width:100px;height:100px;background-color:#FFFFFF;color:#000000;font:11px Verdana, Helvetica, sans-serif;}
.calDiaVacio {background-color:#FFFFFF;color:#C9C9C9;font:700 11px Arial, Helvetica, sans-serif; text-align:center;}
#paginador {background-color:#EEEEEE;height:30px;padding-top:7px;}
#paginador a{background-color:#A4A4A4;color:#FFFFFF;font:900 9px Arial, Helvetica, sans-serif;text-decoration:none;padding:3px;border: 1px solid #C9C9C9;}
</style>
</head>
<body>
<div id="ContenedorCalendario">
<%
' =============== Sub y Funciones ================
Sub Dias()
%>
</td>
</tr>
<tr align="center">
<td rows="6"><div class="calFondoSemanas">Sem</div></td>
<td><div class="calFondoDias">Lun</div></td>
<td><div class="calFondoDias">Mar</div></td>
<td><div class="calFondoDias">Mié</div></td>
<td><div class="calFondoDias">Jue</div></td>
<td><div class="calFondoDias">Vie</div></td>
<td><div class="calFondoDias">Sáb</div></td>
<td><div class="calFondoDias">Dom</div></td>
</tr>
<%
End Sub
Function Nombre_Mes(ElMes)
Select Case ElMes
Case 1
Nombre_Mes = "Enero"
Case 2
Nombre_Mes = "Febrero"
Case 3
Nombre_Mes = "Marzo"
Case 4
Nombre_Mes = "Abril"
Case 5
Nombre_Mes = "Mayo"
Case 6
Nombre_Mes = "Junio"
Case 7
Nombre_Mes = "Julio"
Case 8
Nombre_Mes = "Agosto"
Case 9
Nombre_Mes = "Septiembre"
Case 10
Nombre_Mes = "Octubre"
Case 11
Nombre_Mes = "Noviembre"
Case 12
Nombre_Mes = "Diciembre"
Case Else
Nombre_Mes = "ERROR!"
End Select
End Function
Function UltimoDia(ElMes, ElAnyo)
Select Case ElMes
Case 1, 3, 5, 7, 8, 10, 12
UltimoDia = 31
Case 4, 6, 9, 11
UltimoDia = 30
Case 2
If IsDate(ElAnyo & "-" & ElMes & "-" & "29") Then UltimoDia = 29 Else UltimoDia = 28
Case Else
UltimoDia = 31
End Select
End Function
' =============== Sub y Funciones ================
Dim oConn, SQL, rs, registros
Dim j, i, z, indiceCicloArrUnidimen, indiceCicloEvento ' ----> Contadores
Dim numRows
Dim arregloIni(), arregloFin(), DiffDias(), RangoDias(), TxtEvento(), RangoDias2(), TxtEvento2()
Dim FechaIni, FechaFin, Evento
Dim Mes, ElMes
Dim Anyo, ElAnyo
Dim FechaInicio, FechaActual, FechaFinal
Dim DiaActual
Dim SumarMesQuery, MesAnyo
Dim PrimerDiaMes
Dim Semana, nSemanas01, nSemanas31
Dim DiasMesSiguiente, DiasMesAnterior
Dim Columna, Fila
Dim UltimoDiaMesAnterior
Dim EstamosEnEl, cad
Dim unMesMenos, unMesMas, splMenos, splMas, mesMenos, mesMas, anyoMas, anyoMenos
Dim pagMeses ' ---> Meses que hay que sumar o restar para hacer la paginación
FechaIni = 0
FechaFin = 1
Evento = 2
' Si viene vacía o no es numerica
If Request.Querystring("mes") = "" or Not IsNumeric(Request.Querystring("mes")) then
Mes = CInt(Month(Date))
Else
Mes = CInt(Request.Querystring("mes"))
End If
If Request.Querystring("anyo") = "" or Not IsNumeric(Request.Querystring("anyo")) then
Anyo = CInt(Year(Date))
Else
Anyo = CInt(Request.Querystring("anyo"))
End If
FechaInicio = CDate("1/" & Month(Date) & "/" & Year(Date))
FechaActual = CDate("1/" & Mes & "/" & Anyo)
FechaFinal = DateAdd("m", 4, FechaInicio)
' Conexión
' Traemos los eventos y sus fechas
' Consulta para un mes
SQL ="SELECT FechaInicio, FechaFinal, Evento, AnyoMes FROM Calendario2 WHERE AnyoMes = '"& CInt(Anyo) & "/" & CInt(Mes) & "';"
' Consulta para más de un mes
'SQL ="SELECT FechaInicio, FechaFinal, Evento FROM Calendario2 WHERE FechaInicio >= #"& FechaActual &"#;"
set rs = oConn.Execute(SQL)
' Hay eventos??
IF not rs.eof = True Then
' Traemos las fechas de inicio y final
registros = rs.getrows()
rs.Close
Set rs = Nothing
oConn.Close
Set oConn = Nothing
numRows = UBound(registros,2)+1
indiceCicloArrUnidimen = 0
Redim arregloIni(numRows)
Redim arregloFin(numRows)
Redim DiffDias(numRows)
'Redim RangoDias(1, 1)
'Redim TxtEvento(1, 1)
For j = 0 to UBound(registros,2)
arregloIni(j) = registros(FechaIni,j)
arregloFin(j) = registros(FechaFin,j)
' Sacamos el número días en los que el evento estará activo
DiffDias(j) = DateDiff("d", arregloIni(j), arregloFin(j))
Redim preserve RangoDias(numRows, DiffDias(j))
Redim preserve TxtEvento(numRows, DiffDias(j))
' Sacamos el rango de fechas entre la fecha inical y final y los eventos
For i = 0 to DiffDias(j)
RangoDias(j, i) = DateSerial(CInt(split(arregloIni(j),"/")(2)), CInt(split(arregloIni(j),"/")(1)), CInt(split(arregloIni(j),"/")(0)) + CInt(i))
TxtEvento(j, i) = registros(Evento,j)
Next 'i
' Trabajamos esos eventos y fechas para insertarlas en una matríz unidimensional y poder evaluarlas más tarde
For z = 0 to UBound(RangoDias,2)
Redim Preserve RangoDias2(indiceCicloArrUnidimen)
Redim Preserve TxtEvento2(indiceCicloArrUnidimen)
RangoDias2(indiceCicloArrUnidimen) = """" & RangoDias(j,z) & """"
TxtEvento2(indiceCicloArrUnidimen) = TxtEvento(j,z)
indiceCicloArrUnidimen = indiceCicloArrUnidimen +1
Next 'z
Next 'j
indiceCicloEvento = 0
%>
<!-- Empezamos a montar el Calendario -->
<div>
<table border="0" cellspacing="0px" cellpadding="0px" width="85%" align="center">
<tr>
<%
IF FechaActual > FechaFinal then ' Aún no ha progresado 6 meses en el calendario
%>
<td id="calFondoMes">No puede consultar eventos con mas de 6 meses de antelación</td></tr></table>
<div id="paginador" align="center">
<a href="./calendario.asp?mes=<%=Month(FechaFinal)%>&anyo=<%=Year(FechaFinal)%>">Atrás</a>
</div>
<%
ELSEIF FechaActual < FechaInicio then ' Se ha manipulado las var con una fecha menor a la de inicio
%>
<td id="calFondoMes">No puede consultar eventos ya pasados</td></tr></table>
<div id="paginador" align="center">
<a href="./calendario.asp?mes=<%=Month(Date)%>&anyo=<%=Year(Date)%>">Atrás</a>
</div>
<%
ELSE
' =======
' EDITABLE
' Para mostrar más de un mes editamos el límite del ciclo
' =======
For i = 0 to 0 ' ¿Cuantos meses mostramos? 0 : 1 mes, 1 : 2 meses, ...
SumarMesQuery = DateAdd("m", i, DateSerial(Anyo, Mes, 1))
MesAnyo = Split(SumarMesQuery,"/")
ElMes = MesAnyo(1)
ElAnyo = MesAnyo(2)
%>
<td>
<table border="0" cellspacing="1px" cellpadding="3px" width="200px" align="center" class="calFondoCalendario">
<tr align="center">
<td colspan="8">
<div id="calFondoMes">
<%=Nombre_Mes(ElMes)%>, <%=ElAnyo%>
</div>
<%
Call Dias()
DiaActual = 1
PrimerDiaMes = DatePart("w", DateAdd("d", -1, DateSerial(ElAnyo, ElMes, 1)), vbMonday)
Semana = DatePart("ww", CDate("01/" & ElMes & "/" & ElAnyo), vbMonday, vbFirstFourDays) ' Número de la semana del mes actual
nSemanas31 = DatePart("ww", CDate("12/31/" & ElAnyo), vbMonday, vbFirstFourDays) 'Número de semanas del año
nSemanas01 = DatePart("ww", CDate("01/01/" & ElAnyo), vbMonday, vbFirstFourDays) 'Número de semana de la primera semana del año siguiente
DiasMesSiguiente = 0
For Fila = 0 to 5
%>
<tr height="20px">