function get_over_src(src)   { return '/i/'+ src.replace(/.[a-zA-Z]{3}$/, "").replace (/(http.*)\/i\//, "") + '_over.' + src.replace(/.*\./, ""); }
function get_normal_src(src) { return '/i/' + src.replace(/_over/, "").replace (/(http.*)\/i\//, ""); }

function img_over(img) { img.src = get_over_src(img.src); }
function img_out(img)  { img.src = get_normal_src(img.src); }

function preload_images()
{
  var img = new Object(); 

  arguments = preload_images.arguments;

  for( i=0; i < arguments.length; i++) 
  {
    img[i]     = new Image();
    img[i].src = arguments[i];
  }

  i = 0;
  images = document.getElementsByTagName('img')
  while( image = images[i++] )
  {
    if( image.className.match(/over/, "") )
    {
      image.onmouseover = function() { this.src = get_over_src(this.src); } 
      image.onmouseout  = function() { this.src = get_normal_src(this.src); }  

      /* blur if require */
      image.parentNode.onfocus = function() { this.blur() }
    } 
  }
}

onload = function()
{
  preload_images('/i/ru/m/about_over.gif', '/i/ru/m/flats_over.gif', '/i/ru/m/contacts_over.gif', '/i/ru/m/entrench_over.gif', '/i/ru/m/responses_over.gif', '/i/ru/m/services_over.gif', '/i/ru/m/special_over.gif', '/i/ru/m/transfer_over.gif');

  document.getElementsByTagName('body')[0].onclick = function()
  {
    if(  document.getElementById('pcalendar') )
      document.getElementById('pcalendar').style.display = 'none';
  }
}

function $(id)       { return document.getElementById(id); }
function hso(obj, t) { $(obj).style.display = (t==true || t==1) ? 'block' : 'none'; }

function getPos(e) 
{
  var l = 0;
  var t = 0;

  while(e) 
  {
    l += e.offsetLeft;
    t += e.offsetTop;
    e = e.offsetParent;
  }

  return [l, t];
}

var daysOfMonth = [31,28,31,30,31,30,31,31,30,31,30,31];

function Calendar(d, m, y, target) 
{
  var monthsName = ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'];

  var now = new Date();

  var prev = (m-1 > now.getMonth() || y>now.getYear()) ? '<a href="JavaScript:Calendar(0,'+((m>1 && m<=12) ? (m-1)+','+y : ((m==1) ? '12,'+(y-1) : '1,'+(y+1)))+', \''+target+'\')">&laquo;</a>' : '&laquo;';

  var res = '<table class="pcalendar" cellspacing="1"><tr><td colspan="7" class="title">'+prev+' '+monthsName[m-1]+', '+y+'г. <a href="JavaScript:Calendar(0,'+((m<12) ? (m*1+1)+','+y : '1,'+(y*1+1))+',\''+target+'\');">&raquo;</a></td></tr>';
      res+= '<tr class="days"><td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td class="holiday">Сб</td><td class="holiday">Вс</td></tr><tr>';

  if ((y%4==0) && (y%100!=0) || (y%400==0))
    daysOfMonth[1] = 29;

  var act = new Date(y, m-1, 1).getDay();
  if (act == 0) act = 7;
  var point = Math.ceil((act+daysOfMonth[m-1])/7)*7;

  var end = new Date(y, m-1, daysOfMonth[m-1]).getDay();
  if (end == 0) point -= 6;

  for (var i=1; i<point; i++) 
  {
    var val = i-act+1;

    res += '<td'+((i < act || i-act+1 > daysOfMonth[m-1]) ? '>' : ((now.getTime() > new Date(y, m-1, val).getTime()) ? ' class=past>'+val : ' class='+((i%7==0 || i%7==6) ? 'holiday' : 'work')+' onmouseover="cov(this);" onmouseout="cou(this);" onclick="ccl('+val+','+m+','+y+',\''+target+'\');">'+((d!=val) ? val : '<b><span>'+val+'</span></b>')))+'</td>';

    if (i%7==0)  res += "</tr>";
    if (i%7==0 && i<point-1) res += "<tr>";
  }

  for( --i; !(i%7==0) ; i++ ) 
    res += "<td></td>"; 

  res += '</tr></table>';

  $('pcalendar').innerHTML = res;
  
  hso('pcalendar', true);
}

function cov(obj) { obj.className = obj.className.replace(/ over/, ""); obj.className += ' over'; }
function cou(obj) { obj.className = obj.className.replace(/ over/, ""); }

function ccl(d, m, y, target) 
{
  CorrMonth(target, m);

  if($(target+'_day'))    $(target+'_day').value = d;
  if($(target+'_month'))  $(target+'_month').value = m;
  if($(target+'_year'))   $(target+'_year').value = y;

  setDate();

  hso('pcalendar', false);
}

function Cal(num) 
{
  var wpos = getPos($('calc'+num));

  $('pcalendar').style.left = wpos[0]+15+"px";
  $('pcalendar').style.top  = wpos[1]+"px";

  if( num == 1 )
    Calendar($('st_day').value, $('st_month').value, $('st_year').value, 'st');
  else
    Calendar($('en_day').value, $('en_month').value, $('en_year').value, 'en');
}

function Form2Date(obj) 
{
  return new Date($(obj+'_year').value, $(obj+'_month').value-1, $(obj+'_day').value);
}

function Date2Form(obj, d) 
{
  $(obj+'_day').value   = d.getDate();
  $(obj+'_month').value = d.getMonth()+1;
  $(obj+'_year').value  = d.getFullYear();
}

function CorrMonth(obj, month) 
{
  var DaysInSelect = $(obj+'_day').options.selectedIndex; 
  var DaysInMonth  = daysOfMonth[month-1];

  if( DaysInSelect > DaysInMonth ) 
  {
    for (var i=DaysInSelect; i>= DaysInMonth; i--)
      $(obj+'_day').options[i] = null;
  } 
  else if (DaysInSelect < DaysInMonth) 
  {
    for (var i=DaysInSelect+1; i <= DaysInMonth; i++)
      $(obj+'_day').options[i] = new Option(i, i);
  }
}

function setDate() 
{
  var now   = new Date();
  var start = Form2Date('st');

  // назад в будущее
  if (now.getTime() > start.getTime()) 
  {
    start.setDate(now.getDate() + 1);
    Date2Form('st', start);
    return ;
  }

  var end = Form2Date('en');

  if (start.getTime() >= end.getTime()) 
  {
    end.setTime(start.getTime());
    end.setDate(end.getDate() + 1);
    Date2Form('en', end);
  } 
 
  var delta = Math.round((end.getTime() - start.getTime()) / 86400000);
  if(delta > 30 ) 
  {
    end.setTime(start.getTime());
    end.setDate(end.getDate() + 30);
    Date2Form('en', end);
    delta = 30;
  }

  $('bnumc').value = delta;

  var y = start.getFullYear();
  
  if ((y%4==0) && (y%100!=0) || (y%400==0)) daysOfMonth[1] = 29;
  
  CorrMonth('st', start.getMonth()-1);
  CorrMonth('en', end.getMonth()-1);
}

function setNight(obj) 
{
  var d = Form2Date('st');
  
  d.setDate(d.getDate() + parseInt(obj.value));
 
  CorrMonth('en', d.getMonth()-1);
  Date2Form('en', d);
}
