// Copyright ©2009 Aaron Vanderzwan, by Aaron Vanderzwan
// Thanks to Skye Giordano for the suggestion of the resizeMsg option.
// 
// LICENSE
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
// 
// VERSION: 1.1.7




(function($){jQuery.fn.maxImage=function(options){var resizeMsgDefaults={show:false,location:'before',message:'Original: ([w]w x [h]h)'};var opts=jQuery.extend({wait:true,imageArray:[],maxFollows:'both',verticalOffset:0,horizontalOffset:0,leftSpace:0,topSpace:0,rightSpace:0,bottomSpace:0,overflow:'hidden',position:'absolute',isBackground:false,zIndex:-1,verticalAlign:'center',horizontalAlign:'center',maxAtOrigImageSize:false,slideShow:false,slideDelay:5,slideShowTitle:true,loaderClass:'loader',resizeMsg:resizeMsgDefaults,onImageShow:function(){}},options);opts.resizeMsg=jQuery.extend(resizeMsgDefaults,options.resizeMsg)
var jQueryMatchedObj=this;function _initialize(){_start(this,jQueryMatchedObj);return false;}
function _start(image,jQueryMatchedObj){if(opts.slideShow){_setup_slideshow(jQueryMatchedObj);}else if(opts.isBackground){Background._setup_background(image);}else{Others._setup_others(image,opts);}}
Others={_setup_others:function(image,opts){$this=$(image);$this.hide();Others._configure_css(image,opts);$(window).load(function(){_get_orig_data($this);_size_image($this);_center_image($this);$this.show();$('.'+opts.loaderClass).hide();opts.onImageShow.call(this);$(window).resize(function(){_size_image($this);_center_image($this);});});},_configure_css:function(image,opts){if(opts.position=='absolute'){$(image).css({'overflow':'hidden','left':opts.leftSpace,'top':opts.topSpace,'position':'absolute'});if(opts.verticalAlign=='bottom'){$(image).css({'bottom':opts.bottomSpace,'top':'auto'});}
if(opts.horizontalAlign=='right'){$(image).css({'right':opts.rightSpace,'left':'auto'});}}else{$(image).css({'margin-top':opts.topSpace,'margin-right':opts.rightSpace,'margin-bottom':opts.bottomSpace,'margin-left':opts.leftSpace,'position':opts.position});}}}
Background={_setup_background:function(image){$this=$(image);$this.hide();Background._configure_css(image);$(window).load(function(){_get_orig_data($this);_size_image($this);_center_image($this);$this.show();$('.'+opts.loaderClass).hide();opts.onImageShow.call(this);$(window).resize(function(){_size_image($this);_center_image($this)});});},_configure_css:function(image){$(image).css({'z-index':opts.zIndex});if(opts.position=='absolute'){$(image).css({'overflow':'hidden','left':opts.leftSpace,'top':opts.topSpace,'position':'absolute'});$('html').css({'overflow-y':opts.overflow});if(opts.verticalAlign=='bottom'){$(image).css({'bottom':opts.bottomSpace,'top':'auto'});}
if(opts.horizontalAlign=='right'){$(image).css({'right':opts.rightSpace});}}else{$(image).css({'margin-top':opts.topSpace,'margin-right':opts.rightSpace,'margin-bottom':opts.bottomSpace,'margin-left':opts.leftSpace,'position':opts.position});}}}
function _center_image(image){$this=image;if(opts.horizontalAlign=='center'){var pageWidth=$(window).width()-opts.horizontalOffset;var newWidth=-1*($this.width()-pageWidth)/2;$(image).css({'left':newWidth});}
if(opts.verticalAlign=='center'){var pageHeight=$(window).height()-opts.verticalOffset;var newHeight=-1*($this.height()-pageHeight)/2;$(image).css({'top':newHeight});}}
function _get_orig_data(image){$this=image;$this.attr('origWidth',$this.width());$this.attr('origHeight',$this.height());$this.attr('ratio',find_ratio($this.width(),$this.height()));}
function _size_image(image){$this=image;var originalWidth=to_i($this.attr('origWidth'));var originalHeight=to_i($this.attr('origHeight'));var ratio=$this.attr('ratio');if(originalWidth==0||originalHeight==0){setTimeout(function(){_get_orig_data(image);_size_image(image);},100);return;}
var width_and_height=[];width_and_height=find_width_and_height(originalWidth,originalHeight,ratio);$this.width(width_and_height[0]);$this.height(width_and_height[1]);_show_resize_message(originalWidth,originalHeight,image);}
function _show_resize_message(originalWidth,originalHeight,image){if((to_i($this.width())!=originalWidth||to_i($this.height())!=originalHeight)&&opts.resizeMsg.show){$(".maximage_resized").remove();opts.resizeMsg.message=opts.resizeMsg.message.replace('[w]',originalWidth).replace('[h]',originalHeight);var insertStr='<div class="maximage_resized">'+opts.resizeMsg.message+'</div>';if(opts.resizeMsg.location.toLowerCase()=="before"){$this.before(insertStr);}else{$this.after(insertStr);}}}
function find_width_and_height(originalWidth,originalHeight,ratio){var pageWidth=$(window).width()-opts.horizontalOffset;var pageHeight=$(window).height()-opts.verticalOffset;if(!opts.isBackground){if(opts.maxFollows=='both'){max_follows_width(pageWidth,ratio);if(height>pageHeight){max_follows_height(pageHeight,ratio);}}else if(opts.maxFollows=='width'){max_follows_width(pageWidth,ratio);}else if(opts.maxFollows=='height'){max_follows_height(pageHeight,ratio);}}else{width=pageWidth+40;height=width/ratio;if(height<pageHeight){height=pageHeight-(opts.topSpace+opts.bottomSpace);width=height*ratio;}}
if(opts.maxAtOrigImageSize&&width>originalWidth){arrayImageSize=new Array(originalWidth,originalHeight);}else{arrayImageSize=new Array(width,height);}
return arrayImageSize;}
function max_follows_height(pageHeight,ratio){height=pageHeight-(opts.topSpace+opts.bottomSpace);width=height*ratio;}
function max_follows_width(pageWidth,ratio){width=pageWidth-(opts.leftSpace+opts.rightSpace);height=width/ratio;}
function find_ratio(width,height){width=to_i(width);height=to_i(height);var ratio=width/height;ratio=ratio.toFixed(2);return ratio;}
function to_i(i){last=parseInt(i);return last;}
function debug($obj){if(window.console&&window.console.log){window.console.log($obj);}}
return this.each(_initialize);};})(jQuery);
