
//// 
var monthNames = new Array();
monthNames["es"]		= "Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic";
monthNames["en"]		= "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
monthNames["CA-es"]		= "Gen,Feb,Mar,Abr,Mai,Jun,Jul,Ago,Sep,Oct,Nov,Dec";
var fullMonthNames = new Array();
fullMonthNames["es"]	= "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre";
fullMonthNames["en"]	= "January,February,March,April,May,June,July,August,September,October,November,December";
fullMonthNames["CA-es"]	= "Gener,Febrer,Març,Abril,Maig,Juny,Juliol,Agost,Septembre,Octubre,Novembre,Decembre";
////
var dayNames		= new Array();
dayNames["es"]		= "Lun,Mar,Mie,Jue,Vie,Sab,Dom";
dayNames["en"]		= "Mon,Tue,Wen,Thu,Fri,Sat,Sun";
dayNames["CA-es"]	= "Dl,Dm,Dx,Dj,Dv,Ds,Dd";
var fullDayNames		= new Array();
fullDayNames["es"]		= "Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo";
fullDayNames["en"]		= "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday";
fullDayNames["CA-es"]	= "Dilluns,Dimarts,Dimecres,Dijous,Divendres,Dissabte,Diumenge";
////
var arrayNumberDaysPerMonth	= new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
////
var concats = new Array();
concats["es"]		= " de , de "; 
concats["en"]		= " of , "; 
concats["CA-es"]	= " de , de ";

// interesting functions
function isLeapYear(year) { 
	return year%400==0 || ( year%4==0 && year%100!=0 );
}
function leadZero(n) {
	return (n<10?"0":"")+n;
}
function removeCero(s) {
	while (s.substring(0,1)=="0") { s = s.substring(1); }
	return s;
}
function repaintCalendar(name) {
	eval("_"+name+".setDate( new Date( document.getElementById('"+name+"syear').value, document.getElementById('"+name+"smonth').value, document.getElementById('"+name+"sday').value ) )");
	eval("_"+name+".show()");
}
function repaintCalendarDay(name, day) {
	eval("_"+name+".setDate( new Date( document.getElementById('"+name+"syear').value, document.getElementById('"+name+"smonth').value, "+day+" ) )");
	eval("_"+name+".show()");
}
function getLiteralDate(date, lang) {
	var months			= fullMonthNames[lang].split(",");
	var days			= fullDayNames[lang].split(",");
	var theDayOfWeek	= days[ date.getDay()==0?days.length-1:date.getDay()-1 ];
	var theDay			= date.getDate();
	var theMonth		= months[date.getMonth()];
	var theYear			= date.getFullYear();
	var con 			= concats[lang].split(",");
	if (lang=="en") {
		var lastChar = ""+theDay;
		lastChar = lastChar.charAt(lastChar.length-1);
		con[0]= lastChar=="1" ? "st " : ( lastChar=="2" ? "nd " : "th " );
	}
	return theDayOfWeek + ", " + theDay + con[0] + theMonth + con[1] + theYear;
}

//// TCalendar Class ////
function TCalendar(layer, date, lang) {
	// attributes
	this.layer				= layer;
	this.date				= date;
	this.lang				= lang;
	this.arrayMonthNames	= monthNames[this.lang].split(",");
	this.arrayDayNames		= dayNames[this.lang].split(",");
	// methods
	this.setDate		= TCalendar_setDate;
	this.getDate		= TCalendar_getDate;
	this.getLanguage	= TCalendar_getLanguage;
	this.show			= TCalendar_show;
	this.hide			= TCalendar_hide;
	this.writeToLayer	= TCalendar_writeToLayer;
	// implementation
	function TCalendar_setDate(date) {
		this.date = date;
	}
	function TCalendar_getDate() {
		return this.date;
	}
	function TCalendar_getLanguage() {
		return this.lang;
	}
	function TCalendar_show() {
		theDay		= this.date.getDate();
		theMonth	= this.date.getMonth();
		theYear		= this.date.getFullYear();
		if ( isLeapYear( theYear ) ) { 
			arrayNumberDaysPerMonth[1] = 29; 
		}
		numberDays	= arrayNumberDaysPerMonth[ theMonth ];
		objId = this.layer.id;
		fChangeDate = "repaintCalendar("+objId+".id)";
		code = "<table class='container'>";
		code += "<tr>";
		code += "<td>";
		code += "<select id='"+objId+"sday' name='"+objId+"sday' onchange='"+fChangeDate+"' class='selectcombo'>";
		for (ind=1; ind<=numberDays; ind++) {
			sCheck = ind==theDay ? "selected" : "";
			code += "<option value='"+ind+"' "+sCheck+">"+ind+"</option>";
		}
		code += "</select>";
		code += "&nbsp;";
		code += "<select id='"+objId+"smonth' name='"+objId+"smonth' onchange='"+fChangeDate+"' class='selectcombo'>";
		for (ind=0; ind<this.arrayMonthNames.length; ind++) {
			sCheck = ind==theMonth ? "selected" : "";
			code += "<option value='"+ind+"' "+sCheck+">"+this.arrayMonthNames[ind]+"</option>";
		}
		code += "</select>";
		code += "&nbsp;";
		code += "<select id='"+objId+"syear' name='"+objId+"syear' onchange='"+fChangeDate+"' class='selectcombo'>";
		for (ind=theYear-5; ind<=theYear+5; ind++) {
			sCheck = ind==theYear ? "selected" : "";
			code += "<option value='"+ind+"' "+sCheck+">"+ind+"</option>";
		}
		code += "</select>";
		code += "</td>";
		code += "</tr>";
		code += "<tr>";
		code += "<td>";
		code += "<table class='gridcontent'>";
		code += "<tr>";
		for (ind=0; ind<this.arrayDayNames.length; ind++) {
			code += "<th>"+this.arrayDayNames[ind]+"</th>";
		}
		code += "</tr>";
		firstDay = new Date(theYear, theMonth, theDay); 
	   	firstDay.setDate(1);
		code += "<tr>";
		desp = firstDay.getDay();
		desp = ( desp==0 ? this.arrayDayNames.length : desp ) - 1;
		for (ind=1; ind<=desp; ind++) {
			code += "<td>&nbsp;</td>";
		}
		for (ind=1; ind<=numberDays; ind++) {
			if ((ind+desp-1)%this.arrayDayNames.length==0) {
				code += "<tr>";
			}
			sStyleTD = ind==theDay ? "cellselected" : "cellnormal";
			code += "<td class='"+sStyleTD+"'>";
			code += "<a href='javascript:repaintCalendarDay("+objId+".id, "+ind+")' class='linkselected'>"+ind+"</a>";
			//code += "<a href='#' onclick='repaintCalendarDay("+objId+".id, "+ind+")' class='linkselected' style='cursor:hand'>"+ind+"</a>";
			code += "</td>";
			if ((ind+desp)%this.arrayDayNames.length==0) {
				code += "</tr>";
			}
		}
		code += "</table>";
		code += "</td>";
		code += "</tr>";
		code += "</table>";
		this.writeToLayer(code);
	}
	function TCalendar_hide() {
		this.writeToLayer("");
	}
	function TCalendar_writeToLayer(code) {
		//alert(code);
		/*
		if (_ie) {
			this.layer.innerHTML = code;
		} else {
			this.layer.document.write(code);
			this.layer.document.close();
		}
		*/
		this.layer.innerHTML = code;
	}
}

