/**** gallery settings etc ****/
var fader_delay			= 10;		// delay between image transitions
var fader_cid	 		= 1;		// joomla gallery id

var duration_text_slide = 0.5;
var duration_img_appear = 1.0;

/*** most likely not for editing ***/
var fader_images 		= false;	// array of fader images and data
var fader_ready			= false;	// semiphore for fader load status

var fader_spinner		= false;	// fader timed transition handle
var fader_effect_queues	= new Array('gallery-fader', 'gallery-text');
var fader_index			= -1;		// pointer in the fader image list

/*** so begins the nitty gritty ***/
Event.observe(window, 'load', function(event) {
	init_gallery();
});

function init_gallery() {
	if( $$('.gallery-cnt').length == 0 )
		return false;
		
	$('gallery-fader').addClassName('loading');
	
	new Ajax.Request('/staticfiles/slider/images.json.php?cid=' + fader_cid, { 
		method: 'get', 
		onSuccess: function(o) {
			fader_images 	= o.responseText.evalJSON(true);
			fader_ready 	= true;
			
			spin_gallery_timer();
			create_gallery_strip();			
			execute_gallery_fader();
		}
	}); 
	
	Event.observe('gallery-fader', 'click', function(event) {
		elt = $$('#gallery-fader img.current').first();
		
		if( elt.getAttribute('url') )		
			window.location = elt.getAttribute('url');
	});	
}

function cancel_gallery_animation() {
	fader_effect_queues.each(function(q) {
		var queue = Effect.Queues.get(q);
		queue.each(function(effect) { effect.cancel(); });	
	});
}

function spin_gallery_timer() {
	try {
		fader_spinner.stop();
	} catch(er) {}
	
	fader_spinner = new PeriodicalExecuter(function(pe) {
		execute_gallery_fader();
	}, fader_delay);	
}

function prepare_gallery_fader(i) {
	/* restart the gallery timer spinner */
	spin_gallery_timer();
	
	/* stop any animations that may be occuring */
	cancel_gallery_animation();
	
	/* cancel any image loading */
	$$('#gallery-fader img').invoke('stopObserving');
	
	/* mark the current image as old */
	$$('#gallery-fader img').invoke('removeClassName', 'current');
	
	/* set the fader to ready */
	fader_ready = true;
	
	/* pull the requested image */
	execute_gallery_fader(i);
}

function execute_gallery_fader(i) {
	if( !fader_ready )
		return false;
	
	$$('#gallery-fader img.current').invoke('removeClassName', 'current');
	
	fader_index = i == undefined ? (fader_index + 1) % fader_images.length : i;

	img = $('fader-img-' + fader_index);
	
	$('gallery-fader').addClassName('loading');
	
	if( !img ) {
		img = new Element('img', { 
			id: 'fader-img-' + fader_index,
			'loaded': '0',
			style: 'display: none'
		});
		
		$('gallery-fader').appendChild(img);
	}
	
	img.addClassName('current');
	
	fader_ready = false;
	
	if( img.getAttribute('loaded') != '1' ) {
		Event.observe(img, 'load', function(event) {
			elt = Event.element(event);
			elt.setAttribute('loaded', '1');
			
			fade_gallery_image(elt);
		});
		
		/* the image load observer has to be bound before the image source is set */
		img.src = fader_images[fader_index].full_img; 
		
		if( fader_images[fader_index].img_lnk.length > 0 ) {
			img.setAttribute('url', fader_images[fader_index].img_lnk);
			
			img.setStyle({
				cursor: 'pointer'
			});
		}
	} else 
		fade_gallery_image(img);
}

function fade_gallery_image(elt) {
	update_gallery_strip();

	elt.setOpacity(0);
	elt.show();
	
	Element.stopObserving(elt);
	
	$('gallery-fader').removeClassName('loading');
	
	new Effect.Opacity(elt, { 
		from: 0.0, 
		to: 1.0,
		duration: duration_img_appear,
		queue: { scope: 'gallery-fader', position: 'end' },	
		afterFinish: function() {				
			$$('#gallery-fader > img').each(function(elt) {
				if( !elt.hasClassName('current') ) {
					elt.hide();
				}
			});
			
			fader_ready = true;
		}
	});
}

function create_gallery_strip() {
	strp = new Element('div', { className: 'gallery-strip' });
	
	$$('.header-gallery').first().insert({ bottom: strp });
	
	for(x = 0; x < fader_images.length; x++) {
		a 	= new Element('a', { href: '#', 'indx': x });
		a.update('&nbsp;');
		strp.insert(a);
	}
	
	Event.observe(strp, 'click', function(event) {
		event.stop();
		elt = Event.findElement(event, 'a');
		
		if( !elt )
			return;
			
		prepare_gallery_fader( elt.getAttribute('indx') );
	});
}

function update_gallery_strip() {
	$$('.gallery-strip a[indx!=' + fader_index + ']').invoke('addClassName', 'opaque');
	$$('.gallery-strip a[indx=' + fader_index + ']').invoke('removeClassName', 'opaque');
}
