/************************************************************************
Elant-Calendar Version 1.0
This is free and open-source software, but commercial use or publication
must first request and receive prior permission by contacting:
support@elant.ru
Site: http://elant.ru/scripts/calendar/
************************************************************************/

var init   = new Date();
var day   = init.getDate();
cur_yr = init.getYear();
nxt_yr = cur_yr + 1;
var MyObj = null;

var oDiv = document.createElement("DIV");
var oShield = document.createElement("<DIV style='position:absolute ;top:0 ;left:0 ;width:100% ;height:100% ;background:red"
                                     + ";filter:Alpha(Opacity=0)'></DIV>");
oShield.onclick=close_cal;

html = "<DIV id=cal_body style='position:absolute ;top:0 ;left:0 ;width:220px ;height:200px ;background:#f0f0f0 ;border:1px #9F9F9F solid"
       + " ;text-align:center'>";

html += "<DIV style='position:absolute ;left:0px ;top:5px ;width:100% ;height:96% ;border:1px #f0f0f0 solid'>";

html += "<table border=0 width=94%><tr style='font-size:9px'>"
        + "<td class=cal_td align=left><SELECT ID=month style='font-size:9px;height:18px;border:1px #c0c0c0 solid' onchange=displayCalendar(this.selectedIndex,(year.options[year.selectedIndex].value))>"; <!--year.selectedIndex+1900-->
html += "<OPTION>Январь<OPTION>Февраль<OPTION>Март<OPTION>Апрель"
        + "<OPTION>Май<OPTION>Июнь<OPTION>Июль<OPTION>Август"
        + "<OPTION>Сентябрь<OPTION>Октябрь<OPTION>Ноябрь<OPTION>Декабрь"
        + "</SELECT></td>";

d_yr = 2; <!-- за сколько лет показывать -->
html += "<td class=cal_td align=center><SELECT ID=year style='font-size:9px;height:18px;border:1px #c0c0c0 solid' onchange=displayCalendar(month.selectedIndex,(this.options[this.selectedIndex].value))>";
for (var i=nxt_yr; i>=(nxt_yr-d_yr); i--)
 { html += "<OPTION value="+ i +" "+ (i==cur_yr?"selected":"") +">" + i;
   if (i<1990) break;
 }
html +="</SELECT></td>";

html += "<td class=cal_td align=right><input type=button value=' x ' onClick=close_cal() "
        + "style='font-size:9px;height:18px;border:1px #c0c0c0 outset;background-color:#ddd5ca' title='закрыть'></td>"
        + "</tr></table>";

html += "<LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"calenStyle.css\">";

html +="<table ID=CalTable border=0 cellspacing=3 class=ctab width=94%>";
html +="<tr class=day_header> ";
html += "<td class=day_off_header>Вс</td>"
        + "<td class=cal_td>Пн</td><td class=cal_td>Вт</td><td class=cal_td>Ср</td>"
        + "<td class=cal_td>Чт</td><td class=cal_td>Пт</td><td class=cal_td>Сб</td>";
html +="</tr>";
for (var i=0; i<7; i++) html +="<tr><td class=cal_td></td><td class=cal_td></td><td class=cal_td></td><td class=cal_td></td><td class=cal_td></td><td class=cal_td></td><td class=cal_td></td></tr>"<!---->
html +="</table>";

html += "<table border=0 width=94%><tr>";
html += "<td class=cal_td align=left><INPUT TYPE=BUTTON class=control VALUE=' << ' onClick=setYear(-1) title='пред.год'></td>";
html += "<td class=cal_td align=left><INPUT TYPE=BUTTON class=control VALUE=' < ' onClick=setMonth(-1) title='пред.месяц'></td>";
html += "<td class=cal_td align=center><INPUT TYPE=BUTTON class=control VALUE=' сегодня ' onClick=setToday()></td>";
html += "<td class=cal_td align=right><INPUT TYPE=BUTTON class=control VALUE=' > ' onClick=setMonth(1) title='след.месяц'></td>";
html += "<td class=cal_td align=right><INPUT TYPE=BUTTON class=control VALUE=' >> ' onblur='month.focus()' onClick=setYear(1) title='след.год'></td>";
html += "</tr></table>";

html +="</DIV></DIV>";

function setWindowsWidth()
{
 if(cal_body.style.width=="180px")
  {
    cal_body.style.width = "265px";
    more.value = "<<";
    ext_counter.style.visibility = "visible";
  }
 else
  { cal_body.style.width = "180px";
    more.value = ">>";
    ext_counter.style.visibility = "hidden";
  }
}

function openCalendar(obj, x_l, x_t,ref)
{
 ref1=ref;
  if (!x_l) var x_l=0;
  if (!x_t) var x_t=0;

  MyObj = obj;
  oDiv.innerHTML = html;
  oDiv.style.position = "absolute";
  oDiv.style.zIndex = 301;
  oShield.style.zIndex = 300;
  oDiv.style.pixelLeft = calcLeft(obj)-3 + x_l;
  oDiv.style.pixelTop = calcTop(obj)+obj.offsetHeight-3 + x_t;

  document.body.appendChild(oShield);
  document.body.appendChild(oDiv);

  if(obj)
   {
     <!-- формат даты 'yyyy-mm-dd' -->
     var x_day = parseInt(obj.value.substr(8,2));
     var x_month = parseInt(obj.value.substr(5,2));
     var x_year = parseInt(obj.value.substr(0,4));

     if((x_day>0 && x_day<=getDaysInMonth(x_month,x_year)) && (x_month>0 && x_month<13) && (x_year>1899 && x_year<2100))
      {
        day = x_day;
        month.selectedIndex = x_month-1;
        year.selectedIndex = 1; <!-- текущий год -->
        ref=1;
        displayCalendar(x_month-1,x_year,x_day);
      }
     else
      setToday();
   }
  else
   setToday();
}



function eventHandlerOver(anEvObj)
{
  if (this.className!="day_selected")
   this.className = "day_mouseover";
}

function eventHandlerOut(anEvObj)
{
  if (this.className!="day_selected")
   (this.cellIndex>0) ? this.className="day" : this.className="day_off";
}

function eventHandlerClick(anEvObj)
{
  day = this.innerHTML;
  if (this.className=="day_disabled")
   (parseInt(day) > 20) ? setMonth(-1) : setMonth(1);
  else
    displayCalendar(month.selectedIndex, year.options[year.selectedIndex].value, day);

  var str_day = "";
  var str_month = month.selectedIndex+1;
  var str_year = year.options[year.selectedIndex].value;

  (day.toString().length==1)? str_day="0"+day : str_day=day;
  if (str_month<10)
   str_month = "0"+str_month;

  //MyObj.value = (str_year + "-" + str_month + "-" + str_day);
   MyObj.value = (str_day + "." + str_month + "." + str_year);

  // this.location.replace("?_table=0&_graph=0&_mode=4&_objId=0&_posId=Doc_01080100&_fromDate="+Date_form.data_file.value+"&_toDate="+Date_form.data_file.value+"&docCode=Doc_010805&posId=Doc_01080101");
  close_cal();

 // window.location.href = '?docCode=Doc_010805&amp;_toDate='+(str_day + "." + str_month + "." + str_year);
  if (ref1!='')
  {
   window.location.href = ref1+(str_day + "." + str_month + "." + str_year);
  }
}

function close_cal()
{
  document.body.removeChild(oDiv);
  document.body.removeChild(oShield);
}

function setYear(val)
{
  if (!isNaN(val))
   { x_year = year.options[year.selectedIndex].value;
     x_year = Number(x_year) + val;

     if (x_year > nxt_yr)
      x_year = nxt_yr;
     if (x_year < (nxt_yr-d_yr))
      x_year = (nxt_yr-d_yr);

     year.selectedIndex = nxt_yr-x_year;
     displayCalendar(month.selectedIndex, year.options[year.selectedIndex].value);
   }
}

function setMonth(val)
{
  if (!isNaN(val))
  {
    var i = 0;
    var x_month = month.selectedIndex;
    i = x_month + val;
    x_month = i%12;

    if (x_month < 0) x_month = x_month + 12;

    month.selectedIndex = x_month;
    setYear(Math.floor(i/12));

    displayCalendar(month.selectedIndex, year.options[year.selectedIndex].value);
  }
}

function setToday()
{
  var now = new Date();
  var x_day = now.getDate();
  var x_month = now.getMonth();
  var x_year = now.getYear();

  day = x_day;
  month.selectedIndex = x_month;
  year.selectedIndex = 1;
  displayCalendar(month.selectedIndex, x_year, x_day);
}

function getDaysInMonth(x_month,x_year)
{
  var days;
  if (x_month==1 || x_month==3 || x_month==5 || x_month==7 || x_month==8 || x_month==10 || x_month==12) days = 31;
  else if (x_month==4 || x_month==6 || x_month==9 || x_month==11) days = 30;
  else if (x_month==2)
   {
     if (isLeapYear(x_year)) days = 29;
     else days = 28;
   }
  return (days);
}

function isLeapYear(x_year)
{
  if (((x_year % 4)==0) && ((x_year % 100)!=0) || ((x_year % 400)==0))
  return (true);

  else
   return (false);
}

function displayCalendar(x_month,x_year,x_day)
{
  //  alert(ref);
  x_month = parseInt(x_month);
  x_year = parseInt(x_year);
  var days = getDaysInMonth(x_month+1,x_year);

  if(x_month>1)
   var days_before = getDaysInMonth(x_month,x_year);
  else
   var days_before = getDaysInMonth(12,x_year-1);

  if(day>days) day = days;

  if(!x_day) x_day = day;

  var curr_day = 0;
  var firstOfMonth = new Date (x_year,x_month,1);
  var startingPos = firstOfMonth.getDay();

  for (i=0; i<42; i++)
   {
     curr_day = i-startingPos+1;
     (CalTable.rows[Math.floor(i/7)+1].cells[i%7].cellIndex>0) ? CalTable.rows[Math.floor(i/7)+1].cells[i%7].className="day":CalTable.rows[Math.floor(i/7)+1].cells[i%7].className="day_off";
     if( curr_day<=0 )
      {
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].innerHTML = curr_day + days_before;
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].className = "day_disabled";
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].onmouseover = "";
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].onmouseout = "";
      }
     else if (curr_day>0 && curr_day<=days)
      {
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].innerHTML = curr_day;
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].onmouseover = eventHandlerOver;
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].onmouseout = eventHandlerOut;
//        CalTable.rows[Math.floor(i/7)+1].cells[i%7].className = "cal_td";
      }
     else if (curr_day > days)
      {
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].innerHTML = curr_day-days;
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].className = "day_disabled"
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].onmouseover = "";
        CalTable.rows[Math.floor(i/7)+1].cells[i%7].onmouseout = "";
      }

     CalTable.rows[Math.floor(i/7)+1].cells[i%7].onclick = eventHandlerClick;
    // alert(ref);
     if (curr_day==x_day)
      CalTable.rows[Math.floor(i/7)+1].cells[i%7].className = "day_selected";

   }
}

function count_date(x_diff)
{
  if(!isNaN(x_diff))
   {
     curr_d = new Date(year.selectedIndex+1900,month.selectedIndex,day);
     newDate = curr_d.getDate() + x_diff;
     curr_d.setDate(newDate);

     day = curr_d.getDate();
     year.selectedIndex = curr_d.getYear()-1900;
     month.selectedIndex = curr_d.getMonth()
     displayCalendar( curr_d.getMonth(),curr_d.getYear(),day);
   }
}

function calcTop(x_ele)
{
  var x_ret = 0;
  var oParent = x_ele.offsetParent;

  if(oParent == null) return 0;
  else
   x_ret=x_ele.offsetTop + oParent.clientTop + calcTop(oParent);

  return x_ret;
}

function calcLeft(x_ele)
{
  var x_ret = 0;
  var oParent = x_ele.offsetParent;

  if(oParent == null) return 0;
  else
   x_ret=x_ele.offsetLeft + oParent.clientLeft + calcLeft(oParent);

  return x_ret;
}

function openCalendar_new(obj, x_l, x_t)
{
  openCalendar(obj, x_l, x_t);
  //Seen();
}