var Content = {

	videoHandler: null,
	
	requestedVideos: null,
	triedVideoObserver: null,
	defaultVideoContent: null,
	firstVideoCall: null,
	
	type: null,
	append: null,
	
	keywords: null,
	videoContainer: "videoContainer",
	
	artistInit: function(keywords) {
		Content.keywords = keywords;
		Content.requestedVideos = false;
		Content.triedVideoObserver = false;
		Content.firstVideoCall = true;
		
		Content.type = "artist";
	},
	
	albumInit: function(keywords, append) {
		Content.keywords = keywords;
		Content.requestedVideos = false;
		Content.triedVideoObserver = false;
		Content.firstVideoCall = true;
		
		Content.append = append;
		Content.type = "album";
	},
	

	resetVideos: function() {
		$(Content.videoContainer).innerHTML = Content.defaultVideoContent;
		Content.videoRequest();
	},
	
	request: function(handler, callback) {
		new Ajax.Request(handler,
			{
				method: "GET",
				parameters: "keywords=" + Content.keywords + "&type=" + Content.type + "&append=" + Content.append, 
				onComplete: callback
			});
	},
	

	videoRequest: function() {
		if (Content.firstVideoCall) {
			Content.firstVideoCall = false;
			Content.defaultVideoContent = $(Content.videoContainer).innerHTML;
		}

		if (!Content.requestedVideos) {
			$(Content.videoContainer).innerHTML = Content.defaultVideoContent;
			Content.requestedVideos = true;
			
			Content.request(Content.videoHandler,
				function(response) {
					if (!Content.isError(response)) {
						$(Content.videoContainer).innerHTML = response.responseText;
						
						if ($(Content.videoContainer).getElementsByClassName("result").length == 0) {
							Content.requestedVideos = false;
							
							if (!Content.triedVideoObserver) {
								Content.triedVideoObserver = true;
								Observer.video(Content.keywords);
							} else {
								$(Content.videoContainer).innerHTML = "<p>No videos found.</p>";
							}
						}
					} else {
						Content.requestedVideos = false;
					}
				});
		}
	},
	

	
	/*
	 * Determines whether the response is an error page or a
	 * genuine response.
	 * If an error page is found then it is displayed.
	 */
	isError: function(response) {
		// Responses pages don't start like this.
		var check = new Array("<html>", "<!DOCTYPE");

		// The request returned an entire page; probably an error.
		for (var i=0; i < check.length; i++) {
			if (response.responseText.substring(0, check[i].length) == check[i]) {
				document.open();
				document.write(response.responseText);
				document.close();
				return true;
			}
		}
			
		return false;
	}

};

var Tabs = {

	open: function(target, navItem, parent) {
		navItem.blur();

		var navItems = parent.getElementsByClassName("navigation")[0].getElementsByTagName("a");

		for (var i = 0; i < navItems.length; i++) {
			if (navItems[i] == navItem)
				navItems[i].addClassName("active");
			else
				navItems[i].removeClassName("active");
		}

		var tabs = parent.getElementsByClassName("tab");
	
		for (var i = 0; i < tabs.length; i++) {
			if (tabs[i] == target)
				tabs[i].addClassName("active");
			else
				tabs[i].removeClassName("active");
		}

	}

};

function youTubeVideoPopup(videoId) {
	var root = "/MusicMash2";
	//var root = "";
	var w=640,h=480;
	window.open(root + "/youtube_popup.jsp?v=" + videoId,
		"YouTube Video (" + videoId + ")",
		"width=" + w + ",height=" + h + "," +		
		"status=0,toolbar=0,location=0,menubar=1,resizable=1,scrollbars=1");
}

var Observer = {

	delay: 5000,

	musicinfoHandler: null,
	taggrHandler: null,

	musicinfoMBID: null,
	musicinfoType: null,

	videoKeywords: null,
	imageKeywords: null,
	
	getStatus: function(response) {
		return response.responseXML.documentElement.firstChild.firstChild.firstChild.nodeValue;
	},

	musicinfo: function(mbid, type) {
		Observer.musicinfoMBID = mbid;
		Observer.musicinfoType = type;

		setTimeout('Observer.musicinfoRequest()', Observer.delay);
	},
	
	musicinfoRequest: function() {
		new Ajax.Request(Observer.musicinfoHandler,
		{
			method: "GET", 
			parameters: "mbid=" + Observer.musicinfoMBID + "&type=" + Observer.musicinfoType, 
			onComplete: Observer.musicinfoResponse
		});
	},
	
	musicinfoResponse: function(response) {
		var status = Observer.getStatus(response);

		if (status == "complete")
			window.location = window.location;
		else
			setTimeout('Observer.musicinfoRequest()', Observer.delay);
	},

	video: function(keywords) {
		Observer.videoKeywords = keywords;

		setTimeout('Observer.taggrRequest(Observer.videoResponse)', Observer.delay);
	},
	
	taggrRequest: function(fnResponse) {
		new Ajax.Request(Observer.taggrHandler,
		{
			method: "GET", 
			parameters: "keywords=" + Observer.videoKeywords, 
			onComplete: fnResponse
		});
	},
	
	videoResponse: function(response) {
		var status = Observer.getStatus(response);

		if (status == "complete")
			Content.videoRequest();
		else
			setTimeout('Observer.taggrRequest(Observer.videoResponse)', Observer.delay);
	}
	
}

var SearchType = {

	choose: function(searchType, item) {
		$("searchBoxType").value = searchType;
		item.blur();

		var items = $("searchType").getElementsByTagName("li");

		for (var i = 0; i < items.length; i++) {
			if (items[i] == item)
				items[i].addClassName("active");
			else
				items[i].removeClassName("active");
		}
	}

}

