/*
	Ajax Include File
*/

function getXmlHttpRequestObject()
{
	if (window.XMLHttpRequest)
	{
		return new XMLHttpRequest(); //Good Browser
	}
	else if(window.ActiveXObject)
	{
		return new ActiveXObject("Microsoft.XMLHTTP"); //IE
	}
	else
	{
		alert("Please update to a Web 2.0 compliant browser like Firefox.");
	}
}			

var receiveReq = getXmlHttpRequestObject();
var qNum;

function getAnswer(num)
{
	qNum = num;
	if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		receiveReq.open("GET", "/programs/phd/faq/answers/answer"+num+".txt", true);
		receiveReq.onreadystatechange = handleGetAnswer;
		receiveReq.send(null);
	}			
}

var answerOpened = new Array(21);

function handleGetAnswer()
{
	if (receiveReq.readyState == 4)
	{
		if(!answerOpened[qNum-1])
		{
			document.getElementById("faqAnswer"+qNum).innerHTML = receiveReq.responseText;
			answerOpened[qNum-1] = true;
		}
		else
		{
			document.getElementById("faqAnswer"+qNum).innerHTML = "";
			answerOpened[qNum-1] = false;
		}
	}
}










function getDateInfo(num)
{
	qNum = num;
	if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		receiveReq.open("GET", "/programs/phd/calendar/dates/dates.xml", true);
		receiveReq.onreadystatechange = handleGetDateInfo;
		receiveReq.send(null);
	}
}

//Get The Day
var now = new Date();
var monthNames = new Array(
"January","February","March","April","May","June","July",
"August","September","October","November","December");

function handleGetDateInfo()
{
  if (receiveReq.readyState == 4)
  {
    document.getElementById("theSelectedDate").innerHTML = monthNames[currentMonth]+" "+qNum;
    if(currentMonth == now.getMonth() && currentYear == now.getFullYear() && qNum == now.getDate())
    {
      document.getElementById("theSelectedInfo").innerHTML = "Today";
    }
    else
    {
      document.getElementById("theSelectedInfo").innerHTML = getArrayInfo(qNum);
    }
  }
}

/** HIDE JAVASCRIPT FUNCTION CALLED IN STATUS **/
function hideStatus()
{
  window.status = "";
  return true;
}






/*************
* Calendar Functions
*************/

var currentMonth = now.getMonth();
var currentYear = now.getFullYear();
var tempDate = new Date(currentYear, currentMonth-1, 1);
var startDay = tempDate.getDay();
var impDates;
var impDescrip;
var monCounter = 0;

function calLeft()
{
	if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		receiveReq.open("GET", "/programs/phd/calendar/dates/dates.xml", true);
		lastMonth();
		receiveReq.onreadystatechange = handleCal;
		receiveReq.send(null);
	}
}

function handleCal()
{
	if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		document.getElementById("monthYear").innerHTML = monthNames[currentMonth] + " " + currentYear;
		document.getElementById("calGrid").innerHTML = makeCalendar();
	}
}

function calRight()
{
	if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		receiveReq.open("GET", "/programs/phd/calendar/dates/dates.xml", true);
		nextMonth();
		receiveReq.onreadystatechange = handleCal;
		receiveReq.send(null);
	}
}

function nextMonth()
{
  if(++monCounter > 7)
  {
    monCounter = 7;
    return;
  }
  currentMonth++;
  if(currentMonth > 11)
  {
    currentMonth = 0;
    currentYear++;
  }
  updateStartDay();
  updateXML();
}

function lastMonth()
{
  if(--monCounter < -2)
  {
    monCounter = -2;
    return;
  }
  currentMonth--;
  if(currentMonth < 0)
  {
    currentMonth = 11;
    currentYear--;
  }
  updateStartDay();
  updateXML();
}

function updateStartDay()
{
  tempDate = new Date(currentYear, currentMonth, 1);
  startDay = tempDate.getDay();
}

var xmlDoc;

function updateXML()
{
  if(window.ActiveXObject)
  {
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = false;
    xmlDoc.load("/programs/phd/calendar/dates/dates.xml");
    doXMLStuff();
  }
  else
  {
    xmlDoc = document.implementation.createDocument("","",null);
    xmlDoc.load("/programs/phd/calendar/dates/dates.xml");
    xmlDoc.onload = doXMLStuff;
  }
}

function doXMLStuff()
{
  var lcv;
  var lcv2 = 0;
  var startDay;
  var endDay;
  impDates = new Array();
  impDescrip = new Array();
  


  for(lcv = 0; lcv < xmlDoc.getElementsByTagName("event").length ; lcv++)
  {
    if(xmlDoc.getElementsByTagName("event")[lcv].getAttribute("month") == (currentMonth+1).toString())
    {
	if(xmlDoc.getElementsByTagName("event")[lcv].getAttribute("day") == "multi")
	{
	  startDay = parseInt(xmlDoc.getElementsByTagName("event")[lcv].getAttribute("start"));
	  endDay = parseInt(xmlDoc.getElementsByTagName("event")[lcv].getAttribute("end"));
	  for(var i = 0; i <= (endDay - startDay); i++)
	  {
            impDates[lcv2] = startDay + i;
            impDescrip[lcv2] = xmlDoc.getElementsByTagName("event")[lcv].childNodes[0].nodeValue;
	    lcv2++;
	  }
	}
	else
	{
          impDates[lcv2] = parseInt(xmlDoc.getElementsByTagName("event")[lcv].getAttribute("day"));
          impDescrip[lcv2] = xmlDoc.getElementsByTagName("event")[lcv].childNodes[0].nodeValue;
          lcv2++;
	}
    }
  }
}

function makeCalendar()
{
  var numDays = daysInMonth(currentMonth, currentYear);
  var lcv;
  var lcv2 = 0;
  var outputString = "";

  for(lcv = 0; lcv < startDay; lcv++)
  {
    outputString += "<div class=\"otherMonth\"></div>";
  }

  for(lcv = 1; lcv <= numDays; lcv++)
  {
    if(currentMonth == now.getMonth() && currentYear == now.getFullYear())
    {
      if(lcv == now.getDate())
      {
        outputString += "<div class=\"todayBox\" onmouseover=\"javascript:getDateInfo(" + lcv + ")\">" + lcv + "</div>";
      }
      else if(lcv == impDates[lcv2])
      {
        outputString += "<div class=\"somethingDay\" onmouseover=\"javascript:getDateInfo(" + lcv + ")\">" + lcv + "</div>";
	lcv2++;
      }
      else
      {
        outputString += "<div class=\"nothingDay\" onmouseover=\"javascript:getDateInfo(" + lcv + ")\">" + lcv + "</div>";
      }
    }
    else
    {
      if(lcv == impDates[lcv2])
      {
        outputString += "<div class=\"somethingDay\" onmouseover=\"javascript:getDateInfo(" + lcv + ")\">" + lcv + "</div>";
	lcv2++;
      }
      else
      {
        outputString += "<div class=\"nothingDay\" onmouseover=\"javascript:getDateInfo(" + lcv + ")\">" + lcv + "</div>";
      }
    }
  }

  if(numDays + startDay <= 35)
  {
    for(lcv = 0; lcv < (35 - numDays - startDay) ; lcv++)
    {
      outputString += "<div class=\"otherMonth\"></div>";
    }
  }
  else
  {
    for(lcv = 0; lcv < (42 - numDays - startDay) ; lcv++)
    {
      outputString += "<div class=\"otherMonth\"></div>";
    }
  }

  return(outputString);
}

function daysInMonth(monthId, yearId)
{
  switch(monthId)
  {
    case(1):
	if((yearId % 4) == 0)
	{
	  return(29);
	}
	else
	{
	  return(28);
	}
	break;
    case(3):
    case(5):
    case(8):
    case(10):
	return(30);
	break;
    default:
	return(31);
	break;
  }
}

function getArrayInfo(number)
{
  updateXML();

  var lcv;
  for(lcv = 0; lcv < impDates.length; lcv++)
  {
    if(impDates[lcv] == number)
    {
      return(impDescrip[lcv]);
    }
  }
  return("");
}

