var moving = false;
var movingElementId;
var currentContentLayerId;
var currX = 0;
var currY = 0;
var dayNumbers=[];
var eventNames=[];
var xmlHttp;
var currMonthNum;
var currMonth;
var currYear;
var currDay;
var offset;
var numDays;

//firefox
window.onmousemove = trackMouse;
//IE
if(document.all){
  document.onmousemove = trackMouse;
}

function setMonth(month){
	switch(month){
		case 1:
			currMonth = 'January';
			numDays = 31;
		break;
		case 2:
			currMonth = 'February';
			var isLeap = new Date(currYear,1,29).getDate() == 29;
			if(isLeap)
				numDays = 29;
			else
				numDays = 28;
		break;
		case 3:
			currMonth = 'March';
			numDays = 31;
		break;
		case 4:
			currMonth = 'April';
			numDays = 30;
		break;
		case 5:
			currMonth = 'May';
			numDays = 31;
		break;
		case 6:
			currMonth = 'June';
			numDays = 30;
		break;
		case 7:
			currMonth = 'July';
			numDays = 31;
		break;
		case 8:
			currMonth = 'August';
			numDays = 31;
		break;
		case 9:
			currMonth = 'September';
			numDays = 30;
		break;
		case 10:
			currMonth = 'October';
			numDays = 31;
		break;
		case 11:
			currMonth = 'November';
			numDays = 30;
		break;
		case 12:
			currMonth = 'December';
			numDays = 31;
		break;
	}
}

function getOffset(month, year) {
    var a = Math.floor((14 - month) / 12);
    var y = year - a;
    var m = month + 12 * a - 2;
    var d = (1 + y + Math.floor(y / 4) - Math.floor(y / 100) +
             Math.floor(y / 400) + Math.floor((31 * m) / 12))  % 7;
    return d;
}

function loadCalendar(monNum,yr){
setMonth(monNum);
currMonthNum = monNum;
currYear = yr;
offset = getOffset(monNum,yr);
xmlHttp = getXMLHttp();
var url="calendar.php";
url=url+"?month="+monNum+"&year="+yr+"&day=";
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

function stateChanged()
{
	var d = new Date();
	var today = d.getDate();
	var mon = d.getMonth() + 1;
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
 document.getElementById("monthName").innerHTML = currMonth + " ";
 document.getElementById("yearDisplay").innerHTML = " " + currYear;
 xmlDoc=xmlHttp.responseXML;
 for(var i=0;i<42;i++){
	if(i >= offset){
		if(i < (numDays+offset)){
			if(((i+1)-(offset)) == today && currMonthNum == mon){
				document.getElementById("calendarCell"+i).innerHTML = (i-offset+1);
				document.getElementById("calendarCell"+i).className = "todayCell";
			}else{
				document.getElementById("calendarCell"+i).innerHTML = (i-offset+1);
				document.getElementById("calendarCell"+i).className = "calCell";
			}
		}else{
			document.getElementById("calendarCell"+i).innerHTML = "&nbsp;";
			document.getElementById("calendarCell"+i).className = "calCell";
		}
	}else{
			document.getElementById("calendarCell"+i).innerHTML = "&nbsp";
			document.getElementById("calendarCell"+i).className = "calCell";

	}
 }

 for(var i=0;i<xmlDoc.getElementsByTagName("dayOfMonth").length;i++){
 	var day = parseInt(xmlDoc.getElementsByTagName("dayOfMonth")[i].childNodes[0].nodeValue);
 	var eventId = xmlDoc.getElementsByTagName("eventID")[i].childNodes[0].nodeValue;
 	var eventName = xmlDoc.getElementsByTagName("eventName")[i].childNodes[0].nodeValue;
	var timeAndLoc = xmlDoc.getElementsByTagName("timeAndLoc")[i].childNodes[0].nodeValue;
	var thumbNail = xmlDoc.getElementsByTagName("thumbnail")[i].childNodes[0].nodeValue;	
 	var prevHTML = document.getElementById("calendarCell"+(day+offset-1)).innerHTML;
	var startDate = currMonthNum + "/" + currDay + "/" + currYear;
	var endDate = startDate;
	document.getElementById("calendarCell"+(day+offset-1)).innerHTML = "<a href='#' onClick=\"searchDay();\" onMouseover=\"makeMoveable('ajaxDisplayLayer','ajaxDisplayContent',"+day+");\" onMouseout=\"makeSolid('ajaxDisplayLayer');\">" + prevHTML + "</a>";
	if(document.getElementById("calendarCell"+(day+offset-1)).className == "todayCell" || document.getElementById("calendarCell"+(day+offset-1)).className == "markedTodayCell"){
		document.getElementById("calendarCell"+(day+offset-1)).className = "markedTodayCell";
	}else{
		document.getElementById("calendarCell"+(day+offset-1)).className = "markedCell";
	}
 }
}
}

function searchDay(){
	var date = currMonthNum + "/" + currDay + "/" + currYear;
	var url = "?p=eventsResults&startDate=" + date + "&endDate=" + date + "&nav=events";
	window.location = url;
}


function stateChanged2()
{
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
	 htmlStr = "<span class='bold'>Events for " + currMonth + " " + currDay + ", " + currYear + "</span><hr />";;
	 xmlDoc=xmlHttp.responseXML;
	 for(var i=0;i<xmlDoc.getElementsByTagName("dayOfMonth").length;i++){
	 	var day = parseInt(xmlDoc.getElementsByTagName("dayOfMonth")[i].childNodes[0].nodeValue);
	 	var eventId = xmlDoc.getElementsByTagName("eventID")[i].childNodes[0].nodeValue;
	 	var eventName = xmlDoc.getElementsByTagName("eventName")[i].childNodes[0].nodeValue;
		var timeAndLoc = xmlDoc.getElementsByTagName("timeAndLoc")[i].childNodes[0].nodeValue;
		var thumbNail = xmlDoc.getElementsByTagName("thumbnail")[i].childNodes[0].nodeValue;	
	 	htmlStr += xmlDoc.getElementsByTagName("eventName")[i].childNodes[0].nodeValue + "<br /><br />";
	 }
		contentLayer = document.getElementById(currentContentLayerId);
		contentLayer.innerHTML = htmlStr;
	}
}


function nextMonth(){
	var nextMonth;
	var nextYear;
	if(currMonthNum == 12){
		nextMonth = 1;
		nextYear = currYear + 1;
	}else{
		nextMonth = currMonthNum + 1;
		nextYear = currYear;
	}
	loadCalendar(nextMonth,nextYear);
}

function prevMonth(){
	var nextMonth;
	var nextYear;
	if(currMonthNum == 1){
		nextMonth = 12;
		nextYear = currYear - 1;
	}else{
		nextMonth = currMonthNum - 1;
		nextYear = currYear;
	}
	loadCalendar(nextMonth,nextYear);
}

function getXMLHttp(){
	var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX -- the Events Calendar will not be populated.");
      return false;
      }
    }
  }
  return xmlHttp;
}

function populateEvents(){
	xmlHttp = getXMLHttp();
	var url="calendar.php";
	url=url+"?month="+currMonthNum+"&year="+currYear+"&day="+currDay;
	xmlHttp.onreadystatechange=stateChanged2;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);	
}

function makeMoveable(elemId,contentId,dayOfMonth){
	currDay = dayOfMonth;
	currentContentLayerId = contentId;
	elem = document.getElementById(elemId);
	movingElementId = elemId;
	elem.style.visibility = "visible";
	moving = true;
	populateEvents();
}

function makeSolid(){
		elem = document.getElementById(movingElementId);
	  elem.style.visibility = "hidden";
	  elem.style.top = "0px";
	  elem.style.left = "0px";
	  moving = false;
	  movingElementId = "";
	  loaderImageHTML = "<img src=\"images/ajax-loader2.gif\" />";
	  displayLayerId = currentContentLayerId;
	  displayLayer = document.getElementById(displayLayerId);
	  displayLayer.innerHTML = loaderImageHTML;
}

function trackMouse(e){
  if(moving){
			ctr=0;
      elem = document.getElementById(movingElementId);
      try{
					xPos = getPosition(e).x;
					yPos = getPosition(e).y;
        }catch(err){
            alert("can't find a suitable way to get the mouse coordinates");
        }
      try{
				if(document.all && !document.opera){
					elem.style.left = xPos - 330;
					elem.style.top = yPos - 15;
				}else{
        	elem.style.left = (xPos - 330) + "px";
	        elem.style.top = (yPos - 15) + "px";
    		}
      }catch(err){
          alert(err);
      }
  }
}

function getPosition(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    }
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX +
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY +
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

function setXY(e){
  try{
      currX = event.clientX + document.body.scrollLeft;
      currY = event.clientY + document.body.scrollTop;
  }catch(err){
    try{
        currX = e.pageX;
        currY = e.pageY;
    }catch(err){
        alert("Error in Set XY" + err);
    }
  }
}

