function toggleSearch()
{
	var searchPanel = document.getElementById("fdb_search_panel");
	if (searchPanel.style.display == "none")
	{
		searchPanel.style.display = "";
/*
		if (simpleSearchBox = document.getElementById("fdb_simple_search"))
		{
			setTimeout("try {simpleSearchBox.focus(); simpleSearchBox.select()} catch(e) {}", 1);
		}
*/
	}
	else
	{
		searchPanel.style.display = "none";
	}
	resizeScroll();
}

function updateDisplay(filmID, down)
{
	var toggle = document.getElementById("toggle" + filmID);
	if (toggle)
	{
		toggle.src = down ? "film_database_include/images/expanded_details.png" : "film_database_include/images/collapsed_details.png";
	}
	var certificate = document.getElementById("certificate" + filmID);
	if (certificate)
	{
		certificate.style.display = down ? "none" : "";
	}
}

function expandFilm(filmID)
{
	var filmPanel = document.getElementById("film" + filmID);
	if (filmPanel)
	{
		filmPanel.down = true;
	}
	updateDisplay(filmID, filmPanel.down);
	if (filmPanel.beenDown)
	{
		var expandedDiv = document.getElementById("expanded" + filmID);
		expandedDiv.style.display = "";
	}
	else
	{				
		var expandedDiv = document.createElement("div");
		expandedDiv.className = "fdb_expanded fdb_film_element";
		expandedDiv.id = "expanded" + filmID;
		filmPanel.appendChild(expandedDiv);
		filmThumbnail = document.createElement("img");
		filmThumbnail.src = "film_database_include/thumbnails/" + filmID + ".jpg";
		filmThumbnail.className = "fdb_thumbnail";
		expandedDiv.appendChild(filmThumbnail);
		filmDetails = document.createElement("div");
		filmDetails.innerHTML = "<img src=\"film_database_include/images/details_loading.gif\" alt=\"Details loading\" />";
		filmDetails.className = "fdb_details";
		expandedDiv.appendChild(filmDetails);
		var xmlHttp = getXmlHttp();
		xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				xml = getResponseXMLDocumentElement(xmlHttp);
				details = xml.getElementsByTagName("detail");
				var html = "<table>\n";
				for (i = 0; i < details.length; i++)
				{
					var detail = details[i];
					var name = sanitise(detail.getAttribute("name")).replace(/ /g, "&nbsp;");
					var value = sanitise(detail.getAttribute("value"));
					var tooltip = sanitise(detail.getAttribute("tooltip"));
					var extra1 = "", extra2 = "";
					if (tooltip)
					{
						extra1 = "<span title=\"" + tooltip + "\" class=\"fdb_tooltip\">";
						extra2 = "</span>";
					}
					if (name == "Actors")
					{
						var alwaysValue = value.split(/\|/, 5).join("<br />");
						var extraValue = value.replace(/(.*?\|){5}/, "");
						extraValue = extraValue.split(/\|/).join("<br />");
						value = alwaysValue;
						if (extraValue) value += "<br /><a class=\"fdb_show_more\" id=\"showmore" + filmID + "\" href=\"javascript:showMoreActors(" + filmID + ")\">more actors...</a><span style=\"display: none\" id=\"more" + filmID +"\">" + extraValue + "</span>";
					}
					html += "<tr><td class=\"fdb_caption\">" + name + "</td><td>" + extra1 + value + extra2 + "</td></tr>\n";
				}
				html += "</table>\n";
				filmDetails.innerHTML = html;
			}
		}
		xmlHttp.open("GET", "film_database_include/get_film_details.php?id=" + filmID);
		xmlHttp.send(null);
		filmPanel.beenDown = true;
	}	
}

function collapseFilm(filmID)
{
	var filmPanel = document.getElementById("film" + filmID);
	if (filmPanel)
	{
		filmPanel.down = false;
	}
	updateDisplay(filmID, filmPanel.down);
	var expandedDiv = document.getElementById("expanded" + filmID);
	if (expandedDiv)
	{
		expandedDiv.style.display = "none";
	}
}

function toggleFilm(filmID)
{
	var filmPanel = document.getElementById("film" + filmID);
	if (filmPanel)
	{
		if (filmPanel.down)
		{
			collapseFilm(filmID, filmPanel);
		}
		else
		{
			expandFilm(filmID, filmPanel);
		}
	}
}

function collapseAll()
{
	var divs = document.getElementsByTagName("div");
	for (i = 0; i < divs.length; i++)
	{
		var div = divs[i];
		if (div.id && div.id.match(/^film/) && div.down)
		{
			var filmID = div.id.replace(/^film/, "");
			collapseFilm(filmID);
		}
	}
}

function showMoreActors(filmID)
{
	if (anchor = document.getElementById("showmore" + filmID))
	{
		anchor.style.display = "none";
	}
	if (moreSpan = document.getElementById("more" + filmID))
	{
		moreSpan.style.display = "";
	}
}

function simpleSearch(days)
{
	document.getElementById("latest").value = days ? days : "";
	document.getElementById("simple_search_form").submit();
}

function advancedSearch()
{
	document.getElementById("advanced_search_form").submit();
}

function simpleSearchOptions()
{
	document.getElementById("fdb_simple_options").style.display = "";
	document.getElementById("fdb_advanced_options").style.display = "none";
	document.getElementById("simple_search_selector").style.fontWeight = "bold";
	document.getElementById("advanced_search_selector").style.fontWeight = "normal";
}

function advancedSearchOptions()
{
	document.getElementById("fdb_simple_options").style.display = "none";
	document.getElementById("fdb_advanced_options").style.display = "";
	document.getElementById("simple_search_selector").style.fontWeight = "normal";
	document.getElementById("advanced_search_selector").style.fontWeight = "bold";
}

var searchClauseIndex = 1;

function addSearchCondition(field, comparator, term)
{
	var searchClauses = document.getElementById("search_clauses");
	var newDiv = document.createElement("div");
	newDiv.id = "search_clause_" + searchClauseIndex;
	
	var html = "<a class=\"fdb_pseudo_button\" href=\"javascript:removeSearchCondition(" + searchClauseIndex + ")\"> Remove</a> ";
	html += document.getElementById("fdb_exemplar_search_clause").innerHTML;
	newDiv.innerHTML = html;
	if (field)
	{
		var select = newDiv.getElementsByTagName("select")[0];
		select.value = field;
		var optionals = newDiv.getElementsByTagName("span");
		for (i = 0; i < optionals.length; i++)
		{
			var optional = optionals[i];
			if (optional.className == "optional_" + field)
			{
				optional.style.display = "";
				var options = optional.childNodes;
				for (j = 0; j < options.length; j++)
				{
					var option = options[j];
					if (option.name == "comparator_" + field + "[]") option.value = comparator;
					if (option.name == "term_" + field + "[]") option.value = term;
				}
			}
			else
			{
				optional.style.display = "none";
			}
		}
	}
	searchClauses.appendChild(newDiv);
	searchClauseIndex++;
}

function removeSearchCondition(num)
{
	if (div = document.getElementById("search_clause_" + num))
	{
		div.parentNode.removeChild(div);
	}
}

function resetAdvancedSearch()
{
	document.getElementById("search_clauses").innerHTML = "";
	searchClauseIndex = 1;
	addSearchCondition();
}

function updateAdvancedOptions(selector)
{
	var field = selector.value;
	var searchClause = selector.parentNode;
	var spans = searchClause.getElementsByTagName("span");
	for (i = 0; i < spans.length; i++)
	{
		var span = spans[i];
		span.style.display = (span.className == ("optional_" + field)) ? "" : "none";
	}
}

window.onload = resizeScroll;
window.onresize = resizeScroll;

function resizeScroll()
{
	if (scrollPane = document.getElementById("fdb_scroll"))
	{
		var top = 0;
		var drillUp = scrollPane;
		while (drillUp.tagName != "BODY")
		{
			top += drillUp.offsetTop;
			drillUp = drillUp.offsetParent;
		} 
		var windowHeight;
		if (typeof window.innerWidth != 'undefined')
		{
			windowHeight = window.innerHeight;
		}
		else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0)
		{
			windowHeight = document.documentElement.clientHeight;
		}
		else
		{
			windowHeight = document.getElementsByTagName('body')[0].clientHeight
		}
		var scrollPaneHeight = (windowHeight - top - 70);
		scrollPane.style.height = scrollPaneHeight + "px";
	}
}

function getXmlHttp()
{
	try
	{
		// Firefox, Opera 8.0+, Safari
		return new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			return new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				window.alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
}

function getResponseXMLDocumentElement(xmlHttp)
{
	var xmlDoc;
	var responseText = xmlHttp.responseText;
	responseText = responseText.replace(/^.*?<\?xml/, '<?xml');
	xmlDoc = createXMLDocument(responseText);
	if (xmlDoc && xmlDoc.documentElement)
	{
		return xmlDoc.documentElement;
	}
	xmlDoc = createXMLDocument('<?xml version="1.0"?><ajax_response garbage="1" />');
	return xmlDoc.documentElement;
}

function createXMLDocument(text)
{
	var xmlDoc;
	try
	{
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(text, "text/xml");
	}
	catch (e)
	{
		try
		{
			xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
			xmlDoc.loadXML(text);
		}
		catch (e)
		{
			try
			{
				xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.loadXML(text);
			}
			catch (e)
			{
			}
		}
	}
	return xmlDoc;
}

function htmlEntities(str)
{
	// based on a script by Dieter Raber <dieter@dieterraber.net>
	// http://www.dieterraber.net/includes/ghf8/Javascript/stringFunctions.js
	
	var chars = new Array ('&','à','á','â','ã','ä','å','æ','ç','è','é',
							'ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô',
							'õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À',
							'Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë',
							'Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö',
							'Ø','Ù','Ú','Û','Ü','Ý','Þ','€','\"','ß','<',
							'>','¢','£','¤','¥','¦','§','¨','©','ª','«',
							'¬','­','®','¯','°','±','²','³','´','µ','¶',
							'·','¸','¹','º','»','¼','½','¾');

	var entities = new Array ('amp','agrave','aacute','acirc','atilde','auml','aring',
								'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
								'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
								'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
								'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
								'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
								'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
								'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
								'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
								'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
								'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
								'sup2','sup3','acute','micro','para','middot','cedil','sup1',
								'ordm','raquo','frac14','frac12','frac34');

	newString = str;
	if (newString)
	{
		for (var i = 0; i < chars.length; i++)
		{
			myRegExp = new RegExp(chars[i],'g');
			newString = newString.replace (myRegExp, '&' + entities[i] + ';');
		}
	}
	return newString;
}

function sanitise(str)
{
	if (str)
	{
		str = str.replace(/[<>]/g, "");
	}
	return str;
}