// Copyright (c) mcx, since 2008

function Calendar(id,dt,city,type,lnk,okfunc){
    this.ref=$('#'+id);
    this.okfunc = okfunc;
    this.now = new Date();
    this.city = city;
    this.type = type;
    this.lnk = lnk;

    this._months = new Array( "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" );
    this._weekdays = new Array( "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс" );

    this.setDate = function(dt){
	this.dt=dt;
	
	this.cday = this.dt.getDate();
	this.cmonth = this.dt.getMonth();
	this.cyear  = this.dt.getFullYear();
	this._monthdays = new Array( 31, (((this.cyear % 4) == 0 ) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31 );
	this.firstday = ((new Date(this.cyear,this.cmonth,1)).getDay()+6) % 7;
    }
    
    this.changeDate = function(tp,what,what1){    
	if(tp == 'year'){
	    this.dt.setFullYear(what);
	}
	else if(tp == 'month'){
	    this.dt.setMonth(what);
	}
	else if(tp == 'year&month'){
	    this.dt.setYear(what1);
	    this.dt.setMonth(what);
	}
	
	this.setDate(this.dt);
	this.draw();
    }
    
    this.draw = function(){
	var out="<center><table cellpadding='3px' cellspacing='1px' border='0' style='width: auto;' class='med'>";
	for(var i=2007;i<=this.now.getFullYear();i++){
	    if(this.cyear == i){
		out+= "<td class='hh5 cal_item_sel' style='text-align:center;' width='40px'>" + i + "</td>";
	    }
	    else if(this.cyear-2 <= i && this.cyear+2 >= i){
		out+= "<td class='hh5 ptr' width='40px' style='text-align:center;' onclick=\"calendar.changeDate('year','"+i+"');\">" + i + "</td>";
	    }
	}
	out+="</table>";
	
	out+="<table width='100%' cellpadding='3px' cellspacing='0px' border='0' class='text cal_month_area' style='table-layout: fixed; margin-top: 10px;'>";
	for(var i=0;i<=11;i++){
	    if(this.cmonth == i){
		pi=i-1;
		ni=i+1;
		ny=this.cyear+1; ny=ny > this.now.getFullYear()?this.now.getFullYear():ny;
		py=this.cyear-1; py=py < 2008?2008:py;
		out+= "<td onclick=\""+(pi >= 0?"calendar.changeDate('month','"+pi+"');":"calendar.changeDate('year&month','11','"+py+"');")+"\" class='ptr' align='right'><img src='/img/arr/left.gif' align='absMiddle' border='0' width='7px' height='7px'></td>";
		out+= "<td width='55px' align='center'>" + this._months[i] + "</td>";
		out+= "<td onclick=\""+(ni <= 11?"calendar.changeDate('month','"+ni+"');":"calendar.changeDate('year&month','0','"+ny+"');")+"\" class='ptr' align='left'><img src='/img/arr/right.gif' align='absMiddle' border='0' width='7px' height='7px'></td>";
	    }
	}
	out+="</table></center>";
	
	out+="<table border='0' class='text med'><tr>";
	if( this.firstday != 0 ){
	    out+="</tr><tr align='center'><td colspan='" + this.firstday + "'>&nbsp;</td>";
	}
    
	nd=0;
	for(var i=0;i<this._monthdays[this.cmonth];i++){
	    if((i+this.firstday) % 7==0){
		out+="</tr><tr align='center'>";
		nd=0;
	    }
	    nd++;
	    id_i=(i+1)+""; id_i=(id_i.length == 1?"0"+id_i:id_i);
	    id_m=(this.cmonth+1)+""; id_m=(id_m.length == 1?"0"+id_m:id_m);
	    iden=id_i+"-"+id_m+"-"+this.cyear;
	    out+="<td style='height: 20px;' valign='middle' "+(i+1 == this.cday?"class='cal_sel_day' title='Выбранный день'":(i+1 == this.now.getDate() && this.cmonth == this.now.getMonth() && this.cyear == this.now.getFullYear()?"class='cal_now_day' title='Сегодня'":"class='cal_day "+(nd >= 6 && nd <=7?"silver":'')+"'"))+" id='calendar_day_"+iden+"'>"+ (i+1) + "</td>";
	}
    
	if((this._monthdays[this.cmonth]+this.firstday) % 7 != 0 ){
	    out+="<td colspan='" + (7-((this._monthdays[this.cmonth]+this.firstday) % 7)) + "'>&nbsp;</td>";
	}
    
	out+="</tr><tr>";
	
	for(var i=0;i<=6;i++){
	    out+= "<td class='little' align='center' valign='middle' width='40px' height='20px'>" + this._weekdays[i] + "</td>";
	}
	out+="</tr></table>";
	
    
	this.ref.html(out);
	this.okfunc();
	
	this.load(this.city,this.type,this.lnk,this.cyear,this.cmonth);
    }
    
    this.load = function(city,type,lnk,y,m){
	$('#calendar_data_loading').fadeIn('fast');
	m++;
	//alert('/runtime/calendar/'+type+'/'+y+'/'+m+'/');
	$.getJSON('/runtime/calendar/'+type+'/'+y+'/'+m+'/',function(data){
	    $.each(data.items, function(k,v){
		ik=k.split(/\-/);
		//alert(ik[0]);
		if(!$("#calendar_day_"+k).hasClass('cal_sel_day')){
		    $("#calendar_day_"+k).html("<a href='/"+lnk+"/"+ik[2]+"/"+ik[1]+"/"+ik[0]+"/' class='cal_link'>"+v[0]+"</a>");
		}
	    });
	    $('#calendar_data_loading').fadeOut('fast');
	});   
    }
    ///
	       
    this.setDate(dt);
}