/**
*
* 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] = 'Sunday';
	dayNames['en'][1] = 'Monday';
	dayNames['en'][2] = 'Tuesday';
	dayNames['en'][3] = 'Wednesday';
	dayNames['en'][4] = 'Thursday';
	dayNames['en'][5] = 'Friday';
	dayNames['en'][6] = 'Saturday';
	
	dayNames['es'] = new Array(7);
	dayNames['es'][0] = 'Domingo';
	dayNames['es'][1] = 'Lunes';
	dayNames['es'][2] = 'Martes';
	dayNames['es'][3] = 'Miércoles';
	dayNames['es'][4] = 'Jueves';
	dayNames['es'][5] = 'Viernes';
	dayNames['es'][6] = 'Sábado';
	
	var monthNames = new Array(2);
	
	monthNames['en'] = new Array(12);
	monthNames['en'][0] = 'January';
	monthNames['en'][1] = 'Febraury';
	monthNames['en'][2] = 'March';
	monthNames['en'][3] = 'April';
	monthNames['en'][4] = 'May';
	monthNames['en'][5] = 'June';
	monthNames['en'][6] = 'July';
	monthNames['en'][7] = 'August';
	monthNames['en'][8] = 'September';
	monthNames['en'][9] = 'October';
	monthNames['en'][10] = 'November';
	monthNames['en'][11] = 'December';
	
	monthNames['es'] = new Array(12);
	monthNames['es'][0] = 'enero';
	monthNames['es'][1] = 'febrero';
	monthNames['es'][2] = 'marzo';
	monthNames['es'][3] = 'abril';
	monthNames['es'][4] = 'mayo';
	monthNames['es'][5] = 'junio';
	monthNames['es'][6] = 'julio';
	monthNames['es'][7] = 'agosto';
	monthNames['es'][8] = 'septiembre';
	monthNames['es'][9] = 'octubre';
	monthNames['es'][10] = 'noviembre';
	monthNames['es'][11] = 'diciembre';	

	// 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]);
			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;
}
