
var archerhoblin = {}; // namespace

archerhoblin.url = "";

archerhoblin.setup = (function()
{
	var initTextReplacement = function()
	{
		// text replacement via Cufon
		Cufon.replace('#main_nav a, h2, .intro', { fontFamily: 'Helvetica Neue LT Std 45' });
		Cufon.replace('#content h1', { fontFamily: 'Helvetica Neue LT Std 35' });
	};
	
	var initMiniGallery = function()
	{
		var slide = $("#slideshow")
			
		slide.bind( "evtSlideshow_finishedSetup", function( e, start, total ){
			for ( var i = 0; i < total; i++ ) $("#slideshow_count").append( '<a class="slideshow_quicklink" rel="'+i+'" href="#"></a>' );
			$('.slideshow_quicklink:eq('+start+')').addClass('current');
			$('.slideshow_quicklink').click(function(){ slide.trigger('evtSlideshow_goTo', $(this).attr('rel')); return false; });
		});
		
		slide.bind( 'evtSlideshow_finishedGoTo', function( e, currentItem ){		
			$('.slideshow_quicklink').removeClass('current');
			$('.slideshow_quicklink[rel='+currentItem+']').addClass('current');
		});
		
		slide.bind( "evtSlideshow_click", function( e, side ){
			slide.trigger( 'evtSlideshow_pause' );
			if ( side == 'right' ) $(this).trigger( 'evtSlideshow_goNext' );
			if ( side == 'left' ) $(this).trigger( 'evtSlideshow_goPrev' );
		});
		
		$('#slideshow_next').click(function(){ slide.trigger( 'evtSlideshow_pause' ); slide.trigger( 'evtSlideshow_goNext' ); return false; });
		$('#slideshow_prev').click(function(){ slide.trigger( 'evtSlideshow_pause' ); slide.trigger( 'evtSlideshow_goPrev' ); return false; });

		slide.evtSlideshow({transition:'fade', autoplay: true, speed: 1500, autoplaySpeed: 8000  }); // setup
	};
	
	var insertMap = function()
	{
		if ( GBrowserIsCompatible() )
		{
			// Open Street Map setup
			var copyOSM = new GCopyrightCollection("<a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a>");
			copyOSM.addCopyright(new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, " "));

			var tilesMapnik = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png'});
			var mapMapnik = new GMapType([tilesMapnik],G_NORMAL_MAP.getProjection(),"Map");
			
			var marker = new GIcon(G_DEFAULT_ICON);
			markerOptions = { icon:marker };
		
			// Brighton map
			var place = new GMap2(document.getElementById('map'),{ mapTypes: [mapMapnik, G_SATELLITE_MAP] });
			var point = new GLatLng(51.5515252, -0.1992076);
			place.addControl(new GSmallMapControl());
			place.setCenter(point, 15);
			place.addOverlay(new GMarker(point, markerOptions));
		}
		
	};
	
	return {
		
		init : function()
		{
			archerhoblin.url = parseURL( location.href );
			swfobject.embedSWF("/swf/menu.swf", "nav_wrapper",  "572", "40", "9.0.0", false, { passed : '/'+archerhoblin.url.segments[0]+'/' } );
			
			initTextReplacement();

			$(function(){
				
				// on DOM load...
				if ( $("#gallery").size() )
				{
					var gallery = new archerhoblin.gallery();
					gallery.init( 'gallery' );
				}
				else if ( $('#slideshow').size() )
				{
					initMiniGallery();
				}

				if ( $("#group_info").size() ) archerhoblin.tabbedgallery.init();
	
				$("body").addClass( "jsok" );
				
				if ( $('.news_content').size() )
				{
					archerhoblin.news.init();
				}
				
				if ( $('#homepage_gallery').size() )
				{
					var theGal = $('#homepage_gallery');
					theGal.bind( "evtSlideshow_click", function( e, side ){
						$(this).trigger( 'evtSlideshow_pause' )
						$(this).trigger( 'evtSlideshow_goNext' )
					});
					theGal.evtSlideshow({transition:'fade', speed:1500, autoplaySpeed : 4000, autoplay: true});
				}
				
				if ( $("#map").size() ) insertMap();
						
			});
			
		}
		
	}
	
})();

archerhoblin.gallery = function()
{
	var gallery, items, galleryItems = {}, currentItem, opening = false;
		
	var hideThumbs = function()
	{
		items.each(function(){
			
			$('.gallery_thumbnails a:not(:eq(0))', this).hide();
			
		});
	};
	
	var startLoad = function( item )
	{
		$(item).find('h2').append('<img src="/images/ajax-loader.gif" >');
	};
	
	var endLoad = function()
	{
		$('h2 img').fadeOut();
		opening = false;
	};
	
	var initSetUpGalleryItem = function( item, thumbs )
	{
		var theGal = $(".gallery_main", item);
		
		if ( ! item.find('div.evtSlideshow_wrapper').size() )
		{
			theGal.bind( "evtSlideshow_click", function( e, side ){ $(this).trigger( 'evtSlideshow_goNext' ) });
			theGal.evtSlideshow({transition:'fade', speed:500});
		}
		else
		{
			item.find('div.evtSlideshow_wrapper').show()
		}

		thumbs.show();
		item.addClass('open');
		endLoad();
	}
	
	var openGallery = function( item )
	{
		// load all the big images for this gallery
		if ( ! item.hasClass('open') && ! opening )
		{
			opening = true;
			closeGallery();
			
		
			if ( galleryItems[item.attr('id')] == null )
			{
				startLoad( item );
				// gallery has not previously been opened
			
				var galName = item.attr('id').replace( /cs_/, '' );	
				var images = new Array();
			
				$('.thumb', item).each(function(i, thumb){
					var imgParts = $(thumb).attr( 'src' ).split("/");
					images[i] = imgParts[imgParts.length-1];
				});
			
				$.preload( images, {
					base:'/images/'+galName+'/main/',
					ext:'',
					onFinish:function( data ){
					
						images = images.reverse();
					
						$.each( images, function( i, val ){ 
							$('.gallery_main', item).append( '<li><img class="gallery_mainpic" alt="" src="/images/'+galName+'/main/'+val+'" /></li>' );
						});

						currentItem = item;
						
						var thumbs = $('.galthumb:eq(0) .thumb, .galthumb:eq(1) .thumb, .galthumb:eq(2) .thumb', currentItem);
						$(".gallery_main", item).height("568px");
						galleryItems[item.attr('id')] = $(item);
						initSetUpGalleryItem(item, thumbs);
					}
				});
			}
			else
			{
				currentItem = item;
				var thumbs = $('.galthumb:not(:eq(3)) .thumb',currentItem);
				initSetUpGalleryItem(item, thumbs);
				endLoad();
			}	
		}	
	};
	
	var closeGallery = function()
	{
		if ( currentItem )
		{
			currentItem.removeClass('open');
			curItemtref = currentItem; 
			currentItem = null;
			var thumbs = $('.galthumb:eq(0) .thumb, .galthumb:eq(1) .thumb, .galthumb:eq(2) .thumb', curItemtref);
			hideNextThumb( thumbs, (thumbs.size()-1), function(){} );
			$(".gallery_main", curItemtref).parent('div.evtSlideshow_wrapper').hide( 100 );
		}
		
	};
		
	var showNextThumb = function( thumbs, current, finalcallback )
	{
		var currentThumb = thumbs.eq(current);
		if ( current >= 0 )
		{
			currentThumb.fadeIn( 600, function(){
				showNextThumb( thumbs, current-1, finalcallback )
			});
		}
		else
		{
			finalcallback();
		}
	};
	
	var hideNextThumb = function( thumbs, current, finalcallback )
	{
		thumbs.hide();
	};
	
	var setUpItems = function()
	{
		items.each(function( i, item ){
		
			galleryItems[$(item).attr('id')] = null;
			
			$(item).click(function( e ){
				openGallery( $(item) );
				return false;
			});
	
			$('.galthumb', item).reverseOrder();
			
			var thumbs = $('.galthumb', item);
			
			thumbs.each(function( i, it ){
				var pos = parseInt(thumbs.size() - i -1);
				$(it).data('itemPos', pos);
				if ( (i + 1) != thumbs.size() ) $('img',it).hide(); // hide the thumbnails intially
			});
			
			thumbs.click( function(){
				
				if ( $(this).parents('li').hasClass('open') )
				{
					$('.gallery_main',item).trigger( "evtSlideshow_goTo", $(this).data('itemPos') );
					return false;
				}
				else
				{
					$(this).parents('li').trigger('click');
				}
			});
			
			$(item).find('h2').click(function(){
				if ( $(item).hasClass('open') )
				{
					closeGallery();	
					return false;
				}
			});
			
		});
	};
	
	return  {
		
		init : function( gallery_id )
		{
			gallery = $("#"+gallery_id);
			items = $('li',gallery);
			
			setUpItems();
		}
	}
};


archerhoblin.news = function()
{
	
	var closeUp = function()
	{
		$('.news_item.open .news_content').hide();
		$('.news_item.open .news_overview').fadeIn();
		$('.news_item.open').removeClass('open');
	};
	
	return {
		
		init : function()
		{
			$('.news_content').hide();
			$('.news_item').css('cursor','pointer');
			
			$('.news_item').click(function() {
				var self = $(this); 
				
				if ( !self.hasClass('open') )
				{
					closeUp();
					$('.news_overview', self).fadeOut(function(){
						$('.news_content', self).slideDown( function(){ $.scrollTo( self, 200 ); self.addClass('open') });
					});					
				}
				else
				{
					closeUp();
				}
					
				return false;
			});
		
			if ( $('.default').size() )
			{
				$('.default').trigger('click');
			}				
		}
	}
	
}();

archerhoblin.tabbedgallery = function()
{
	return {
		
		init : function()
		{
			var slide = $('#group_info');
			
			$('#group_overview li').each(function( i, it ){
				$(this).click(function(){
					slide.trigger( 'evtSlideshow_pause' );
					$('#group_info div:visible .more_info').animate({'marginRight':'-28.7em'});
					slide.trigger( 'evtSlideshow_goTo', [i, function(){ $('#group_info div:visible .more_info').animate({'marginRight':0}) }]);
					return false;			
				});
			});
			
			slide.bind( 'evtSlideshow_finishedGoTo', function( e, num ){
				$('#group_overview li').removeClass('current');
				$('#group_overview li:eq('+num+')').addClass('current');
			});
			
			slide.bind( 'evtSlideshow_click', function( e, side ){
				
				if ( $('div',this).not(':animated') )
				{
					if ( parseInt( $('#group_info div:visible .more_info').css('marginRight')) != 0 )
					{
						slide.trigger( 'evtSlideshow_pause' );
						$('#group_info div:visible .more_info').animate({'marginRight':0});
					}
					else
					{
						$('#group_info div:visible .more_info').animate({'marginRight':'-28.7em'});
						slide.trigger( 'evtSlideshow_start' );
					}
				}	
				
			});
			
			$('#group_info .more_info').click(function(){
				location.href = $(this).find('a').attr('href');
				return false;
			});
			
			$('#group_overview li p a').click(function(){
				location.href = $(this).attr('href');
				return true;
			})
			
			slide.evtSlideshow({transition:'fade', speed: 1000, autoplaySpeed : 4000, autoplay:true, startSlide: 1});
			
			$('#group_overview li:eq(1)').addClass('current');
		}
		
	}
	
}();


archerhoblin.setup.init(); // kick things off...

(function($) {
$.fn.reverseOrder = function() {
	return this.each(function() {
		$(this).prependTo( $(this).parent() );
	});
};
})(jQuery);