var gMonths=new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");

var gBegin=[1991,1,1];
var gEnd=[2050,12,31];

var gbEuroCal=true;
var gsCalTitle="gMonths[gCurMonth[1]-1]";

var IE4=false;
var gd=new Date();
var gToday=[gd.getFullYear(),gd.getMonth()+1,gd.getDate()];
var agenda=[];
var gCurMonth=gToday;
gfSelf=document.all;
var gdBegin=new Date(gBegin[0],gBegin[1]-1,gBegin[2]);
var gdEnd=new Date(gEnd[0],gEnd[1]-1,gEnd[2]);
var gcbMon,gcbYear;
var gCellSet=[];
var giSat=(gbEuroCal)?5:6;
var giSun=(gbEuroCal)?6:0;
var cal=[];

for (var i=0;i<6;i++)  	cal[i]=[];

function addEvent(date, message, url) {
  agenda[date] = new Array(message,url);
}

function fHoliday(y,m,d) 
{
  var r=agenda[y+"-"+m+"-"+d]; 
  return r;
}

function fGetById(doc, id) {
  if (IE4) return doc.all(id);
  else return doc.getElementById(id);
}

function fGetAgenda(d) {
  var s=fCalibrate(d[0],d[1]);
  if (!fValidRange(s[0],s[1],d[2]))
	return [gsOutOfRange, null, null];
  var ag=fHoliday(s[0],s[1],d[2]);
  if (ag==null)
	ag=["",null,null];
  return ag;
}

function fValidRange(y,m,d) {
  var date=new Date(y,m-1,d);
  return (date>=gdBegin)&&(date<=gdEnd);
}

function fCalibrate(y,m) {
  if (m<1) { y--; m=12; }
  else if (m>12) { y++;	m=1; }
  return [y,m];
}

function fBuildCal(y,m) {
  m=parseInt(m,10);
  var days=[31,31,(y%4==0&&y%100!=0||y%400==0)?29:28,31,30,31,30,31,31,30,31,30,31];
  var dCalDate=new Date(y,m-1,1);
  var iDayOfFirst=dCalDate.getDay();
  if (gbEuroCal)
	if (--iDayOfFirst<0)
		iDayOfFirst=6;
  var iOffsetLast=days[m-1]-iDayOfFirst+1;
  var iDate=1;
  var iNext=1;
  for (var d=0;d<7;d++)
	cal[0][d]=(d<iDayOfFirst)?[m-1,-(iOffsetLast+d)]:[m,iDate++];
  for (var w=1;w<6;w++)
  	for (var d=0;d<7;d++)
		cal[w][d]=(iDate<=days[m])?[m,iDate++]:[m+1,-(iNext++)];
  return cal;
}

function fUpdateCal(y,m) {
  var c=fBuildCal(y,m);
  var ag,d;
  for (var week=0; week<6; week++)
	for (var day=0; day<7; day++) {
		m=c[week][day][0];
		d=c[week][day][1];
		with (gCellSet[(7*week)+day]) {
			if (d<0) {
				style.color="#BDAB80";
				d=-d;
			}else{
				style.color="#28610C";
				if ((day==giSun)||(day==giSat)) {style.fontWeight="normal"} else {style.fontWeight="bold";}
			}

			if (gToday[2]==d&&gToday[1]==m&&m==gCurMonth[1]&&gToday[0]==y) {style.color="#B10800"; style.fontWeight="bold";}
			innerHTML=d;

			ag=fGetAgenda([y,m,d]);
			if (IE4) parentNode=parentElement;
			parentNode.title=ag[0];
			if (ag[0]) {parentNode.bgColor="#B10800"; style.color="#F8EDD9"; style.fontWeight="bold"; href="/npso/calendar/view/_t_/id="+ag[1];}
			with (parentNode) {if (gToday[2]==d&&gToday[1]==m&&m==gCurMonth[1]&&gToday[0]==y) {if (IE4) parentElement.bgColor="#F8EDD9"; else {parentNode.bgColor="#F8EDD9";}}}
		}
	}
}

function fDrawCal() {
  var id=0;
  with (document) {


  	for (var w=1; w<7; w++) {
		write ("<tr bgcolor='#FFFFFF' align=center>")
		write ("<td width=1 bgcolor='#FFFFFF'><img src='/g.gif' width=1 height=20></td>");
		write ("<td width=10><img src='/g.gif' width=10 height=1></td>");
		for (var d=0; d<7; d++) { write("<td><A class=cl id='"+(id++)+"'>00</A></td>") }
		write ("<td width=10><img src='/g.gif' width=10 height=1></td>");
		write ("</tr>");
	}
  }
}

function fSetCal(y,m){
  if (!fCheckRange(y,m))
	return;
  if (gcbMon) gcbMon.options[m-1].selected=true;
  if (gcbYear) gcbYear.options[y-gBegin[0]].selected=true;
  gCurMonth=[y,m];
  fUpdateCal(y,m);
  if (!IE4) {
	gfSelf.width=fGetById(document,"popTable").offsetWidth;
	gfSelf.height=fGetById(document,"popTable").offsetHeight;
  }
}

function fCheckRange(y,m) {
  if (y>gEnd[0]||y<gBegin[0]||(y==gBegin[0]&&m<gBegin[1])||(y==gEnd[0]&&m>gEnd[1])) {
	if (gcbMon) gcbMon.options[gCurMonth[1]-1].selected=true;
	if (gcbYear) gcbYear.options[gCurMonth[0]-gBegin[0]].selected=true;
	return false;
  }
  return true;
}

function Calendar_view() {
with (document) 
{
  var sTitle=eval(gsCalTitle);
  write ("<tr bgcolor='#FBF7ED'><td width=1><img src='/g.gif' width=1 height=35></td><td colspan=9 align=center><span class=ttl>" + sTitle + "</a></td></tr>");
  write ("<tr bgcolor='#FBF7ED' align=center><td bgcolor='#FFFFFF' width=1><img src='/g.gif' width=1 height=26></td>");
  write ("<td background='/npso/i/bg_week.gif' width=5><img src='/g.gif' width=10 height=1></td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>пн</td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>вт</td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>ср</td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>чт</td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>пт</td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>сб</td>");
  write ("<td background='/npso/i/bg_week.gif' class=day>вс</td>");
  write ("<td background='/npso/i/bg_week.gif' width=5><img src='/g.gif' width=10 height=1></td></tr>");

  fDrawCal();
  gCellSet=fGetById(document,"popTable").getElementsByTagName("A");
  fSetCal(gCurMonth[0],gCurMonth[1]);
  gfSelf.width=fGetById(document,"popTable").offsetWidth;
  gfSelf.height=fGetById(document,"popTable").offsetHeight;
}
}