
// _____[ AJAX : FILM SEARCH ]_____ \\

var ajax = 
{
	request: null,
	content: null,
	form: null,
	results: null,
	items: null,
	loading: null,
	loadingstatus: null,
	loadingspan: null,
	loadingdots: "",
	
	erase: function()
	{
		ajax.request = null;
		if(ajax.loading)
		{
			ajax.loading.parentNode.removeChild(ajax.loading);
			ajax.loading = null;
			ajax.loadingstatus = null;
			ajax.loadingspan = null;
			ajax.loadingdots = "";
		}
	},
	
	create: function(url)
	{
		var date = new Date();
		var time = date.getTime();
		url = url + "&time=" + time;
		try { ajax.request = new XMLHttpRequest(); }
		catch(error)
		{
			try { ajax.request = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch(error) { return true; }
		}
		ajax.request.open("get",url,true);
		ajax.request.onreadystatechange = ajax.ready;
		ajax.request.send(null);
	},
	
	ready: function()
	{
		if(ajax.request.readyState == 1)
		{
			ajax.isLoading();
		}
		if(ajax.request.readyState == 4)
		{
			if(ajax.loading && ajax.loading.parentNode)
			{
				ajax.loading.parentNode.removeChild(ajax.loading);
				clearInterval(ajax.loadingstatus);
			}
			if(ajax.request.status && /200|304/.test(ajax.request.status))
			{
				ajax.retrieved(ajax.request);
			}
			else
			{
				ajax.failed(ajax.request);
			}
		}
	},
	
	retrieved: function(req)
	{
		//var xml = req.responseXML;
		//ajax.processor(xml);
		var txt = req.responseText;
		ajax.processor(txt);
		ajax.request = null;
		return false;
	},
	
	failed: function(req)
	{
		alert("The XMLHttpRequest failed. Status: " + req.status);
		return true;
	},
	
	activeLoading: function()
	{
		ajax.loadingdots += " .";
		if(ajax.loadingdots.length > 10) { ajax.loadingdots = ""; }
		if(ajax.loadingspan.firstChild) { ajax.loadingspan.removeChild(ajax.loadingspan.firstChild); }
		ajax.loadingspan.appendChild(document.createTextNode(ajax.loadingdots));
	},

	isLoading: function()
	{
		FSC.doResults();
		ajax.loading = document.createElement("div");
		ajax.loading.setAttribute("id","loading");
		ajax.loading.appendChild(document.createTextNode("Loading"));
		ajax.content.insertBefore(ajax.loading,ajax.content.childNodes[2]);
		ajax.loadingspan = document.createElement("span");
		ajax.loading.appendChild(ajax.loadingspan);
		ajax.loadingstatus = setInterval(ajax.activeLoading,200);
	},
	
	processor: function(txt)
	{
		FSC.doResults();
		FSC.buildContainer(txt);
		FSC.setHistoryLinks();
		FSC.setClear();
		films.getThumbnails();
		stripeTables();
	}
}

// _____[ FILM SEARCH CONTROLS ]_____ \\

var FSC =
{
	keywords: null,
	unset: true,
	panel: null,
	results_tab: null,
	search_tab: null,
	current: null,
	clear: null,
	history: [],
	ajax_url: "http://zsr.wfu.edu/collections/media/search/films.functions.php?",
	
	altHistory: function()
	{
		if(FSC.history.length > parseInt(FSC.current) + 1)
		{
			for(var i = FSC.history.length - 1; i >= parseInt(FSC.current) + 1; i--)
			{
				FSC.history.pop();
			}
		}
	},
	
	setHistoryLinks: function()
	{
		if(FSC.history.length > 1 && parseInt(FSC.current) > 0)
		{
			FSC.buildLink("previous",FSC.history[parseInt(FSC.current) - 1],"Previous");
		}
		if(FSC.history.length > parseInt(FSC.current) + 1)
		{
			FSC.buildLink("forward",FSC.history[parseInt(FSC.current) + 1],"Forward");
		}
	},
	
	buildHistory: function(q)
	{
		FSC.altHistory();
		FSC.history.push(q);
		FSC.current = FSC.history.length - 1;
	},
	
	setClear: function()
	{
		if(FSC.clear) { FSC.clear.parentNode.removeChild(FSC.clear); }
		FSC.clear = document.createElement("span");
		FSC.clear.appendChild(document.createTextNode(" [-]"));
		FSC.clear.setAttribute("title","Clear all results");
		FSC.clear.className = "active";
		FSC.clear.onclick = function()
		{
			FSC.results_tab.cleared = true;
			FSC.history = [];
			FSC.current = null;
			cookie.erase("zsrfs_history");
			cookie.erase("zsrfs_current");
			ajax.results.parentNode.removeChild(ajax.results);
			ajax.results = null;
			FSC.unset = true;
			FSC.init();
			//this.blur();
		};
		FSC.results_tab.appendChild(FSC.clear);
	},

	setControls: function()
	{
		FSC.results_tab = document.getElementById("results");
		FSC.search_tab = document.getElementById("search_browse");
		FSC.search_tab.firstChild.onclick = function()
		{
			return false;
		};
		FSC.results_tab.firstChild.onclick = function()
		{
			return false;
		};
		FSC.search_tab.onclick = function()
		{
			if(FSC.checkExternalQuery()) { FSC.changeExternalResultsDisplay("none"); }
			if(ajax.results) { ajax.results.style.display = "none"; }
			FSC.container.style.display = "block";
			this.className = "current";
			FSC.results_tab.className = "";
			FSC.unset = false;
			FSC.keywords.focus();
			return false;
		};
		FSC.results_tab.onclick = function()
		{
			if(!this.cleared)
			{
				if(FSC.checkExternalQuery()) { FSC.changeExternalResultsDisplay("block"); }
				if(ajax.results)
				{
					FSC.container.style.display = "none";
					ajax.results.style.display = "block";
				}
				this.className = "current";
				FSC.search_tab.className = "";
				FSC.unset = false;
				FSC.keywords.focus();
			}
			return false;
		};
	},

	buildContainer: function(txt)
	{
		ajax.results = document.createElement("div");
		ajax.results.setAttribute("id","film_search_results_container");
		ajax.results.innerHTML = txt;
		ajax.content.insertBefore(ajax.results,ajax.content.childNodes[2]);
	},
	
	buildSpan: function()
	{
		var s = document.createElement("span");
		var st = document.createTextNode(" | ");
		s.className = "hide";
		s.appendChild(st);
		FSC.panel.appendChild(s);
	},
	
	buildLink: function(id,q,t)
	{
		var a = document.createElement("a");
		a.setAttribute("id",id);
		a.setAttribute("href","#"); // a.setAttribute("href",q);
		var at = document.createTextNode(t);
		a.appendChild(at);
		switch(id)
		{
			case "previous": ajax.results.insertBefore(a,ajax.results.firstChild); break;
			case "forward": ajax.results.insertBefore(a,ajax.results.childNodes[1]); break;
		}
		a.onclick = function()
		{
			FSC.current = (id == "previous") ? FSC.current - 1 : FSC.current + 1;
			FSC.prepareAjax(q);
			return false;
		};
	},

	buildTabs: function(id,txt,c)
	{
		var s = document.createElement("span");
		s.setAttribute("id",id);
		var a = document.createElement("a");
		var x = document.createTextNode(txt);
		a.appendChild(x);
		a.setAttribute("href","http://zsr.wfu.edu/collections/media/search/");
		//a.onclick = null;
		if(c) { s.className = "current"; }
		s.appendChild(a);
		FSC.panel.appendChild(s);
		if(id != "results") { FSC.buildSpan(); }
	},
	
	buildPanel: function()
	{
		if(FSC.panel) { FSC.panel.parentNode.removeChild(FSC.panel); }
		var p = document.getElementById("pagehead");
		FSC.panel = document.createElement("div");
		FSC.panel.setAttribute("id","film_search_controls");
		FSC.buildTabs("search_browse","Search & Browse","current");
		FSC.buildTabs("results","Results");
		p.appendChild(FSC.panel);
		FSC.setControls();
	},

	doResults: function()
	{
		FSC.container.style.display = "none";
		FSC.results_tab.className = "current";
		FSC.search_tab.className = "";
	},
	
	checkCookie: function()
	{
		var h = cookie.get("zsrfs_history");
		var c = cookie.get("zsrfs_current");
		if(h) { FSC.history = h.split(","); } else { return false; }
		if(c) { FSC.current = c; }
		FSC.prepareAjax(FSC.history[FSC.current]);
	},
	
	setCookie: function()
	{
		cookie.erase("zsrfs_history");
		cookie.create("zsrfs_history",FSC.history.join(","),.0125);
		cookie.erase("zsrfs_current");
		cookie.create("zsrfs_current",FSC.current,.0125);
	},
	
	prepareAjax: function(q)
	{
		if(ajax.results && ajax.results.parentNode) { ajax.results.parentNode.removeChild(ajax.results); }
		ajax.create(FSC.ajax_url + q);
	},

	getFilms: function()
	{
		ajax.form.onsubmit = function()
		{
			if(!ajax.request)
			{
				var alpha = document.getElementById("alpha");
				var alpha_v = alpha.options[alpha.selectedIndex].value;
				alpha = "alpha=" + alpha_v;
				var yr = document.getElementById("year");
				var yr_v = yr.options[yr.selectedIndex].value;
				yr = "&year=" + yr_v;
				var lang = document.getElementById("language");
				var lang_v = lang.options[lang.selectedIndex].value;
				lang = "&language=" + lang_v;
				var keyw = document.getElementById("keywords");
				var keyw_v = keyw.value;
				keyw = "&keywords=" + keyw_v;
				var bool = document.getElementById("boolean");
				var bool_v = bool.value;
				bool = "&boolean=" + bool_v;
				if(!alpha_v && !yr_v && !lang_v && !keyw_v)
				{
					alert("Please enter your search criteria.");
				}
				else
				{
					var q = alpha + yr + lang + keyw + bool;
					FSC.buildHistory(q);
					FSC.setCookie();
					if(FSC.checkExternalQuery())
					{
						location.replace("http://zsr.wfu.edu/collections/media/search/");
					}
					else
					{
						FSC.prepareAjax(q);
					}
				}
			}
			return false;
		};
	},
	
	changeExternalResultsDisplay: function(d)
	{
		var results_query = document.getElementById("query");
		var results_div = document.getElementById("film_search_results");
		var results_count = document.getElementById("count");
		results_query.style.display = d;
		results_div.style.display = d;
		results_count.style.display = d;
	},

	saveExternalQuery: function(url)
	{
		
		var q = url.split("?")[1];
		FSC.buildHistory(q);
		FSC.setCookie();
	},
	
	checkExternalQuery: function()
	{
		return (location.href.indexOf("?") != -1) ? true : false;
	},
	
	resetKeywordsInput: function()
	{
		if(FSC.unset) { FSC.keywords.value = ''; }
		FSC.keywords.focus();
	},
	
	assignElements: function()
	{
		ajax.content = document.getElementById("content");
		ajax.form = document.getElementById("film_search_form");
		FSC.keywords = document.getElementById("keywords");
		FSC.container = document.getElementById("film_search_form_container");
		if(FSC.container && FSC.container.style.display == "none") { FSC.container.style.display = "block"; }
	},
	
	init: function()
	{
		cookie.erase("zsrfs_history");
		cookie.erase("zsrfs_current");
		FSC.assignElements();
		FSC.resetKeywordsInput();
		FSC.buildPanel();
		if(FSC.checkExternalQuery())
		{
			FSC.doResults();
			FSC.saveExternalQuery(location.href);
		}
		else
		{
			FSC.checkCookie();
		}
		FSC.getFilms();
	}
}
addLoadEvent(FSC.init);

// _____[ FILM SEARCH COVER DISPLAY ]_____ \\

var films =
{
	moveCover: function(x,y)
	{
		var f = document.getElementById("fullcover");
		if(f)
		{
			f.style.top = y + "px";
			f.style.left = x + "px";
		}
	},
	
	getMouse: function(e)
	{
		var x = 0;
		var y = 0;
		if (!e) { e = window.event; }
		if (e.pageX || e.pageY)
		{
			x = e.pageX;
			y = e.pageY;
		}
		else if (e.clientX || e.clientY)
		{
			x = e.clientX + document.documentElement.scrollLeft;
			y = e.clientY + document.documentElement.scrollTop;
		}
		x = x + 50;
		y = y - 200;
		films.moveCover(x,y);
	},
	
	removeFullCover: function()
	{
		if(document.getElementById("fullcover"))
		{
			var f = document.getElementById("fullcover");
			f.parentNode.removeChild(f);
		}
	},
	
	showFullCover: function()
	{
		var p = this.parentNode;
		p.onclick = function() { return false; };
		var h = p.getAttribute("href");
		if(h)
		{
			var g = document.createElement("img");
			g.setAttribute("src",h);
			g.setAttribute("id","fullcover");
			//p.parentNode.appendChild(g);
			document.body.appendChild(g);
		}
	},

	getThumbnails: function()
	{
		if(!document.getElementsByTagName || !document.getElementById || !document.getElementById("film_search")) return false;
		var t = document.getElementById("film_search");
		var img = t.getElementsByTagName("img");
		for(var i=0; i<img.length; i++)
		{
			var g = img[i];
			g.onmouseover = films.showFullCover;
			g.onmouseout = films.removeFullCover;
			g.onmousemove = films.getMouse;
		}
	}
}
// syndetics thumbnails activated, amazon full cover display removed
// addLoadEvent(films.getThumbnails);
