//Calendar
var dragElem=null;

function posTop() {return typeof window.pageYOffset != 'undefined' ? window.pageYOffset:document.documentElement.scrollTop? document.documentElement.scrollTop: document.body.scrollTop?document.body.scrollTop:0;}
function posLeft() {return typeof window.pageXOffset != 'undefined' ? window.pageXOffset:document.documentElement.scrollLeft? document.documentElement.scrollLeft: document.body.scrollLeft?document.body.scrollLeft:0;}

var __CALENDAR_MONTHS__=["", "January", "February", "March", "April", "May", "June", "July", 
            "August", "September", "October", "November", "December"];
var __CALENDAR_SHORTS__=["", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", 
            "Aug", "Sept", "Oct", "Nov", "Dec"];
            
var calendars=new Array();
var calId=0;

function Calendar(func)
{
  this.daysIn=[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  this.month=-1;
  this.year=-1;
  this.day=-1;
  this.id=calId++;
  calendars[this.id]=this;
  this.div=null;
  this.table=null;
  this.currentDate=new Date();
  this.minYear=1950;
  this.maxYear=this.currentDate.getFullYear()+20;
  
  
  this.func=func;
}

function Calendar_Go(year, month)
{
  this.month=month;
  this.year=year;
  
  while(this.div.firstChild!=null) { this.div.removeChild(this.div.firstChild); }
  var calTbl=this.maketable(this.year, this.month);
  this.div.appendChild(calTbl);
}

function Calendar_Back()
{
  this.month--;
  if(this.month<1) 
  {
    this.month=12;
    this.year--;
  }
  
  while(this.div.firstChild!=null) { this.div.removeChild(this.div.firstChild); }
  var calTbl=this.maketable(this.year, this.month);
  this.div.appendChild(calTbl);
}

function Calendar_Forward()
{
  this.month++;
  if(this.month>12) 
  {
    this.month=1;
    this.year++;
  }
  
  while(this.div.firstChild!=null) { this.div.removeChild(this.div.firstChild); }
  var calTbl=this.maketable(this.year, this.month);
  this.div.appendChild(calTbl);
}

function Calendar_MakeTable(year, month, day)
{
  var calTbl=document.createElement("TABLE");
  this.table=calTbl;
  var tbod=document.createElement("TBODY");
  calTbl.appendChild(tbod);
  
  var tr;
  var td;
  var lnk;
  
  tr=document.createElement("TR");
  tbod.appendChild(tr);
  
  td=document.createElement("TD");
  tr.appendChild(td);
  td.colSpan=5;
  td.style.height="10px";
  td.style.lineHeight="10px";
  td.style.fontSize="10px";
  td.style.background="#79A310";
  lnk=document.createElement("A");
  lnk.style.color=td.style.background;
  lnk.style.display="block";
  lnk.className="drag";
  td.appendChild(lnk);
  lnk.href="";
  lnk.id="drag_"+this.id;
  lnk.ondrag=function() { return false; } 
  lnk.onmousedown=function(event) {
    if(event==null) event=window.event;
    var id=this.id.substring(this.id.lastIndexOf("_")+1);
    dragElem=calendars[id].div;
  }
  lnk.appendChild(document.createTextNode(""));
  
  td=document.createElement("TD");
  tr.appendChild(td);
  td.colSpan=2;
  td.style.height="10px";
  td.style.lineHeight="10px";
  td.style.fontSize="10px";
  td.style.background="#ff8822";
  lnk=document.createElement("A");
  td.appendChild(lnk);
  lnk.appendChild(document.createTextNode("close"));
  lnk.href="#";
  lnk.className="close";
  lnk.id="hide_"+this.id;
  lnk.onclick=function() {
    var id=this.id.substring(this.id.lastIndexOf("_")+1);
    var cal=calendars[id];
    if(cal!=null) cal.hide();
    return false;
  }
  
  tr=document.createElement("TR");
  tbod.appendChild(tr);
  
  td=document.createElement("TD");
  tr.appendChild(td);
  
  if(year>1950||month>1)
  {
    lnk=document.createElement("A");
    lnk.href="";
    lnk.style.textAlign="center";
    lnk.id="back_"+this.id;
    lnk.onclick=function()
    {
      var id=this.id.substring(this.id.lastIndexOf("_")+1);
      var cal=calendars[id];
      if(cal!=null) cal.gobck();
      return false;
    }
    lnk.ondblclick=lnk.onclick;
    lnk.appendChild(document.createTextNode("<"));
    td.appendChild(lnk);
  }
  
  td=document.createElement("TD");
  tr.appendChild(td);
  sel=document.createElement("SELECT");
  sel.id="month_"+this.id;
  for(var i=1; i<=12; i++)
  {
    var opt=document.createElement("option");
    opt.value=i;
    opt.text=__CALENDAR_SHORTS__[i];
    
    try
    {
      sel.add(opt, i);
    }
    catch(e) 
    {
      sel.add(opt, null);
    }
    if(i==this.month) opt.selected=true;
  }
  sel.onchange=function()
  {
    var id=this.id.substring(this.id.lastIndexOf("_")+1);
    var cal=calendars[id];
    if(cal!=null) cal.go(cal.year, this.options[this.selectedIndex].value);
  }
  td.appendChild(sel);
  
  sel=document.createElement("SELECT");
  sel.id="year_"+this.id;
  for(var i=1950; i<=this.maxYear; i++)
  {
    var opt=document.createElement("option");
    opt.value=i;
    opt.text=i;
    
    try
    {
      sel.add(opt, i);
    }
    catch(e) 
    {
      sel.add(opt, null);
    }
    if(i==this.year) opt.selected=true;
  }
  sel.onchange=function()
  {
    var id=this.id.substring(this.id.lastIndexOf("_")+1);
    var cal=calendars[id];
    if(cal!=null) cal.go(this.options[this.selectedIndex].value, cal.month);
  }
  td.appendChild(sel);
  //td.appendChild(document.createTextNode(__CALENDAR_SHORTS__month]+" "+year));
  td.style.textAlign="center";
  td.colSpan="5";
  
  td=document.createElement("TD");
  tr.appendChild(td);
  
  if(year<this.maxYear||month<12)
  {
    lnk=document.createElement("A");
    lnk.href="";
    lnk.style.textAlign="center";
    lnk.id="fwd_"+this.id;
    lnk.onclick=function()
    {
      var id=this.id.substring(this.id.lastIndexOf("_")+1);
      var cal=calendars[id];
      if(cal!=null) cal.gofwd();
      return false;
    }
    lnk.ondblclick=lnk.onclick;
    lnk.appendChild(document.createTextNode(">"));
    td.appendChild(lnk);
  }
  
  var firstDate=new Date();
  firstDate.setFullYear(year);
  firstDate.setMonth(month-1);
  firstDate.setDate(1);
  
  var dayOfWeek=firstDate.getDay();
  
  var totalDays=dayOfWeek+parseInt(this.daysIn[month]);
  if((totalDays%7)>0) totalDays+=7-(totalDays%7);
  
  for(var i=0; i<=totalDays; i++)
  {
    if((i%7)==0) 
    {
      tr=document.createElement("TR");
      tbod.appendChild(tr);
    }
    var cclass="normal";
    if(i<dayOfWeek||i>(dayOfWeek+this.daysIn[month]-1)) cclass="outside";
    //else if(year==this.currentDate.getFullYear()&&month==this.currentDate.getMonth()+1&&i==this.currentDate.getDate()) cclass="today";
    
    var td=document.createElement("TD");
    tr.appendChild(td);
    td.className=cclass;
    if((i-dayOfWeek+1)==day) td.style.border="solid #990000 1px";
    if(cclass!="outside") 
    {
      lnk=document.createElement("A");
      lnk.href="";
      lnk.id=year+"_"+month+"_"+(i-dayOfWeek+1);
      lnk.onclick=this.func;
      lnk.appendChild(document.createTextNode(i-dayOfWeek+1));
      td.appendChild(lnk);
    }
  }
  return calTbl;
}

function Calendar_Show(event, con, date)
{ 
  this.showXY(event.clientX+posLeft(), event.clientY+posTop(), con, date);
}

function Calendar_Show_XY(x, y, con, date) {
  for(var z in calendars) {
    if(calendars[z]!=this) {
      calendars[z].hide();
    }
  }
  var year=-1;
  var month=-1;
  var day=-1;
  if(date!=null)
  {
    var dspl=date.split("/");
    if(dspl.length<3)
    {
      var seed=this.currentDate;
      year=seed.getFullYear();
      month=seed.getMonth()+1;
      day=seed.getDate();
    }
    else
    {
      year=parseInt(dspl[0]);
      month=parseInt(dspl[1]);
      day=parseInt(dspl[2]);
    }
  }
  else
  {
    var seed=this.currentDate;
    if(seed!=null) {
      year=seed.getFullYear();
      month=seed.getMonth()+1;
      day=seed.getDate();
    }
  }
  if(con==null) con=document.body;
  
  this.month=month;
  this.year=year;
  this.day=day;

  if(((year%4)==0&&(year%100)>0)||(year%400)==0) this.daysIn[2]=29;
  else this.daysIn[2]=28;
  
  if(this.div!=null) this.div.parentNode.removeChild(this.div);
  
  calDiv=document.createElement("div");
  calDiv.style.zIndex=2;
  calDiv.className="calendar";
  calDiv.style.position="absolute";
  calDiv.style.background="#ffffff";
  calDiv.style.top=y+"px";
  calDiv.style.left=x+"px";
  
  calTbl=this.maketable(year, month, day);
  calDiv.appendChild(calTbl);
  this.div=calDiv;
  
  con.appendChild(calDiv);
}

function Calendar_Hide()
{
  if(this.div!=null) this.div.style.display="none";//parentNode.removeChild(this.div);
}

function pad(str, n, ch) {
  var rval=str;
  if(rval.length>n) {
    rval=rval.substring(0, n);
  } else {
    while(rval.length<n) {
      rval=ch+""+rval;
    }
  }
  return rval;
}

Calendar.prototype.show=Calendar_Show;
Calendar.prototype.showXY=Calendar_Show_XY;
Calendar.prototype.hide=Calendar_Hide;
Calendar.prototype.gobck=Calendar_Back;
Calendar.prototype.gofwd=Calendar_Forward;
Calendar.prototype.maketable=Calendar_MakeTable;
Calendar.prototype.go=Calendar_Go;

/*
document.onmousemove=function(event) {
  if(event==null) event=window.event;
  if(dragElem!=null)
  {
    dragElem.style.left=posLeft()+event.clientX-(dragElem.offsetWidth/2)+"px";
    dragElem.style.top=posTop()+event.clientY+"px";
  }
}
document.onmouseup=function(event) {
  dragElem=null;
}
document.ondrag=function() {
  return false;
}
*/