d=document;
d.write('<style type="text/css"> html { overflow-y: scroll; } </style>');

function MM_findObj(n,d)
{ //v4.01
 var p,i,x;
 if(!d) d=document;
 if((p=n.indexOf("?"))>0&&parent.frames.length)
 {
  d=parent.frames[n.substring(p+1)].document;
  n=n.substring(0,p);
 }
 if(!(x=d[n])&&d.all) x=d.all[n];
 for(i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
 for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
 if(!x && d.getElementById) x=d.getElementById(n);
 return x;
}

// Anti-spam e-mail script...
function email(name,domain,subj,mode)
{
 addr=name+"@"+domain;
 addrd=(mode=='short')?('email&nbsp;'+name):addr;
 subject=(subj!='')?('?subject='+subj):'';
 d.write('<a href="mailto:'+addr+subject+'">'+addrd+'</a>');
}

// AJAX functions...

function createRequestObject()
{
 var ro;
 var browser=navigator.appName;
 if(browser=="Microsoft Internet Explorer") ro=new ActiveXObject("Microsoft.XMLHTTP");
 else ro=new XMLHttpRequest();
 return ro;
}

function ajax(Method, URL, ID, p1, p2)
{
 httpObject=createRequestObject();
 if(httpObject!=null)
 {
  Method=Method.toUpperCase();
  params='p1='+p1+'&p2='+encodeURIComponent(p2);
  if(Method!='POST') URL+='?'+params+'&ms='+new Date().getTime();
  httpObject.open(Method,URL,true);
  if(Method=='POST')
  {
   httpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   httpObject.setRequestHeader("Content-length", params.length);
   httpObject.setRequestHeader("Connection", "close");
  }
  var updateID=ID;
  httpObject.onreadystatechange=function()
  {
   if(httpObject.readyState<4) d.getElementById(updateID).innerHTML = '<img style="display:block;margin:0 auto" src="/phpimg.php?img=loading.gif" alt="" />';
   else if(httpObject.readyState==4) d.getElementById(updateID).innerHTML=httpObject.responseText;
  }
  if(Method=='POST') httpObject.send(params);
  else httpObject.send(null);
 }
} 

// Calendar functions...

function drawCalendar(phpday,phpmonth,phpyear,xdval,xmval,xyval)
{
 d.write('<div id="calHolder">&nbsp;</div>');
 setCalendar(phpday,phpmonth,phpyear,xdval,xmval,xyval);
}

function setCalendar(dval,mval,yval,xdval,xmval,xyval)
{
// dval, mval and yval comprise the date being viewed
// xdval, xmval and xyval comprise the current date as provided by PHP
 dA=new Array('Su','M','Tu','W','Th','F','Sa');
// mnA=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
 mnA=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
 dT=new Date();
 offset=(dT.getYear()<xyval)?1900:0;
 dT.setDate(1); dT.setHours(0); dT.setMinutes(0); dT.setSeconds(0); dT.setMonth(mval-1); dT.setYear(yval);
// dT is now the very beginning of the requested month & year
 ep=dT.getTime();
 stD=dT.getDay();
 stM=dT.getMonth()+1;
 stY=dT.getYear()+offset;
 sbackM=(stM<=1)?12:stM-1;
 sbackY=(stM<=1)?stY-1:stY;
 sfwdM=(stM>=12)?1:stM+1;
 sfwdY=(stM>=12)?stY+1:stY;
// Create the month nav
 out='<table id="calnav" cellpadding="0" cellspacing="0" border="0" width="161">'
+'<tr>'
+'<td><a href="javascript:setCalendar(0, '+sbackM+', '+sbackY+', '+xdval+', '+xmval+', '+xyval+')">past</a></td>'
+'<td width="90%">'+mnA[stM-1]+' '+stY+'</td>'
+'<td><a href="javascript:setCalendar(0, '+sfwdM+', '+sfwdY+', '+xdval+', '+xmval+', '+xyval+')">next</a></td>'
+'</tr>'
+'</table>';
// Create the calendar for the requested month
 out+='<table id="calmain" cellpadding="0" cellspacing="0" border="0" width="161"><tr>';
 ws=1; // 0 for week starts Sunday, 1 for week starts Monday etc.
 for(x=ws;x<(ws+7);x++) out+='<td class="calhead" width="23">'+dA[x%7]+'</td>';
 out+='</tr><tr>';
 n=ep-(86400000*((7+stD-ws)%7));
 nD=new Date(n);
// n and nD have their initial values set to either the Sunday or Monday immediately preceeding the beginning of the month
 yat=0;
 tmpA=0;
 for(x=1;(x<43 && yat<2);x++)
 {
  w=(nD.getDay()+1-ws)%7;
  t=nD.getDate();
  m=nD.getMonth()+1;
  y=nD.getYear()+1900;
  if(m==stM) yat=1; // Now we are in the current month
  if(yat>0 && m!=stM && w==1) yat=2; // Now we have tripped over to the next month
  s=(m==stM)?t:''; // Only show dates for the current month
  tSt=''; // Set up the style
  if(s==xdval && m==xmval && y==xyval) tSt=' class="calnow"';
  else if(dval && s==dval) tSt=' class="calselected"';
  if(isFinite(w) && tmpA != w)
  {
   if(yat<2)
   {
    out+='<td width="23">';
    linkok=(stY>xyval || (s>0 && stM>=xmval && stY>=xyval) || (s>xdval && stM==xmval-1 && stY>=xyval))?true:false;
    if(s==dval && s!=xdval) linkok=false;
    if(linkok) out+='<a href="/Events.php?d='+s+'&m='+stM+'&y='+stY+'"'+tSt+'>';
    else out+='<span'+tSt+'>';
    out+=s;
    if(linkok) out+='</a>';
    else out+='</span>';
    out+='</td>';
   }
   tmpA=w;
   if(w==0) out+='</tr><tr>';
  }
  n+=86400000;
  nD=new Date(n);
 }
 out+='</tr></table>';
 if((xobj=MM_findObj('calHolder'))!=null) xobj.innerHTML=out;
}
