function PadSpaces(TheString) {
	var Spaces = "             ";
	len = Math.round((9 - TheString.length)/2);
	return Spaces.substring(0,len) + TheString;
}

function NumLeapYears(StartYear, EndYear) {
 	var LeapYears, i;
 	if (EndYear >= StartYear){
 		for(LeapYears = 0; StartYear <= EndYear; StartYear++)
	 		if (IsLeapYear(StartYear)) LeapYears++;
	}else{
		for(LeapYears = 0; EndYear <= StartYear; EndYear++)
			if (IsLeapYear(EndYear)) LeapYears++;
	}
	return LeapYears;
}

function IsLeapYear(Year) {
	if(Math.round(Year/4) == Year/4){
		if(Math.round(Year/100) == Year/100){
			if(Math.round(Year/400) == Year/400)
				return true;
			else return false;
		}else return true;
	}
	return false;
}

function Trim(TheString) {
	var len;
	len = TheString.length;
 	while(TheString.substring(0,1) == " "){ //trim left
 		TheString = TheString.substring(1, len);
  		len = TheString.length;
	}
	
 	while(TheString.substring(len-1, len) == " "){ //trim right
 		TheString = TheString.substring(0, len-1);
  		len = TheString.length;
 	}
 	
 	return TheString;
}

function DetermineMonthIdx(form) {
	var i, month, month_s, len;
	month = Trim(form.elements[2].value);
	len = month.length;
	for( i = 0; i <12; i++){
		month_s = Months[i].substring(0,len);
		if (month_s.toUpperCase() == month.toUpperCase())
       		return (i);
  	}
	
  	return -1;
}

function FindNewYearStartingDay(Year) {
 	var LeapYears, Years, Day;
 	LeapYears = NumLeapYears(1995, Year); 
 	if  (Year >=1995)
 		Years = (Year -1995)+LeapYears;
 	else	Years = (Year -1995)-LeapYears; 
 	if  (Year >=1995)
		Day = Math.round(((Years/7 - Math.floor(Years/7))*7)+.1);
 	else	Day = Math.round(((Years/7 -  Math.ceil(Years/7))*7)-.1);
 	
	if (Year >=1995){ 
 		if(IsLeapYear(Year)) Day--;
 	}else Day += 7;
	
 	if(Day < 0) Day = 6;
	
 	if(Day > 6) Day = 0;
	
 	return Day;
}

function FindNumDaysInMonth(Year, Month) {
 	if(Month == 1){
   		if(IsLeapYear(Year)) return 29;
   		else return 28;
 	}else{	
		if(Month >6) Month++;
   		if(Month/2 == Math.round(Month/2))  return 31;
 	}
	return 30;		
}

function FindMonthStartDay(NewYearDay, Year, Month) {
  	var MonthStartDay;
  	AddArray = new Array(12);
  	AddArray[0]=0;AddArray[1]=3;AddArray[2]=3;AddArray[3]=6;
	AddArray[4]=1;AddArray[5]=4;AddArray[6]=6;AddArray[7]=2;
	AddArray[8]=5;AddArray[9]=0;AddArray[10]=3;AddArray[11]=5;
  	MonthStartDay = NewYearDay + AddArray[Month];
  	if(IsLeapYear(Year)  && (Month ) > 1) MonthStartDay ++;
	if (MonthStartDay > 6) MonthStartDay -= 7;
	return MonthStartDay; 
}

function  FillCalendar(form, calendar, bo) {
  	var Year, Month, Midx, NewYearDay, MonthStartDay;
	var NumDaysInMonth, i, t;
  	Year = parseFloat(form.elements[1].value);
  	Month = form.elements[2].value;
  	Midx  =  DetermineMonthIdx(form);
  	if (Midx == -1){
   		alert ("Can't recognize that month");
   		return;
  	}
	
  	NewYearDay = FindNewYearStartingDay(Year);
  	MonthStartDay = FindMonthStartDay(NewYearDay, Year,  Midx);
  	NumDaysInMonth = FindNumDaysInMonth(Year, Midx);  
  	
  	if (Midx == 0) {
  		NumDaysInPreviousMonth = FindNumDaysInMonth(Year-1, 11);
  	}
  	else {
  		NumDaysInPreviousMonth = FindNumDaysInMonth(Year, Midx-1);
  	}
  	
  	var fechaOcupada;
  	var fechaOcupada2;
  	
  	NextMonthDays = 0;
  	
  	for(i = 6;  i < 48;  i++){
		t = i-5-MonthStartDay;
		if ( t >= 1  &&  t <= NumDaysInMonth) {
			fechaOcupada = false;
			fechaOcupada2 = false;
			
		  	if (typeof (ocupado[calendar]) != "undefined") {
		  		for (indice=0; indice<ocupado[calendar].length; ++indice) {
		  			
		  			if (typeof (ocupado[calendar][indice]) != "undefined") {
						if (ocupado[calendar][indice].getDate() == t && ocupado[calendar][indice].getMonth() == Midx && ocupado[calendar][indice].getFullYear() == Year) {
							fechaOcupada = true;
							break;
						}
		  			}
		  		}
		  		
		  	}
		  	
		  	if (typeof (ocupado2[calendar]) != "undefined") {
		  		for (indice=0; indice<ocupado2[calendar].length; ++indice) {
		  			
		  			if (typeof (ocupado2[calendar][indice]) != "undefined") {
						if (ocupado2[calendar][indice].getDate() == t && ocupado2[calendar][indice].getMonth() == Midx && ocupado2[calendar][indice].getFullYear() == Year) {
							fechaOcupada2 = true;
							break;
						}
		  			}
		  		}
		  		
		  	}
		  	
		  	
			// no mostrar fechas anteriores
			
			if (!(fechaOcupada || fechaOcupada2)) {
				hoy = new Date();
				if (Year < hoy.getFullYear()) {
					fechaOcupada = true;
				}
				else {
					if (Year == hoy.getFullYear() && Midx < hoy.getMonth()) {
						fechaOcupada = true;
					}
					else {
						if (Year == hoy.getFullYear() && Midx == hoy.getMonth() && t < hoy.getDate()) {
							fechaOcupada = true;
						}
					}
				}
			}
			// no mostrar fechas anteriores
			
			
			if (fechaOcupada || (bo && fechaOcupada2)) {
				$('cal_input'+calendar+'_'+(i-6)).style.color = "#fff";
				$('cal_input'+calendar+'_'+(i-6)).style.backgroundColor = "#ee5353";
				$('cal_input'+calendar+'_'+(i-6)).style.textDecoration = "none";
			}
			else if(fechaOcupada2) {
				$('cal_input'+calendar+'_'+(i-6)).style.color = "#000";
				$('cal_input'+calendar+'_'+(i-6)).style.backgroundColor = "#cc3131";
				$('cal_input'+calendar+'_'+(i-6)).style.textDecoration = "none";
			}
			else {
				$('cal_input'+calendar+'_'+(i-6)).style.color = "#000";
				$('cal_input'+calendar+'_'+(i-6)).style.backgroundColor = "#fff";
				$('cal_input'+calendar+'_'+(i-6)).style.textDecoration = "none";
			}
			
			$('cal_input'+calendar+'_'+(i-6)).innerHTML = t;
		}
		else {
			if (i>15) {
				++NextMonthDays;
				$('cal_input'+calendar+'_'+(i-6)).innerHTML = NextMonthDays;
			}
			else {
				$('cal_input'+calendar+'_'+(i-6)).innerHTML = NumDaysInPreviousMonth - MonthStartDay + i - 5;
			}
			
			$('cal_input'+calendar+'_'+(i-6)).style.color = "#666";
			$('cal_input'+calendar+'_'+(i-6)).style.backgroundColor = "#ccc";
			$('cal_input'+calendar+'_'+(i-6)).style.textDecoration = "none";
		}
  	}
}

function IncDecYear(form, val, calendar, bo) {
	var valNum = parseInt(val);
	var valNum2 = parseInt(form.elements[1].value)
	form.elements[1].value = valNum2 + valNum;
	FillCalendar(form, calendar, bo);
}

function IncDecMonth(form, val, calendar, bo) {
	var valNum = parseInt(val);
  	var Midx  =  DetermineMonthIdx(form);
	Midx += valNum;
	if(Midx > 11) {
		Midx = 0;
		form.elements[1].value = parseInt(form.elements[1].value) + 1;
	}
	if(Midx < 0) {
		Midx = 11;
		form.elements[1].value = parseInt(form.elements[1].value) - 1;
	}
	form.elements[2].value = PadSpaces(Months[Midx]);
	FillCalendar(form, calendar, bo);
}
