// flyeye.js 1 | requires jquery.js 1.6.2+ | made by Kyle Weems of Mindfly Web Studio (http://mindfly.com/)
// Created August 11, 2011 | Last Modified Aug 23, 2011

var flyeye = {
	vars: {
		images: {},
		current: null,
		page: null,
		max_page: null,
		current_page: null,
		mode: 'normal'
	},
	load: function(source, title) {
		flyeye.build_list(source, function(){
			flyeye.insert_markup();		
		});
	},
	request: function(request_string, callback) {
		$.ajax({url: request_string, dataType: 'json', success: function(data) { if (!!callback) callback(data); } });
	},
	build_list: function(source, callback) {
		if (source instanceof Array) {
			flyeye.vars.images = source;				
			flyeye.vars.max_page = Math.ceil(flyeye.vars.images.length/9);
			if (flyeye.vars.images.length < 1) { 
				try {
					console.info('flyeye - error: no images were retrieved.');
				} catch (e) {
				}
			} else {
				if (!!callback) callback();
			}
		} else {
			if (typeof source == "string") {
				flyeye.request(source, function(data) {
					flyeye.vars.images = data.images;
					flyeye.vars.max_page = Math.ceil(flyeye.vars.images.length/9);
					if (flyeye.vars.images.length < 1) { 
						try {
							console.info('flyeye - error: no images were retrieved.');
						} catch (e) {
						}
					} else {
						if (!!callback) callback();
					}
				});
			} else {
				source.each(function(i) {
					images[i] = {url: $(this).attr('href'), caption: $(this).attr('title')};
				});
				flyeye.vars.max_page = Math.ceil(flyeye.images.length/9);
				if (flyeye.vars.images.length < 1) { 
					try {
						console.info('flyeye - error: no images were retrieved.');
					} catch (e) {
					}
				} else {
					if (!!callback) callback();
				}
			}
		}
	},
	insert_markup: function() {
		$('body').append('<div class="flyeye-veil"></div>');
		$('.flyeye-veil').animate({opacity: .8}, function() {
			$('body').append('<div class="flyeye-wrapper"><div class="flyeye-panel"><div class="flyeye-counter"></div><ol></ol><button type="button" class="previous-set">previous</button><button type="button" class="next-set">next</button><p class="flyeye-caption"></p></div><div class="flyeye-imagepane"><div class="flyeye-framewrapper"><div class="flyeye-frame"><img src="#" alt="" /><button type="button" class="previous-image">previous</button><button type="button" class="next-image">next</button></div></div></div></div><button type="button" class="flyeye-close">close gallery</button>');
			$('.flyeye-frame').css({opacity: 0});
			if (screen.width < 960) {
				$('.flyeye-wrapper').addClass('compact');
				flyeye.vars.mode = 'compact';
				$('.flyeye-frame').append($('.flyeye-close'));
			}
			flyeye.bind_buttons();
			flyeye.change_page(1);
			flyeye.set_image(0);
		});
	},
	change_page: function(p) {
		$('.flyeye-wrapper ol li').remove();
		$('.flyeye-wrapper .next-set, .flyeye-wrapper .previous-set').removeClass('hidden');
		if (p >= flyeye.vars.max_page) {
			p = flyeye.vars.max_page;
			$('.flyeye-wrapper .next-set').addClass('hidden');
		}
		if (p <= 1) {
			p = 1;
			$('.flyeye-wrapper .previous-set').addClass('hidden');
		}
		flyeye.vars.current_page = p;
		$('.flyeye-counter').html(p + '/' + flyeye.vars.max_page);
		var start = (p - 1) * 9;
		var end = start + 8;
		if (end >= flyeye.vars.images.length) end = flyeye.vars.images.length - 1;
		for (i = start; i <= end; i++) {
			$('.flyeye-wrapper ol').append('<li><a class="thumb image-' + i + '"><img src="' + flyeye.vars.images[i].url + '" alt="' + flyeye.vars.images[i].caption + '" /></a></li>');
		}
		if (flyeye.vars.current >= start && flyeye.vars.current <= end) $('.flyeye-wrapper .thumb.image-' + flyeye.vars.current).addClass('current');
	},
	set_image: function(n) {
		$('.flyeye-frame .hidden').removeClass('hidden');
		if (n <= 0) {
			n = 0;
			$('.flyeye-frame .previous-image').addClass('hidden');
		}
		if (n >= (flyeye.vars.images.length-1)) {
			n = (flyeye.vars.images.length - 1);
			$('.flyeye-frame .next-image').addClass('hidden');
		}
		flyeye.vars.current = n;
		$('.flyeye-frame').animate({opacity: 0}, 250, function() {
			$('.flyeye-frame img').attr({src: flyeye.vars.images[n].url, alt: flyeye.vars.images[n].caption});
			if (flyeye.vars.mode == 'compact') {
				$('.flyeye-frame img').css({maxWidth: ($(window).width() - 40) + 'px', maxHeight: ($(window).height() - 40) + 'px'});
			}
			$('.flyeye-frame').animate({opacity: 1}, 250, function() {
				$('.flyeye-caption').html(flyeye.vars.images[n].caption);	
				$('.flyeye-wrapper .thumb.current').removeClass('current');
				$('.flyeye-wrapper .thumb.image-' + n).addClass('current');
				if (n < ((flyeye.vars.current_page - 1) * 9)) flyeye.change_page(flyeye.vars.current_page - 1);
				if (n >= ((flyeye.vars.current_page) * 9)) flyeye.change_page(flyeye.vars.current_page + 1);
				$('.flyeye-frame img').unbind('load');
			});
		});
	},
	get_thumb_number: function(e) {
		var n = e.attr('class').split(' ')[1].split('-')[1] * 1;
		return n;
	},
	bind_buttons: function() {
		$('.flyeye-wrapper button, .flyeye-wrapper a').die('click');
		$('.flyeye-wrapper button, .flyeye-wrapper a').live('click', function() {
			if ($(this).hasClass('thumb')) {
				flyeye.set_image(flyeye.get_thumb_number($(this)));
				return false;
			} else if ($(this).hasClass('next-set')) {
				flyeye.change_page(flyeye.vars.current_page + 1);
			} else if ($(this).hasClass('previous-set')) {
				flyeye.change_page(flyeye.vars.current_page - 1);
			} else if ($(this).hasClass('previous-image')) {
				flyeye.set_image(flyeye.vars.current - 1);
			} else if ($(this).hasClass('next-image')) {
				flyeye.set_image(flyeye.vars.current + 1);
			}
		});
		$('.flyeye-close, .flyeye-veil').die('click');
		$('.flyeye-close, .flyeye-veil').live('click', function() {
			$('.flyeye-frame').animate({opacity:0}, function() {
				$('.flyeye-panel, .flyeye-close').animate({opacity: 0}, function() {
					$('.flyeye-veil').animate({opacity: 0}, function() {
						$('.flyeye-wrapper, .flyeye-veil, .flyeye-close').remove();
					});
				});
			});
		});
	}
};

