
// Morg Calendar, by morg, 2007, wmorgan[x]mail[x]ru

function morgCalendarInit(hiddenId, showDate, toId, predDay){

           var holiday = new Array('1-1', '1-7', '2-23', '3-8', '5-1', '5-9', '6-12'); //праздники (месяц-день)


           if(showDate == null || showDate == ''){
                      showDate = new Date();
           }else{
                      var ex = /^(\d+)\-(\d+)\-(\d+)$/.exec(showDate);
                      var year = ex[1];
                      var mont = ex[2]; var mont2 = mont-1;
                      var day  = ex[3];

                      showDate = new Date(year, mont2, day);
           }


           var d = showDate.getDate();
           var m = showDate.getMonth();
           var y = showDate.getFullYear();


           if(predDay==null){
                      predDay = d;
           }

           var sqlDate_m = m+1;
           var sqlDate_d = d;

           if((sqlDate_m.toString().length)<2) sqlDate_m = '0'+sqlDate_m;
           if((sqlDate_d.toString().length)<2) sqlDate_d = '0'+sqlDate_d;
           var sqlDate = y + '-' + sqlDate_m + '-' + sqlDate_d;



           var mon = new Array(
                      'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
           );

           var mon0 = new Array(
                      'Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'
           );

           var day_ofw = new Array(
                      'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресение'
           );

           var day_ofw0 = new Array(
                      'пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'
           );


           var month1 = new Date(y, m, 1);
           var month2 = new Date(y, m+1, 1);
           var count_days = Math.floor((month2.getTime() - month1.getTime()) / (1000*60*60*24));
           var firstday_in_week = month1.getDay(); firstday_in_week--;
           if(firstday_in_week<0) firstday_in_week = 6;

           var mList = "<select onchange='morgCalendarDateSet(\"" + hiddenId + '", "' + y + '-' + '"+this.value+"' + '-' + d + "\");'>";
           for(i=0;i<12;i++){
                      var i2 = i+1;
                      if(i!=m){
                                 mList += "<option value=" + i2 + ">" + mon[i] + "</option>";
                      }else{
                                 mList += "<option value=" + i2 + " selected>" + mon0[i] + "</option>";
                      }
           }
           mList += "</select>";

           var yList = "<select onchange='morgCalendarDateSet(\"" + hiddenId + '", ' + 'this.value+"' + '-' + m + '-' + d + "\");'>";
           for(i=1900;i<2100;i++){
                      if(i!=y){
                                 yList += "<option value=" + i + ">" + i + "</option>";
                      }else{
                                 yList += "<option value=" + i + " selected>" + i + "</option>";
                      }
           }
           yList += "</select>";

           var extport = "<div id='" + hiddenId + "_rewrite'>";
           extport += "<table border=0 cellspacing=0 cellpadding=0 class=morgCalendarTABLE>";
           extport += "<tr align=center valign=middle><td class=morgCalendarTD colspan=7>" + d + '&nbsp;' + mList + '&nbsp;' + yList + "</td></tr>";

           extport += "<tr align=center valign=middle>";
           for(dayweek = 0; dayweek<firstday_in_week; dayweek++){
                      extport += "<td class=morgCalendarTD>&nbsp;</td>";
           }

           dayweek = firstday_in_week;
           for(dayc = 1; dayc<=count_days; dayc++){
                      dayweek %= 7;

                      if(dayweek == 0){
                                 extport += "</tr><tr align=center valign=middle>";
                      }

                      if(dayc != d){
                                 var sqlD = y + '-' + (m+1) + '-' + dayc;

                                 //стандартный приоритет
                                 var stle = 'morgCalendarTDdefault';
                                 if(dayweek==5 || dayweek==6){
                                            stle = 'morgCalendarTDoffweek';
                                 }

                                 //средняя приоритетность
                                 if(holiday){
                                            for(i=0;i<holiday.length;i++){
                                                       var ex = /^(\d+)-(\d+)$/.exec(holiday[i]);
                                                       if(ex[1]==(m+1) && ex[2]==dayc){
                                                                  stle = 'morgCalendarTDholiday';
                                                                  break;
                                                       }
                                            }
                                 }

                                 //высокоприоритетно
                                 if(predDay==dayc && predDay!=d){
                                            stle = 'morgCalendarTDpredday';
                                 }

                                 extport += "<td class=" + stle + " title=' " + dayc + ', ' + mon[m] + ', ' + day_ofw[dayweek] + " ' onclick='morgCalendarDateSet(\"" + hiddenId + '", "' + sqlD + "\");'>" + dayc + "</td>";
                      }else{
                                 extport += "<td class=morgCalendarTDactive title=' " + dayc + ', ' + mon[m] + ', ' + day_ofw[dayweek] + " '>"+dayc+"</td>";
                      }

                      dayweek++;
           }

           for(dayweek2 = dayweek; dayweek2<7; dayweek2++){
                      extport += "<td class=morgCalendarTD>&nbsp;</td>";
           }

           extport += "<tr align=center valign=middle>";
           for(dayweek = 0; dayweek<7; dayweek++){
                      extport += "<td class=morgCalendarTD title=' " + day_ofw[dayweek] + " ' ><b>" + day_ofw0[dayweek] + "</td>";
           }



           extport += "</tr>";
           extport += "</table>";
           extport += "<input type=hidden name='" + hiddenId + "' id='" + hiddenId + "' value='" + sqlDate + "'>";
           extport += "</div>";


           if(toId!=null){
                      document.getElementById(toId).innerHTML = extport;
           }else{
                      document.write(extport);
           }

}

function morgCalendarDateSet(hiddenId, fvalue){

           var predDay;
           if(document.getElementById(hiddenId)){
                      predDay = (/^(\d+)\-(\d+)\-(\d+)$/.exec(document.getElementById(hiddenId).value))[3];
           }

           document.getElementById(hiddenId).value = fvalue;
           morgCalendarInit(hiddenId, fvalue, hiddenId+'_rewrite', predDay);

}

