

		var DayInMilliseconds = 24 * 60 * 60 * 1000;
		var TodaysDate = new Date();
		var SelectedDate = TodaysDate;
		var OriginalDate = TodaysDate;
		var ColumnDayMapping = Array( 1, 2, 3, 4, 5, 6, 0 ); // 0-Monday ... 6-Sunday
		var previousYear = SelectedDate.getFullYear();
		/*
		 * Show the calendar for the given month
		 */
		 function ShowCalendar(pYear, pMonth, pMonthDay)
		 {
		 	// Valid entries only
		 	pYear  = parseInt( pYear );  pYear = (isNaN( pYear ) || pYear < 1599 || pYear > 2999) ? TodaysDate.getFullYear() : pYear;
		 	pMonth = parseInt( pMonth ); pMonth = isNaN( pMonth ) ? (TodaysDate.getMonth() + 1) : pMonth;
		 	pMonthDay = parseInt( pMonthDay ); pMonthDay = isNaN( pMonthDay ) ? TodaysDate.getDate() : pMonthDay;

			previousYear = pYear;

		 	SelectedDate = new Date();
			SelectedDate.setFullYear( pYear, pMonth - 1, pMonthDay );
			document.frmDateSelection.theDate.value = formatDate( SelectedDate );

		 	// Get first and last days of the month
		 	var FirstDayOfMonth = new Date(), FirstDayOfNextMonth = new Date(), LastDayOfMonth = new Date();
		 	FirstDayOfMonth.setFullYear( pYear, pMonth - 1, 1 );

		 	if(pMonth < 12) FirstDayOfNextMonth.setFullYear( pYear, pMonth, 1 );
		 	else FirstDayOfNextMonth.setFullYear( pYear + 1, 0, 1 );

		 	LastDayOfMonth.setTime( FirstDayOfNextMonth.getTime() - DayInMilliseconds );

		 	// Loop over TD's and set their values accordingly
		 	var dayNo = 0;
		 	
		 	finMes = false;
		 	for( var r = 0; r < 6; r++ )
		 	{
		 		for(var c = 0; c < 7; c++)
		 		{
		 			var td = document.getElementById("GridTD_" + r + "_" + c);
		 			// Clean up the td
		 			td.innerHTML = "&nbsp;";
					
					// Sundays and Saturdays are different
					// if( c == 5 || c == 6 )
					// 	td.style.backgroundColor ="#F0F0F0";
					// else
 					td.style.backgroundColor = "";
 					
 					td.style.color = "black";
 					td.style.fontWeight = "normal";

		 			// If not started counting, check for start
		 			if( dayNo == 0 )
		 				if ( FirstDayOfMonth.getDay() == ColumnDayMapping[c] )
		 					dayNo = 1;

		 			if( dayNo > 0 && dayNo <= LastDayOfMonth.getDate() )
		 			{
		 				td.innerHTML = "<a href='/eventos/"+dayNo+"-"+pMonth+"-"+pYear+"/' onclick='javascript:ShowCalendar("+pYear+","+pMonth+","+dayNo+")'>"+ dayNo + "</a>";

		 				if( (TodaysDate.getFullYear() == pYear) && (TodaysDate.getMonth() == pMonth - 1) && (TodaysDate.getDate() == dayNo) )
		 				{
 							td.style.fontWeight = "bold";
		 				}

		 				if( pMonthDay == dayNo )
		 				{
 							td.style.backgroundColor = "Yellow";
 							td.style.color = "red";
 							td.style.fontWeight = "bold";
		 				}
		 						 				
		 				dayNo++;
		 			}
					var hoy = new Date();
					//alert(dayNo);
					if (eventos != "")
						if (!(finMes)){
							if (dayNo == 31)
								finMes = true;
							if (dayNo != 0){
								hoy.setDate(dayNo - 1);
								hoy.setMonth(pMonth - 1);
								hoy.setYear(pYear);
								//alert(hoy);
					 			setEvento(td, hoy, eventos);
					 		}
					 		else{
					 			td.className = "";	
					 		}
					 	}
		 		}
		 	}
		 }

		/*
		 * Returned Date format
		 */
		 function formatDate( dateObject )
		 {
		 	var pMonth = dateObject.getMonth() + 1;
		 	var pMonthDay = dateObject.getDate();
		 	var pYear = dateObject.getFullYear();

		 	// Show day, month and year readings
		 	var disp_Month = (pMonth < 10) ? "0" + pMonth : pMonth;
		 	var disp_Day = (pMonthDay  < 10) ? "0" + pMonthDay  : pMonthDay;
		 	document.frmDateSelection.month.selectedIndex = pMonth - 1;
		 	document.frmDateSelection.year.value = pYear;
		 	return disp_Day + "/" + disp_Month + "/" + pYear;
		 }

		/*
		 * Month changed
		 */
		 function MonthOrYearChanged()
		 {
			ShowCalendar( document.frmDateSelection.year.value, document.frmDateSelection.month.selectedIndex + 1, 1 );
		 }

		// +1/-1 Year change
		function YearChanged( howMuch )
		{
			document.frmDateSelection.year.value = parseInt( document.frmDateSelection.year.value ) + parseInt( howMuch );
			MonthOrYearChanged();
		}

		// Parse a date string and return the object
		function getDateObject( dateString )
		{
			var arr = Array();
			var valid = false;
			var day = -1, month = -1, year = -1;

			// dd/mm/yyyy format
			if( dateString.indexOf("/") > 0 )
			{
				valid = true;
				arr   = dateString.split("/");
				day = parseInt(arr[0],10);
				if(arr.length > 0) month = parseInt(arr[1],10);
				if(arr.length > 1) year  = parseInt(arr[2],10);
			}
			// yyyy-mm-dd
			else if( dateString.indexOf("-") > 0 )
			{
				valid = true;
				arr   = dateString.split("-");
				day = parseInt(arr[2],10);
				if(arr.length > 0) month = parseInt(arr[1],10);
				if(arr.length > 1) year  = parseInt(arr[0],10);
			}

			if(! valid ) return TodaysDate;

			day = parseInt(arr[0],10);
			if(arr.length > 0) month = parseInt(arr[1],10);
			if(arr.length > 1) year  = parseInt(arr[2],10);

			var theDate = new Date();

			theDate.setFullYear( year, month - 1, day );
			
			return theDate;
		}

		/*
		 * Initialize
		 */
		function Initialize( fromDateObj )
		{
			previousYear = SelectedDate.getFullYear();
			
			if( ! fromDateObj )
			{
				var validSelected = false;
				try
				{
					if(window.opener != null)
						SelectedDate = opener.GetDateSelectorDate();
					if( typeof(SelectedDate) == "object" )
					{
						validSelected = true;
					}
					else
					{
						SelectedDate = getDateObject( SelectedDate );
						validSelected = true;
					}
				}
				catch( ex )
				{
					validSelected = false;
				}
				if( ! validSelected ) SelectedDate = TodaysDate;
				
				OriginalDate = SelectedDate;
			}
			else
			{
				SelectedDate = fromDateObj;
			}
			
			document.frmDateSelection.year.focus();
			
			ShowCalendar( SelectedDate.getFullYear(), SelectedDate.getMonth() + 1, SelectedDate.getDate() );
						
		}

		function returnDateString()
		{
			try
			{
				if(window.opener != null)
					opener.SetDateSelectorDate( document.frmDateSelection.theDate.value );
			}
			catch( ex )
			{
				alert("Wrong use of returnDateString() function\n" + ex.toString());
			}
			window.close();
		}
		
		
		// Función que marca la casilla si la fecha está en un evento 
		function setEvento(td, fechaActual, eventos){
			var intervalos = eventos.split(",");
			for (var i = 0; i < intervalos.length; i++){
				var fechas = intervalos[i].split("-");
				
				var fechaIni;
				fechaIni = new Date();
				fechasAux = fechas[0].split("/");
				fechaIni.setDate(fechasAux[0]);
				fechaIni.setMonth(fechasAux[1] - 1);
				fechaIni.setYear(fechasAux[2]);

				var fechaFin;
				fechaFin = new Date();
				fechasAux = fechas[1].split("/");
				fechaFin.setDate(fechasAux[0]);
				fechaFin.setMonth(fechasAux[1] - 1);
				fechaFin.setYear(fechasAux[2]);				
				
				//alert(fechaIni + "  " + fechaFin);				
				//alert(fechaIni + "  " + fechaFin + "  " + fechaActual + "\n" + dateCmp(fechaActual, fechaIni) + "," + dateCmp(fechaActual, fechaFin));
				if ((dateCmp(fechaActual, fechaIni)>=0) && (dateCmp(fechaActual, fechaFin)<=0)){ 
					td.className = "evento";
				}
				else{
					td.className = "";
				}
			}
			
		}
		
		function dateCmp(date1, date2){
			var year1, month1, day1, day2, month2, year2;
			
			day1 =  date1.getDate();
			month1 = date1.getMonth() + 1;
			year1 =  date1.getFullYear();
			

			
			day2 =  date2.getDate();
			month2 = date2.getMonth() + 1;
			year2 =  date2.getFullYear();

			//alert(day1 + "  " + month1 + " " + year1 + "---" + day2 + "  " + month2 + " " + year2);
			cmp = numCmp(year1, year2);
			if (cmp == 0){
				cmp = numCmp(month1, month2);
				if (cmp == 0){
					cmp = numCmp(day1, day2);
				}
			}
			return(cmp);
		}
		
		function numCmp (num1, num2){
			if (num1<num2)
				return (-1);
			else{
				if (num1 > num2)
					return (1);
				else
					return(0);
			}
		}
