//the ajax xml object
var xmlhttp=null;
//the xml file that will be loaded into memory

//var toLoad = "";
//var toLoad = "/entertainment/calendar/2010_1.xml";
var ldate = new Date();
var thisYear = ldate.getFullYear()
var thisMonth = ldate.getMonth()+1
var nextMonth = ldate.getMonth()+2
thisMonth = thisMonth < 10 ? '0' + thisMonth : thisMonth;
nextMonth = nextMonth < 10 ? '0' + nextMonth : nextMonth;

var toLoad =  "/Event-Calendar/Events/"+thisYear+"_"+thisMonth+".xml";
//alert(toLoad);
var xmlDoc;
//the string that gets printed to the dynamic div
var strOutput = "";
var lBound = 0;
var uBound = 9;
var epm = 10;
var pages = 0;
var activePage = 1;
var paginate = "";
var prevDay = 0;
var prevMonth = 0;
var prevYear;

var lookHere = "";
var months = new Array("January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November","December");
var days = new Array("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31]
//this method sets up the xml object to work with the javascript depending on the browser
function sendRequest()
{
 //setting up the firefox 1.5 ,safari 1.3, and opera 8.5 way
 if (window.XMLHttpRequest)
  {
   xmlhttp=new XMLHttpRequest();
  }
  //if that fails try set up for IE
 else if (window.ActiveXObject)
  {
   try
   {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   }
   catch(e)
   {
    try
    {
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e)
    {
     xmlhttp = false;
    }
   }
  }
  //if the ajax object was set up properly then download and open the xml file in the 'toLoad' variable
  if (xmlhttp)
   {
    //setting up the eventhandler
    xmlhttp.onreadystatechange=onReadyState;
    //opening the xml file
    xmlhttp.open("GET", toLoad, true);
    //no need to send anything back to the server
    xmlhttp.send(null);
   }
}
function onReadyState()
{
 if (xmlhttp.readyState==4)
  {
   if (xmlhttp.status==200)
    {
     xmlDoc = xmlhttp.responseXML;
     try
     {
      var query = window.location.search.substring(1);
      var pair = query.split("date=");
      var rawDate = pair[1].split("/");
      reloadXML(rawDate[0]+"_"+rawDate[1]+".xml");
      //dayView(rawDate[0],rawDate[1],rawDate[2]);
      monthView(ldate.getMonth()+1, ldate.getFullYear())
      drawCal(rawDate[1],rawDate[0]);
     }
     catch(e)
     {
      var today = new Date();
      var year = today.getFullYear();
      var month = today.getMonth()+1;
      var day = today.getDate();
      //dayView(year,month,day);
      monthView(ldate.getMonth()+1, ldate.getFullYear())
      drawCal(month,year,0);
     }
    }
  }
}
function dayView(year,month,day)
{
 if(dayViewer(year,month,day)==false)
  {
   //drawError(year,month,day);
  }
}
function dayViewer(year,month,day)
{
 if(xmlDoc == null)
 return false;
 var dateClicked = new Date();
 dateClicked.setFullYear(year,month-1,day);
 var eventTitles = xmlDoc.getElementsByTagName("title");
 var startDates  = xmlDoc.getElementsByTagName("startDate");
 var endDates    = xmlDoc.getElementsByTagName("endDate");
 var descripts   = xmlDoc.getElementsByTagName("description");
 var locs        = xmlDoc.getElementsByTagName("location");
 var sites       = xmlDoc.getElementsByTagName("website");
 var strOutput   = "";
 var count = 0;
 for (var i=0; i < eventTitles.length; i++)
 {
  var syear  = startDates[i].attributes.getNamedItem("year").value;
  var smonth = startDates[i].attributes.getNamedItem("month").value;
  var sday   = startDates[i].attributes.getNamedItem("day").value;
  var eyear  = endDates[i].attributes.getNamedItem("year").value;
  var emonth = endDates[i].attributes.getNamedItem("month").value;
  var eday   = endDates[i].attributes.getNamedItem("day").value;           
  var endDate = new Date();
  endDate.setFullYear(eyear,emonth-1,eday);
  var startDate = new Date();
  startDate.setFullYear(syear,smonth-1,sday);
  if(startDate < dateClicked && dateClicked < endDate || syear == year && smonth == month && sday == day || eyear == year && emonth == month && eday == day)
  {
   if(lBound <= count && count <= uBound)
    strOutput += generateCalData(eventTitles,startDates,endDates,descripts,locs,sites,i);
    count++;
  }
 }
 pages = Math.ceil(count/epm);
/* var results = "";
 results = generateResults(dateClicked,count,"day");
 strOutput = results + strOutput;
 if(pages > 1)
  strOutput += '<table class="resultsHeader bottom" cellpadding="0" cellspacing="0"><tr><td class="pagination" align="right"><ul>'+paginate+'</ul></td></tr></table>';
  document.getElementById('divContent').innerHTML=strOutput;*/
}
function monthView(month,year)
{
 var strOutput ="";
 var dateClicked = new Date();
 dateClicked.setFullYear(year,month-1,1);
 var eventTitles = xmlDoc.getElementsByTagName("title");
 var startDates  = xmlDoc.getElementsByTagName("startDate");
 var endDates    = xmlDoc.getElementsByTagName("endDate");
 var descripts   = xmlDoc.getElementsByTagName("description");
 var locs        = xmlDoc.getElementsByTagName("location");
 var sites       = xmlDoc.getElementsByTagName("website");
 var count = 0;
 var write = 1;
 //for (i =0; i < eventTitles.length; i++)
 for (i =0; i < 3; i++)
 {
  var syear  = startDates[i].attributes.getNamedItem("year").value;
  var smonth = startDates[i].attributes.getNamedItem("month").value;
  var sday   = startDates[i].attributes.getNamedItem("day").value;
  var eyear  = endDates[i].attributes.getNamedItem("year").value;
  var emonth = endDates[i].attributes.getNamedItem("month").value;
  var eday   = endDates[i].attributes.getNamedItem("day").value;

  var title = eventTitles[i].firstChild.nodeValue;
  var url   = eventTitles[i].attributes.getNamedItem("href").value;
  var sDate =  startDates[i].firstChild.nodeValue;


  var endDate = new Date();
  endDate.setFullYear(eyear,emonth-1,eday);
  var startDate = new Date();
  startDate.setFullYear(syear,smonth-1,sday);
  if(syear < eyear && eyear <= year)
   {
    if(emonth >= month)
     {
      if(lBound <= count && count <= uBound)
      {
       strOutput += '<a href="'+url+'"><span class="gb7">'+sDate+' </span>'+title+'</a>';
       //generateCalData(eventTitles,startDates,endDates,descripts,locs,sites,i);
      }
      count++;
     }
   }
  else if((smonth < month) && (month < emonth)  || (smonth == month && syear == year) || emonth == month && eyear == year )
   {
    if(lBound <= count && count <= uBound)
     strOutput += '<a href="'+url+'"><span class="gb7">'+sDate+' </span>'+title+'</a>';//generateCalData(eventTitles,startDates,endDates,descripts,locs,sites,i);
     count++;
   }
   if (i != 2) strOutput += '<br />';
 }
 pages = Math.ceil(count/epm);
 var results = "";
 //alert("dclicked: "+dateClicked);
 count = count > 3 ? 3 : count;
 //results = generateResults(dateClicked,count,"month");
 //strOutput = results + strOutput;
 //document.getElementById('calEvents').innerHTML=strOutput;
}
function generateCalData(eventTitles,startDates,endDates,descripts,locs,sites,i)
{
 var strOutput = "";
 var title = eventTitles[i].firstChild.nodeValue;
 var url   = eventTitles[i].attributes.getNamedItem("href").value;
 var sDate =  startDates[i].firstChild.nodeValue;
 var descript =descripts[i].firstChild.nodeValue;
 var eSearch = descripts[i].attributes.getNamedItem("eventUrl").value;
 var eventype ="";//descripts[i].attributes.getNamedItem("eventType").value;
 descript = filterMe(descript);
 if(descript == "NODESCRIPTION")
  descript = "";
  var website = sites[i].attributes.getNamedItem("href").value;
  //var website = "test";
  var webname = sites[i].attributes.getNamedItem("hname").value;
  var name = locs[i].attributes.getNamedItem("loc").value;
  var addy = locs[i].attributes.getNamedItem("addy").value;
  var city = locs[i].attributes.getNamedItem("city").value;
  var fone = locs[i].attributes.getNamedItem("phone").value;
  strOutput += '<div class="guideItem">';
  strOutput += '<table class ="guideItemName" cellpadding="0" cellspacing="0">';
  strOutput += '<tr>';
  strOutput += '<td><span class="guideItemLabel"><a href="'+ eSearch +'">' + eventype + '</a>' + '</span>' + '<br />';
  strOutput += '<h2><a href="' + url + '">' + title + '</a></h2></td>';
  strOutput += '<td align="right"><strong>' + sDate + '</strong></td>';
  strOutput += '</tr></table>';
  strOutput += '<table cellspacing="0" cellpadding="0" border="0" class=guideItemListing">';
  strOutput += '<tr valign="top">';
  strOutput += '<td class="abstract">';
  strOutput += descript;
  strOutput += '</td></tr></table>';
  strOutput += '<div class="contactInfo">';
  strOutput += '<a href="' + website + '">' + webname + '</a><br />';
  strOutput += name +'<br />';
  strOutput += '<address>'+ addy;
  if(addy != "") 
  strOutput += ', ';
  strOutput += city;
  if(city != "") 
  strOutput += '; ';
  strOutput +=  fone +'</address>';
  strOutput += '</div>';
  strOutput += "</div>";
  return strOutput;
}
function generateResults(dateClicked,count,type)
{
 var results = "";
 paginate = "";
 results += '<table class="resultsHeader" cellpadding="0" cellspacing="0">';
 results += '<tr>';
 if(type == "day")
  {
   results += '<td valign="baseline"><h3>'+count+' events found for <BR /> ' + getDay(dateClicked.getDay()) +" "+getMonth(dateClicked.getMonth())+ " " +dateClicked.getDate() +', '+dateClicked.getFullYear() + '</h3></td>';
  }
  else if (type == "month")
  {
   results += '<td valign="baseline"><h3>'+count+' events found for ' +getMonth(dateClicked.getMonth())+ '</h3></td>';
  }
  results += '<td valign="baseline" class="pageToolList" align="right">';
  results += '<ul><li><a href="/code/26171.asp">E-MAIL</a></li>';
  results += '<li><a href="/entertainment/calendar/default.asp?action=print">PRINT</a></li>';
  if(type == "month")
  {
   if(pages > 1)
   {
    results += '<td valign="baseline" class="pagination" align="right"><ul>';
    if(activePage > 1)
     paginate += '<li class="next"><a href="javascript:turnPage(0,'+(dateClicked.getMonth()+1)+','+dateClicked.getFullYear()+','+(activePage-1)+')">&#xAB; Previous</a></li>';
     for(var i = 1; i <= pages; i++)
     {
      if(i != activePage)
       paginate += '<li><a href="javascript:turnPage(0,'+(dateClicked.getMonth()+1)+','+dateClicked.getFullYear()+','+i+')">'+i+'</a></li>';
      else
       paginate += '<li>'+i+'</li>';
     }
     if(activePage != pages)
      {
       var next = activePage + 1;
       paginate += '<li class="next"><a href="javascript:turnPage(0,'+(dateClicked.getMonth()+1)+','+dateClicked.getFullYear()+','+next+')">Next &#xBB;</a></li>';
      }
      var temp = paginate + '</ul></td></tr></table>';
      results += temp;
   }
   else
    results += '</ul></td></tr></table>';
  }
 else
  if(pages > 1)
   {
    results += '<td valign="baseline" class="pagination" align="right"><ul>';
    if(activePage > 1)
     paginate += '<li class="next"><a href="javascript:turnPage('+dateClicked.getDate()+','+(dateClicked.getMonth()+1)+','+dateClicked.getFullYear()+','+(activePage-1)+')">&#xAB; Previous</a></li>';
     for(var i = 1; i <= pages; i++)
     {
      if(i != activePage)
       paginate += '<li><a href="javascript:turnPage('+dateClicked.getDate()+','+(dateClicked.getMonth()+1)+','+dateClicked.getFullYear()+','+i+')">'+i+'</a></li>';
      else
       paginate += '<li>'+i+'</li>';
     }
     if(activePage != pages)
      {
       var next = activePage + 1;
       paginate += '<li class="next"><a href="javascript:turnPage('+dateClicked.getDate()+','+(dateClicked.getMonth()+1)+','+dateClicked.getFullYear()+','+next+')">Next &#xBB;</a></li>';
      }
      var temp = paginate + '</ul></td></tr></table>';
      results += temp;
   }
  else
   results += '</ul></td></tr></table>';
   return results;
 }
 function turnPage(day,month,year,pageNum)
 {
  activePage = pageNum;
  uBound = (pageNum*epm)-1;
  lBound = uBound - 9;
  if(day != 0)
   dayView(year,month,day);
  else
   monthView(month,year);
 }
 function resetBounds(month,year,drawMonth)
 {
  activePage = 1;
  lBound = 0;
  uBound = epm - 1;
  // count = 0;
  if(drawMonth)
   monthView(month,year);
 }
 function handleDay(year,month,day)
 {
  if(year == prevYear && month == prevMonth && day == prevDay)
   {
    resetBounds(month,year,0);
    dayView(year,month,day);
   }
  else
   {
    resetBounds(month,year,0);
    dayView(year,month,day);
    prevYear = year;
    prevMonth = month;
    prevDay = day;
   }
 }
 function setBounds(lbound,ubound,month,year)
 {
  lBound = lbound;
  uBound = ubound;
  pages = 0;
  monthView(month,year);
 }
 function loadMonth(month,year)
 {
  reloadXML(year+"_"+month+".xml");
 }
 function drawMonth(month,year,drawFirst)
 {
  document.getElementById('calendar').innerHTML = "Loading. . .";
  drawCal(month,year,drawFirst);
 }
 //This function draws the calender for the given month and year
 function drawCal(month,year,drawFirst)
 {
  //these 4 values hold the next and previous month and year with respect
  //to the provided month and year.
  var pMonth;
  var nMonth;
  var pYear = year;
  var nYear = year;
  //checking for calendar wrap around one year behind
  if(month != 1)
   pMonth = month-1;
  else
   {
    pMonth = 12;
    pYear--;      
   }      
   //checking for calendar wrap around one year before
   if(month != 12)
    {
     nMonth = month;
      nMonth++;
    }
   else
    {
     nMonth=1
     nYear++;
    }
   //generating the calendar header
   var calCode = "";
   calCode += '<table border="0" cellpadding="1" cellspacing="0" width="100%">';
   calCode += '<tr>';
   calCode += '<td width="20" align="left" valign="middle"></td>';
   calCode += '<td colspan="5" align="CENTER" valign="MIDDLE"><a href="/monthly/'+thisYear+'/'+thisMonth+'.asp" class="calday" style="font-size: 11px;">'+getMonth(month-1)+' '+thisYear+'</a> </td>';
   calCode += '<td width="20" align="RIGHT" valign="MIDDLE"><a href="/monthly/'+thisYear+'/'+nextMonth+'.asp"><img src="/images/cal_next.gif" width="10" height="15" border="0" alt="Next Month" /></a> </td>';
   calCode += '</tr>';

   var daysThisMonth = getDaysInMonth(month,year);
   var weekDay = 0;
   var lastDay = getDaysInMonth(pMonth,pYear);
   //this loop is used to create the calendar
   for(var i = 1; i<=daysThisMonth; i++)
   {
    var currDate = new Date();
    currDate.setFullYear(year,month-1,i);
    day = currDate.getDay();
    //starting a new week
    if(weekDay == 7)
     {
      weekDay=0;
      calCode += '</tr><tr>';
     }
     //checking if the current weekDay in the loop matches with the current weekday of the month
     //if so print that day, else we print the previous month's date
     if(day==weekDay)
      {
       if(checkForEvent(year,month,currDate.getDate()))
        {
         calCode += '<td class="calday" align="left" width="28" height="20" valign="top"><a href="/monthly/'+thisYear+'/'+thisMonth+'.asp" class="calday"><b>'+i+'</b></a> </td>';
        }
       else
        {
         calCode += '<td class="calday" align="left" width="28" height="20" valign="top"><a href="/monthly/'+thisYear+'/'+thisMonth+'.asp" class="calday"><b>'+i+'</b></a> </td>';
        }
      }
     else
      {
       var dDay = weekDay;
       dDay++;
       var lastMonthDay = lastDay-(day-dDay);
       //if(checkForEvent(pYear,pMonth,lastMonthDay))
       //{
       //   calCode += '<td class="nextMonth"><a href="javascript:dayView('+pYear+','+pMonth+','+lastMonthDay+')">'+lastMonthDay+'</a></td>';
       //}
       //else
       //{
         calCode += '<td class="calday" align="left" width="28" height="20" valign="top">&#160; </td>';
       //}
       i--;
      }
      //checking if it's the last day of the month, and if there is an incomplete
      //week that needs to be filled with the first j days of the next month
      if(i==daysThisMonth && weekDay!=6)
       {  
        var j = 1;
        while(weekDay!=6)
        {
         //if(checkForEvent(nYear,nMonth,j))
         //{
         //   calCode += '<td class="nextMonth"><a href="javascript:dayView('+nYear+','+nMonth+','+j+')">'+j+'</a></td>';
         //}
         //else
         //{
          calCode += '<td class="calday" align="left" width="28" height="20" valign="top">&#160; </td>';
         //}
         weekDay++;
         j++;
        }
       }
       weekDay++;
     }
     calCode += '</table>';
     //calCode += '<br /><div class="moreLink"><NOBR><a href="/entertainment/34235.asp">SUBMIT YOUR EVENT &#xBB;</a></NOBR></div>';
     //calCode += '<br /><br />Sponsored by: <br /><img src="/images/graves_164px.gif">';
     document.getElementById('calendar').innerHTML = calCode;
     if(drawFirst == 1)
     dayView(year,month,1);
   }
   function drawError(year,month,day)
   {
    date = new Date();
    date.setFullYear(year,month-1,day);
    var results = "";
    results += '<table class="resultsHeader" cellpadding="0" cellspacing="0">';
    results += '<tr>';
    results += '<td valign="baseline"><h3>0 events found for <BR /> ' + getDay(date.getDay()) +" "+getMonth(month-1)+ " " +day +', '+year + '</h3></td>';
    //results += '<td valign="baseline"><h3>0 events found for ' +getMonth(month-1)+ '</h3></td>';
    results += '<td valign="baseline" class="pageToolList" align="right">';
    results += '<ul><li><a href="/code/26171.asp">E-MAIL</a></li>';
    results += '<li><a href="/entertainment/calendar/default.asp?action=print">PRINT</a></li>';
    results += '</td></ul></tr></table>';
    //document.getElementById('divContent').innerHTML = results;
   }
   function checkForEvent(year,month,day)
   {
    if(xmlDoc == null)
    return false;
    var startDates  = xmlDoc.getElementsByTagName("startDate");
    var endDates    = xmlDoc.getElementsByTagName("endDate");
    for(var i = 0; i < startDates.length; i++)
    {
     var syear  = startDates[i].attributes.getNamedItem("year").value;
     var smonth = startDates[i].attributes.getNamedItem("month").value;
     var sday   = startDates[i].attributes.getNamedItem("day").value;
     var eyear  = endDates[i].attributes.getNamedItem("year").value;
     var emonth = endDates[i].attributes.getNamedItem("month").value;
     var eday   = endDates[i].attributes.getNamedItem("day").value;
     var startDate = new Date();
     var endDate = new Date();
     var checkDate = new Date();
     startDate.setFullYear(syear,smonth-1,sday);
     endDate.setFullYear(eyear,emonth-1,eday);
     checkDate.setFullYear(year,month-1,day);
     if(syear == year && smonth == month && sday == day)
      return true;
     else if(eyear == year && emonth == month && eday == day)
      return true;
     else if(startDate < checkDate && checkDate < endDate)
      return true;
    }
   return false;
  }
  //this function returns the name of the month given a number
  function getMonth(month)
  {   
   return months[month];
  }
  //this function returns the name of the weekday given a number
  function getDay(day)
  {
   return days[day];
  }
  //this function retrieves the number of days in a month given an month and a year
  //it also takes into account a leap year.
  function getDaysInMonth(month,year)
  {
   if ((month-1==1)&&(year%4==0)&&((year%100!=0)||(year%400==0)))
   {
    return 29;
   }
   else
   {
    return daysInMonth[month-1];
   }
  }
function filterMe(txt)
{
 if(txt != null)
 {
  txt = txt.replace(/&gt;/g,">");
  txt = txt.replace(/&lt;/g,"<");
  txt = txt.replace(/&amp;/g,"&");
  return txt;
 }
}
function reloadXML(url)
{  
 if (xmlhttp!=null)
 {
  xmlhttp.onreadystatechange=state_Change;
  xmlhttp.open("GET",url,false);
  xmlhttp.send(null);
 }
 else
 {
  alert("Your browser does not support XMLHTTP.");
 }
 if (xmlhttp.status==200)
 {
  xmlDoc = null;
  xmlDoc = xmlhttp.responseXML;
  return true;
 }
 else
 {
  //alert("Problem retrieving XML data");
  return false;
 }
}
function state_Change()
{
 if (xmlhttp.readyState==4)
 {
 }
}