// how reliable is this test?
isIE = (document.all ? true : false);
isDOM = (document.getElementById ? true : false);

// Initialize arrays.
var months = new Array("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic");
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var displayMonth = new Date().getMonth();
var displayYear = new Date().getFullYear();
var displayDivName;
var displayElement;


function padDigits(n, totalDigits) { 
	n = n.toString(); 
	var pd = ''; 
	if (totalDigits > n.length) { 
		for (i=0; i < (totalDigits-n.length); i++) { 
			pd += '0'; 
		} 
	} 
	return pd + n.toString(); 
}
	
function getDays(month, year) {
// Test for leap year when February is selected.
	if (1 == month) {
		return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
	} else {
		return daysInMonth[month];
	}
}

function getToday() {
// Generate today's date.
	this.now = new Date();
	this.year = this.now.getFullYear();
	this.month = this.now.getMonth();
	this.day = this.now.getDate();
}

// Start with a calendar for today.
today = new getToday();

function newCalendar(eltName,attachedElement) {
	if (attachedElement) {
		if (displayDivName && displayDivName != eltName) {
			hideElement(displayDivName);
		}
	    displayElement = attachedElement;
	}
	
	displayDivName = eltName;
    today = new getToday();
	//today = getCurrentSelectedDate();
    var parseYear = parseInt(displayYear + '');
    var newCal = new Date(parseYear, displayMonth, getCurrentSelectedDate().getDate());
	//var newCal = getCurrentSelectedDate();
    var day = -1;
    var startDayOfWeek = newCal.getDay();
    if ((today.year == newCal.getFullYear()) && (today.month == newCal.getMonth())) {
		day = today.day;
    }
    var intDaysInMonth = getDays(newCal.getMonth(), newCal.getFullYear());
	var daysGrid = makeDaysGrid(startDayOfWeek,day,intDaysInMonth,newCal,eltName);
	if (isIE) {
		var elt = document.all[eltName];
	    elt.innerHTML = daysGrid;
    } else if (isDOM) {
		var elt = document.getElementById(eltName);
	    elt.innerHTML = daysGrid;
	} else {
		var elt = document.layers[eltName].document;
	    elt.open();
	    elt.write(daysGrid);
	    elt.close();
	}
}

function incMonth(delta,eltName) {
	displayMonth += delta;
	if (displayMonth >= 12) {
		displayMonth = 0;
	   	incYear(1,eltName);
	} else if (displayMonth <= -1) {
		displayMonth = 11;
	    incYear(-1,eltName);
	} else {
		newCalendar(eltName);
	}
}

function incYear(delta,eltName) {
	displayYear = parseInt(displayYear + '') + delta;
	newCalendar(eltName);
}

function getCurrentSelectedDate() {
	var currentSelectedDate = displayElement.value;
	if (currentSelectedDate.length == 10) {
		var year = parseInt(currentSelectedDate.substr(0,4));
		var month = parseInt(currentSelectedDate.substr(5,2));
		var day = parseInt(currentSelectedDate.substr(8,2));
		return new Date(year, month, day);		
	} else {
		return new Date();
	}
}

function makeDaysGrid(startDay,day,intDaysInMonth,newCal,eltName) {
	var daysGrid;
	var month = newCal.getMonth();
	var year = newCal.getFullYear();
	var isThisYear = (year == new Date().getFullYear());
	var isThisMonth = (day > -1)
	daysGrid = '<table border=1 cellspacing=0 cellpadding=2 style="border:#000 1px solid;"><tr><td bgcolor=#ffffff nowrap>';
	daysGrid += '<font class=textoPequeno>';
	daysGrid += '<a href="javascript:hideElement(\'' + eltName + '\')">x</a>';
	daysGrid += '&nbsp;&nbsp;';
	daysGrid += '<a href="javascript:incMonth(-1,\'' + eltName + '\')">&laquo; </a>';

	daysGrid += '<b>';
	if (isThisMonth) { 
		daysGrid += '<font color=red>' + months[month] + '</font>'; 
	} else { 
		daysGrid += months[month]; 
	}
	daysGrid += '</b>';

	daysGrid += '<a href="javascript:incMonth(1,\'' + eltName + '\')"> &raquo;</a>';
	daysGrid += '&nbsp;&nbsp;&nbsp;';
	daysGrid += '<a href="javascript:incYear(-1,\'' + eltName + '\')">&laquo; </a>';

	daysGrid += '<b>';
	if (isThisYear) { 
		daysGrid += '<font color=red>' + year + '</font>'; 
	} else { 
		daysGrid += ''+year; 
	}
	daysGrid += '</b>';

	daysGrid += '<a href="javascript:incYear(1,\'' + eltName + '\')"> &raquo;</a><br>';
	daysGrid += '<table>';
	daysGrid += '<tr>';
	daysGrid += '<td>Do</td>';
	daysGrid += '<td>Lu</td>';
	daysGrid += '<td>Ma</td>';
	daysGrid += '<td>Mi</td>';
	daysGrid += '<td>Ju</td>';
	daysGrid += '<td>Vi</td>';
	daysGrid += '<td>Sa</td>';
	daysGrid += '</tr>';
		
	//daysGrid += '&nbsp;Do Lu Ma Mi Ju Vi Sa&nbsp;<br>&nbsp;';

	var dayOfMonthOfFirstSunday = (7 - startDay + 1);
	for (var intWeek = 0; intWeek < 6; intWeek++) {
		daysGrid += '<tr>';
	    var dayOfMonth;
	    for (var intDay = 0; intDay < 7; intDay++) {
	    	dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
		 	if (dayOfMonth <= 0) {
	        	daysGrid += "<td>&nbsp;</td>";
		 	} else if (dayOfMonth <= intDaysInMonth) {
				daysGrid += '<td>';
		   		var color = "blue";
		   		if (day > 0 && day == dayOfMonth) {
					color = "red";
				}
		   		daysGrid += '<a href="javascript:setDay(';
				daysGrid += dayOfMonth + ',\'' + eltName + '\')" '
		   		daysGrid += 'style="color:' + color + '">';
		   		var dayString = dayOfMonth + "</a> ";
		   		if (dayString.length == 6) {
					dayString = '0' + dayString;
				}
		   		daysGrid += dayString;
				daysGrid += '</td>';
			}
		}
		if (dayOfMonth < intDaysInMonth) {
			daysGrid += "</tr>";
		}
	}
	daysGrid += '</table>';
	return daysGrid + "</td></tr></table>";
}

function setDay(day,eltName) {
//	   displayElement.value = (displayMonth + 1) + "/" + day + "/" + displayYear;
	displayElement.value = displayYear + "/" + padDigits((displayMonth + 1),2) + "/"+ padDigits(day, 2);
	displayElement.focus();
	hideElement(eltName);
}
