// Extra code to better gallery viewing

function initAlbums() {
	$$('.galleryThumbFrame').each( function(obj) {
		new thumbnailStyle({'obj':obj});										
	});
	
	new pageFlipper({container:'albumHolder'});
	
}

window.addEvent('domready',function() {
	
									
	initAlbums();
	
	var list = $('albumList');
	
	//console.log('ran script');
	
	if ($defined(list)) {
		var N = list.getChildren().length;
	
		var L = Math.round(458/N).limit(53,100);
		
		var ALsz = $('albumList').getSize();
		var LH = ALsz.size.y;
	
		var AVsz = $('albumView').getSize();
		var VH = AVsz.size.y;
		
		//alert('list = '+LH+', view = '+VH);
		
		if (LH > VH){
			var diff = LH - VH;
			var dmarg = (diff/N/2).round(); 
			var marginY = (20 + 1 - dmarg).limit(0, 20);
			//alert('longer list');
		} else if(LH < VH) {
			var diff = VH - LH;
			var dmarg = (diff/2/N).round(); 
			var marginY = (20 + dmarg).limit(0, 50);
			//alert('longer view');			
		} else {
			//alert('neither');
			marginY = 20;
		}	
		
		$$('.albumSelect').setStyles({'padding-top':marginY,'padding-bottom':marginY});
		
		
	
		//$$('#albumList li').setStyle('height',L);
		//$$('.albumSelect').setStyle('line-height',L);
	
		var hf =  L*N + 3*(N-1);
		if (hf > 458) {
			$('albumView').setStyle('height',hf-4);
		}
	
		$$('.albumSelect').each( function(a)  {
		
			a.addEvent('click',function(e) {
				e = new Event(e).stop();						
									
				var old_url = this.getProperty('href');
				var url =  old_url+'/justAlbum/'+$time(); //site_url+'/site/album/'+siteid+'/'+pagenum+'/'+album;
				
				$('current_album').setProperty('id','');
				this.setProperty('id','current_album');
				
				if ($defined($('galleryViewPort'))) {
					$('galleryViewPort').remove(); }
				
				$('albumHolder').addClass('hidden');
				
				new Ajax(url, {
					method: 'get',
					update: $('albumHolder'),
					onComplete: function() {
						initAlbums();	
						
						Lightbox.anchors = [];
						$each(document.links, function(el){
							if (el.rel && el.rel.test(/^lightbox/i)){
								el.onclick = Lightbox.click.pass(el, Lightbox);
								Lightbox.anchors.push(el);
							}
						});
						$('albumHolder').removeClass('hidden');
					}
				}).request();
			});
		});								  
	} //if statement						
}); //domready

var thumbnailStyle = new Class({
	options: {
		obj:false,
		duration:150
	},
	initialize: function(options){
		this.setOptions(options);
		if (!this.options.obj) {
			console.log('thumbnailStyle Error: obj is not defined'); }
		this.obj = this.options.obj;
		this.fx = new  Fx.Styles(this.obj,{duration:this.options.duration, wait:false, transition:Fx.Transitions.linear});
		
		if (IE6) {
			marginOver = '10px 2px 0px 6px';
			marginOut = '14px 6px 4px 10px';
		} else {
			marginOver = '10px 0px 0px 10px';
			marginOut = '14px 4px 4px 14px';		
		}
		
		this.obj.addEvent('mouseover',function() {
			this.fx.start({'padding':10,'margin':marginOver,'background-color':background_color});									   
		}.bind(this));
		this.obj.addEvent('mouseout',function() {
			this.fx.start({'padding':6,'margin':marginOut,'background-color':neutral_color});									
		}.bind(this));
	},
	setOptions: function(options){
        $extend(this.options,options);
	}
});

var pageFlipper = new Class({
	options: {
		pageWidth:535,
		pageHeight:408,
		menuHeight:50,
		NperPage:12,
		container:false,
		start:0
	},
	initialize: function(options){
		this.setOptions(options);
		if (!this.options.container) {
			console.log('pageFlipper Error: container is not defined'); }
		this.container = $(this.options.container);
		
		if (!$defined(this.container)) {
			// There are no galleries
			return(false);
		}
		
		this.list = this.container.getChildren();
		
		var N = this.list.length;
		
		if (N <= this.options.NperPage) {
			this.container.setStyles({width:this.options.pageWidth, height:this.options.pageHeight});	
		}
		else {
			
			this.viewport = new Element('div',{id:'galleryViewPort'})
				.setStyles({width:this.options.pageWidth,height:this.options.pageHeight+this.options.menuHeight})
				.injectBefore(this.container);
			this.slider = new Element('div',{id:'gallerySlider'}).injectInside(this.viewport);
			var pagenum = 0;
			var page = {};
			this.list.each( function(obj,i) {
				if (i%this.options.NperPage == 0) {
					// Create New Page
					pagenum = pagenum+1;
					page = new Element('div',{
						'class':'galleryPage',
						'styles':{width:this.options.pageWidth,height:this.options.pageHeight}
					}).injectInside(this.slider); 
				}
				obj.injectInside(page);
			}.bind(this));
			this.Npages = pagenum;
			
			this.pagetag = new Element('a',{id:'galleryCounter'}).injectAfter(this.slider);
			this.previous = new Element('a',{
				id:'galleryPrevious',
				'class':'galleryArrow',
				'href':'javascript:void(0)'
			}).injectAfter(this.pagetag);
			
			this.next = new Element('a',{
				id:'galleryNext',
				'class':'galleryArrow',
				'href':'javascript:void(0)'
			}).injectAfter(this.previous);
			
			
			
			
			this.width = this.options.pageWidth;
			this.slidewidth = this.width*this.Npages;
			this.slider.setStyles({width:this.slidewidth});
			
			this.sliderFx = new  Fx.Styles(this.slider,{duration:700, wait:true, transition:Fx.Transitions.Cubic.easeOut});
			this.pagetagFx = new  Fx.Styles(this.pagetag,{duration:350, wait:true, transition:Fx.Transitions.Cubic.easeOut});
			
			this.previous.addEvent('click',function() {
				this.move(-1);
			}.bind(this));
		
			this.next.addEvent('click',function() {
				this.move(1);
			}.bind(this));
			
			this.current = this.options.start;
			this.set(this.current,false);
			
		}
	},
	setOptions: function(options){
        $extend(this.options,options);
	},
	setOptions: function(options){
        $extend(this.options,options);
    },
	move: function(off){
		var next = this.current + off;
		this.set(next,true);
	},
	set: function(next,slide) {
		next = Math.max(0,Math.min(next,this.Npages-1));
		this.current = next;
		var left = -1*next * this.width;
		var str = (this.current+1)+' / '+this.Npages; 
		
		if(slide) {
			this.sliderFx.start({'left':left});
			this.pagetagFx.start({'opacity':0}).chain( function() {
				this.pagetag.setHTML(str);	
				this.pagetagFx.start({'opacity':1})
			}.bind(this));
		}
		else { 
			this.slider.setStyle('left',left);
			this.pagetag.setHTML(str);
		}
		
		if (this.current+1 == this.Npages) {
			this.next.setOpacity(0);
		}
		else { 
			this.next.setOpacity(1);
		}
		if (this.current == 0) {
			this.previous.setOpacity(0);
		}
		else { 
			this.previous.setOpacity(1);
		}
	}	
	
});
