	/*
	 * Variables definidas
	 */
		function variable_definidas(){
			
			this.msgFont		= 'Arial,Helvetica,sans-serif';
			
			this.msgFontSize	= '12';
			
			this.msgFontColor	= 'black';
		
			this.day_of_week 	= new Array('Do','Lu','Ma','Mi','Ju','Vi','Sa');
			
			this.month_of_year  = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'); 
		
			this.days_of_week 	= 7;    // "constant" for number of days in a week
	
			this.days_of_month  = 31;    // "constant" for number of days in a month
		
			this.cal			='';
		}
	/*
	 * Marcar calendario
	 */
	function marcar_calendario(fechas,titulos,descripciones){
		$(fechas).each(function(i,a){
		        $('#dia_'+a).css('color','red');
		        $('#dia_'+a).css('cursor','pointer');
		        $('#dia_'+a).attr('Onclick','document.location.href="/calendarios/'+titulos[i]+'"');
		        $('#dia_'+a).attr('title',descripciones[i]);
		});
	}
	function cambiar_mes_up(year,month){
		if(month<11){
			$('.calendarios').html(generar_calendario(year,month+1));
		}else{
			$('.calendarios').html(generar_calendario(year+1,month+1));
		}
	}	
	function cambiar_mes_down(year,month){
		if(month==0){
			$('.calendarios').html(generar_calendario(year-1,11));
		}else{
			$('.calendarios').html(generar_calendario(year,month-1));
		}
		if(month==1){
			$('.calendarios').html(generar_calendario(year,'enero'));
		}
	}	
	function generar_calendario(year,month){
			
			/*
			 * Variables de la clase definidas
			 */
		
				var definidas= new variable_definidas();
				
			//  DECLARE AND INITIALIZE VARIABLES
			
			
				var Calendar = new Date();
	
				if(month!='' && year!=''){
					/*
					 * Cambiar mes
					 */
						if(month=='enero'){
							Calendar.setMonth(0);
							Calendar.setYear(year);
						}else{
							Calendar.setMonth(parseInt(month));
							Calendar.setYear(year);
						}
				
					var today    = Calendar.getDate();    // Returns day (1-31)
					
					var month    = Calendar.getMonth();    // Returns month (0-11)
				
					var	year = Calendar.getFullYear();//year
					
					var weekday  = Calendar.getDay();    // Returns day (1-31)
					
					Calendar.setDate(1);    // Start the calendar day at '1'
				}else{
					/*
					 * Fecha actual
					 */
					var today    = Calendar.getDate();    // Returns day (1-31)
					
					var month    = Calendar.getMonth();    // Returns month (0-11)
				
					var	year = Calendar.getFullYear();//year
					
					var weekday  = Calendar.getDay();    // Returns day (1-31)
				
					Calendar.setDate(1);    // Start the calendar day at '1'
			
					Calendar.setMonth(month); 
				}
				
			
		/* VARIABLES FOR FORMATTING
		NOTE: You can format the 'BORDER', 'BGCOLOR', 'CELLPADDING', 'BORDERCOLOR'
		      tags to customize your caledanr's look. */
		
		var TR_start = '<TR>';
		var TR_end = '</TR>';
		var highlight_start = '<TD style="background:#999999; color:#333333!important" WIDTH="20"><TABLE CELLSPACING=0  BORDERCOLOR=CCCCCC style="font-size:' +definidas.msgFontSize+'px; font-family:'+definidas.msgFont+'; color:'+definidas.msgFontColor+'"><TR><TD WIDTH=18><B><CENTER>';
		var highlight_end   = '</CENTER></TD></TR></TABLE></B>';
		var TD_start = '<TD WIDTH="20"><CENTER>';
		var TD_end = '</CENTER></TD>';
		
		/* BEGIN CODE FOR CALENDAR
		NOTE: You can format the 'BORDER', 'BGCOLOR', 'CELLPADDING', 'BORDERCOLOR'
		tags to customize your calendar's look.*/
		
		definidas.cal =  '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BORDERCOLOR=BBBBBB style="font-size:' +definidas.msgFontSize+'px; font-family:'+definidas.msgFont+'; color:'+definidas.msgFontColor+'; margin-left:14px;"><TR><TD>';
		definidas.cal += '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 style="font-size:' +definidas.msgFontSize+'px; font-family:'+definidas.msgFont+'; color:'+definidas.msgFontColor+'">' + TR_start;
		definidas.cal += '<TD style="height:24px;margin-top:20px;  color:#ffffff!important" COLSPAN="' + definidas.days_of_week + '" BGCOLOR="#9d0100"><CENTER><B>';
		definidas.cal += '<a style="color:#ffffff!important; cursor:pointer;" onclick="cambiar_mes_down('+year+','+month+'); marcar_calendario(fechas,titulos,descripciones);"><</a> '+definidas.month_of_year[month]  + '   ' + year + '</B> <a  style="color:#ffffff!important; cursor:pointer;" onclick="cambiar_mes_up('+year+','+month+'); marcar_calendario(fechas,titulos,descripciones);">></a>' + TD_end + TR_end;
		definidas.cal += TR_start;
		
		//   DO NOT EDIT BELOW THIS POINT  //
		
		// LOOPS FOR EACH DAY OF WEEK
		for(index=0; index < definidas.days_of_week; index++){
			definidas.cal += TD_start + definidas.day_of_week[index] + TD_end;
		}
		
		definidas.cal += TD_end + TR_end;
		definidas.cal += TR_start;
		
		// FILL IN BLANK GAPS UNTIL TODAY'S DAY
			for(index=0; index < Calendar.getDay(); index++){
				definidas.cal += TD_start + '  ' + TD_end;
			}
		// LOOPS FOR EACH DAY IN CALENDAR
		for(index=0; index < definidas.days_of_month; index++){
			if(Calendar.getDate() > index){
			  		// RETURNS THE NEXT DAY TO PRINT
						
						var week_day =Calendar.getDay();
		
					  // START NEW ROW FOR FIRST DAY OF WEEK
					  if(week_day == 0){
						  definidas.cal += TR_start;
					  }
					  if(week_day != definidas.days_of_week){
						  // SET VARIABLE INSIDE LOOP FOR INCREMENTING PURPOSES
						  
						  var day  = Calendar.getDate();
						  
						  var month2=month+1;
						 
						  // HIGHLIGHT TODAY'S DATE
						 if(today==Calendar.getDate()){		 
							 definidas.cal += highlight_start +'<span id="dia_'+day+month2+year+'" Onclick="" title="">'+day+'</span>'+ highlight_end + TD_end;
						 }else{	
						 //dias normales
							 definidas.cal += TD_start +'<span id="dia_'+day+month2+year+'" Onclick="" title="">'+day+'</span>'+TD_end;	  	
						 } 
					  } 
					  // END ROW FOR LAST DAY OF WEEK
					  if(week_day == definidas.days_of_week){
						  definidas.cal += TR_end;
					  }
			}
			  // INCREMENTS UNTIL END OF THE MONTH
			  Calendar.setDate(Calendar.getDate()+1);
		
		}
		// end for loop
		
		definidas.cal += '</TD></TR></TABLE></TABLE>';
		
		return definidas.cal;
}	
