// mooShow 1.04
// (c)2006 Stuart Eaton - http://www.eatpixels.com
//
// Credit where credit is due: Inspiration from Lightbox (http://www.huddletogether.com/projects/lightbox2/)
// and Couloir (http://www.couloir.org/js_slideshow/) and of course moo.fx (http://moofx.mad4milk.net/

// moo.fx and prototype are covered by their own respective license terms.

// --------------------------------------------------------------------------------------------------------------

var loadingImage = "pix/leer.gif";		// loading image

// --------------------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------------------

var mooShows = null;



//alert('mooshow.104.js loaded!');



	// -----------------------------------------------------------------------------------
	
	function start() {
		// find any mooshows on the page
		//alert('started!');
		find_mooshows();
	}
	
	// -----------------------------------------------------------------------------------
	
	function find_mooshows() {
		shows = document.getElementsByClassName("mooshow"); // find divs using the 'mooshow' class
		if(shows.length == 0) shows = showsIE; // If can't find shows list get it from html page (hack for IE5.5)
		mooShows = new Object();
		for ( var i = 0; i < shows.length; i++ ) {
			showName = shows[i].id; // get shownames
			if(showName==null) showName = shows[i]; // if we are getting show names from the html page (hack for IE5.5)
			mooShows[ showName ] = new mooshow(showName); // create new mooshow objects
			create_mooshow(showName,i); // create the shows htmls
		}
	}
	
	// -----------------------------------------------------------------------------------
	
	function create_mooshow( showName,shownumber ) {
		eval($(showName).innerHTML); //get slideshow settings
		photoArray = eval(showName); // set up image array based on id
		shownumber++; // add 1 to shownumber so it starts on 1 not 0
		
		if(this.dropShadow=='yes'){
			this.outerContainerClass = 'mooshow_outerContainer dropShadowBorder';
		} else {
			this.outerContainerClass = 'mooshow_outerContainer';
		}
		/*
		var mooShow_html = ''+
		'<div id=\''+showName+'_outerContainer\' class=\''+this.outerContainerClass+'\' style=\'padding:'+this.border+'px;\'> \n'+
		'	<div id=\''+showName+'_topNav\' style=\'width:'+photoArray[0][1]+'px;\' class=\'mooshow_topNav\'></div> \n'+
		'	<div id=\''+showName+'_contentContainer\' class=\'mooshow_contentContainer\' > \n'+
		'		<div id=\''+showName+'_live\' class=\'mooshow_live\'><a href="'+photoArray[0][0]+'" rel="lightbox"><img src=\''+photoArray[0][0]+'\' class=\'mooshow_image\' width=\''+photoArray[0][1]+'\' height=\''+photoArray[0][2]+'\' id=\''+showName+'_image\' /></a></div> \n'+
		'		<div id=\''+showName+'_bg\' class=\'mooshow_bg\'><a href="'+photoArray[0][0]+'" rel="lightbox"><img src=\''+photoArray[0][0]+'\' class=\'mooshow_image_hidden\' width=\''+photoArray[0][1]+'\' height=\''+photoArray[0][2]+'\' id=\''+showName+'_image_hidden\' /></a></div> \n'+
		'		<img src=\''+loadingImage+'\' id=\''+showName+'_loading\' class=\'mooshow_loading\' /> \n'+
		'	</div> \n'+
		'</div>';
		*/
		var mooShow_html = ''+
		'<div id=\''+showName+'_outerContainer\' class=\''+this.outerContainerClass+'\' style=\'padding:'+this.border+'px;\'> \n'+
		'	<div id=\''+showName+'_topNav\' style=\'width:'+photoArray[0][1]+'px;\' class=\'mooshow_topNav\'></div> \n'+
		'	<div id=\''+showName+'_contentContainer\' class=\'mooshow_contentContainer\' > \n'+
		'		<div id=\''+showName+'_live\' class=\'mooshow_live\'><a id=\''+showName+'_link\' href=\''+photoArray[0][8]+'\'><img src=\''+photoArray[0][0]+'\' class=\'mooshow_image\' width=\''+photoArray[0][1]+'\' height=\''+photoArray[0][2]+'\' id=\''+showName+'_image\' GALLERYIMG=\'no\'/></a></div> \n'+
		'		<div id=\''+showName+'_bg\' class=\'mooshow_bg\'><a id=\''+showName+'_link_hidden\' href=\''+photoArray[0][8]+'\'><img src=\''+photoArray[0][0]+'\' class=\'mooshow_image_hidden\' width=\''+photoArray[0][1]+'\' height=\''+photoArray[0][2]+'\' id=\''+showName+'_image_hidden\' GALLERYIMG=\'no\' /></a></div> \n'+
		'		<img src=\''+loadingImage+'\' id=\''+showName+'_loading\' class=\'mooshow_loading\' /> \n'+
		'	</div> \n'+
		'</div>';

		
		//alert(my_Element);
		my_Element.setInnerHTML(showName, mooShow_html);
		
		// display or hide various options

		my_Element.show(showName);
		if(this.delayTimer == 'yes') autoPlay (this.delayTime, showName); // then add the rotate thing if nvar = true!
	}
	
	
	function autoPlay (delayTime,showName) {
		//var internalTimer; // to use in future start / stop autoplay
		//var playing;	   // to use in future start / stop autoplay, playing = true ? false;
		window.setInterval("mooShows[showName].nextImage()", delayTime);
		
	}	

// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------



var mooshow = Class.create();
mooshow.prototype = {
	
	

	// -----------------------------------------------------------------------------------

	initialize: function(showName) {
		//alert(showName);
		this.id = showName;
		this.busy = 0;
		this.counter = 0;
		this.photoArray = eval(this.id);
		this.numberOfImages = this.photoArray.length -2;
		this.IPTCinfoStatus = 0;
		//alert(eval($(showName).innerHTML)); //get slideshow settings (set inside the mooshow div)
		eval($(showName).innerHTML); //get slideshow settings (set inside the mooshow div)
	},
	
	// -----------------------------------------------------------------------------------

	nextImage: function() {
	  
	  //alert($(showName+'_link').href);
	    $(showName+'_image_hidden').src = $(showName+'_image').src;
		if(this.busy<1){
			this.busy=1;
			if(this.counter < this.numberOfImages) {
				this.counter ++;
			} else {
				this.counter = 0;
			}
				
			this.loadImage();
		}
	},
	
	// -----------------------------------------------------------------------------------
	
	prevImage: function() {
		if(this.busy<1){
			this.busy=1;
			if(this.counter > 0) {
				this.counter --;
			} else {
				this.counter = this.numberOfImages;
			}
			this.loadImage();			
		}
	},
	
	// -----------------------------------------------------------------------------------
	
	jumptoImage: function(counter) {
		if(this.busy<1){
			this.busy=1;
			this.counter = counter-1;
			this.loadImage();		
		}
	},
	
	// -----------------------------------------------------------------------------------
	
	switchContent: function(newArray) {
		if(this.busy<1){
			this.busy=1;
			this.photoArray = eval(newArray);
			this.numberOfImages = this.photoArray.length -2;
			this.counter = 0;
			this.loadImage();		
		}
	},
	
	// -----------------------------------------------------------------------------------
	
	updateIPTCinfo: function() {
			//get showname
			showName = this.id;
			// 
			this.iptcHTML = ''+
			'<div class=\'mooshow_IPTC_left\'><br/><br/>'+
			'	Image URL <br/>'+
			'	Size <br/>'+
			'	Dimensions <br/>'+
			'	Title <br/>'+
			'	Author <br/>'+
			'	Copyright <br/><br/>'+
			'	Description <br/><br/>'+
			'</div>'+
			'<div class=\'mooshow_IPTC_right\'><br/><br/>'+
			'	<a href=\''+this.photoArray[this.counter][0]+'\'>'+this.photoArray[this.counter][0]+'</a><br/>'+ //img src
			'	'+this.photoArray[this.counter][3]+'<br/>'+ // file size
			'	'+this.photoArray[this.counter][1]+' x '+this.photoArray[this.counter][2]+' pixels<br/>'+ // width * height
			'	'+this.photoArray[this.counter][4]+'<br/>'+ //title
			'	'+this.photoArray[this.counter][5]+'<br/>'+ // author
			'	'+this.photoArray[this.counter][6]+'<br/><br/>'+ //copyright
			'	'+this.photoArray[this.counter][7]+'<br/><br/>'+ // description
			'</div>';

			my_Element.setInnerHTML(''+showName+'_IPTC', this.iptcHTML);
	},
	
	// -----------------------------------------------------------------------------------
	
	updateIPTCinfoToggle: function() {
		if(this.IPTCinfoStatus==1){
			my_Element.hide(''+showName+'_IPTC');
			this.IPTCinfoStatus=0;
		} else {
			my_Element.show(''+showName+'_IPTC');
			this.IPTCinfoStatus=1;
			this.updateIPTCinfo();
		}
	},
	
	// -----------------------------------------------------------------------------------
	
	updateTopNav: function(showName) {
		//my_Element.setWidth(showName+'_topNav', this.photoArray[this.counter][1]);
		my_Element.setInnerHTML(showName+'_topNav', '');
		this.topNavContent = $(showName+'_topNav').innerHTML;
		
		this.topNavContent = (this.counter+1) + ' / ' + (this.photoArray.length-1) + ' <img src=\'mooshow/blank.gif\' width=\'10\' height=\'1\' />';
		
		for ( var i = 1; i < this.photoArray.length; i++ ) {
			
			if(i==this.counter+1){this.topNavContent = this.topNavContent + i;} else {
			this.topNavContent = this.topNavContent + ' <a href=\'#'+i+'\' onClick=\'mooShows[&#39;'+showName+'&#39;].jumptoImage('+i+');\'>'+i+'</a>';}
			if(i<this.photoArray.length-1){this.topNavContent = this.topNavContent + ' | '}
		}
		
		document.getElementById(showName+'_topNav').innerHTML = this.topNavContent;
	},
	
	// -----------------------------------------------------------------------------------

	loadImage: function() {
		//get showname
		showName = this.id;
		
		// update top navigation
		if(this.topNav=='yes')this.updateTopNav(showName);
		// show laoding animation
//		my_Element.show(showName+'_loading');
		// hide IPTC info
//		my_Element.hide(showName+'_IPTC');
//		my_Element.hide(showName+'_IPTCbutton');
		// overlay navigation
//		if(this.overlayNav == 'yes')my_Element.hide(showName+'_overlayNav');
		// preload in new image
		newImgPreloader = new Image();
		// if image is preloaded
		
		
		
		newImgPreloader.onload=function(){
			// when loaded
			// hide current photo
			// my_Element.setSrc(showName+'_image','mooshow/blank.gif');
			
			
			my_Element.setOpacity(showName+'_image','0');
			
			
			// hide laoding animation
			my_Element.hide(showName+'_loading');
			// set captions to blank space
//			my_Element.setInnerHTML(showName+'_captions', '&nbsp;');
			// set copyright to blank
//			my_Element.setInnerHTML(showName+'_copyright', '');
			// get new sizes
			newHeight = newImgPreloader.height;
			newWidth = newImgPreloader.width;
			// resize containers to new size
//			this.resizeTopNavWidth = new fx.Width(showName+'_topNav', {duration: mooShows[showName].speed});
//			this.resizeCaptionWidth = new fx.Width(showName+'_captions', {duration: mooShows[showName].speed});
			this.resizeOuterContainerHeight = new fx.Height(showName+'_image', {duration: mooShows[showName].speed});
			this.resizeOuterContainerWidth = new fx.Width(showName+'_image', {duration: mooShows[showName].speed, onComplete: function() {
				// set up next image
				my_Element.setSrc(showName+'_image',newImgPreloader.src);
				
				//alert(document.getElementById(showName+'_link').href);
				
				document.getElementById(showName+'_link').href = mooShows[showName].photoArray[mooShows[showName].counter][8];
				
				//my_Element.setHref(showName+'_link', newImgPreloader.getHref(showName+'_link'));
				// reposition overlay nav
//				my_Element.setHeight(showName+'_overlayNav',(newImgPreloader.height));
//				my_Element.setWidth(showName+'_overlayNav',(newImgPreloader.width));
				//show captions
				if(mooShows[showName].captions=='yes') my_Element.setInnerHTML(showName+'_captions', mooShows[showName].photoArray[mooShows[showName].counter][7] + '&nbsp;');
				// copyright
				if(mooShows[showName].copyright == 'yes') my_Element.setInnerHTML(showName+'_copyright', mooShows[showName].photoArray[mooShows[showName].counter][6]);
				// new moo.fx 'fader'
				this.fader = new fx.Opacity(showName+'_image', {duration: mooShows[showName].fadeSpeed, onComplete:function() { 
					mooShows[showName].busy = 0;
					// overlay navigation
//					if(mooShows[showName].overlayNav == 'yes') my_Element.show(showName+'_overlayNav');
					//IPTC panel height
					if(mooShows[showName].IPTCinfo == 'yes') my_Element.show(showName+'_IPTCbutton');
//					my_Element.setWidth(showName+'_IPTC', newImgPreloader.width);
//					if(mooShows[showName].IPTCinfoStatus==1){mooShows[showName].IPTCinfoStatus=0; mooShows[showName].updateIPTCinfoToggle();}
					}});
				// call fader fx
					
					this.fader.hide();
					this.fader.toggle();
			}});
			
			// get current sizes
			oldHeight = my_Element.getHeight(showName+'_image');
			oldWidth = my_Element.getWidth(showName+'_image');

			// call moo.fx and when done switchImage()
//			this.resizeTopNavWidth.custom(oldWidth,newWidth);
//			this.resizeCaptionWidth.custom(oldWidth,newWidth);
			this.resizeOuterContainerHeight.custom(oldHeight,newHeight);
			this.resizeOuterContainerWidth.custom(oldWidth,newWidth);
		};
	
		
		newImgPreloader.src = this.photoArray[this.counter][0]; // preloader src
	}
	
	// -----------------------------------------------------------------------------------

}

// --------------------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------------------







// -----------------------------------------------------------------------------------
//	Additional methods for my_Element by SU, Couloir
//	- further additions by Lokesh Dhakar (huddletogether.com)
//	- and Stuart Eaton (eatpixels.com)

Object.extend(my_Element, {
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth; 
	},
	
	getHeight: function(element) {
	   	element = $(element);
	   	return element.offsetHeight; 
	},
	
	getHref: function(element) {
	   	element = $(element);
	   	return element.href; 
	},
	

	setWidth: function(element,w) {
	   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   		element = $(element);
    	element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
    	element.style.top = t +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	
	setAlt: function(element,alt) {
    	element = $(element);
    	element.alt = alt; 
	},
	
	setOpacity: function(element,opacity) {
    	element = $(element);
    	element.style.opacity = opacity; 
	},

	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	},

	hide: function(element) {
      	element = $(element);
      	element.style.display = 'none';
  	},

  	show: function(element) {
      	element = $(element);
      	element.style.display = 'inline';
  	},
  	opac: function(id){
	    opac = new fx.Opacity(id, {duration: 250});
  		opac.toggle();   
	},
	toggleOrder: function(nid,oid){
	  
	  o_elem = $(oid);
	  n_elem = $(nid);
	  
	
	    
	  o_z = o_elem.style.zIndex;
	  n_z = n_elem.style.zIndex;
	  
	  n_elem.style.zIndex = o_z+1; 
		
		//alert(n_elem.style.zIndex);
	  
	  o_elem.style.zIndex = o_z-1;  
	  
	}
	
});

// ---------------------------------------------------
// addLoadEvent()
// Adds event to window.onload without overwriting currently assigned onload functions.
// Function found at Simon Willison's weblog - http://simon.incutio.com/
//
function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}

}

// ---------------------------------------------------

function run() {
	//alert('start?!');
	start();
}

addLoadEvent(run);	// run initMooshow onLoad

// --------------------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------------------

