function DrawCalendar(o,mo,ys) {
    o.innerHTML = '<p>calendar</p>';
    // alert('mo='+mo);
    var now = new Date();
    /* var DoW = ['Пн','Вт','Ср','Чт','Пт','Сб','Вс']; */
    var DoW = ['Mo','Tu','We','Th','Fr','Sa','Su'];
    /*
    var Mon = [
        'Январь'    ,   'Февраль'   ,   'Март'      ,   'Апрель'
    ,   'Май'       ,   'Июнь'      ,   'Июль'      ,   'Август'
    ,   'Сентябрь'  ,   'Октябрь'   ,   'Ноябрь'    ,   'Декабрь'
    ];
    */
/*
    var Mon = [
        'Янв' , 'Фев' , 'Мар' , 'Апр'
    ,   'Май' , 'Июн' , 'Июл' , 'Авг'
    ,   'Сен' , 'Окт' , 'Ноя' , 'Дек'
    ];
*/
    /**/
    var Mon = [
        'Jan' , 'Feb' , 'Mar' , 'Apr'
    ,   'May' , 'Jun' , 'Jul' , 'Aug'
    ,   'Sep' , 'Oct' , 'Nov' , 'Dec'
    ];
    /**/
    var cc = [
         0,0,0,0,0,0,0 
    ,    0,0,0,0,0,0,0 
    ,    0,0,0,0,0,0,0 
    ,    0,0,0,0,0,0,0 
    ,    0,0,0,0,0,0,0 
    ,    0,0,0,0,0,0,0 
    ];
    var td = now.getDate();     var d = td;
    var tm = now.getMonth();    var m = tm;
    var ty = now.getFullYear(); var y = ty;
    var inc = ys ? 12 : 1;
    var pm = -inc;
    var nm = +inc;
    if( mo ) {
        var xmo = mo;
        var yo  = y;
        pm = mo-inc;
        nm = mo+inc;
        if( mo < 0 ) {
            while( (m+xmo) < 0 ) { yo--; xmo += 12; }
            now.setFullYear(yo);
            now.setMonth(m+xmo);
        }
        else if( mo > 0 ) {
            while( (m+xmo) > 12 ) { yo++; xmo -= 12; }
            now.setFullYear(yo);
            now.setMonth(m+xmo);
        }
    }
    m = now.getMonth();
    y = now.getFullYear();
    // alert('y='+y+'; m='+m);
    
    var dd = ''+y+(m>9?'':'0')+(m+1)+(d>9?'':'0')+d;
    var x = new Date(); x.setMonth(m); x.setFullYear(now.getFullYear());
    var dow = x.getDay();
    var t = '<table class=calendar'
        +' width="100%" height="100%" border=0 cellpadding=0 cellspacing=0>'
        +'<tr><th colspan=7>';
    if(ys) {
        t += '<span title="prev year" onClick="DrawCalendar(co,'+pm+','+y+')">'
            +'<small>&hellip;'
            +(((y-1)==ty)?'<span style="background-color:yellow">':'')
            +(y-1)
            +(((y-1)==ty)?'</span>':'')
            +'</small>&laquo;</span>'
        +((y==ty)?'<span style="background-color:yellow">':'')
        +y
        +((y==ty)?'</span>':'')
        +'<span title="next year" onClick="DrawCalendar(co,'+nm+','+y+')">'
            +'&raquo;<small>'
            +(((y+1)==ty)?'<span style="background-color:yellow">':'')
            +(y+1)
            +(((y+1)==ty)?'</span>':'')
            +'&hellip;</small></span>';
    } else {
        t += '<span title="prev month" onClick="DrawCalendar(co,'+pm+',0)"'
        +((pm>=0)?' style="background-color:yellow"':'')
        +'>&laquo;</span>'
		+'<a href="?Month='+(m+1)+'">'
        +Mon[m]
		+'</a>'
		+', '
        +'<span title="select month or year" onClick="DrawCalendar(co,0,'+y+')">'
        +y
        +'</span>'
        +'<span title="next month" onClick="DrawCalendar(co,'+nm+',0)"'
        +((nm<=0)?' style="background-color:yellow"':'')
        +'>&raquo;</span>';
    }
    t+='</th></tr>';
    // alert('Now: '+y+'-'+m+'-'+d+': '+dd);
    x.setDate(1);
    var d1 = x.getDay(); d1 = (d1 ? d1 : 7) - 1;
    for(i=1; i<=32; i++) {
        x.setDate(i);
        j = x.getDate();
        if( i != j ) break;
        dow = x.getDay(); dow = (dow ? dow : 7)-1;
        w = Math.floor((d1+j-1) / 7);
        cc[ d1+i-1 ] = ''+i;
    }
    if(ys) {
        for(i=0; i<4; i++) {
            t += '<tr>';
            for(j=0; j<3; j++) {
                mx = 3*i+j;
                md = mx-m+nm-inc;
                t += '<th onClick="DrawCalendar(co,'+md+',0)"'
                    +(md ? '' : ' style="background-color:yellow"')
                    +'>'
					+'<a href="?Month='+(mx+1)+'">'
                    +Mon[mx]
					+'</a>'
                    // +'('+md+')'
                    +'</th>';
            }
            t += '</tr>';
        }
    } else {
        var CE = CalendarEvents ? true : false;
        var ce;
        for(i=0;i<7;i++) {
            c = (i>4) ? 'red' : 'black';
            t += '<tr><th class=dow style="color:'+c+'">'+DoW[i]+'</th>';
            for(w=0;w<=5;w++) {
                j = cc[w*7+i];
                b = (mo==0 && j==d) ? ';background-color:yellow' : '';
                ce = '';
                if(CE) {
                    dd = ''+y+(m>9?'':'0')+(m+1)+(j>9?'':'0')+j;
                    ce = CalendarEvents[dd];
                    if(ce) {
                        // alert( 'ce['+dd+']='+ce );
                        ce = ' title="'+(ce)+'" onClick="alert(\''+(ce)+'\')"';
                        b += ';text-decoration:underline';
                    }
                }
				r = '?Month='+(m+1)+'&Day='+j;
                t += '<td style="color:'+c+b+'"'+ce+'>'
					+(j ? '<a href="'+r+'" style="color:'+c+'">'+j+'</a>' : '&nbsp;')
					+'</td>';
            }
            t += '</tr>';
        }
    }
    t += '</table>';
    o.innerHTML = t;
}

