//current gallery
//basic format {id:uint, children:[], selected:uint}
var gallery 		= false;
var galleryCount 	= 0;

//set current gallery
//only for multi gallery
//set by link listner in deeplink
function initGallery(galleryId)
{
	if(isMulitGallery())
	{
		//store current id
		pageData.currentGallery = galleryId;

		//if a gallery array doesnt exist, create one
		if(pageData.gallery == undefined || !pageData.gallery)
		{
			pageData.gallery = [];
		}
		
		//if the gallery doesnt have a indexed entry
		if(pageData.gallery[galleryId] == undefined)
		{		
			//create gallery object,
			//try to represent the data object 
			//you would get back from a browser datacall
			//default is the item at zero
			pageData.gallery[galleryId] = {id:galleryId, children:getGalleryChildren(galleryId), selected:0, type:"multimedia"};
			refreshPageData(pageData);
		}
		
		//set current gallery
		gallery = pageData.gallery[galleryId];
	}
	else if(pageData.current.type == "gallery" || pageData.current.type == "videolist")
	{
		if(pageData.current.children == undefined)
		{
			pageData.current.children = getGalleryChildren(galleryId);
			refreshPageData(pageData);
		}
		gallery = pageData.current;
	}
}

function getGalleryChildren(galleryId)
{
	//get children
	var gc = [];
	$("#component_"+galleryId+' .gallerylist li').each(
		function()
		{
			var atts 		= $(this).html();
			atts 			= atts.split(',');
			var img 		= {filename:atts[0], uri:atts[1]};
			img.filename 	= (img.filename).replace(" ", "");
			img.uri 		= (img.uri).replace(" ", "");
			gc.push(img);
		}
	);
	return gc;
}

//update gallery item
//called from deeplink
//when nav is clicked or 
//when the swfadd is a gallery add
function updateGallery()
{
	if(((gallery && gallery.id != pageData.current.id) || !gallery) && pageData.current.type != "multimedia")
	{
		var gallery_id = pageData.current.id;
		initGallery(gallery_id);
	}
	if(gallery.children != undefined)
	{
		gallery.lastSelected = gallery.selected;
		if(gallery.lastSelected == undefined && gallery.type == "multimedia")
		{
			gallery.lastSelected = 0;
		}
		galleryCount = gallery.children.length;
		debug(galleryDebug, "id: "+gallery.id+", type:"+gallery.type+", length:"+galleryCount+", selected:"+gallery.selected);
		//if has a gallery with more than one item
		if(galleryCount > 1)
		{		
			if(gallery.type == "multimedia")
			{
				//increment current position
				if($("#component_"+gallery.id+' .galleryblock_nav .arrow_nav').size() > 0)
				{
					//arrow navigation
					if(atag.hasClass('next'))
					{
						gallery.selected = increment(gallery.selected, 1, galleryCount);
					}
					else if(atag.hasClass('prev'))
					{
						gallery.selected = increment(gallery.selected, -1, galleryCount);
					}
				}
				else
				{
					//not arrow navigation
					var nav = $("#component_"+gallery.id+' .galleryblock_nav .galleryblock_container ul li');
					if(nav.size() == galleryCount)
					{
						compareSelectedChild(nav.children());
					}
				}
			}
			else
			{
				//if its not a multi gallery then 
				//the selected item must be processed via the url
				compareSelectedChild(gallery.children);
			}
			
			debug(galleryDebug, "now id: "+gallery.id+", type:"+gallery.type+", length:"+galleryCount+", selected:"+gallery.selected);
			
			//if not the same index
			if(gallery.selected != gallery.lastSelected)
			{
				//update gallery
				updateGalleryItem();
				
				//update gallery navigation
				updateGalleryNavigation();
			}
		}
	}
}

function compareSelectedChild(a)
{
	for(var i=0; i < galleryCount; i++)
	{
		var c = a[i];
		if(gallery.type != "multimedia")
		{
			if(c.uri == gallery_url)
			{
				gallery.selected = i;
				break;
			}
		}
		else
		{
			if(c.find('a').size() > 0 && c.find('a').attr('href') == atag.attr('href'))
			{
				gallery.selected = i;
				break;
			}
		}
	}
}

///////////////////////////
// UPDATE FUNC
//////////////////////////

function toggleGalleryInfo()
{
	var info = '';
	var newGalleryItem = gallery.children[gallery.selected];
	if(newGalleryItem.info != undefined && newGalleryItem.info != "")
	{
		info = newGalleryItem.info;
	}
	
	removeActualHeight($('.galleryblock_info .scroll_wrap'));
	
	//if info
	if(info != '')
	{
		//show info
		if($('.galleryblock_info_bg, .galleryblock_info').size() == 0)
		{
			//create info
			var infohtml = '<div class="galleryblock_info_bg"></div><div class="galleryblock_info"><div class="scroll_wrap"></div></div>';
			$('#gallery_'+gallery.id+' .galleryfocus').append(infohtml);
		}
		$('.galleryblock_info .scroll_wrap').html(info);
		$('.galleryblock_info_bg, .galleryblock_info').show();
	}
	else
	{
		//remove info
		$('.galleryblock_info .scroll_wrap').html('');
		$('.galleryblock_info_bg, .galleryblock_info').hide();
	}
	
}

function updateGalleryItem()
{
	var newGalleryItem = gallery.children[gallery.selected];
	var selector = false;
	if($('#gallery_'+gallery.id).size() > 0)
	{
		debug(galleryDebug, "update image gallery");
		selector = '#gallery_'+gallery.id;
		updateImageGallery(newGalleryItem, selector);
	}
	else if($('#video_'+gallery.id).size() > 0)
	{
		updateVideoGallery(newGalleryItem, '#video_'+gallery.id);
	}
}

///////////////////////////
// GALLERY UPDATE FUNC
//////////////////////////

function updateImageGallery(newGalleryItem, preloaderBox)
{
	var ele = getGalleryFadeElement();
	if(!areGalleryItemsSame(ele, newGalleryItem))
	{
		$('#gallery_'+gallery.id+' .scroll_wrap').height('100%').removeAttr('ah');
		ele.animate({"opacity": 0}, 200, "linear", 
			function()
			{
				if(!is_mobile)
				{
					toggleGalleryInfo();
				}
			
				$(this).css('visibility', 'hidden');
				var img = $(this).find('.focus img');
				if(img.size() > 0)
				{
					img.attr('alt', '').attr('title', '');
					
					//wrap image
					img.wrap('<div class="imgw" />');
					
					//current image height, width
					var ch = img.height();
					var cw = img.width();
					
					removeActualHeight(img);
					removeActualWidth(img);
					img.css('width', '').css('height', '').css('max-width', '').css('max-height', '');
					
					var pimg = img.parent();
					pimg.css('overflow', 'hidden');
					pimg.height(ch).width(cw);
					
					var srca = ((img.attr('src')).replace(site_url, '')).split('/');
					if(srca.length >= 2)
					{
						if(srca[0] == 'images')
						{
							srca[1] = newGalleryItem.filename;
							var src = site_url+srca.join('/');
							
							showGalleryPreloader(preloaderBox);
							
							img.load(
								function()
								{
									if($(this).attr('src') == src)
									{
										$(this).unbind('load').unwrap();
										$('#gallery_'+gallery.id+' .scroll_wrap').html(newGalleryItem.info);
										if(!is_mobile)
										{
											processPage();
										}
										else
										{
											resizeGalleryItem($(this));
										}
										hidePreloader($(preloaderBox), onGalleryPreloaderHidden);
									}
								}
							); 
							
							debug(galleryDebug, "update image src to:"+src);
							img.attr('src', src);
						}
					}
				}
			}
		);
	}
}

function areGalleryItemsSame(c, n)
{
	var img = c.find('.focus img');
	if(img.size() > 0 && img.attr('src') != undefined)
	{
		var csrc = ((img.attr('src')).replace(site_url, '')).split('/');
		if(csrc.length >= 2 && csrc[0] == 'images' && csrc[1] == n.filename)
		{
			return true;
		}
	}
	return false; 
}

function showGalleryPreloader(selector)
{
	if(selector)
	{
		var preloaderBox = null;
		if(pageData.current.type == 'multimedia')
		{
			preloaderBox = $(selector);
		}
		showPreloader(preloaderBox);
	}
}

function onGalleryPreloaderHidden()
{
	if(!preloaderHideFuncCalled)
	{
		var ele = getGalleryFadeElement();
		ele.css('visibility', '');
		ele.animate({"opacity": 1}, 200, "linear", function(){$(this).css('opacity', '');});
	}
}

///////////////////////////
// VIDEO UPDATE FUNC
//////////////////////////

function updateVideoGallery(newGalleryItem, videoSelector)
{
	var video_src = site_url+'flvs/'+newGalleryItem.filename;
	debug(rendererDebug, "update video gallery, new src: "+video_src);
	if(!$(videoSelector).is('object'))
	{
		//if not flash then update image and content
		
		//faed out current image
		$(videoSelector).find('.thumb img').animate({"opacity": 0}, 500, "linear",
			
			function()
			{
				//show preloader
				showGalleryPreloader(videoSelector);
			
				//once faded out set load listener
				$(this).load(
					function()
					{
						//once loaded hide preloader
						hidePreloader($(videoSelector), onVideoImagePreloaderHidden);
					}
				);
				
				//set new value
				$(this).attr('src', video_src+'/thumb');
			}
		);
		
		//set other content
		if(newGalleryItem.title == null)
		{
			newGalleryItem.title = '';
		}
		$(videoSelector).find('.vinfo').html(newGalleryItem.title+'<br />'+newGalleryItem.caption);
		$(videoSelector).find('.media').attr('href', video_src);
	}
	else
	{
		debug(rendererDebug, "update flash video, id:"+videoSelector);
		updateSource($(videoSelector), video_src);
		
		//setting the videoSelector to false
		//doesnt show preloader
		videoSelector = false;
	}
	return videoSelector;
}

function onVideoImagePreloaderHidden()
{
	if(!preloaderHideFuncCalled)
	{
		$('#video_'+gallery.id+' .thumb img').animate({"opacity": 1}, 500, "linear", function(){$(this).css('opacity', '');});
	}
}

///////////////////////////
// NAV FUNC
//////////////////////////

function updateGalleryNavigation()
{
	var gn = $("#component_"+gallery.id+" .galleryblock_nav");
	if(gn.size() == 0)
	{
		gn = $("#sticky_gallery_nav .galleryblock_nav");
	}
	if(gn.size() > 0)
	{
		if(gn.find('.arrow_nav').size() > 0)
		{
			//arrows
			gn.find('.arrow_nav .focus').html(gallery.selected+1);
			gn.find('.navs').css('visibility', 'hidden');
			if(galleryCount > 1)
			{
				var next = increment_val(gallery.children, gallery.selected, 1);
				if(next >= 0)
				{	
					next = gallery.children[next];
					gn.find('.next').attr('href', page_url+"/"+next.uri);
					gn.find('.next').css('visibility', 'visible');
				}
				var prev = increment_val(gallery.children, gallery.selected, -1);
				if(prev >= 0)
				{	
					prev = gallery.children[prev];
					gn.find('.prev').attr('href', page_url+"/"+prev.uri);
					gn.find('.prev').css('visibility', 'visible');
				}
			}
		}
		else if(gn.find('a.gcarousel').size() > 0)
		{
			var list = gn.find('.galleryblock_container ul');
			if(list.size() > 0 && list.children().length > 1)
			{
				if(gallery.lastSelected == undefined)
				{
					gallery.lastSelected = list.find('li').not('li a').index();
				}
				
				//if carousel
				//find non link make link
				toggleGalleryNavigationLink(list, gallery.lastSelected, true);
				
				//make selected item non link
				toggleGalleryNavigationLink(list, gallery.selected, false);
				
				//update link listners
				addLinkClickListeners();
			}
		}
	}
}

function toggleGalleryNavigationLink(list, index, add)
{
	if(gallery.children.length > index)
	{
		
		var listitem = list.find('li:eq('+index+')');
		if(listitem.size() > 0)
		{
			html = index;
			if(add)
			{
				html = listitem.html();
				if(listitem.find('a').size() == 0)
				{
					html = '<a href="'+site_url+page_url+"/"+gallery.children[index].uri+'">'+html+'</a>';
				}
			}
			else
			{
				html = listitem.find('a').html();
			}
			listitem.html(html);
		}
	}
}

///////////////////////////
// MISC
//////////////////////////

function hasMobileGallery(li)
{
	if(li.find('.galleryblock_nav').size() > 0)
	{
		return true;
	}
	return false;
}

function isGalleryClicked(atag)
{
	if(atag.size() > 0 && atag.closest('.galleryblock_nav').size() > 0)
	{
		//get id e.g. carousel_14335
		return (atag.closest('.galleryblock_nav').attr('id')).replace('carousel_', '');
	}
	return false;
}

//checks to see if this gallery is a multi gallery
function isMulitGallery()
{
	if(pageData.current.type == "multimedia")
	{
		return true;
	}
	return false;
}

function getGalleryFadeElement()
{
	var ele = $('#gallery_'+gallery.id+' .gallerywrap');
	if(is_mobile)
	{
		ele = $('#gallery_'+gallery.id+' .galleryblock_image');
	}
	return ele;
}

function increment_val(a, current, increment)
{
	var no_items = a.length;
	var no_pages = no_items-1;
	var rtn = current+increment;
	if(rtn < 0)
	{
		rtn = no_pages;
	}
	else if(rtn > no_pages)
	{
		rtn = 0;
	}
	return rtn;
}

