REAL.PartLoader = (function () {

	// Private variables
	var _news, _newsMore, _newsTotal, _newsVisible, _newsInc,
		_readMore,
		_videos, _videosMore, _videosInc;


	// Public variables
	var obj					= {};


	// Private methods
	function init (element, inc) {

		if (inc === 0) {
			initPartLoaderRead();
		} else if (inc == 999){
			initPartLoaderVideo();
		} else {
			initPartLoader(element, inc);
		}
	}

	// PartLoader > news

	function initPartLoader (element, inc) {

		_newsInc	= inc;
		_news		= $(element);
		_newsTotal	= _news.size() - 1; // we take off one, because of the last article is actually the link of "more news"
		_newsVisible= 0;
		_newsMore	= _news.eq(_newsTotal).find("#load_more");

		if (_news.find("#load_all").size() > 0) {
			setupOneNew();
			return;
		}

		addEventListeners();

		// starting is hiding all of the news, and clicking the "more news button"
		_news.hide();
		_news.eq(_newsTotal).show();
		_newsMore.click();

		REAL.Navigation.setAsideHeight();
	}

	function addEventListeners () {

		_newsMore.bind("click", showMoreNews, false);
	}

	function showMoreNews (e) {
		// show the news
		_newsVisible += _newsInc;
		for (var i=0; i<_newsVisible; i++){
			if (_news.eq(i)) _news.eq(i).fadeIn("slow");
			else {
				_newsTotal.fadeOut("slow");
				break;
			}
		}
		// resize the aside
		setTimeout(function(){
			REAL.Navigation.setAsideHeight();
		}, 20);
		// cancel bubble
		return false;
	}

	function setupOneNew () {

		var loadAll = _news.find("#load_all"),
			loadMore = _news.find("#load_more");

		loadMore.hide();
		loadAll.bind("click", function (e) {
			loadAll.fadeOut("slow", function(){
				loadAll.parent().remove();
				loadMore.show();
				init("#news > article", 5);
			});
			return false;
		}, false);
	}

	// Part loader > tourdata


	function initPartLoaderRead () {

		_readMore = $("article a.read_more");
		_readMore.bind("click", readToggle, false);
	}

	function readToggle(e) {

		// check visibility
		var isVisible = ($(this).html() == "More");
		if (isVisible) readShow($(this).parent().find("table tr"), $(this));
		else readHide($(this).parent().find("table tr"), $(this));

		// resize the aside
		setTimeout(function(){
			REAL.Navigation.setAsideHeight(15);
		}, 20);

		return false;
	}

	function readHide($table, $link) {

		$table.each(function (index){
			if (index > 10) $(this).hide();
		});
		$link.html("More");
	}

	function readShow($table, $link) {

		$table.each(function (index){
			if (index > 10) $(this).css({opacity:0}).show().stop().delay(50*(index-10)).animate({opacity:1}, "normal");
		});
		$link.html("Less");
	}

	// Part loader > video


	function initPartLoaderVideo () {

		_videosInc	= 5;
		_videos		= $("#videos-to-load li");
		_videosMore	= $("#artists_video .read_more");

		addEventListenersVideos();

		REAL.Navigation.setAsideHeight(60);
	}


	function addEventListenersVideos () {

		_videosMore.bind("click", showMoreVideos, false);
	}

	function showMoreVideos (e) {

		// show the next _videosInc videos
		var videosLong = (_videos.size()<_videosInc)? _videos.size() : _videosInc;

		for (var i=0; i<videosLong; i++){
			var titulo = _videos.eq(i).attr("id"),
				url = _videos.eq(i).html(),
				html = '';

			html  = '<h2 class="video-alone">' + titulo.toUpperCase() + '</h2>';
			html += '<iframe class="youtube-player" type="text/html" width="558" height="343" src="' + url + '" frameborder="0"></iframe>';

			_videosMore.before(html);
		}
		// resize the aside
		setTimeout(function(){

			for (var i=0; i<videosLong; i++){
				_videos.eq(i).remove();
			}
			_videos = $("#videos-to-load li");

			if (videosLong < _videosInc) {
				_videosMore.fadeOut("slow");
				setAsideHeight();
			} else {
				REAL.Navigation.setAsideHeight(60);
			}

		}, 20);
		// cancel bubble
		return false;
	}


	// Public methods
	obj.init	= init;

	return obj;

})();

