var cur_m=(new Date().getMonth());
var cur_y=(new Date().getFullYear());
var cur_d=(new Date().getDate());
var y=cur_y;
var m=cur_m;
var min_y=2007;
var max_m=(new Date().getMonth());
var sel_d=0;
var sel_m=0;
var sel_y=0;
var date_round = new Array();

function refresh(obj) {
	if (obj == undefined) {
		if ($('#calendar').get(0)) eval("$('#calendar').calendarWidget({month:"+m+" ,year:"+y+"})");
	} else eval("$('#"+obj+"').calendarWidget({month:"+m+" ,year:"+y+"})");
}

function go(y_,m_,obj) {
	var parent = $(obj).parent().parent();
	var m_y = $("table.calendar-month", parent).attr("rel").split("_");
	m=parseInt(m_y[0]);
	y=parseInt(m_y[1]);
	m+=m_;
	y+=y_;
	if(m>11) {m=0;y++;}
	if(m<0) {m=11;y--;}
	if(y<min_y) y=min_y;
	if(y>cur_y) y=cur_y;
	if (m > max_m && y == cur_y) m = max_m;
	refresh(parent.get(0).id);
}

function away(d,off,m_y) {
	d1=$(d).children().html();
	m1=parseInt(m_y.split("_")[0])+off+1;
	y1=parseInt(m_y.split("_")[1]);
	if ((cur_d < d1 && (cur_m + 1) == m1 && cur_y == y1) || ((cur_m + 1) < m1 && cur_y == y1)) return true;
	var parent = $(d).parent().parent().parent().parent();
	if (parent.get(0).id != "calendar") {
		date_round[parent.get(0).id] = y1+'-'+addZero(m1)+'-'+addZero(d1);
		$("td.current_day", parent).removeClass("current_day");
		$(d).addClass("current_day");
	} else	document.location.href='/calendar/'+y1+'-'+addZero(m1)+'-'+addZero(d1);
}

function addZero(q) {
	return (q<10?'0'+q:q);
}

$(document).ready(function() {
	if (sel_m > 0 && sel_y > 0) {
		m=sel_m;
		y=sel_y;
	}
	refresh();
});

(function($) { 
   
	function calendarWidget(el, params) { 
		
		var now   = new Date();
		var thismonth = now.getMonth();
		var thisyear  = now.getYear() + 1900;
		
		var opts = {
			month: thismonth,
			year: thisyear
		};

		
		$.extend(opts, params);
		
		var monthNames = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
		var dayNames = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб','вс'];
		month = i = parseInt(opts.month);
		year = parseInt(opts.year);
		var m = 0;
		var table = '';
			
			table +='<div class="nav-left"><span class="clickable" onclick="go(0,-1,this);">&#9668;</span>'+monthNames[month]+'<span class="clickable" onclick="go(0,1,this);">&#9658;</span></div>';
			table +='<div class="nav-right"><span class="clickable" onclick="go(-1,0,this);">&#9668;</span>'+year+'<span class="clickable" onclick="go(1,0,this);">&#9658;</span></div><div class="clear"></div>';

			table += ('<table class="calendar-month" ' +'rel="'+month+'_'+year+'" cellspacing="0">');	
		
			table += '<tr>';
			
			for (d=0; d<7; d++) {
				table += '<th class="weekday">' + dayNames[d] + '</th>';
			}
			
			table += '</tr>';
		
			var days = getDaysInMonth(month,year);
   var firstDayDate=new Date(year,month,1);
   var firstDay=firstDayDate.getDay();
			
			var prev_days = getDaysInMonth(month,year);
   var firstDayDate=new Date(year,month,1);
   var firstDay=firstDayDate.getDay();
			
			var prev_m = month == 0 ? 11 : month-1;
			var prev_y = prev_m == 11 ? year - 1 : year;
			var prev_days = getDaysInMonth(prev_m, prev_y);
			firstDay = (firstDay == 0 && firstDayDate) ? 7 : firstDay;
	
			var i = 0;
			var bad_day;
			for (j=1;j<43;j++) {
				if (cur_d < (j-firstDay+1) && cur_m == month && cur_y == year) bad_day = " bad_day";
				else bad_day = "";
				if ((j<firstDay)) {
					table += ('<td onclick="away(this,-1,\''+month+'_'+year+'\');" class="other-month' + bad_day + '"><span class="day">'+ (prev_days-firstDay+j+1) +'</span></td>');
				} else if ((j>=firstDay+getDaysInMonth(month,year))) {
						i = i+1;
						table += ('<td onclick="away(this,1,\''+month+'_'+year+'\');" class="other-month' + bad_day + '"><span class="day">'+ i +'</span></td>');			 
				} else {
						if (sel_d == (j-firstDay+1) && sel_m == month && sel_y == year) table += ('<td onclick="away(this,0,\''+month+'_'+year+'\');" class="current_day current-month day' + (j-firstDay+1) + bad_day + '"><span class="day">'+(j-firstDay+1)+'</span></td>');
						else {
							if (sel_d == 0) {
								if (el.get(0).id != "calendar") table += ('<td onclick="away(this,0,\''+month+'_'+year+'\');" class="current-month day' + (j-firstDay+1) + bad_day +'"><span class="day">'+(j-firstDay+1)+'</span></td>');
								else {
								 if (cur_d == (j-firstDay+1) && cur_m == month && cur_y == year) table += ('<td onclick="away(this,0,\''+month+'_'+year+'\');" class="current_day current-month day' + (j-firstDay+1) + bad_day + '"><span class="day">'+(j-firstDay+1)+'</span></td>');
								 else table += ('<td onclick="away(this,0,\''+month+'_'+year+'\');" class="current-month day' + (j-firstDay+1) + bad_day +'"><span class="day">'+(j-firstDay+1)+'</span></td>');
								}
							} else table += ('<td onclick="away(this,0,\''+month+'_'+year+'\');" class="current-month day' + (j-firstDay+1) + bad_day +'"><span class="day">'+(j-firstDay+1)+'</span></td>');
						}
				}
				if (j%7==0)  {
					table += ('</tr>');
					if (bad_day != "") break;
				}
			}

			table += ('</table>');
		el.html(table);
	}
	
	function getDaysInMonth(month,year)  {
		var daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];
		if ((month==1)&&(year%4==0)&&((year%100!=0)||(year%400==0))){
		  return 29;
		}else{
		  return daysInMonth[month];
		}
	}
	
	
	// jQuery plugin initialisation
	$.fn.calendarWidget = function(params) {    
		calendarWidget(this, params);		
		return this; 
	}; 

})(jQuery);
