//Scripts for UDO website. Written by Sam Sampson unless otherwise accredited.
function tocPage(){
	var mainTitle = document.getElementsByTagName("h1")[0];
	var topLink = document.createElement("a");
	topLink.name = "top";
	mainTitle.insertBefore(topLink,mainTitle.firstChild);
	var topLink = document.createElement("a");
	topLink.href = "#top";
	topLink.innerHTML = "<span>Back to top</span>";
	topLink.className = "topLink";
	var subTitles = document.getElementsByTagName("h3");
	if (subTitles.length > 2){
		for (x in subTitles){
		}
	}
	var subTitles = document.getElementsByTagName("h4");
	if (subTitles.length > 2){
		for (x in subTitles){
			if (subTitles[x].nodeType == 1){
				thisLink = topLink.cloneNode(true);
				subTitles[x].appendChild(thisLink);
			}
		}
	}
}

function fullView(){
	var table = document.getElementById("termListing") ? document.getElementById("termListing") : document.getElementById("weekListing") ;
	var bigTable = table.cloneNode(true);
	bigTable.id = "bigTable";
	var tableTitle = document.getElementsByTagName("h2")[0].innerHTML;
	var writeroot = document.createElement("div");
	writeroot.id = "popTerm";
	writeroot.className = "popDiv";
	var container = document.getElementsByTagName("body")[0];
	container.appendChild(writeroot);
	writeroot.innerHTML = "<h3>" + tableTitle + "<a href=\"listings.asp?view=term\" id=\"closeTerm\" class=\"closePop\" title=\"Close fullscreen view\"><img src=\"images/close.png\" height=\"32\" width=\"32\" alt=\"Close pop-up\" /></a></h3>";
	writeroot.appendChild(bigTable);
	document.getElementById("closeTerm").onclick = function(){
		container.removeChild(document.getElementById("popTerm"));
		document.getElementById("container").style.display="block";
		return false;
		};
	if (document.getElementsByTagName){
		var allLinks = document.getElementsByTagName("a");
		for (x in allLinks){
			if (HasClassName(allLinks[x],"listLink")){
				allLinks[x].onclick = grabListing;
			}
		}
	}
	document.getElementById("container").style.display="none";
	return false;
}

function grabListing(){
	var showId = this.href;
	var offset = showId.indexOf("showid=");
	offset = offset + 7;
	var grabId = showId.substring(offset,showId.length);
	var grabAddress = "ajaxlisting1.asp?id=" + grabId;
	xmlHttp = createXMLHTTPObject();
	xmlHttp.onreadystatechange=function(){
		if(xmlHttp.readyState==4){
			handleRequest(xmlHttp);
		}
	}
	xmlHttp.open("GET",grabAddress,true);
	xmlHttp.send(null);
	return false;
}

function handleRequest(req) {
	var writeroot = document.createElement("div");
	writeroot.id = "popDiv";
	writeroot.className = "popDiv";
	var container = document.getElementsByTagName("body")[0];
	container.appendChild(writeroot);
	writeroot.innerHTML = req.responseText;
	document.getElementById("closePop").onclick = function(){
		container.removeChild(document.getElementById("popDiv"));
		return false;
		};
}

function termBox(){
	var showProds = document.getElementById("prodCheckBox").checked;
	var showWorks = document.getElementById("workCheckBox").checked;
	var showDeads = document.getElementById("deadCheckBox").checked;
	var allLinks = document.getElementsByTagName("a");
	var allEvents = new Array();
	var i=0;
	for (k in allLinks){
		if (HasClassName(allLinks[k],"listLink")){
			allEvents[i] = allLinks[k];
			i++;
		}
	}
	for (i in allEvents){
		if (HasClassName(allEvents[i],"production")){
			(showProds==true) ? allEvents[i].parentNode.style.display="block" : allEvents[i].parentNode.style.display="none" ;
		}
		if (HasClassName(allEvents[i],"workshop")){
			(showWorks==true) ? allEvents[i].parentNode.style.display="block" : allEvents[i].parentNode.style.display="none" ;
		}
		if (HasClassName(allEvents[i],"deadline")){
			(showDeads==true) ? allEvents[i].parentNode.style.display="block" : allEvents[i].parentNode.style.display="none" ;
		}
	}
	createCookie("udoshowProds",showProds,2)
	createCookie("udoshowWorks",showWorks,2)
	createCookie("udoshowDeads",showDeads,2)
}

function setBox(){
	var showProds = readCookie("udoshowProds");
	if (showProds) {
		(showProds=="true") ? showProds = true : showProds = false ;
	} else {
		showProds = true
	}
	var showWorks = readCookie("udoshowWorks");
	if (showWorks) {
		(showWorks=="true") ? showWorks = true : showWorks = false ;
	} else {
		showWorks = true
	}
	var showDeads = readCookie("udoshowDeads");
	if (showDeads) {
		(showDeads=="true") ? showDeads = true : showDeads = false ;
	} else {
		showDeads = true
	}
	document.getElementById("prodCheckBox").checked = showProds;
	document.getElementById("workCheckBox").checked = showWorks;
	document.getElementById("deadCheckBox").checked = showDeads;
	createCookie("udoshowProds",showProds,2)
	createCookie("udoshowWorks",showWorks,2)
	createCookie("udoshowDeads",showDeads,2)
	termBox();
}

function kickStart(){
	if (document.getElementById){
		if (document.getElementById("termListing")){
			document.getElementById("prodCheckBox").onclick = termBox;
			document.getElementById("workCheckBox").onclick = termBox;
			document.getElementById("deadCheckBox").onclick = termBox;
			setBox();
		}
		if (document.getElementById("weekListing")){
			document.getElementById("prodCheckBox").onclick = termBox;
			document.getElementById("workCheckBox").onclick = termBox;
			document.getElementById("deadCheckBox").onclick = termBox;
			setBox();
		}
		if (document.getElementsByTagName){
			var allLinks = document.getElementsByTagName("a");
			for (x in allLinks){
				if (HasClassName(allLinks[x],"listLink")){
					allLinks[x].onclick = grabListing;
				}
			}
		}
		if (document.getElementById("popTable")){
			document.getElementById("popTable").onclick = fullView;
		}
		if (document.getElementById("xlisting")){
			tocPage();
		}
	}
}

window.onload=kickStart;


//from http://snippets.dzone.com/posts/show/2630
function HasClassName(objElement, strClass)
   {

   // if there is a class
   if ( objElement.className )
      {

      // the classes are just a space separated list, so first get the list
      var arrList = objElement.className.split(' ');

      // get uppercase class for comparison purposes
      var strClassUpper = strClass.toUpperCase();

      // find all instances and remove them
      for ( var i = 0; i < arrList.length; i++ )
         {

         // if class found
         if ( arrList[i].toUpperCase() == strClassUpper )
            {

            // we found it
            return true;

            }

         }

      }

   // if we got here then the class name is not there
   return false;

   }
   
//From www.quirksmode.org
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

//AJAX functions from www.quirksmode.org
function sendRequest(url,callback,postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
//			alert('HTTP error ' + req.status);
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}
