var apiUrl;
var errorHtml;
var eventid;
var foreignTitle;
var filmTitle;
var directorName;
var arrayOfFilmsThatDontGetCenteredThumbs = [];
var apiResponse;
var alphaList = [];
function setupFilms() {
	$(".film-preview").live("mouseover", onFilmPreview);
	$(".film-preview").live("mouseout", onFilmPreviewHide);
	$(".film-preview").live("click", onFilmPreviewClick);
	$(".rotator-refresh").live("click", loadFilms);
	errorHtml = '<p>Could not load films. Please try again later. We apologize for the inconvenience.</p><p><a href="' + apiUrl + '" class="films-refresh">Click here to try reloading films.</a></p>';
	loadFilms();
}

function loadFilms() {
	var rotator = $("div.rotator");
	var root = rotator.attr("data-root");
	var filter = rotator.attr("data-filter");
	if(filter == undefined || filter == "") {
			filter = "*";
	}
	if(root == undefined || root == "") {
		root = "/filmsandschedules/tiffbelllightbox/2012";
	}
	apiUrl = "/api/eventrapi.aspx?cacheminutes=60&function=GetXmlFilmListByProgramme&apikey=seckey4tiff2011&programme=" + filter + "&pathname=" + root;
	$.ajax({
	    url: apiUrl,
		dataType: "xml",
		complete: onLoadFilms,
	});
}
function onLoadFilms(data, status) {
	if(status == "success") {
		parseFilmsResponse(data.responseXML);
	} else {
		$(".film-browser .message").html(errorHtml);
	}
}

function parseFilmsResponse(response) {
	apiResponse = response;
	var xml = $(apiResponse);
	$(".film-browser .message").text("").hide();
	buildRandomRotator();
	if(!$("div.rotator.async").hasClass("home")) {
		parseFilmListResponse();
		buildFilmNav();
	}
	setupRotator();
}
function buildRandomRotator() {
	//randomly load 5 images into the rotator;
	var rotator = $(".rotator");
	rotator.find(".slide").remove();
	var xml = $(apiResponse);
	var allFilmTitles = [];
	var selectedFilmTitles = [];
	xml.find("title").each(function() {
		if(jQuery.inArray($(this).text(), selectedFilmTitles) == -1) {
			allFilmTitles.push($(this).text());
		}
	});
	var randomTitle = 0;
	var maxSelections = 5;
	var slideCount = 0;
	if(maxSelections > allFilmTitles.length) maxSelections = allFilmTitles.length;
	for(var i = 0 ; i < maxSelections ; i++) {
		randomTitle = allFilmTitles[Math.floor(Math.random() * allFilmTitles.length)];
		if(jQuery.inArray(randomTitle, selectedFilmTitles) == -1) {
			selectedFilmTitles.push(randomTitle);
		} else {
			i--;
		}
	}
	xml.find("title").each(function() {
		if(jQuery.inArray($(this).text(), selectedFilmTitles) > -1) {
			var filmNode = $(this).parent();
			var eventid = filmNode.find("eventid").first().text();
			if(!filmNode.is("eventdata")) {
				var title = filmNode.find("article").first().text() + ' ' + filmNode.find("title").first().text();
				if(title.match(/\S/gi)) {
					var url = filmNode.find("url").first().text();
					var still = filmNode.find("still").first().text();
					if(still == undefined || still == '') {
						still = filmNode.find("original").first().text();
					}
					var filmpitch = filmNode.find("filmpitch").first().text();
					filmpitch = htmlTruncate(filmpitch, 320);
					filmpitch += ' <a href="' + url + '">Read&nbsp;more</a>';
					var slide = '<div class="slide">';
					slide += '<p><img src="' + still + '" alt="Still from ' + title + '" /></p>';
					slide += '<div class="info">'
					slide += '<h2>' + title + '</h2>';
					slide += '<p>' + filmpitch + '</p>';
					slide += '</div>';
					slide += '</div>';
					if(url.match(/\S/gi) && still.match(/\S/gi)) {
						$(".rotator").append(slide);
						slideCount++;
					}
					removeByElement(selectedFilmTitles, $(this).text());
				}
			}
		}
	});
}
//found here: http://www.roseindia.net/java/javascript-array/javascript-remove-an-element.shtml
function removeByElement(arrayName,arrayElement){
	for(var i=0; i<arrayName.length;i++ ) { 
		if(arrayName[i]==arrayElement)
		arrayName.splice(i,1); 
	} 
}

function parseFilmListResponse() {
	var fullList = '';
	var xml = $(apiResponse);
	$(".film-browser .film-preview").remove();
	var alpha = window.location.hash.substring(1,4);
	var isProgrammer = false;
	var thisProgrammer = '';
	var isProgramme = false;
	var thisProgramme = '';
	if($(".film-browser").hasClass("programmer")) {
		isProgrammer = true;
		thisProgrammer = $(".film-browser").attr("id");
		setupProgrammerNav();
	} else if($(".film-browser").hasClass("programme")) {
		isProgramme = true;
		thisProgramme = $(".film-browser").attr("id");
		setupProgrammeNav();
	} else {
		if(alpha == undefined || alpha == "") {
			alpha = "all";
			window.location.hash = "all";
		}
	}
	var filmCount = 0;
	xml.find("item").each(function() {
		if(isProgrammer || isProgramme || alpha == "all" || $(this).find("title").first().text().charAt(0).toLowerCase() == alpha) {
			var programmer = $(this).find("programmer").first().text();
			var programme = $(this).find("programmeshorttitle").first().text();
			var eventid = $(this).find("eventid").first().text();
			var isNextwave = false;
			if(thisProgramme == "nw") {
				$(this).find("tagitem").each(function() {
					var childEvent = $(this).children("eventid").first().text();
					var childTag = $(this).children("tagtext").first().text();
					if(childEvent == eventid) {
						if(childTag == "Next Wave (teenagers)") {
							isNextwave = true;
						}
					}
				});
			}
			programmer = programmer.toLowerCase();
			programmer = programmer.replace(/\s/gi, '-');
			if((isProgrammer && programmer == thisProgrammer) || (isProgramme && programme == thisProgramme) || !isProgrammer && !isProgramme || isNextwave) {
				var programmeShortTitle = $(this).find("programmeshorttitle").first().text();
				filmCount++;
				fullList += '<div class="film-preview">';
				var defaultImage = $(this).children("still").first().text();
				
				if(programmeShortTitle == 'wave') {
					programmeShortTitle = 'wl';
				}
				var title = $(this).find("article").first().text() + ' ' + $(this).find("title").first().text();
				title = htmlTruncate(title, 30);
				var filmPitch = $(this).find("filmpitch").first().text();
				var url = $(this).find("url").first().text();
				filmPitch = htmlTruncate(filmPitch, 320);
				if(programmeShortTitle == 'tiffkids') {
					programmeShortTitle = 'kid';
				}
				fullList += '<h3 class="' + programmeShortTitle + '">' + title + '</h3>';
				var imgClass = '';
				if(jQuery.inArray(title, arrayOfFilmsThatDontGetCenteredThumbs) > -1) {
					imgClass = "uncentered";
				} 
				fullList += '<p class="thumbnail"><img src="' + defaultImage + '" alt="" class="' + imgClass + '" /></p>';
				var programmeClass = programmeShortTitle.toLowerCase();
				filmPitch += ' <a href="' + url + '">Read&nbsp;more</a>';
				var programmeUrl = '/thefestival/filmprogramming/programmes/' + getProgrammeUrl(programmeShortTitle);
				var programmeButton = '<span class="programme-button ' + programmeClass + '">' + programmeShortTitle + '</span>';
				fullList += '<p class="film-pitch">' + filmPitch + programmeButton + '</p>';
				fullList += '</div>';
			}
		}
	});
	$(".film-browser #film-list").html(fullList);
	if(filmCount < 1) {
		$(".film-browser .message").text("No films available.").show();
	}
}
function buildFilmNav() {
	var xml = $(apiResponse);
	$("ol.film-nav li").live("click", onFilmNavClick);
	xml.find("item").each(function() {
		var alpha = $(this).find("title").first().text().charAt(0).toLowerCase();
		if(jQuery.inArray(alpha, alphaList) == -1) {
			alphaList.push(alpha);
		}
	});
	var alpha = window.location.hash.substring(1,4);
	var current = '';
	if(alpha == "all") {
			current = "current";
	}
	var filmNav = '<ol class="film-nav">';
	filmNav += '<li class="' + current + '">all</li>';
	for(var i = 0 ; i < alphaList.length ; i++) {
		current = '';
		if(alpha == alphaList[i]) {
			current = "current";
		}
		filmNav += '<li class="' + current + '">' + alphaList[i] + '</a></li>';
	}
	filmNav += '</ol>';
	$(".film-browser #film-nav-first").html(filmNav);
	$(".film-browser #film-nav-last").html(filmNav);
}
function onFilmNavClick() {
	var alpha = $(this).text();
	window.location.hash = alpha;
	$("ol.film-nav").each(function() {
		$(this).children("li").removeClass("current");
	});
	$(this).addClass("current");
	parseFilmListResponse();
}
function onFilmPreview() {
	$(this).children(".film-pitch").show();
	$(this).children(".programmer-quote").show();
}
function onFilmPreviewHide() {
	$(this).children(".film-pitch").hide();
	$(this).children(".programmer-quote").hide();
}
function onFilmPreviewClick() {
	var anchor = $(this).find("a");
	var url = anchor.attr("href");
	window.location = url;
	return false;
}

function htmlTruncate(htmlStr, len) {
	if(htmlStr.length > len) {
		htmlStr = htmlStr.substring(0, len);
		//fix for unclosed html when truncation happens
		var lastOpeningHtmlPosition = htmlStr.lastIndexOf("<em>");
		if(lastOpeningHtmlPosition > -1) {
			//check if the em is closed
			var lastClosingHtmlPosition = htmlStr.lastIndexOf("</em>");
			if(lastClosingHtmlPosition < lastOpeningHtmlPosition) {
				//trim a partial em
				var finalPosition = htmlStr.lastIndexOf("<");
				if(finalPosition < 0) {
					finalPosition = htmlStr.length;
				}
				htmlStr = htmlStr.substring(0, finalPosition);
				htmlStr += "</em>";
			}
		}
		htmlStr += "&hellip;";
	}
	return htmlStr;
}
