//photo gallery, slideshow format.  runs on the elementary library. 
function Gallery(galleries, gallery_name, size, delay, align, autoplay, show_captions_in){
	
	var This = this;
	
	
	This.next  = function(manual){
		
		//if(manual) This.stopped = true;
		window.clearTimeout(This.timer);		
		
		if(!This.wait){			
				This.current++;
				if(This.current == This.photos.length)
					This.current = 0

				if(This.size != "original" && This.size != ""){
					This.size = (This.photos[This.current].width >= 640 || This.photos[This.current].height >= 640) ? "large" : "medium";
					This.size = (This.photos[This.current].width >= 320 || This.photos[This.current].height >= 320) ? This.size : "small";
				}
				
				if(This.size == "original" || This.size == ""){
					This.size = "";	
				} else {
					This.size =  "_" + This.size;	
				}
				var src = WEB_HOME + This.directory + "/" + This.photos[This.current].file_name;
				var name = src.substr(0, src.lastIndexOf("."));
				var ext = src.substr(src.lastIndexOf("."), src.length);

				if(This.size){
					src = name + This.size + ext;	
				}
				
				
				if(This.loader){ This.loader.element.show('block'); This.loader.effect({alpha:99.9, duration:0.2}); }
				This.wait = true;
				This.fadein.element.element.setAttribute("src", src);
				if(This.caption) This.caption.innerHTML = This.photos[This.current].caption;
				This.updatestatus();
				
		} else {
			//This.current--;
			This.timer = window.setTimeout(This.next, 200);	
			return;
		}
		
	}
	This.previous  = function(manual){
		//if(manual) This.stopped = true;
		window.clearTimeout(This.timer);						
		if(!This.wait){
			
				This.current--;				
				if(This.current == -1)
					This.current = This.photos.length - 1;			
				
				var src = WEB_HOME + This.directory + "/" + This.photos[This.current].file_name;
				var name = src.substr(0, src.lastIndexOf("."));
				var ext = src.substr(src.lastIndexOf("."), src.length);
				
				
				if(This.size){
					src = name + "_" + This.size + ext;	
				}
				
				This.wait = true;
				if(This.loader){ This.loader.element.show('block'); This.loader.effect({alpha:99.9, duration:0.2}); }
				if(This.caption) This.caption.innerHTML = This.photos[This.current].caption;
				This.fadein.element.element.setAttribute("src", src);
				This.updatestatus();
				
		} else {
			//This.current++;
			This.timer = window.setTimeout(This.previous, 200);	
			return;
		}
		
		
							
	}
	This.loadphoto = function(index){
		This.current = index - 1;				
		//This.next();
		This.timer = window.setTimeout(This.next, 100);
	}
	This.start = function(){
		This.stopped = false;
		This.updatestatus();
		This.timer = window.setTimeout(This.next, 100);
	}
	This.stop = function(){
		window.clearTimeout(This.timer);
		This.stopped = true;
		This.updatestatus();
	}
	This.onload = function(img){
		//alert('got load at least..');
		if(This.align == '' || This.align=='right'){
			var cw = document.getElementById("photos"+This.name).offsetWidth;
		
			//center image if widh is less
			if(This.fadein.element.getRealWidth() < cw){
				var new_pos = This.align == '' ?  (cw - This.fadein.element.getRealWidth())/2 : (cw - This.fadein.element.getRealWidth());
				This.fadein.element.setPosition(new_pos, 0);	
			} else{
				This.fadein.element.setPosition(0, 0);	
			}
    	}
		This.fadein.element.show('block');
		This.fadein.effect({alpha:99.9, duration:This.speed/5, trans:physics.easeOut});
		This.fadeout.effect({alpha:0.01, duration:This.speed/5, trans:physics.easeOut},function(){
									  if(This.loader){  This.loader.effect({alpha:0.01, duration:0.4},function(){ This.loader.element.hide('none'); } ); }
								   			This.wait = false;
											if(!This.stopped) This.timer = window.setTimeout(This.next, This.delay * 1000);
										
											var tmp = This.fadein;
											This.fadein = This.fadeout;
											This.fadeout = tmp;
											
								});						
		//This.cached.push(ei.source.getAttribute("src"));	
		
	}
	This.slidetimer = null,
	slidespeed = 5,
	slidedir = -1,
	This.scrollthumbs = function(dir){
		This.slidedir = dir ? dir : This.slidedir;
		This.doslide();
	}
	This.doslide = function(){
		
		var left = This.slide.getRealLeft();
		var sw = This.slide.getRealWidth();
		var right = left + sw;
		var gw = document.getElementById("gallery"+This.name).offsetWidth;
		
		if(This.slidedir == 1 && (left > 0) ) return;
		if( This.slidedir == -1 && ( (sw < gw) ||  (right < (gw - 50) ))) return;		
		
		This.slide.setPosition(left + This.slidespeed*This.slidedir );		
		This.slidetimer = window.setTimeout(This.doslide, 100);	
	}
	This.stopscroll = function(){
		window.clearTimeout(This.slidetimer);	
	}
	This.loadthumbs = function(type){
		var type = type ? type : "photos";
		This.slide = new Element(This.browser.getChildren("div")[1]);
		This.slide.setContent("");
		for(var p = 0; p < This.photos.length; p++){
		
			var file = type == "photos" ? This.photos[p].file_name : This.photos[p].file_name + ".jpg";
			var src = WEB_HOME +This.directory+"/" + file;
			var name = src.substr(0, src.lastIndexOf("."));
			var ext = src.substr(src.lastIndexOf("."), src.length);
				src = name + "_square" + ext;
			This.slide.element.innerHTML += '<a href="javascript:void(false)" onclick="gal'+This.name+'.loadphoto('+p+');" id="photo'+p+'"><img class="thumb" src="'+src+'" /></a>';	
		}
		
	
		This.slide.element.style.width = (This.photos.length*85) + 'px';
			
	}
	This.browse_photo = function(id){
		This.slide.setPosition(0,0);
		document.getElementById("videos").style.display = "none";
		document.getElementById("photos").style.display = "block";
		This.gallery = This.galleries[id];
		This.photos = This.This.photos;
		This.loadthumbs('photos');
		This.loadphoto(0);
	}
	This.browse_video = function(id){
		This.slide.setPosition(0,0);	
		document.getElementById("photos").style.display = "none";
		document.getElementById("videos").style.display = "block";
		window.clearTimeout(This.timer);
		This.stopped = true;
		
		This.gallery = This.galleries[id];
		This.photos = This.This.videos;
	
		This.loadthumbs('videos');
		This.loadvideo(0);
	}
	This.updatestatus = function(){
		if(This.active){
			This.active.className = "";			
		} 
		if(document.getElementById("photo"+This.current)){
			This.active = document.getElementById("photo"+This.current);
			This.active.className = "active";
		}
			
		
		if(This.status){
			var status = This.stopped ? " (Paused)" : " (Playing)";
			This.status.setContent("Photo " + (This.current +1) + " of " + This.photos.length + status);
		}
	}
	This.iscached = function(img){
		for(var p = 0; p < This.cached.length; p++){
			if(img == This.cached[p])
				return p;
		}
		return -1;
	}
	This.indexof = function(first){
		for(var p = 0; p < This.photos.length; p++){
			if(first == This.photos[p])
				return p;
		}
		return -1;
	}
	
			//some configuration variables for the slideshow. 
		This.photos = galleries.photos;			
		This.cached = new Array();
		This.size = size ? size : false;
		This.speed = 1;
		This.delay = delay ? delay : 7;
		This.name = gallery_name;
		if(show_captions_in){
			This.caption = document.getElementById(show_captions_in);
		} else {
			This.captions = false;	
		}
								  
		This.container = new Element("photos" + gallery_name);		
		This.galleries = galleries;
		This.directory = "/photos";
		This.align = align ? align : '';
		
		//This.caption = document.getElementById("caption" + gallery_name) ? document.getElementById("caption" + gallery_name) : false;
		
		if(document.getElementById("loading" + gallery_name)){
			This.loader = new Animation("loading" + gallery_name, {alpha:0.01});	
		}else{
			This.loader = false;
		}
		if(document.getElementById("status" + gallery_name))
			This.status = new Element("status" + gallery_name);
		else
			This.status = false;
		if(document.getElementById("thumbs" + gallery_name)){
			This.browser = new Element("thumbs" + gallery_name);			
		}else{
			This.browser = false;
		}
		
		var imgs = This.container.getChildren("img");
	
		This.fadein = new Animation(imgs[0], {alpha:0.01});		
		This.fadeout = new Animation(imgs[1], {alpha:0.5});			
	
		
		if(This.browser){
			This.loadthumbs();
		}
		This.current = -1;
		This.stopped = autoplay ? false : true;
		//This.timer = window.setTimeout(This.next, 200);
		This.updatestatus();
		This.next();
		
}