/* Variables de Entorno */
var Tablebgcolor = "#AAAAAA";
var bgcolor = "#FFFFFF";
var Tdbgcolor = "#CCCCCC";
var DayNamebgcolor = "#EEEEEE";
var strMode;

/* how reliable is this test? */
var isIE = (document.all ? true : false);
var isDOM = (document.getElementById ? true : false);

/* Initialize arrays. */
var title;
var days;
var months;
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var displayMonth;
var displayYear;
var displayDivName;
var displayElement;

function setMode(strModeToSet) {
	strMode = strModeToSet;
	if (strMode == 'ENG') {
		title = 'Calendar';
		days = new Array ("Mo", "Tu", "We", "Th", "Fr", "Sa", "Su");
		months = new Array ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	}
	else {
		title = 'Calendario';
		days = new Array ("Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do");
		months = new Array ("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic");
	}

	return;
}

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(varFecha) {
	if (varFecha != ""){
		
		// Saco el dia, mes y aņo
		var FechaDia = varFecha.split("/");
		
		if (FechaDia.length < 3) {
			varFecha = "";
		}
		else {
			if (FechaDia[2].length == 2) {
				if (FechaDia[2] > 05) {
					FechaDia[2] = "19" + FechaDia[2];
				}
				else {
					FechaDia[2] = "20" + FechaDia[2];
				}
			}
			
			varFechaReal = new Date(FechaDia[1] + "/" + FechaDia[0] + "/" + FechaDia[2]);
			var CampoDia = varFechaReal.getDate();
			var CampoMes = varFechaReal.getMonth();
			var CampoAnio = varFechaReal.getFullYear();
			
			if ((FechaDia[0] == CampoDia) 
				&& (FechaDia[1] == (CampoMes + 1))
				&& (FechaDia[2] == CampoAnio)) {
					this.year = CampoAnio;
					this.month = CampoMes;
					this.day = CampoDia;
			}
			else {
				varFecha = "";
			}
		}
	}
	
	if (varFecha == "") {
		// Generate today's date.
		this.now = new Date();
		this.year = this.now.getFullYear();
		this.month = this.now.getMonth();
		this.day = this.now.getDate();
	}
}

function newCalendar(eltName,attachedElement) {
	if (attachedElement) {
		if (displayDivName && displayDivName != eltName) {
			hideElement(displayDivName);
		}
		displayElement = attachedElement;
		
		// Start with a calendar for today.
		today = new getToday(displayElement.value);
		displayMonth = today.month;
		displayYear = today.year;
	}

	displayDivName = eltName;
	
	// Start with a calendar for today.
	today = new getToday(displayElement.value);
	var parseYear = parseInt(displayYear + '');
	var newCal = new Date(parseYear,displayMonth,1);
	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 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="0" cellspacing="0" cellpadding="0" bgcolor="' + Tablebgcolor + '" width="180">';
    daysGrid += '<tr><td class="title" nowrap align="center" width="170">';
    daysGrid += '<img src="../images/trans.gif" width="5" height="1" border="0"><span class="title">' + title + '</span></td><td class="title" align="right">';
    daysGrid += '<a href="javascript:hideElement(\'' + eltName + '\')"><img src="../images/close.gif" width="10" height="9" alt="Cerrar" border="0"></a>';
    daysGrid += '</td></tr></table>';
		daysGrid += '<table border="0" cellspacing="1" cellpadding="0" bgcolor="' + Tablebgcolor + '" width="180">';
    daysGrid += '<tr><td bgcolor="' + Tdbgcolor + '" nowrap colspan="4" align="center">';
    daysGrid += '<a href="javascript:incMonth(-1,\'' + eltName + '\')">';
    daysGrid += '<img src="../images/cal_menos.gif" width="9" height="9" border="0"></a>';

		daysGrid += '<span class="calendario"';
	    if (isThisMonth) {
			daysGrid += ' style="color: red;"';
		}
	
		daysGrid += '>&nbsp;' + months[month] + '&nbsp;</span>';
    daysGrid += '<a href="javascript:incMonth(1,\'' + eltName + '\')"><img src="../images/cal_mas.gif" width="9" height="9" border="0"></a>';
    daysGrid += '</td>';
    daysGrid += '<td bgcolor="' + Tdbgcolor + '" nowrap colspan="3" align="center">';
    daysGrid += '<a href="javascript:incYear(-1,\'' + eltName + '\')"><img src="../images/cal_menos.gif" width="9" height="9" border="0"></a>';

    if (isThisYear) {
			daysGrid += '<span class="calendario" style="color: red;">&nbsp;' + year + '&nbsp;</span>';
		}
	    else {
			daysGrid += '<span class="calendario">&nbsp;' + year + '&nbsp;</span>';
		}

    daysGrid += '<a href="javascript:incYear(1,\'' + eltName + '\')"><img src="../images/cal_mas.gif" width="9" height="9" border="0"></a>';
    daysGrid += '</td></tr><tr>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[0] + '</span></td>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[1] + '</span></td>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[2] + '</span></td>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[3] + '</span></td>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[4] + '</span></td>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[5] + '</span></td>';
    daysGrid += '<td align="center" bgcolor="' + DayNamebgcolor + '"><span class="title">' + days[6] + '</span></td>';
    daysGrid += '</tr><tr>';

    //Esto es para que empiece desde el lunes
    //var dayOfMonthOfFirstSunday = (7 - startDay + 1);
    var dayOfMonthOfFirstSunday = (7 - startDay + 2);

	for (var intWeek = 0; intWeek < 6; intWeek++) {
		var dayOfMonth;
		for (var intDay = 0; intDay < 7; intDay++) {
			dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
			if (dayOfMonth <= 0) {
				daysGrid += '<td bgcolor="#FFFFFF"><span class="calendario">&nbsp;</span></td>';
			}
			else {
				if (dayOfMonth <= intDaysInMonth) {
					var color = bgcolor;
					if (day > 0 && day == dayOfMonth) {
						color = "#CCCCCC";
					}
					daysGrid += '<td align="center" bgcolor="' + color + '"><a href="javascript:setDay(';
					daysGrid += dayOfMonth + ',\'' + eltName + '\')"><span class="calendario">';
					var dayString = dayOfMonth + "</span></a></td> ";
					if (dayString.length == 6) {
						dayString = '0' + dayString;
					}
					daysGrid += dayString;
				}
				else {
					if (dayOfMonth > intDaysInMonth) {
						daysGrid += '<td bgcolor="#FFFFFF"><span class="calendario">&nbsp;</span></td>';
					}
				}
			}
		}
		if (dayOfMonth < intDaysInMonth) {
			daysGrid += '</tr><tr>';
		}
		else {
			intWeek = 6;
		}
	}
	return daysGrid + "</tr></table>";
}

function setDay(day,eltName) {
	switch (strMode) {
		case 'ENG':
			displayElement.value = (displayMonth + 1) + "/" + day + "/" + displayYear;
			break;
		case 'ESP':
		default:
			displayElement.value = day + "/" + (displayMonth + 1) + "/" + displayYear;
			break;
	}
	hideElement(eltName);
}

function toggleDatePicker(eltName,formElt, strModeToSet) {
	var x = formElt.indexOf('.');
	var formName = formElt.substring(0,x);
	var formEltName = formElt.substring(x+1);

	setMode(strModeToSet);
	newCalendar(eltName,document.forms[formName].elements[formEltName]);
	toggleVisible(eltName);
}

function fixPosition(divname) {
	divstyle = getDivStyle(divname);
	positionerImgName = divname + 'Pos';

	isPlacedUnder = false;
	if (isPlacedUnder) {
		setPosition(divstyle,positionerImgName,true);
	}
	else {
		setPosition(divstyle,positionerImgName);
	}
}

function fixPositions(){
	fixPosition('daysOfMonth');
}

function Cancel() {
	hideElement("daysOfMonth");
}

// get the true offset of anything on NS4, IE4/5 & NS6, even if it's in a table!
function getAbsX(elt) {
	return (elt.x) ? elt.x : getAbsPos(elt,"Left");
}

function getAbsY(elt) {
	return (elt.y) ? elt.y : getAbsPos(elt,"Top");
}

function getAbsPos(elt,which) {
	iPos = 0;
	while (elt != null) {
		iPos += elt["offset" + which];
		elt = elt.offsetParent;
	}
	return iPos;
}

function getDivStyle(divname) {
	var style;
	if (isDOM) {
		style = document.getElementById(divname).style;
	}
	else {
		style = isIE ? document.all[divname].style : document.layers[divname]; // NS4
	}
 return style;
}

function hideElement(divname) {
	getDivStyle(divname).visibility = 'hidden';
}

// annoying detail: IE and NS6 store elt.top and elt.left as strings.
function moveBy(elt,deltaX,deltaY) {
	elt.left = parseInt(elt.left) + deltaX;
	elt.top = parseInt(elt.top) + deltaY;
}

function toggleVisible(divname) {
	divstyle = getDivStyle(divname);
	if (divstyle.visibility == 'visible' || divstyle.visibility == 'show') {
		divstyle.visibility = 'hidden';
	}
	else {
		fixPosition(divname);
		divstyle.visibility = 'visible';
	}
}

function setPosition(elt,positionername,isPlacedUnder) {
	var positioner;
	
	if (isIE) {
		positioner = document.all[positionername];
	}
	else {
		if (isDOM) {
			positioner = document.getElementById(positionername);
		}
		else {
		    // not IE, not DOM (probably NS4)
		    // if the positioner is inside a netscape4 layer this will *not* find it.
		    // I should write a finder function which will recurse through all layers
		    // until it finds the named image...
		    positioner = document.images[positionername];
		 }
	}
	
	elt.left = getAbsX(positioner);
	elt.top = getAbsY(positioner) + (isPlacedUnder ? positioner.height : 0);
}

