var Days  = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
var len   = null;

function count_days (y,m) {
    if (m==1) {
      if (y%4==0)
        return 29;
      else
        return 28;
    }
    if( (m==3)||(m==5)||(m==8)||(m==10) )
      return 30;
    else
      return 31;
}

function get_month(y,m){
      
	var month=new Array( [[]] );   
    var ln=new Array([]);           
	var data = new Date();
	var cnt=1;
    var i=0;
    var l=0;

	data.setFullYear(y>1900?(y-1900):y);
	data.setMonth(m);
	data.setDate(count_days(m)-1);
    fd=data.getDay()+1;
    fd = (fd==0)?7:fd; 
    dc=count_days(y,m);

    for(i=fd;i<8;i++)
    { ln[i-fd]=cnt++; }
    month[l++]=ln;
    ln=[];
    i=0;	
    	do
           {
           ln[i++]=cnt++;                
           if( (i==7) )      
                {
                month[l++]=ln;
                ln=[];       
                i=0;          
                }
           if(cnt==dc)       
                {
                ln[i++]=cnt++;
                month[l++]=ln;
                }

           } while(cnt<dc);

        return month;		
}
function rus_month(m){	
	var Months=['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'];
    return (Months[ m<0 ? (12+m):( m>11?(m-12):m ) ]);	
}
function prev_month(y,m){	   
	   if(y<=2006 && m==11) { return( '' ); }
       else { return( 'show_calendar('+(m>0?y:(y-1))+','+(m>0?(m-1):11)+',0);' ); }
}
function next_month(y,m)
        { 		
		if(m<11){y=y;m++;}
		else{y++;m=0;}
		return( 'show_calendar('+y+','+m+',0);' ); 
}

function show_calendar(y,m,sd){	
		IN=0; 
        firefox=/firefox/i;
        if(firefox.exec(navigator.userAgent)) {IN=1}else{IN=0};

        var s=new String;
        var d=new Date;		
		var day=d.getDate();
		if(sd != 0) {day=sd;}
        var month=new Array();
        var cur_month=d.getMonth();
        var cur_year=d.getFullYear();
		weekbackgr="";
		weekdaycount = 0;
        m = m?m:(m==0?m:d.getMonth());
        month=get_month(y,m);

		s+=/*IN?' ':*/'<table ID="for_cal" border="0" cellspacing="0" width="100%" height="100%">';
       	//s+='<tr style="background:#aaaaaa; color:#ffffff;" class="other_day_line"><td colspan="2" align="center"><b>'+y+'</b></td>';
		s+='<tr style="background:#aaaaaa; color:#ffffff;" class="other_day_line">';
        s+='<td colspan="7" align="center"><a href="javascript:'+prev_month(y,m)+'"><font size=2 color="#FFFFFF"><b> &laquo; </b></font></a>';
	    s+='&nbsp;&nbsp;'+y+' '+rus_month(m);
	    s+='&nbsp;&nbsp;<a href="javascript:'+next_month(y,m)+'"><font size=2 color="#FFFFFF"><b> &raquo; </b></font></a></td>';
	    s+='</tr>';
	    s+='<tr class="dayname">';
       for(column=0;column<Days.length;column++)
       { s+='<td style="font-size:7pt;padding: 3px;">'+Days[column]+'</td>'; }              
       s+='</tr>';
       s+='<tbody>';
	   for(line=0;line<month.length;line++)
                {                
				cur_week=( (day>=month[line][0])&&(day<month[line][0]+7)&&(m==cur_month && y==cur_year) )?1:0;                
                if(y != cur_year) cur_week = 0;	
				s+='<tr style="background: #EAEAEA;">';
                var lin=new Array();
                lin=month[line];
				weekdaycount = 0;
				
                if(line==0)
                    { for(column=0;column<(7-lin.length);column++) { s+='<td class="other_day">'+( 0?( count_days(y,m-1)+1-(7-lin.length)+column ):'&nbsp;' )+'</td>'; weekdaycount++; } }                       
                if(cur_week)
                    {						
                    for(column=0;column<lin.length;column++)
                        { 
						weekdaycount++;
						weekbackgr='';
						var cur_week_day = month[line][column];						
						cur_m = m; //что бы не менялся месяц, заводим еще переменную
						cur_m++; //т.к. в JS месяцы с 0 до 11, а в php надо с 1 до 12 прибавляем единичке						
						var nextDay = new Date(y, m, cur_week_day+1); //Получаем след. день
						nextDayMonth = nextDay.getMonth(); 
						nextDayMonth++;// месяц опять надо увеличить на 1						
						if(weekdaycount == 6 || weekdaycount == 7){ weekbackgr=' style="background:#cccccc;" '}
						if((cur_week_day==day && m==cur_month && y==cur_year) || (cur_week_day==sd)){weekbackgr='';}						
                        s+='<td class="'+( ( cur_week_day==day )?'cur_day':'other_day' )+'" '+weekbackgr+'>'+'<a  href="/concerts.php?data='+y+'-'+cur_m+'-'+(cur_week_day<10?'0':'')+cur_week_day+'|'+nextDay.getFullYear()+'-'+(nextDayMonth<10?'0':'')+nextDayMonth+'-'+(nextDay.getDate()<10?'0':'')+nextDay.getDate()+"&yr="+y+"&m="+cur_m+"&d="+cur_week_day;
                        s+='">'+cur_week_day+'</a></td>';
                        }	

                    }
                else
                    {
                    for(column=0;column<lin.length;column++)
                        {
						weekdaycount++;
						weekbackgr='';
                        var other_week_day = month[line][column];
						cur_m = m;
						cur_m++;							
						var nextDay = new Date(y, m, other_week_day+1);
						nextDayMonth = nextDay.getMonth();
						nextDayMonth++;						
						if(weekdaycount == 6 || weekdaycount == 7){ weekbackgr=' style="background:#cccccc;" '}												
						if((other_week_day==day && m==cur_month && y==cur_year) || (other_week_day==sd)){weekbackgr='';}						
						s+='<td class="'+( ( other_week_day==sd )?'cur_day':'other_day' )+'" '+weekbackgr+'>'+'<a href="/concerts.php?data='+y+'-'+cur_m+'-'+(other_week_day<10?'0':'')+other_week_day+'|'+nextDay.getFullYear()+'-'+(nextDayMonth<10?'0':'')+nextDayMonth+'-'+(nextDay.getDate()<10?'0':'')+nextDay.getDate()+"&yr="+y+"&m="+cur_m+"&d="+other_week_day;
                        s+='">'+other_week_day+'</a></td>';
                        }	
                    }
					if(line==month.length-1){                        
                        for(column=0;column<7-lin.length;column++)
                        s+='<td class="other_day">&nbsp;</td>'; weekdaycount++;}
                
		s+='</tr>';
		}
		s+='</tbody>';
	s+=/*IN?' ':*/'</table>';
	
	var tabl=document.getElementById("for_cal");
	if(tabl != null){
		if (IN) {tabl.innerHTML=s;} else {tabl.outerHTML=s;}
	}

}
