/*  IN_bigGallery, version 0.5
 *  (c) 2011 Amedeo Mantica
 *
 *--------------------------------------------------------------------------*/

document.observe('dom:loaded', function() {
	IN_setBigGallery();
});

var in_registeredBigGalleries = new Array();

function IN_setBigGallery() {

	//alert(Effect.Transitions.spring);

	var IN_bigGalleryContainers = $$('div.in_bigGalleryContainer');

	if (IN_bigGalleryContainers.length > 0) {
		for(var i = 0 ; i < IN_bigGalleryContainers.length ; i++) {
			var gallery = new IN_bigGallery(IN_bigGalleryContainers[i]);
			in_registeredBigGalleries.push(gallery);
		}
	}		
}

function IN_bigGallery(domElement) {

	this.name="";

	/* DEFAULT VALUES */
	
	var DEFAULT_CHANGESPEED = 5;
	var DEFAULT_MOVESPEED = 5;
	var DEFAULT_SIZE = 1008;
	var DEFAULT_TRANSITION = "spring";
	var DEFAULT_AUTOPLAY = false;

	/* END DEAFULT VALUES */

	this.domElement = domElement;
	
	var domElement = domElement;
	
	this.elements = this.domElement.select('div.in_bigGalleryElement');
	var elementsCount = this.elements.length;
	
	var scrollingElement = this.domElement.select('div.in_bigGalleryScroller')[0];
	
	var moveSpeed = DEFAULT_MOVESPEED;
	var changeSpeed = DEFAULT_CHANGESPEED;
	var size = DEFAULT_SIZE;
	var autoplay = DEFAULT_AUTOPLAY;
	var txttransition = "Effect.Transitions." + DEFAULT_TRANSITION;
	var transitionFunction = eval(txttransition);
	
	/* PARAMETERS PARSER */
	
	var ssplit = this.domElement.className.split(" ");
	for (var i = 0 ; i < ssplit.length ; i++) {
		
		var search = ssplit[i].search("name_");
		if (search != -1) {
			this.name = ssplit[i].substring(5,ssplit[i].length);
		}
		
		var search = ssplit[i].search("changespeed_");
		if (search != -1) {
			changeSpeed = ssplit[i].substring(12,ssplit[i].length);
		}
		
		var search = ssplit[i].search("movespeed_");
		if (search != -1) {
			moveSpeed = ssplit[i].substring(10,ssplit[i].length);
		}
		
		var search = ssplit[i].search("size_");
		if (search != -1) {
			size = ssplit[i].substring(5,ssplit[i].length);
		}
		
		var search = ssplit[i].search("autoplay");
		if (search != -1) {
			autoplay = true;
		}
		
		var search = ssplit[i].search("transition_");
		if (search != -1) {
			var txttransition = "Effect.Transitions." + ssplit[i].substring(11,ssplit[i].length);
			transitionFunction = eval(txttransition);
		}
	}
	
	/* END PARAMETERS PARSER */
	
	var mySpringTransition = function(pos) {
		
		if (pos==0) return 0;
		if (pos==1) return 1;
		
		return (1/3.03) * (1.52 + Math.atan( (pos-0.5) / 0.03 ) );

	}
	
	var name = this.name;
	var totalSize = size * elementsCount;
	
	/*LAYOUT SETUP*/
	
	this.domElement.setStyle({
		position: 'relative',
		overflow: 'hidden',
		cssfloat: 'left',
		width: size + 'px',
	});
	
	scrollingElement.setStyle({
		position: 'relative',
		cssfloat: 'left',
		width: totalSize + 'px',
	});
	
	var arrowLeftDiv = new Element('div',{ 'class': 'arrowLeft' });
	domElement.appendChild(arrowLeftDiv);
	
	var arrowLeft = new Element('a',{ 'class': 'in_arrowLeft','href': 'javascript:void(0)' }).update("&lt;");
	arrowLeftDiv.appendChild(arrowLeft);
	
	var arrowRightDiv = new Element('div',{ 'class': 'arrowRight' });
	domElement.appendChild(arrowRightDiv);
	
	var arrowRight = new Element('a',{ 'class': 'in_arrowRight','href': 'javascript:void(0)' }).update("&gt;");
	arrowRightDiv.appendChild(arrowRight);
	
	var galleryNavigatorDiv = new Element('div',{ 'class': 'in_galleryNavigator' });
	domElement.appendChild(galleryNavigatorDiv);
	
	var galleryNavigatorLinks = new Array();
	
	/*END LAYOUT SETUP*/
	
	/*  CONTROLS SETUP */
	
	var runner;
	
	var isMoving = false;
	var actualImage = 0; 
	
	var unlock = function() {
		isMoving = false;
	}
	
	arrowLeft.onclick = function() {
		if (!isMoving) {
			if (actualImage > 0) {
				isMoving = true;
				new Effect.Move(scrollingElement,{ x: size, y: 0, mode: 'relative', duration: moveSpeed,transition: mySpringTransition });
				actualImage--;
				updatePallette();
				unlock.delay(moveSpeed);
			}
		}
	}
	
	arrowRight.onclick = function() {
		if (!isMoving) {
			if (actualImage < elementsCount -1) {
				isMoving = true;
				new Effect.Move(scrollingElement,{ x: -size, y: 0, mode: 'relative', duration: moveSpeed,transition: mySpringTransition });
				actualImage++;
				updatePallette();
				unlock.delay(moveSpeed);
			}
		}
	}

	
	var cccgoToImage = function(index) {
		if (!isMoving) {
			isMoving = true;
			var posX = -(index * size);
			new Effect.Move(scrollingElement,{ x: posX, y: 0, mode: 'absolute', duration: moveSpeed,transition: mySpringTransition });
			actualImage = index;
			updatePallette();
			unlock.delay(moveSpeed);
		}
	}
	
	this.goToImage = function(index) {
		cccgoToImage(index);
	}
	
	function updatePallette() {
		for (i=0 ; i < galleryNavigatorLinks.length ; i++) {
			if ( actualImage == i ) {
				galleryNavigatorLinks[i].className='selected';
			} else {
				galleryNavigatorLinks[i].className='';
			}
		}
	}
	
	/* END CONTROLS SETUP */
	
	
	for (i=0; i < elementsCount ; i++) {
		var galleryNavigatorSpan = new Element('span');
		galleryNavigatorDiv.appendChild(galleryNavigatorSpan);
		
		var galleryNavigatorLink = new Element('a',{ 'href': 'javascript:void(0)','onclick': 'IN_openBigGallery(\''+name+'\','+i+')' }).update("&bull;");
		galleryNavigatorLinks[i] = galleryNavigatorLink;
		galleryNavigatorSpan.appendChild(galleryNavigatorLink);
	}
	
	if (autoplay) {
		new PeriodicalExecuter(function(pe) {
			if (autoplay==false) {
				pe.stop();
			}
			if (autoplay==true) {
				if ( actualImage < elementsCount-1 ) {
					arrowRight.onclick();
				} else {
					cccgoToImage(0);
				}
			}
		} ,changeSpeed);
	}
	
	domElement.observe('click', function() {
		autoplay=false;
	});
	
	updatePallette();
	
}


function IN_openBigGallery(name,index) {
	for (var i = 0 ; i < in_registeredBigGalleries.length ; i++) {
		var gallery = in_registeredBigGalleries[i];
		if (gallery.name == name) {
			new Effect.Appear(gallery.domElement,{ duration: 0.5,transition: Effect.Transitions.sinoidal });
			gallery.goToImage(index);
		}
	}
}



