/*
Object: Календарь
Desc: рисует календарь (в таблице)

Свойства:
this.day - день
this.month - месяц
this.year - год
и пр. (описать потом)
*/

function getMonthLength(month,year) {
	var month_length = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
	if (month==1 && (year/4==Math.floor(year/4) || year/400==Math.floor(year/400))) {
		return 29;
	}
	else return month_length[month]
}

function Calendar(year, month, day) {
	
	//properties
	this.day_list = new Array('Вс','Пн','Вт','Ср','Чт','Пт','Сб');
	this.month_list = new Array('Январь',
                           'Февраль',
                            'Март',
                            'Апрель',
                            'Май',
                            'Июнь',
                            'Июль',
                            'Август',
                            'Сентябрь',
                            'Октябрь',
                            'Ноябрь',
                            'Декабрь');
							
	this.day = day;
	this.month = month;
	this.year = year;
		
	this.daySpot = new Array();
	this.calendar_html = '';
	
	//methods
	p = Calendar.prototype;
	p.changeYear = CalendarChangeYear;
	p.changeMonth = CalendarChangeMonth;
	p.changeDay = CalendarChangeDay;
	p.setDate = CalendarSetDate;
	p.useDate = CalendarUseDate;
	
	p.build = CalendarBuild;
	p.draw = CalendarDraw;

}

function CalendarBuild(){ // just generate html

	this.calendar_html = "<table cellpadding='3' cellspacing='0' border='0' align='center' width='95%'>";
	var _dayIndex = 0;
	for (i = 0; i < 6; i++) {

		if (i == 0) {
			this.calendar_html += '<tr>';
			for (k=0; k<7; k++) {
				(k == 0) ? $text_color='style="color:#8BC43F;"' : $text_color='' ; 
				this.calendar_html += '<td ' + $text_color + ' class=\"dayWeek\">' + this.day_list[k] + '</td>';
			}
			this.calendar_html += '</tr>';
			this.calendar_html += "<tr><td colspan='7' style='padding-top: 2px; padding-bottom: 4px; font-size: 1%'><div style='border-top: 1px solid #8C8C8C;'>&nbsp;</div></td></tr>";
		}
		
		this.calendar_html += '<tr>';		
		for (j = 0; j < 7; j++) {
			this.calendar_html += '<td class=\"day\">'+ this.daySpot[_dayIndex] + '</td>';
			_dayIndex++;
		}
		this.calendar_html += '</tr>';
		//_day++;
	}
	
	this.calendar_html += '</table>';

}

function CalendarDraw() {
	this.useDate();
	this.build();
	document.getElementById('calendar').innerHTML = this.calendar_html;
	document.getElementById('calendar_info').innerHTML = this.month_list[this.month] + ' ' + this.year;
}

function CalendarSetDate(year, month, day) {
	var d = new Date()
	if (month==null) month = d.getMonth()
	if (day==null) day = d.getDate()
	if (year==null) year = d.getYear()
	if (year<100) year += 1900
	if (month<0) {
		month = 11
		year -= 1
	} 
	else if (month>11) {
		month = 0
		year += 1
	}
	var l = getMonthLength(month,year)
	if (day>l || day<0) {
		day = l
	}
	
	this.year = year
	this.month = month
	this.day = day
}

function CalendarChangeYear(dy) {
	this.setDate(this.year+dy,this.month,this.day)
}
function CalendarChangeMonth(dm) {
	this.setDate(this.year,this.month+dm,this.day)
}
function CalendarChangeDay(dd) {
	this.setDate(this.year,this.month,this.day+dd)
}
function CalendarUseDate() {
	
	var d = new Date(this.year,this.month,1) // делаем дату от начала
	var start_weekday = d.getDay(); // день недели с которого начинается месяц установленной даты 
	var thisMonth_length = getMonthLength(this.month,this.year)
	//this.daySpot_str = new Array();
	//daySpot already created!
	for (i = 0; i < start_weekday ;i++) {
		this.daySpot[i] = '<div>&nbsp;</div>';
	}
	
	for (i = start_weekday; i <= thisMonth_length+start_weekday; i++){
		var tmp = i-start_weekday+1;
		
		if (data[this.year + '-' + this.month + '-' + tmp]) {
			tmp = '<a href="'+ data[this.year + '-' + this.month + '-' + tmp] +'">' + tmp +'</a>';
		}
		
		// bold current day of month
		if (this.day == tmp && current_date.getMonth() == this.month) {
			tmp = '<b>'+ tmp +'</b>' 
		}
		this.daySpot[i] = '<div>' + tmp + '</div>';
	}
	
	//var count_days = this.daySpot.lenght;
	for (i = start_weekday+thisMonth_length; i < 42; i++){
		this.daySpot[i] = '<div>&nbsp;</div>';
	}
}

data = new Array(); // array where we put our data
current_date = new Date();
c = new Calendar(current_date.getFullYear(),current_date.getMonth(),current_date.getDate());
