// calendar.js  Dale Frye
var MINHEIGHT = 100;
var HEADER_HEIGHT = 50;


var displayDateInfo; // point this to function to populate a date (yyyy-mm-dd)
var getCalendarInfo; // point this to function to retrieve data for month (yyyy-mm)
var calendarDate = new Date();
var reload = false;
var ELEMENT_NODE = 1;
function ppf(adate){  //PastPresentFuture -1,0,1
  var tdate = new Date();
  var thash = tdate.getFullYear*1000 + tdate.getMonth()*100 + tdate.getDay;
  var ahash = adate.getFullYear*1000 + adate.getMonth()*100 + adate.getDay;
  return(thash == ahash?0:(thash > ahash?-1:1));
}

var mainCalBaseDspObj;
var mainCalYear;
var mainCalMonth;
function loadMainCalendar(theDate){
  mainCalBaseDspObj = document.getElementById("calendar");
  calendarDate = new Date(theDate);
  var aDate = new Date(theDate);
  aDate.setDate(1);
  var themonth = aDate.getMonth();
  mainCalMonth = themonth;
  var theyear = aDate.getFullYear();
  mainCalYear = theyear;
  getXMLCalendar(theyear+"-"+(themonth<9?"0"+(themonth+1):themonth+1));
}

function _contLoadMainCal(){
  document.getElementById("monthsel").value = mainCalMonth+1;
  var yearsel = document.getElementById("yearsel");
  yearsel.selectedIndex = 0;
  for(var j=0; j<yearsel.length;j++){
   if(yearsel.options[j].text == mainCalYear){ 
    yearsel.selectedIndex = j;
   }
  }
  MINHEIGHT = 100;
  HEADER_HEIGHT = 50;

  _loadCalendar(mainCalYear,mainCalMonth,mainCalBaseDspObj);
}

function _loadCalendar(theyear,themonth,baseCalDspObj){
  var cheight = 0;
  var aDate = new Date(theyear,themonth,1);
  var wd = aDate.getDay();
  aDate.setDate(31);
  var lastday = (aDate.getMonth() == themonth ? 31: 31 - aDate.getDate())
  var adiv,adivid,rawid,innerdiv,dateblk,textblk,cweekday,cweek,maxheight,thedatestr;
  var weekarray = new Array(7);
  var weeks = new Array(6);
  var alldivs = baseCalDspObj.getElementsByTagName("div");
  for(var idiv = 0; idiv < alldivs.length; idiv++){
    adiv = alldivs[idiv];
    if(adiv.className.indexOf("calday")>-1){
      rawid = parseInt(adiv.id.substring(3));
      cweekday = (rawid-1) % 7;
      cweek = parseInt((rawid-1)/7);
      adivid = rawid-wd;
      innerdiv = getChildElement(adiv,0);
      dateblk = getChildElement(innerdiv,0);
      textblk = getChildElement(innerdiv,1);

      if(adivid < 1 || adivid > lastday){
       adiv.className = "calday caldayblank";
       dateblk.innerHTML = " ";
       if(textblk) textblk.innerHTML = " ";
       if(cweekday==0 && cweek > 0){
         adiv.parentNode.className = "calweek calweekblank";
       }
      } else {
       adiv.className = "calday";
       dateblk.innerHTML = ""+adivid;
       thedatestr = theyear+"-"+(themonth<9 ? "0"+(themonth+1):themonth+1)+"-"+(adivid<10 ? "0"+adivid:adivid);
// Bug in IE6 innerHTML does not know &apos; so it encodes the & to &amp;
// The following replace function is a workaround for this problem
       if(textblk) textblk.innerHTML = (displayDateInfo ? displayDateInfo(thedatestr).replace("&apos;","'") : "");
       adiv.parentNode.className = "calweek";
      }
      maxheight = (cweekday == 0 ? MINHEIGHT: maxheight);
      maxheight = Math.max(maxheight,innerdiv.offsetHeight)
      weekarray[cweekday] = adiv;
      if(cweekday==6){
       if(adiv.parentNode.className!="calweek calweekblank")cheight += maxheight;  
       adiv.parentNode.style.height = maxheight+"px";
       for(var k=0;k < weekarray.length;k++) weekarray[k].style.height = maxheight+"px";
       weeks[cweek] = adiv.parentNode;
      }
    }
  }
  baseCalDspObj.style.height=(cheight+HEADER_HEIGHT)+"px";
  
}
function getChildElement(parent,index){
  var children = parent.childNodes;
  var ct = 0;
  var child;
  for(var i=0; i < children.length; i++){
   child = children[i];
   if(child.nodeType==ELEMENT_NODE){
    if(index==ct) return child;
    ct++;
   }
  }
 return null;
}

function setCalendarMonth(val){
  calendarDate.setMonth(parseInt(val)-1);
  loadMainCalendar(calendarDate);
}
function setCalendarYear(val){
  calendarDate.setYear(val);
  loadMainCalendar(calendarDate);
}
function nextMonth(){
  calendarDate.setMonth(calendarDate.getMonth()+1);
  loadMainCalendar(calendarDate);
}
function prevMonth(){
  calendarDate.setMonth(calendarDate.getMonth()-1);
  loadMainCalendar(calendarDate);
}

// the following require xmlrequest.js
var eventslist;
function dispXMLDateInfo(thedate){
  var outstr = "";
  var startdate = "";
  var stopdate = "";

  var dayevents = new Array();
  for(var i=0; i < eventslist.length; i++){
    startdate = eventslist[i].getElementsByTagName(tagprefix+'startdate')[0].firstChild.nodeValue;
    if (startdate <= thedate){
      stopdate = eventslist[i].getElementsByTagName(tagprefix+'stopdate')[0].firstChild.nodeValue;
      if(stopdate >= thedate){
        var desc = "--EMPTY EVENT--";
        var descobj =  eventslist[i].getElementsByTagName(tagprefix+'description')[0].firstChild;
        if (descobj) desc = descobj.nodeValue;
        if(outstr ==""){
          outstr=desc;
        } else {
          outstr=outstr+"<hr>"+desc;
        }
      }
    }
  }
  return outstr;
}

displayDateInfo = dispXMLDateInfo;

function getXMLCalendar(thedate){
  docLoadDone = false;
  partialLoad = false;
  eventslist = undefined;
  xmlDocComplete = docComplete;
  loadXMLDoc("pagedata/calendarevents.xml?displaydate="+thedate,null);
}
var tagprefix="gs:";
function docComplete(){
  if(req.status==200){
    eventslist = req.responseXML.lastChild.getElementsByTagName('gs:event');
    tagprefix="gs:";
    if(eventslist.length ==0){
     eventslist = req.responseXML.lastChild.getElementsByTagName('event');
     tagprefix="";
    }

   _contLoadMainCal();
  }
}
