/**
*
* Calendario.
*  
*/
function Calendar2() {
	// Constants
	var monthDaysCount = [31,28,31,30,31,30,31,31,30,31,30,31];
	var dayNames = new Array(2);
	
	dayNames['en'] = new Array(7);
	dayNames['en'][0] = 'Sun';
	dayNames['en'][1] = 'Mon';
	dayNames['en'][2] = 'Tue';
	dayNames['en'][3] = 'Wed';
	dayNames['en'][4] = 'Thu';
	dayNames['en'][5] = 'Fri';
	dayNames['en'][6] = 'Sat';
	
	dayNames['es'] = new Array(7);
	dayNames['es'][0] = 'Dom';
	dayNames['es'][1] = 'Lun';
	dayNames['es'][2] = 'Mar';
	dayNames['es'][3] = 'Mi\u00E9';
	dayNames['es'][4] = 'Jue';
	dayNames['es'][5] = 'Vie';
	dayNames['es'][6] = 'S\u00E1b';
	
	var monthNames = new Array(2);
	
	monthNames['en'] = new Array(12);
	monthNames['en'][0] = 'Jan';
	monthNames['en'][1] = 'Feb';
	monthNames['en'][2] = 'Mar';
	monthNames['en'][3] = 'Apr';
	monthNames['en'][4] = 'May';
	monthNames['en'][5] = 'Jun';
	monthNames['en'][6] = 'Jul';
	monthNames['en'][7] = 'Aug';
	monthNames['en'][8] = 'Sep';
	monthNames['en'][9] = 'Oct';
	monthNames['en'][10] = 'Nov';
	monthNames['en'][11] = 'Dec';
	
	monthNames['es'] = new Array(12);
	monthNames['es'][0] = 'ene';
	monthNames['es'][1] = 'feb';
	monthNames['es'][2] = 'mar';
	monthNames['es'][3] = 'abr';
	monthNames['es'][4] = 'may';
	monthNames['es'][5] = 'jun';
	monthNames['es'][6] = 'jul';
	monthNames['es'][7] = 'ago';
	monthNames['es'][8] = 'sep';
	monthNames['es'][9] = 'oct';
	monthNames['es'][10] = 'nov';
	monthNames['es'][11] = 'dic';	

	// Attributes
	this.date = new Date(); 
	
	if (Calendar2._initialized == undefined) {		
		// Methods	
		Calendar2.prototype.setCalendar = function(calendar) {
			var year = calendar.getDate().getFullYear();
			var month = calendar.getDate().getMonth();
			var day = calendar.getDate().getDate();		
	                
			this.setDate(year, month, day);
		}
		
		Calendar2.prototype.setDate = function(year, month, day) {
			this.date.setFullYear(year);
			this.date.setMonth(month);
			this.date.setDate(day);
                        
		}
		
		Calendar2.prototype.getDate = function() {
			return this.date;
                        
		}
		
		Calendar2.prototype.add = function(field, amount) {
			field = field.toUpperCase();			
			if (field == 'YEAR') {
				this.date.setUTCFullYear(this.date.getFullYear() + amount);		
			} else if (field == 'MONTH') {				
				var aux = Math.floor((this.date.getMonth() + amount) / 12);
				this.add('YEAR', aux);					
				this.date.setMonth((this.date.getMonth() + amount) % 12);			
			} else if (field == 'DAY') {
				this.date.setDate(this.date.getDate() + amount);
			}		
		}
		
		Calendar2.prototype.isLeap = function() {
			var year = this.date.getFullYear();
			return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); 
		}
		
		Calendar2.prototype.getDaysOfMonthCount = function(month) {			
			return month = 1 && this.isLeap() ? monthDaysCount[month] + 1 : monthDaysCount[month];
		}
		
		Calendar2.prototype.getDayOfWeek = function() {
			return this.date.getDay();
		}
		
		Calendar2.prototype.setTime = function(time) {
			return this.date.setTime(time);
		}
		
		Calendar2.prototype.getTime = function() {
			return this.date.getTime();
		}
		
		Calendar2.prototype.getDayOfWeekName = function(locale) {
			return dayNames[locale][this.date.getDay()];
		}	
		
		Calendar2.prototype.getMonthName = function(locale) {
			return monthNames[locale][this.date.getMonth()];
		}	
		
		Calendar2.prototype.parse = function(dateStr) {
			var date = dateStr.split('T')[0];
			var time = dateStr.split('T')[1]; // No usado por ahora
			
			var year = Number(date.split('-')[0]);
			var month = Number(date.split('-')[1]) - 1;
			var day = Number(date.split('-')[2]) ;
                        // el + 1 lo hemos puesto Juanjo y Arroyo
                        // a lo mejor hay que sumarle algo a este asunto, o bien es un formato extranjero y no ok
			this.setDate(year, month, day);			
		}
		
		Calendar2.prototype.format = function(locale) {
			var out = '';
			if (locale == 'en') {
				var suffix = '';
				if (this.getDate().getDate() == 1) {
					suffix = 'st';
				} else if (this.getDate().getDate() == 2) {
					suffix = 'nd';
				} else {
					suffix = 'th';
				}
				out = this.getDayOfWeekName(locale) + ' ' + this.getDate().getDate() + suffix;
			} else if (locale == 'es') {
				out = this.getDayOfWeekName(locale) + ' ' + this.getDate().getDate();
			}
			
			return out;
		}
		
		Calendar2.prototype.longFormat = function(locale) {
			var out = '';
			if (locale == 'en') {
				var suffix = '';
				if (this.getDate().getDate() == 1) {
					suffix = 'st';
				} else if (this.getDate().getDate() == 2) {
					suffix = 'nd';
				} else {
					suffix = 'th';
				}
				out = this.getDayOfWeekName(locale) + ' ' + this.getMonthName(locale) + ' ' + this.getDate().getDate() + suffix + ', ' + this.getDate().getFullYear();
			} else if (locale == 'es') {
				out = this.getDayOfWeekName(locale) + ', ' + this.getDate().getDate() + ' de ' + this.getMonthName(locale) + ' de ' + this.getDate().getFullYear();
			}
			
			return out;
		}
		

	}
	Calendar2._initialized = true;
}
