
var galleryHandler	= {
	
	objGallery				: [],
	pathJwplayerBase		: appGlobals.PATH_STATIC + "js/jwplayer/",
	pathJwplayerSkins		: appGlobals.PATH_STATIC + "web/gallery/jwplayer_skins/",
	domBaseGallery			: "gallery_container",
	domBaseBackground		: "gallery_background",
	domBaseNavigation		: "gallery_navigation",
	domBaseList				: "gallery_list",
	domBaseListItem			: "gallery_list_item",
	domBaseListOuter		: "gallery_list_outer_container",
	domBaseJwplayer			: "gallery_jwplayer_container",
	domBaseJwplayerOuter	: "gallery_jwplayer_outer_container",
	domBaseFooter			: "gallery_footer",
	domBaseCaption			: "gallery_caption",
	domBaseIndicator		: "gallery_indicator",
	domBaseItemPrev			: "gallery_link_prev",
	domBaseItemNext			: "gallery_link_next",
	galleryFooterHeight		: 30,
	galleryFooterLineHeight	: 30,
	galleryWidth			: 610,
	galleryItemRegHeight	: 344,	/* Home format (16:9) =  610 x 344	*/
	galleryItemWideHeight	: 262,	/* Wide format (21:9) = 610 x 262	*/
		
	init : function(){
		$("body").bind("url_loaded", function(e){
			if(e.module == 'gallery'){
				appUtils.log('galleryHandler, init content');
				// ######################################################
				// e.returnData.vars.gallery_data.gallery_id
				//contentHandler.setContentForUrl(e.url, e.returnData.html);
				//galleryHandler.render(e.returnData.vars);
			}
		});
	},
	
	render: function (vars, callback) {
				
		if (vars.gallery_data.gallery_id) {
			var currentGalleryID	= vars.gallery_data.gallery_id;
			var baseID				= appUtils.fetchRandId();

			appUtils.log("Initializing gallery id="+currentGalleryID + "-" + vars.gallery_data.layout_type_id);
			
			//Fill gallery object with media item data
			galleryHandler.objGallery[currentGalleryID]						= vars.gallery_data;
			galleryHandler.objGallery[currentGalleryID].num_items			= vars.gallery_data.items.length;
			galleryHandler.objGallery[currentGalleryID].current_index		= 0;
			galleryHandler.objGallery[currentGalleryID].isInitJwplayer		= false;
			galleryHandler.objGallery[currentGalleryID].isItemToggling		= false;
			galleryHandler.objGallery[currentGalleryID].dom_id				= vars.gallery_data.gallery_dom_id;
			galleryHandler.objGallery[currentGalleryID].layout_type_id		= vars.gallery_data.layout_type_id;	//0: home (16:9),  1: overig (21:9)

			switch (galleryHandler.objGallery[currentGalleryID].layout_type_id) {
				default:
					/* regular container for pages other than "home" */
					galleryHandler.objGallery[currentGalleryID].layout_item_height	= galleryHandler.galleryItemRegHeight;
				break;
				case 1:
					/* extra wide container for pages other than "home" */
					galleryHandler.objGallery[currentGalleryID].layout_item_height	= galleryHandler.galleryItemWideHeight;
				break;
			}
			galleryHandler.objGallery[currentGalleryID].layout_width			= galleryHandler.galleryWidth;
			galleryHandler.objGallery[currentGalleryID].layout_height			= galleryHandler.objGallery[currentGalleryID].layout_item_height + galleryHandler.galleryFooterHeight;
			galleryHandler.objGallery[currentGalleryID].layout_footer_height	= galleryHandler.galleryFooterHeight;
			galleryHandler.objGallery[currentGalleryID].layout_footer_lheight	= galleryHandler.galleryFooterLineHeight;
			
			if (isdom(galleryHandler.objGallery[currentGalleryID].dom_id)) {
				
				galleryHandler.objGallery[currentGalleryID].nav_dom_id			= galleryHandler.domBaseNavigation		+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].bg_dom_id			= galleryHandler.domBaseBackground		+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].list_dom_id			= galleryHandler.domBaseList			+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].list_out_dom_id		= galleryHandler.domBaseListOuter		+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].jw_dom_id			= galleryHandler.domBaseJwplayer		+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].jw_out_dom_id		= galleryHandler.domBaseJwplayerOuter	+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].footer_dom_id		= galleryHandler.domBaseFooter 			+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].caption_dom_id		= galleryHandler.domBaseCaption			+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].indicator_dom_id	= galleryHandler.domBaseIndicator		+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].item_prev_dom_id	= galleryHandler.domBaseItemPrev		+ "_" + baseID + "_" + currentGalleryID;
				galleryHandler.objGallery[currentGalleryID].item_next_dom_id	= galleryHandler.domBaseItemNext		+ "_" + baseID + "_" + currentGalleryID;
				
				//appUtils.log(galleryHandler.objGallery[currentGalleryID]);
	
				/* Render container HTML */
				galleryHandler.renderContainer(currentGalleryID);
				
				/* Loop through all items in current gallery */
				$(galleryHandler.objGallery[currentGalleryID].items).each(function(i,item){
					
					item.dom_id		= galleryHandler.domBaseListItem + "_" + baseID + "_" + currentGalleryID + "_" + item.media_id;
					item.index		= i;
					
					galleryHandler.renderMediaItem(currentGalleryID, item);
					
				});
				
				/* Render navigation */
				galleryHandler.renderNavigation(currentGalleryID);
				
				/* Show first item */
				galleryHandler.toggleGalleryItem(currentGalleryID, "none", 0);
				
				/* Clean-up primary dom_id container */
				//$('#'+galleryHandler.objGallery[currentGalleryID].dom_id).css({"height":""});
				
				
				/* Execute callback */
				try {
					callback();
				} catch (e) {}
				
			} else {
				appUtils.log("dom element with id '"+galleryHandler.objGallery[currentGalleryID].dom_id+"' does not exist! Cannot render gallery.");
			}
		}
		
	},
	
	renderContainer: function (gallery_id) {
		
		var jQcontainer	= '#'+galleryHandler.objGallery[gallery_id].dom_id;

		$(jQcontainer).addClass("gallery_container");
		$(jQcontainer).css({"height":galleryHandler.objGallery[gallery_id].layout_height+"px", "width":galleryHandler.galleryWidth+"px"});
				
		$('<div/>', {'id':galleryHandler.objGallery[gallery_id].bg_dom_id, 'class':'gallery_background', 'html':''}).appendTo(jQcontainer);
		
		$('<div/>', {'id':galleryHandler.objGallery[gallery_id].jw_out_dom_id, 'class':'gallery_jwplayer_outer_container', 'html':''}).appendTo(jQcontainer);
		$('<div/>', {'id':galleryHandler.objGallery[gallery_id].jw_dom_id, 'class':'gallery_jwplayer_container', 'html':''}).appendTo('#'+galleryHandler.objGallery[gallery_id].jw_out_dom_id);
		
		$('<div/>', {'id':galleryHandler.objGallery[gallery_id].list_out_dom_id, 'class':'gallery_list_outer_container', 'html':''}).appendTo(jQcontainer);
		$('<div/>', {'id':galleryHandler.objGallery[gallery_id].list_dom_id, 'class':'gallery_list', 'html':''}).appendTo('#'+galleryHandler.objGallery[gallery_id].list_out_dom_id);
		
		/*
				<div id="{{ gallery_data.gallery_id }}" class="gallery_container">
		
					<div id="gallery_background_{{ gallery_data.gallery_id }}" class="gallery_background"></div>
		
					<div id="gallery_jwplayer_outer_container_{{ gallery_data.gallery_id }}" class="gallery_jwplayer_outer_container">
						<div id="gallery_jwplayer_container_{{ gallery_data.gallery_id }}" class="gallery_jwplayer_container"></div>
					</div>
					
					<div id="gallery_list_outer_container_{{ gallery_data.gallery_id }}" class="gallery_list_outer_container">
						<ul id="gallery_list_{{ gallery_data.gallery_id }}" class="gallery_list"></ul>
					</div>
		
				</div>
		*/		
	},
	
	renderNavigation: function (gallery_id) {
		
		if (galleryHandler.objGallery[gallery_id].items.length>1) {
			$('<div/>', {'id':galleryHandler.objGallery[gallery_id].item_prev_dom_id , 'class':'gallery_link_prev', 'html':''}).appendTo('#'+galleryHandler.objGallery[gallery_id].dom_id);
			$('<div/>', {'id':galleryHandler.objGallery[gallery_id].item_next_dom_id , 'class':'gallery_link_next', 'html':''}).appendTo('#'+galleryHandler.objGallery[gallery_id].dom_id);
		
			/* Initialize listener to toggle to previous gallery item */
			$('#'+galleryHandler.objGallery[gallery_id].item_prev_dom_id).bind('click', function(ev){
				//Show next gallery item
				galleryHandler.toggleGalleryItem(gallery_id, "prev");
			});
			
			/* Initialize listener to toggle to next gallery item */
			$('#'+galleryHandler.objGallery[gallery_id].item_next_dom_id).bind('click', function(ev){
				//Show next gallery item
				galleryHandler.toggleGalleryItem(gallery_id, "next");
			});
		}
		
	},
	
	renderMediaItem: function (gallery_id, item) {
		
		$('<li/>', {'id':item.dom_id, 'class':''}).appendTo('#'+galleryHandler.objGallery[gallery_id].list_dom_id);
		$('#'+item.dom_id).css({"width":galleryHandler.galleryWidth+"px"});
		
		switch (item.media_type_id) {
			default:
				$('<img/>', {'src':item.url, 'height':galleryHandler.objGallery[gallery_id].layout_item_height}).appendTo('#'+item.dom_id);
			break;
			case 3:
				$('<img/>', {'src':appGlobals.IMG_SRC_1PIX, 'height':galleryHandler.objGallery[gallery_id].layout_item_height}).appendTo('#'+item.dom_id);
				galleryHandler.setupJwplayer(gallery_id);
			break;
		}

		var txt_indicator	= (item.index+1) + " of " + galleryHandler.objGallery[gallery_id].num_items;
		var footer_dom_id	= galleryHandler.objGallery[gallery_id].footer_dom_id + '_' + item.media_id;
		
		$('<div/>', {'id':footer_dom_id, 'class':'gallery_footer'}).appendTo('#'+item.dom_id);
		$('#'+footer_dom_id).css({"height":galleryHandler.objGallery[gallery_id].layout_footer_height+"px", "line-height":galleryHandler.objGallery[gallery_id].layout_footer_lheight+"px"});
		
		$('<div/>', {'html':item.caption, 'class':'gallery_caption'}).appendTo('#'+footer_dom_id);
		if (galleryHandler.objGallery[gallery_id].items.length>1) {
			$('<div/>', {'html':txt_indicator, 'class':'gallery_indicator'}).appendTo('#'+footer_dom_id);
		}
		
	},
	
	toggleGalleryItem: function (gallery_id, direction, index) {
		
		appUtils.log('toggling: '+direction+' index: '+index);
		
		if (galleryHandler.objGallery[gallery_id].isItemToggling) {
			
			//Toggle in progress!
			return;
			
		} else {
			
			galleryHandler.objGallery[gallery_id].isItemToggling	= true;
			
			switch (direction) {
				case "prev":
					galleryHandler.objGallery[gallery_id].current_index	= (galleryHandler.objGallery[gallery_id].current_index + galleryHandler.objGallery[gallery_id].num_items - 1)	%	galleryHandler.objGallery[gallery_id].num_items;
					index 												= galleryHandler.objGallery[gallery_id].current_index;
				break;
				case "next":
					galleryHandler.objGallery[gallery_id].current_index	= (galleryHandler.objGallery[gallery_id].current_index + 1)	%	galleryHandler.objGallery[gallery_id].num_items;
					index 												= galleryHandler.objGallery[gallery_id].current_index;
				break;
			}
					
			appUtils.log("gallery_id=" + gallery_id + ", index=" + index);
			
			//Hide all items
			$('#' + galleryHandler.objGallery[gallery_id].list_dom_id + ' > li').each(function(i,item){
				$(item).fadeOut(0);
			});
			
			//Init target item
			switch (galleryHandler.objGallery[gallery_id].items[index].media_type_id) {
				default:
					galleryHandler.hideJwplayer(gallery_id);
				break;
				case 3:
					appUtils.log("Initialize video object!");
					galleryHandler.loadJwplayer(gallery_id, galleryHandler.objGallery[gallery_id].items[index]);
				break;
			}
			
			//Update indicator
			//$('#'+galleryHandler.objGallery[gallery_id].indicator_dom_id).html((index+1) + ' of ' + galleryHandler.objGallery[gallery_id].num_items);
			
			//Show target item
			$('#'+galleryHandler.objGallery[gallery_id].items[index].dom_id).fadeIn(400, function(){
				galleryHandler.objGallery[gallery_id].isItemToggling	= false;
			});
			
		}
		
	},
	
	setupJwplayer: function (gallery_id) {
		appUtils.log("Initializing media player...");
		//	try {
			jwplayer(galleryHandler.objGallery[gallery_id].jw_dom_id).setup({
				flashplayer: galleryHandler.pathJwplayerBase+"player.swf",
				skin: galleryHandler.pathJwplayerSkins+"hg.zip",
				width: galleryHandler.objGallery[gallery_id].layout_width,
				height: galleryHandler.objGallery[gallery_id].layout_item_height,
				wmode: "transparent",
				controlbar: {idlehide: true},
				logo: {
					/* Works in registered version only */
					hide: true
					/* file: galleryHandler.pathJwplayerSkins+"jwplayer_logo.png" */
				},
				events: {
					onError : function(err){
						appUtils.debug('JWP onError ' + err)
					},
					onPlaylist : function(){
						//PPGContext.debug('onPlaylist');
					},
					onReady : function(){
						//PPGContext.debug('onReady');
						galleryHandler.objGallery[gallery_id].isInitJwplayer	= true;
					}
				}
			});
		//} catch (e) {
			//appUtils.log("Error loading jwplayer!");
			//galleryHandler.isInitJwplayer	= false;
		//}
	},

	hideJwplayer: function (gallery_id) {
		//try {
			var targetID	= galleryHandler.objGallery[gallery_id].jw_dom_id;
			var containerID	= galleryHandler.objGallery[gallery_id].jw_out_dom_id;
			//appUtils.log("Hide "+targetID);
			$('#'+targetID).css('z-index', '998');
			$('#'+containerID).css('z-index', '998');
			if(jwplayer(targetID).getState()){
				jwplayer(targetID).stop();
			}
		//} catch (e) {}
	},
	
	loadJwplayer: function (gallery_id, data) {
		//try {
			var targetID	= galleryHandler.objGallery[gallery_id].jw_dom_id;
			var containerID	= galleryHandler.objGallery[gallery_id].jw_out_dom_id;
			//appUtils.log("Show " + targetID + " and load " + data.url);
			jwplayer(targetID).load([{ file: data.url, image: data.thumb_url }]);
			$('#'+targetID).css('z-index', '1001');
			$('#'+containerID).css('z-index', '1001');
		//} catch (e) {}
	}
		
};

