﻿// base.js

if(typeof jQuery != 'undefined') {
	var gallery = {
		viewport: null,
		pool: null,
		size: null,
		
		media: null,
		index: null,
		depth: null,
		
		preloader: new Image,
		timer: null,
		interval: 6,
		sequence: 'linear',
		
		init: function() {
			gallery.viewport = $('#content .media');
			gallery.pool = gallery.viewport.find('img');
			gallery.size = gallery.pool.size();
			
			//gallery.media;
			gallery.index = -1;
			gallery.depth = 1;
			gallery.timer;
			
			// hide images
			gallery.pool.css({
				//position: 'absolute',
				//left: 0,
				//top: 0,
				opacity: 0
			});
			
			// clear timer if already running
			if(gallery.timer) {
				clearInterval(gallery.timer);
			}
			
			// set preloader callback
			gallery.preloader.onload = function() {
				
				// set preloader source
				gallery.media.attr('src', gallery.preloader.src);
				
				gallery.fitMedia();
			}
			
			if(gallery.size > 1) {
				
				gallery.viewport.append(
					$('<a />')
					.attr('href', '#')
					.addClass('navigation')
					.addClass('previous')
					.css({
						zIndex: 100
					}).click(function() {
						clearInterval(gallery.timer);
						gallery.selectMedia();
						
						return false;
					}),
					
					$('<a />')
					.attr('href', '#')
					.addClass('navigation')
					.addClass('next')
					.css({
						zIndex: 100
					}).click(function() {
						clearInterval(gallery.timer);
						//gallery.index = gallery.index - 2;
						gallery.selectMedia();
						
						return false;
					})
				);
			}
		},
		
		selectMedia: function() {
			
			if(!gallery.size) {
				return;
			}
			
			// get next or random index
			gallery.index = gallery.getMediaIndex();
			
			// select next media
			gallery.media = gallery.pool.eq(gallery.index);
			
			// set initial values
			gallery.media
			.css({
				opacity: 0,
				zIndex: ++gallery.depth
			});
			
			// initialize preloader
			if(gallery.media.get(0).complete) {
				gallery.fitMedia();
			} else {
				gallery.preloader.src = gallery.media.attr('src');
			}
		},
		
		fitMedia: function() {
			
			// get dimensions
			width = gallery.media.width();
			height = gallery.media.height();
			
			// get proportional gap
			horizontal = gallery.viewport.width() / width;
			vertical = gallery.viewport.height() / height;
			
			// resize and place media
			if(horizontal < vertical) {
				w = Math.round(width * (gallery.viewport.height() / height));
				h = gallery.viewport.height();
				l = ((w - gallery.viewport.width()) / 2) * -1;
				t = 0;
			} else {
				w = gallery.viewport.width();
				h = Math.round(height * (gallery.viewport.width() / width));
				l = 0;
				t =((h - gallery.viewport.height()) / 2) * -1;
			}
			
			gallery.media
			.css({
				position: 'absolute',
				width: w + 'px',
				height: h + 'px',
				left: l + 'px',
				top: t + 'px'
			})
			.stop()
			.animate({
				opacity: 1
			}, 800);
			
			if(gallery.timer == null && gallery.size > 1) {
				gallery.timer = setInterval(gallery.selectMedia, gallery.interval * 1000);
			}
		},
		
		getMediaIndex: function() {
			index = gallery.index;
			
			if(gallery.sequence == 'linear') {
				index++;
				
				if(index >= gallery.size)
					index = 0;
				else if(index < 0)
					index = gallery.size - 1;
			} else if(gallery.sequence == 'random') {
				min = 0;
				max = gallery.size -1;
				
				//if(min > max) {
				//	index = -1;
				//}
				
				if(min == max) {
					index = min;
				}
				
				index = (min + parseInt(Math.random() * (max-min+1)));
				
				if(index == gallery.index) {
					index = gallery.getMediaIndex();
				}
			}
			
			return index;
		}
	};
}
