/*
	Image Viewer v2.0.5.
	Written by All Web Promotion, Inc. 2008-2009.
*/

;(function($) {

	$.fn.imageviewer = function(options) {

		var defaults = {
			'containerId'		: 'imageviewer-container',
			'transitionTime' 	: 500
		};
		var settings = $.extend({}, defaults, options);
		$.extend(settings, {
			'onClose' : onClose
		});

		var jModal = null;

		$(this).each(function() {
			$(this).click(function(e){
				show(this);
				this.blur();
				return false;
			});
		});

		return $(this);

		function show (linkElem) {

			if (!jModal) { jModal = $.modal(settings); }
			jModal.closeWindow();
			jModal.initWindow('<div>');
			jModal.container.attr('id', settings.containerId);
			if (jModal.isie6or7()) {
				jModal.container.css('textAlign', 'center');
			}

			var title = linkImageTitle(linkElem);
			var imageUrl = linkImageUrl(linkElem);
			var jLinkElems = $('[rel="' + $(linkElem).attr('rel') + '"]');
			var jTitle = $('<div class="title">');
			var jHeader = $('<div class="header">')
					.append(jTitle.text(title))
					.append('<div class="close">&nbsp;</div>')
					.appendTo(jModal.container);
			var jNav = $('<div class="nav">')
					.appendTo(jHeader);
			var jImage = $('<img/>')
					.addClass('image')
					.css('display','block')
			/*if (jModal.isie6or7()) {
				jImage.css('textAlign','left');
			}*/
			var jImageContainer = $('<div>')
					.addClass('image-container')
					.appendTo(jModal.container)
					.append(jImage);
			if (jModal.isie6or7()) {
				jImageContainer.css('textAlign','center');
			}
			var imageDimensions = {
				'width'		: parseInt(jImageContainer.css('width')),
				'height'	: Math.min(parseInt(jImageContainer.css('height')), $(window).height() - 75)
			};

			var jLinks = $('[rel="' + rel + '"]');
			var rel = $(linkElem).attr('rel');
			if ($.trim(rel)) {
				jLinks = $('[rel="' + rel + '"]');
			}

			if (jLinks && jLinks.size() > 1) {
				var url, nextUrl, prevUrl, imageCountText;
				var found = false, foundNext = false, foundPrev = false;
				var jNext = $('<span class="next"> <a href="#">Next &gt;</a> </span>');
				var jPrev = $('<span class="prev"> <a href="#">&lt; Prev</a> </span>');
				$(jLinks).each(function(i){
					var me = this;
					url = linkImageUrl(this);
					if (url == imageUrl) {						
						found = true;
						imageCountText = 'Image ' + (i + 1) + ' of ' + jLinks.size();											
					} else {
						if (found) {
							foundNext = true;
							jNext.click(function(){
								show(me);
								return false;
							});
							return false;
						}
						foundPrev = true;
						jPrev.unbind('click');
						jPrev.click(function(){
							show(me);
							return false;
						});
					}
				});
				if (foundPrev) { jNav.append(jPrev); }
				if ((imageCountText) && (jLinks.size() > 1)) {
					$('<span class="count"></span>')
						.text(' ' + imageCountText + ' ')
						.appendTo(jNav);
				}
				if (foundNext) { jNav.append(jNext); }
			} else {
				jNav.remove();
			}

			jImageContainer.addClass('loading');
			jImage.hide();
			var preloader = new Image();
			preloader.onload = function() {
				imageDims = trapsize(preloader.width, preloader.height, imageDimensions.width, imageDimensions.height);
				preloader.onload = null;
				jImageContainer
					.removeClass('loading')
					.css('height', imageDimensions.height + 'px');
				jImage
					.attr('src', imageUrl)
					.attr('width', imageDims.w)
					.attr('height', imageDims.h)
					.css({	'width'			: imageDims.w + 'px',
							'height'		: imageDims.h + 'px',
							'margin-right'	: 'auto',
							'margin-bottom'	: '0',
							'margin-left'	: 'auto',
							'margin-top'	: (Math.floor((imageDimensions.height - imageDims.h) / 2)) + 'px'
						 })
					.hide()
					.animate({'opacity':'show'}, settings.transitionTime, 'linear');
			}; /* end onload */
			preloader.src = imageUrl;

			jModal.show();

		}

		function linkImageUrl (imageLink) {
			return		$(imageLink).metadata().imageviewerImageUrl
						|| (($(imageLink).attr('href') != '#') ? $(imageLink).attr('href') : null)
						|| $(imageLink).find('img').attr('src');
		}

		function linkImageTitle (imageLink) {
			return 		$(imageLink).metadata().imageviewerImageTitle
						|| $(imageLink).attr('title')
						|| $(imageLink).find('img').attr('title')
						|| $(imageLink).find('img').attr('alt')
						|| $(imageLink).find('img').attr('src');
		}

		function trapsize (itemWidth, itemHeight, maxWidth, maxHeight) {
			do {
				if (maxWidth > 0) {
					if (itemWidth > maxWidth) {
						itemHeight = Math.floor(itemHeight * maxWidth / itemWidth);
						itemWidth = maxWidth;
					}
					if (!(itemHeight > maxHeight)) { break; }
				}
				if (maxHeight > 0) {
					if (itemHeight > maxHeight) {
						itemWidth = Math.floor(itemWidth * maxHeight / itemHeight);
						itemHeight = maxHeight;
					}
				}
			} while (0);
			return {'w':itemWidth,'h':itemHeight};
		} /* end trapsize() */

		function onClose () {
			jModal = null;
		}

	};

})(jQuery);
