/**
 *	Basic Slideshow App
 *	
 *	Plagerised from Tom Doyle by Isotope Communications Ltd, Dec 2008
 *	http://www.tomdoyletalk.com/2008/10/28/simple-image-gallery-slideshow-with-scriptaculous-and-prototype/
 *	
 *	Published [16/12/08]:
 *	http://www.icommunicate.co.uk/articles/all/simple_slide_show_for_prototype_scriptaculous_38/	
 *
 *	Changes: Basically made it an object so that you can run multiple instances and so that
 *			 it doesn't get interfered with by other scripts on the page.
 *	
 *			 Have also added a few things, like "Captions" and the option of changing the
 *			 effects..
 *
 *	Example:
 *			Event.observe(window, 'load', function(){
 *				oMySlides = new iSlideShow({
 *					autostart 	: true		// optional, boolean (default:true)
 *					start		: 0,	 	// optional, slides[start] (default:0) 
 *					wait 		: 4000, 	// optional, milliseconds (default:4s)
 *					slides 		: [
 *						'image-div-a', 
 *						'image-div-b', 
 *						'image-div-c', 
 *						'image-div-d' 
 *					],
 *					counter		: 'counter-div-id', // optional...
 *					caption 	: 'caption-div-id', // optional... 
 *					playButton	: 'PlayButton', 	// optional (default:playButton)
 *					pauseButton	: 'PauseButton', 	// optional (default:PauseButton)
 *				});
 *				oMySlides.startSlideShow();
 *			});
 *
 *			To start the slideshow:
 *				oMySlides.startSlideShow();
 *
 *			To skip forward, back, stop:
 *				oMySlides.goNext();
 *				oMySlides.goPrevious();
 *				oMySlides.stop();
 */

var iSlideShow = new Class.create();

iSlideShow.prototype = {
	
	initialize : function (oArgs){
		this.wait 			= oArgs.wait ? oArgs.wait : 4000;
		this.start 			= oArgs.start ? oArgs.start : 0;
		this.duration		= oArgs.duration ? oArgs.duration : 0.5;
		this.autostart		= (typeof(oArgs.autostart)=='undefined') ? true : oArgs.autostart;
		this.slides 		= oArgs.slides;
		this.counter		= oArgs.counter;
		this.caption		= oArgs.caption;
		this.playButton		= oArgs.playButton ? oArgs.playButton : '';
		this.pauseButton	= oArgs.pauseButton ? oArgs.pauseButton : '';
		this.iImageId		= this.start;
		if ( this.slides ) {
			this.numOfImages	= this.slides.length;
			if ( !this.numOfImages ) {
				//alert('No slides?');
			}
		}
		if ( this.autostart ) {
			this.startSlideShow();
		}
	},
	
	// The Fade Function
	swapImage: function (x,y) {		
		$(this.slides[x]) && $(this.slides[x]).appear({ duration: this.duration });
		$(this.slides[y]) && $(this.slides[y]).fade({duration: this.duration });
	},
	
	// the onload event handler that starts the fading.
	startSlideShow: function () 
	{
		//alert(this.counter.innerHTML);
		//alert(this.iImageId);

		this.play = setInterval(this.play.bind(this),this.wait);
		
		if ($(this.playButton))	$(this.playButton).hide();
		if ($(this.pauseButton)) $(this.pauseButton).appear({ duration: 0});

		this.updatecounter();
									
	},
	
	play: function () {
		//alert("test");
		var imageShow, imageHide;
	
		imageShow = this.iImageId+1;
		imageHide = this.iImageId;
		
		if (imageShow == this.numOfImages) {
			this.swapImage(0,imageHide);	
			this.iImageId = 0;					
		} else {
			this.swapImage(imageShow,imageHide);			
			this.iImageId++;
		}
		
		this.textIn = this.iImageId+1 + ' of ' + this.numOfImages;
		this.updatecounter();
	},
	
	stop: function  () {
		clearInterval(this.play);				
		if ($(this.playButton))	$(this.playButton).appear({ duration: 0});
		if ($(this.pauseButton))	$(this.pauseButton).hide();
	},
	
	goNext: function () {
		clearInterval(this.play);
		$(this.playButton).appear({ duration: 0});
		$(this.pauseButton).hide();
		
		var imageShow, imageHide;
	
		imageShow = this.iImageId+1;
		imageHide = this.iImageId;
		
		if (imageShow == this.numOfImages) {
			this.swapImage(0,imageHide);	
			this.iImageId = 0;					
		} else {
			this.swapImage(imageShow,imageHide);			
			this.iImageId++;
		}
	
		this.updatecounter();
	},
	
	goPrevious: function () {
		clearInterval(this.play);
		$(this.playButton).appear({ duration: 0});
		$(this.pauseButton).hide();
	
		var imageShow, imageHide;
					
		imageShow = this.iImageId-1;
		imageHide = this.iImageId;
		
		if (this.iImageId == 0) {
			this.swapImage(this.numOfImages-1,imageHide);	
			this.iImageId = this.numOfImages-1;		
			
			//alert(NumOfImages-1 + ' and ' + imageHide + ' i=' + i)
						
		} else {
			this.swapImage(imageShow,imageHide);			
			this.iImageId--;
			
			//alert(imageShow + ' and ' + imageHide)
		}
		
		this.updatecounter();
	},
	
	updatecounter: function () 
	{
		var textIn = this.iImageId+1 + ' of ' + this.numOfImages;
		$(this.counter) && ( $(this.counter).innerHTML = textIn );
		if ( $(this.caption) && ( oNewCaption = $(this.slides[this.iImageId]).down('.image-caption') ) ) {
			$(this.caption).innerHTML = oNewCaption.innerHTML;
		}
	}
}

var objSlider;
var slidesT= new Array(); 
var currentContainer;
var mouseCoord;
var currentImageSrc = "";
if (typeof imageChangeTime == "undefined")
{
	var imageChangeTime = 1500;
}

function TT_setSlideShow(snipped_modul,sca_id,container,addn,evt,elm)
{
	if (checkMouseEnter(elm,evt))
	{
		var loading_container = "gallery_loading_" + sca_id;
		if($(loading_container))
		{
			$(loading_container).style.display = "block";
		}
		
		currentImageSrc = elm.src;
		//alert(currentImageSrc);
		currentContainer = container;
		//alert(snipped_modul+"#"+sca_id+"#"+container);
		ajaxGalleryImageSwapInit(snipped_modul,sca_id,container,addn);
	}
}

function TT_setImages_without_ajax()
{
	//alert($(currentContainer));
	if ($(currentContainer) != null)
	{
		arrImages = $(currentContainer).getElementsByClassName('slide');
		countArrImages = arrImages.length;
	
		slidesT = new Array();
		for (var i = 0; i < arrImages.length; i++)
		{
			if (i==0)	arrImages[i].style.display="block";
			slidesT.push(arrImages[i].id);
		}
		
		//print_r(slidesT);
		
	
		objSlider = "";
		if (slidesT.length > 1)
		{
			objSlider = new iSlideShow(
			{
				start	: 0,	 /* optional (default:0) */
				wait 	: imageChangeTime, /* optional (default:4s) */
				slides 	: slidesT
			});	
			objSlider.startSlideShow();
		}
	}
}

function TT_setImages()
{
	arrImages = $(currentContainer).getElementsByClassName('slide');
	countArrImages = arrImages.length;
	//arrImagesTags = $(currentContainer).getElementsByClassName('slide').getElementsByTagName('img');
	
	//alert(arrImagesTags.length);
	slidesT = new Array();
	objCoords = setPositionOfNewImages();
	for (var i = 0; i < arrImages.length; i++)
	{
		//alert(arrImages[i].getElementsByTagName("img")[0].src);
		
		if ((arrImages[i].id.length > 0) || (arrImages[i].length > 2 && currentImageSrc != arrImages[i].getElementsByTagName("img")[0].src) || arrImages[i].id.length == 2)
		{
			//alert(arrImages[i].src);
			slidesT.push(arrImages[i].id);
			arrImages[i].style.left = objCoords.x+"px";
			arrImages[i].style.top = objCoords.y+"px";
			//if (i==2)	arrImages[i].style.display="block";
		}
	}
	
	//print_r(slidesT);
	

	objSlider = "";
	if (slidesT.length > 1)
	{
		//objImageLoading = document.createElement("img");
		//objImageLoading.src = "/cms/tpl/!general/img/ajax_loader.gif";
		//alert(currentImageSrc);
		//currentImageSrc = "/cms/tpl/!general/img/ajax_loader.gif";
		//currentSlideShowImageObject.src = "/cms/tpl/!general/img/ajax_loader.gif";
		//$(currentContainer).appendChild = objImageLoading;
		
		objSlider = new iSlideShow(
		{
			start	: 0,	 /* optional (default:0) */
			wait 	: imageChangeTime, /* optional (default:4s) */
			slides 	: slidesT
		});	
		//if (objSlider.slides.length > 0)	objSlider.stop();
		objSlider.startSlideShow();
	}
}

function setPositionOfNewImages()
{
	objElm = $(currentContainer);
	
	var x=0;
	var y=0;
	
	do
	{
		x+=objElm.offsetLeft;
		y+=objElm.offsetTop;
		objElm = objElm.offsetParent;
		
		if (typeof divStopPosition != "undefined" && divStopPosition == objElm.id)	break;
	}
	while (objElm)
	
	if (typeof gallery_korrekturX != "undefined")	x+=gallery_korrekturX;
	if (typeof gallery_korrekturY != "undefined")	y+=gallery_korrekturY;
	//alert(x+"#"+y);
	if (blnSetAbsolutPosition == false)
	{
		x = 0;
		y = 0;
	}
	var coords = {x:x, y:y};

	return coords;
	
}


function containsDOM (container, containee) 
{
	var isParent = false;
	do 
	{
		if ((isParent = container == containee))
		break;
		containee = containee.parentNode;
	}
	while (containee != null);
	return isParent;
}


function checkMouseLeave (element, evt) 
{
	if (element.contains && evt.toElement) 
	{
		return !element.contains(evt.toElement);
	}	
	else if (evt.relatedTarget) 
	{
		return !containsDOM(element, evt.relatedTarget);
	}
}


function checkMouseEnter(element, evt) 
{
	if (element.contains && evt.fromElement) 
	{
		return !element.contains(evt.fromElement);
	}
	else if (evt.relatedTarget) 
	{
		return !containsDOM(element, evt.relatedTarget);
	}
}

function stopSlideShow(elm, evt,sca_id)
{
	if (checkMouseLeave(elm, evt))
	{
		var loading_container = "gallery_loading_" + sca_id;
		if($(loading_container))
		{
			$(loading_container).style.display = "none";
		}
		
		//alert("test");
		image_swap_active_sca_id = 0;
		if((typeof objSlider) == "object")
		{
			objSlider.stop();
			arrImages_end = $(currentContainer).getElementsByClassName('slide');
			//alert(arrImages_end.length);
			var aICount = arrImages_end.length;
			var k = 0;
			for (var i = 0; i < aICount; i++)
			{
				//slidesT.push(arrImages[i].id);
				//alert(arrImages[i].id.length);
				//alert(arrImages.length);
				if (!document.all)
				{
					if (arrImages_end[k].id.length > 0)	
					{
						$(currentContainer).removeChild(arrImages_end[k]);
					}
					else
					{
						k++;
					}
				}
				else
				{
					if (arrImages_end[i].id.length > 0)	
					{
						//alert(arrImages_end[i]);
						$(currentContainer).removeChild(arrImages_end[i]);
					}
				}
			}			
		}
	}
}
