// JavaScript Document
// KWOKBOX VERSION 1.0 beta max
(function($){
	$.fn.kwokbox = function(options) {
		// this is to keep from overriding our "defaults" object.
		var opts = $.extend({}, $.fn.kwokbox.defaults, options);
		var base = this;
		var firstLoad = true;
		var height = 0;
		var width = 0;
		var paraHeight = 0;
		var contentToLoad = "";
		var galleryText = "";
		
        base.init = function(){
			var bodyHeight = $(document).height();
			var bodyWidth = $(window).width();
			$('body').append('<div id="overlay">&nbsp;</div>');
			$('#overlay').css({
				'opacity':'0',
				'width':bodyWidth,
				'height':bodyHeight
			}).animate({'opacity':'0.5'});
			$(window).resize(function(){
				base.positionImage()
			});
			
			base.loadImage();
		};
		
		base.loadImage = function(){
			imageLink = $('a.selected').attr('href');
			var newImg = new Image();
			newImg.src = imageLink;
			imageHeight = newImg.height;
			imageWidth = newImg.width;
			
			if($('#overlay-content:visible').size() != 1) {
				$('body').append('<div id="overlay-content"><a href="#" class="close">close</a><a href="#" class="next">next</a><a href="#" class="prev">prev</a><img src=" " /><p class="description"></p></div>');
				if(opts.caption==true) {
					base.updateText();
				}

				if(opts.xlGallery==true) {
					base.xlGalleryText();
				}
				$('#overlay-content > *').hide();
				
				$('#overlay-content > img').attr('src',imageLink).load(function(){
					base.positionImage();
				});
			
				$('a.next').click(function(){
					base.nextImage();
					return false;
				});
				
				$('a.prev').click(function(){
					base.prevImage();
					return false;	
				});
		
				$(document).keyup(function(event){
					if (event.keyCode == 27) {
						base.hideImage();
						return false
					}
			
					if (event.keyCode == 37) {
						base.prevImage();
						return false
					}
					
					if (event.keyCode == 39) {
						base.nextImage();
						return false
					}
				});
			} else{
				if(opts.caption==true) {
					base.updateText();
				}

				if(opts.xlGallery==true) {
					base.xlGalleryText();
				}
				base.changeImage();
			}
			
			$('#overlay, a.close').click(function(){
				base.hideImage();
				return false;
			});
		};
		
		base.updateText = function(){
			var imagePosition = $('a.selected').index();
			var imageTitle = $('.selected').children('img').attr('alt');
			if(imageTitle != '') {
				imageTitle = '<br />' + imageTitle;
			}
			var totalLinks = base.size();
			$('p.description').html('Image ' + (imagePosition+1) + ' of ' + totalLinks + imageTitle);
			paraHeight = $('#overlay-content p').height();
		};

		base.xlGalleryText = function(){
			galleryText = "";
			contentToLoad = "";
			$('#gallery-content').remove();
			galleryText = $('.selected').attr('rel').split(';');
			if(galleryText!="" && galleryText.length > 1){
				for(i=1;i<galleryText.length; i++){
						contentToLoad = contentToLoad + '<p><span class="gallery-title">' + galleryText[i].replace(':','</span><br />') + '</p>';
				}
				$('p.description').before('<div id="gallery-content"></div>');
				$('#gallery-content').html('<h2>'+galleryText[0]+'</h2>'+contentToLoad);
			}
			$('#gallery-content').hide();
		};
		
		base.positionImage = function(){
			if($('#gallery-content').width() > 0) {
				galleryContentWidth = $('#gallery-content').width()+20;
			} else {
				galleryContentWidth = 0;
			}
			if ($.browser.msie && $.browser.version.substr(0,1)<7) {
			} else {
				imageHeight = $('#overlay-content > img').height() + parseInt(paraHeight);
				imageWidth = $('#overlay-content > img').width();
				if($('#gallery-content').height() > imageHeight) {
					imageHeight = $('#gallery-content').height();
				}
			}
			contentLeft = (parseInt($(window).width()) - (parseInt(imageWidth)+galleryContentWidth))/2;
			contentTop = ((parseInt($(window).height()) - parseInt(imageHeight))/2) + $(window).scrollTop();

				
			if(firstLoad==true) {
				$('#overlay-content').css({
					'left': contentLeft,
					'top': contentTop,
					'height':imageHeight,
					'width':imageWidth+galleryContentWidth
				})
				$('#overlay-content > *').fadeIn();
				firstLoad = false;
				
				base.checkLinks();
			} else {
				$('#overlay-content').stop().animate({
					'left': contentLeft,
					'top': contentTop,
					'height':imageHeight,
					'width':imageWidth+galleryContentWidth
				}, function(){
					$('#overlay-content > *').fadeIn();
					base.checkLinks();
				})
				$('#overlay').css({
					'width':$(window).width(),
					'height':$(document).height()
				})
			}
		};

		
		base.writeSizes = function(){
			imageHeight = $('#overlay-content > img').height();
			imageWidth = $('#overlay-content > img').width();
			$('#overlay-content').animate({
				'height':imageHeight,
				'width':imageWidth
			})
		};
		
		base.changeImage = function(){
			base.writeSizes();
			$('p.description').hide();
			$('#overlay-content > img').fadeOut(function(){
				$('#overlay-content > img').attr('src',imageLink).load(function(){
					base.positionImage();
				});
			});
		};
		
		base.hideImage = function(){
			$('#overlay').fadeOut(function(){
				$('#overlay').remove();				   
			});
			$('#overlay-content').fadeOut(function(){
				$('#overlay-content').remove();				   
			});
			$('a.selected').removeClass('selected');
			firstLoad = true;

			$(document).unbind('keyup');
		};
		
		base.nextImage = function(){
			$('a.selected').removeClass('selected').next().addClass('selected');
			base.loadImage();
		};
		
		base.prevImage = function(){
			$('a.selected').removeClass('selected').prev().addClass('selected');
			base.loadImage();
		};
		
		base.checkLinks = function(){
			if($('a.selected').next().size() != 1) {
				$('a.next').hide();
			} else {
				$('a.next').show();
			}
			if($('a.selected').prev().size() != 1) {
				$('a.prev').hide();
			} else {
				$('a.prev').show();
			}
		};
		
		base.click(function(){
			$(this).addClass('selected');
			base.init();
			
			return false;
			
		});

	};
	
	$.fn.kwokbox.defaults = {
	  caption: true,
	  xlGallery: false
	};
})(jQuery);
