/*
 * hyCMS
 * Copyright(C)2008 by Friedrich Gräter
 * Published under the terms of the Lesser GNU General Public License v2
 *
 * Base contentView: Feed view (runtime functions)
 *
 * Requires AnimationKit: controller, opacity
 *
 */

/*
 * feed_get_view(uuid)
 *
 * Returns the view associated with given uuid
 *
 */
function feed_get_view(uuid)
{
	return document.getElementById("feed_"+uuid);	
}
 
/*
 * feed_get_uuid(view)
 *
 * Returns the uuid associated with the given feed.
 *
 */
function feed_get_uuid(view)
{
	return view.id.substr("feed_".length);
}
 
/*
 * feed_get_control(view, name)
 *
 * Returns a control with the given "name" that is
 * associated with the given feed "view". The name will
 * be resolved to the DOM id "feed_NAME_UUID".
 *
 */
function feed_get_control(view, name)
{
	var uuid = feed_get_uuid(view);

	return view.ownerDocument.getElementById("feed_"+name+"_"+uuid);
}
 
/*
 * feed_get_containers(view)
 *
 * Returns all containers of the given feed.
 *
 */
function feed_get_containers(view)
{
	var containers = [];
	var pages = feed_get_control(view, "pagesView");

	for (var idx = 0; idx < pages.childNodes.length; idx ++) {
		if (pages.childNodes[idx].className == "feedContainer")
			containers.push(pages.childNodes[idx]);
	}
	
	return containers;
}

/*
 * feed_get_pageView(view, page)
 *
 * Returns the element responsible for "page" of the given view.
 *
 */
function feed_get_pageView(view, page)
{
	var containers = feed_get_containers(view);
	
	return containers[page];
}

/*
 * feed_update_buttons_internal(feedView leftButton, rightButton, pageNumber, menuControl, containers)
 *
 * Updates the buttons and the page count of the given
 * feed view.
 *
 */
function feed_update_buttons_internal(feedView, leftButton, rightButton, pageNumber, menuControl, containers)
{
	var uuid = feed_get_uuid(feedView);
	var pageCount = containers.length;
	var currentPage = feedView.__shownPage;

	if (currentPage == null) {
		feedView.__shownPage = 0;
		currentPage = 0;
	}
	
	if (pageCount == 1) {
		// Don't show menu, if there is only one page
		menuControl.style.display = "none";
		return;
	}
	
	menuControl.style.display = "";

	// Show left button
	if (currentPage == 0) {
		leftButton.className = "feedButtonDisabled";
	}
	 else {
	 	leftButton.className = "feedButton";
	}

	// Show right button
	if (currentPage == pageCount - 1) {
		rightButton.className = "feedButtonDisabled";
	}
	 else {
	 	rightButton.className = "feedButton";
	}

	// Update page number
	pageNumber.innerHTML = (currentPage + 1) + "&nbsp;/&nbsp;"+ pageCount;
}

/*
 * feed_update_buttons(feedView)
 *
 * Updates the buttons and the page count of the given
 * feed view.
 *
 */
function feed_update_buttons(feedView)
{
	var leftButton = feed_get_control(feedView, "left");
	var rightButton = feed_get_control(feedView, "right");
	var pageNumber = feed_get_control(feedView, "pageNumber");
	var menuControl = feed_get_control(feedView, "menuControl");
	var containers = feed_get_containers(feedView);
	
	feed_update_buttons_internal(feedView, leftButton, rightButton, pageNumber, menuControl, containers);
}

/*
 * feed_switch_to_page(feedView, pageNr)
 *
 * Switches the feed view to another page
 *
 */
function feed_switch_to_page(feedView, pageNr)
{
	var currentPage = feedView.__shownPage;
	var currentPageView = feed_get_pageView(feedView, currentPage);
	var nextPageView = feed_get_pageView(feedView, pageNr);

 	ak_applyAnimation("opacity", currentPageView, {destOpacity: 0, destDisplay: "none", srcDisplay: ""}, 200, true, null); 
 	ak_applyAnimation("opacity", nextPageView, {destOpacity: 1.0, destDisplay: "", srcDisplay: ""}, 200, true, null);
	
	feedView.__shownPage = pageNr;
	
	feed_update_buttons(feedView);
}

/*
 * feed_button_clicked_internal(view, direction)
 *
 * Handler for clicks on a button. "direction" is the
 * direction which the feed should show the next page from.
 *
 */
function feed_button_clicked_internal(feedView, direction)
{
	var currentPage = feedView.__shownPage;
	var containers = feed_get_containers(feedView);
	var pageCount = containers.length;

	if (currentPage == null) {
		feedView.__shownPage = 0;
		currentPage = 0;
	}
		
	if (currentPage + direction < 0) return;
	if (currentPage + direction >= pageCount) return;
	
	feed_switch_to_page(feedView, currentPage + direction);
}

/*
 * feed_button_clicked(uuid, direction)
 *
 * Handler for clicks on a button. "direction" is the
 * direction which the feed should show the next page from.
 *
 */
function feed_button_clicked(uuid, direction)
{
	var feedView = feed_get_view(uuid);

	feed_button_clicked_internal(feedView, direction);
}


