/*
bxGallery v1.1
Plugin developed by: Steven Wanderski
http://bxgalleryplugin.com
http://stevenwanderski.com

Released under the GPL license:
http://www.gnu.org/licenses/gpl.html
*/

(function($){

 	$.fn.extend({ 
 		
 		bxGallery: function(options) {

			var defaults = {
				maxwidth: '',
				maxheight: '',
				thumbwidth: 200,
				thumbcrop: false,
				croppercent: .35,
				thumbplacement: 'bottom',
				thumbcontainer: '',
				opacity: .7,
				load_text: '',
				load_image: 'http://i302.photobucket.com/albums/nn92/wandoledzep/spinner.gif',
				wrapperclass: 'outer'
			}
				
			var options =  $.extend(defaults, options);
			var o = options;
			var cont = '';
			var caption = '';
			var $outer = '';
			var $orig = this;
			var tall = 0;
			var wide = 0;
			var showing = 0;
			var i = 0;
			var k = $orig.find('img').size();
			var current;
			
			preload_img();			
						
			function preload_img(){
				$orig.hide();
				if(o.load_text != ''){
					$orig.before('<div id="loading">' + o.load_text + '</div>');
				}else{
					$orig.before('<div id="loading"><img src="' + o.load_image + '" /></div>');
				}
				$orig.parent().find('#loading').css({'textAlign':'center', 'width':o.maxwidth});
				$orig.find('img').each(function(){
					var the_source = $(this).attr('src');
					var the_img = new Image();
					the_img.onload = function(){preload_check();};
					the_img.src = the_source;
				});		
			}
			
			function preload_check(){
				i++;
				if(i == k){init();}
			}
			
			function init(){
				set_layout();			
				set_main_img();			
				place_thumbcontainer();			
				set_thumbs();			
			}
			
			function set_layout(){
				$orig.parent().find('#loading').hide();
				$orig.show();				
				$orig.wrap('<div class="' + o.wrapperclass + '"></div>');
				$outer = $orig.parent();	
				$orig.find('li').css({'position':'absolute'});
			}
			
			function set_main_img(){
				$orig.find('img').each(function(){
					var $this = $(this);
					var $imgheight = $this.height();
					var $imgwidth = $this.width();
					if($this.attr('title') != ''){
						caption = $this.attr('title');
						$this.parent().append('<div class="caption">' + caption + '</div>');
					}
					if(o.maxwidth != ''){
						if($this.width() > o.maxwidth){						
							$this.width(o.maxwidth);
							$this.height(($imgheight/$imgwidth)*o.maxwidth);
						}
					}					
					if(o.maxheight != ''){
						if($this.height() > o.maxheight){
							$this.height(o.maxheight);
							$this.width(($imgwidth/$imgheight)*o.maxheight);
						}
					}						
					if($this.height() + $this.parent().find('.caption').height() > tall){
						tall = $this.height() + $this.parent().find('.caption').height();
					}
					if($this.width() > wide){
						wide = $this.width();
					}
					cont += '<li><img src="' + $this.attr('src') + '" /></li>'; 
				});
				
				$orig.find('li:not(:first)').hide();
				$orig.height(tall);
		
				$orig.width(wide);
				$outer.find('.caption').width(wide);
			}
									
			function place_thumbcontainer(){
				if(o.thumbplacement == 'top'){		
					$outer.prepend('<ul class="thumbs">' + cont + '</ul>');
					$outer.find('.thumbs').css({'overflow':'auto'});
				}else if(o.thumbplacement == 'left'){
					$outer.prepend('<ul class="thumbs">' + cont + '</ul>');
					$orig.css({'float':'left'});
					$outer.find('.thumbs').css({'float':'left'});
				}else if(o.thumbplacement == 'bottom'){
					$outer.append('<ul class="thumbs">' + cont + '</ul>');
				}else if(o.thumbplacement == 'right'){
					$outer.append('<ul class="thumbs">' + cont + '</ul>');
					$orig.css({'float':'left'});
					$outer.find('.thumbs').css({'float':'left'});				
				}
				$outer.append('<div style="clear:both"></div>');
				if(o.thumbcontainer != ''){
					$outer.find('.thumbs').width(o.thumbcontainer);
				}		
			}
			
			function set_thumbs(){						
	    		$outer.find('.thumbs li').each(function() {				
				
					var $this = $(this);
					var $img = $this.find('img');
					var $imgwidth = $img.width();
					var $imgheight = $img.height();
				
					if(o.thumbcrop){
						$img.width($imgwidth * o.croppercent);
						$img.height(($imgheight/$imgwidth)*$img.width());				
						$this.css({
							'float':'left',
							'width':o.thumbwidth,
							'height':o.thumbwidth,
							'overflow':'hidden',
							'cursor':'pointer'
						});
					}else{
						$img.width(o.thumbwidth);
						$img.height(($imgheight/$imgwidth)*o.thumbwidth);				
						$this.css({
							'float':'left',
							'cursor':'pointer'
						});
						$this.height($img.height());
					}				
				
					$this.click(function(){
						var x = $outer.find('.thumbs li').index($this);
						if(showing != x){
							$orig.find('li').fadeOut();
							$orig.find('li').eq(x).fadeIn();
							showing = x;
						}
					});
									
				});	
					
				var $thumb = $outer.find('.thumbs li');
				$thumb.eq(0).addClass('on');
				$thumb.not('.on').fadeTo(0, o.opacity);
				$thumb.click(function(){
					var t = $(this);
					var i = $thumb.index(this);
					if(current!=i){
						$thumb.removeClass('on');
						t.addClass('on');
						$thumb.not('.on').fadeTo(200, o.opacity);
						current = i;
					}
				}).hover(function(){
					$(this).stop().fadeTo(200, 1);
				}, function(){
					$(this).not('.on').stop().fadeTo(200, o.opacity);
				});		
	    		
			}
						
    	}
	});
	
})(jQuery);


