var calender;
var timeout;
var isAnimating;
var left;
var reqCal;
var newCal = 0;
var lastClick;

var debug		= false;
var dumpNode	= 0;
var dumpRows	= null;

function dump(msg)
{
	if(debug)
	{
		if(!dumpRows)
			dumpRows = document.getElementById("left").getElementsByTagName("a");

		dumpRows[dumpNode++].childNodes[0].nodeValue = msg;
		if(dumpNode == 7){ dumpNode = 0; }
	}
}

function importCalender(baseNode, importNode, date)
{
	baseNode.setAttribute("id", importNode.childNodes[1].firstChild.nodeValue);
	baseNode.childNodes[3].childNodes[1].childNodes[1].childNodes[0].setAttribute("href", importNode.childNodes[3].childNodes[1].childNodes[1].childNodes[0].getAttribute("href"));
	baseNode.childNodes[3].childNodes[1].childNodes[3].childNodes[0].nodeValue = importNode.childNodes[3].childNodes[1].childNodes[3].childNodes[0].nodeValue;
	baseNode.childNodes[3].childNodes[1].childNodes[5].childNodes[0].setAttribute("href", importNode.childNodes[3].childNodes[1].childNodes[5].childNodes[0].getAttribute("href"));

	for(row = 0; row < importNode.childNodes[5].rows.length; row++)
	{
		for(cell = 0; cell < importNode.childNodes[5].rows[row].cells.length;cell++)
		{
			var localCell = baseNode.childNodes[5].rows[row].cells[cell];
			var importCell = importNode.childNodes[5].rows[row].cells[cell];

			if(importCell.firstChild.nodeType == 3)
			{
				if(localCell.firstChild.nodeType == 1)
				{
					localCell.removeChild(localCell.firstChild);
					localCell.appendChild(document.createTextNode(importCell.firstChild.nodeValue));
					localCell.setAttribute("class", "");
					localCell.setAttribute("id", "")
				}
				else
				{
					localCell.firstChild.nodeValue = importCell.firstChild.nodeValue;
				}
			}
			else
			{
				var a = baseNode.childNodes[3].childNodes[1].childNodes[1].childNodes[0].cloneNode(true);
				a.setAttribute("href", importCell.firstChild.attributes[0].value);
				a.setAttribute("title", importCell.firstChild.attributes[1].value);
				a.removeChild(a.firstChild);
				a.setAttribute("onclick", "");
				a.appendChild(document.createTextNode(importCell.firstChild.firstChild.nodeValue));
				
				localCell.removeChild(localCell.firstChild);
				localCell.appendChild(a);
			}

			if(importCell.hasAttributes())
				for(var i = 0; i < importCell.attributes.length;i++)
					localCell.setAttribute(importCell.attributes[i].name, importCell.attributes[i].value);
		}
	}
	
	newCal = baseNode;
}

function addCal()
{
	if (reqCal.readyState == 4)
	{
		if (reqCal.status == 200)
		{
			if(document.all){
				//newCal = document.getElementsByTagName("table").item(0).cloneNode(true);
				//newCal.tHead.innerHTML = reqCal.responseXML.documentElement.getElementsByTagName("table").item(0).tHead.innerHTML;
				//newCal.childNodes[2].innerHTML = reqCal.responseXML.documentElement.getElementsByTagName("table")[0].childNodes[2].innerHTML;
			}else{
				importCalender(document.getElementsByTagName("table").item(0).cloneNode(true), document.importNode(reqCal.responseXML.getElementsByTagName("table").item(0), true));
			}
		}
		else
		{
			alert("There was a problem retrieving the XML data:\nHTTP Response:" + reqCal.status + "\n" + reqCal.statusText);
		}
	}
}

function getCal(date, direction)
{
	var date = date.split("-");
	
	try{
		date[0] = Number(date[0]);
		date[1] = Number(date[1]);
	}catch(e)
	{
		date[0] = eval(date[0]);
		date[1] = eval(date[1]);
	}

	if(direction == 1)
	{
		if(date[0] == 12)
		{
			date[0] = 1;
			date[1] += 1;
		}
		else
		{
			date[0] += 1;
		}
	}
	else
	{
		if(date[0] == 1)
		{
			date[0] = 12;
			date[1] -= 1;
		}
		else
		{
			date[0] -= 1;
		}
	}

	reqCal = false;

    if(window.XMLHttpRequest)
	{
    	try{
			reqCal = new XMLHttpRequest();
        }catch(e){
			reqCal = false;
        }
    }
	else if(window.ActiveXObject)
	{
       	try{
        	reqCal = new ActiveXObject("Msxml2.XMLHTTP");
      	}catch(e){
        	try{
          		reqCal = new ActiveXObject("Microsoft.XMLHTTP");
        	}catch(e) {
          		reqCal = false;
        	}
		}
    }

	if(reqCal)
	{
		reqCal.onreadystatechange = addCal;
		reqCal.open("GET", "/includes/getcal.php?year=" + date[1] + "&month=" + date[0] + "&direction=" + direction, true);
		reqCal.send(null);
	}

}

function updateCalenders(child)
{
	if(newCal)
	{
		var container = document.getElementById("right");

		if(child == 1)
		{
			document.getElementById("right").removeChild(calender[0]);
			document.getElementById("right").appendChild(newCal.cloneNode(true));
		}
		else
		{
			container.insertBefore(newCal, document.getElementsByTagName("table")[0]);
			container.removeChild(document.getElementsByTagName("table")[3]);
		}
	}
	
	calender = document.getElementById("right").getElementsByTagName("table");
	try{
		calender[0].style.left = "208px";
		calender[2].style.left = "-208px";
		newCal = null;	
	}catch(e){
		//alert(calender.length);
	}

}

function prevCal()
{
	// IE Doesn't like using .innerHTML with tables, no AJAX for you!
	if(document.all)
		return true;
	
	if(!isAnimating)
	{
		if(lastClick == "next")
			updateCalenders(1);
		else
			updateCalenders(2);

		lastClick = "prev";
	}

	if((calender[0].style.left == "") || (calender[0].style.left == "208px"))
	{
		isAnimating				= true;
		left					= 16;
		calender[0].style.left	= (left - 204) + "px"
		calender[1].style.left	= left + "px";
		getCal(calender[0].id, 0);
	}
	else if(calender[0].style.left == "4px")
	{
		isAnimating = false;
		clearTimeout(timeout);
	}
	else
	{
		left += 48;
		calender[0].style.left = (left - 204) + "px"
		calender[1].style.left = (left + "px");
	}
	
	if(!timeout || isAnimating)
		timeout = setTimeout('prevCal()', 25);
	
	return false;
}

function nextCal()
{
	// IE Doesn't like using .innerHTML with tables, no AJAX for you!
	if(document.all)
		return true;

	if(!isAnimating)
	{
		if(lastClick == "prev")
			updateCalenders(2);
		else
			updateCalenders(1);

		lastClick = "next";
	}

	if((calender[2].style.left == "") || (calender[2].style.left == "-208px"))
	{
		isAnimating = true;
		left		= 4;
		calender[2].style.left = (left + 204) + "px"
		calender[1].style.left = left + "px";
		getCal(calender[2].id, 1);
	}
	else if(calender[2].style.left == "16px")
	{
		calender[2].style.left = "4px";
		calender[1].style.left = "208px";
		isAnimating = false;
		clearTimeout(timeout);
	}
	else
	{
		left -= 48;
		calender[2].style.left = (left + 204) + "px"
		calender[1].style.left = (left + "px");
	}

	if(!timeout || isAnimating)
		timeout = setTimeout('nextCal()', 25);

	return false;
}

function pageSetup(event, pageBody)
{
	var styleSwitcher = document.getElementById("logo");
	styleSwitcher.onmouseover = function(){ document.getElementById("back").style.display = "block"; }
	styleSwitcher.onmouseout = function(){ document.getElementById("back").style.display = "none"; }
	
	calender = document.getElementById("right").getElementsByTagName("table");
}