(function($) {

    $.fitme = function(element, options) {
		
		var $parent = $(element).parent();
		
        var defaults = {
  			framefit: $parent.hasClass("fit-to-frame"),
			centerx: $parent.hasClass("center-x"), 
			centery: $parent.hasClass("center-y"),
			animate:false
        }

        var plugin = this;
  	    plugin.settings = {}
 		
  	    
        var $element = $(element),
             element = element;
  	    
  	   plugin.data = {};
  	  
        plugin.init = function() {
			plugin.settings = $.extend({}, defaults, options)
				
		
			$(element).bind("load", function(){
				$element.trigger('fitload');
				plugin.resize();
			});
			if( element.complete || (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6)){
				$element.trigger('load');
			}
		}
  	    plugin.resize = function(){
  	    	
  	    	var hideaftercomplete= false;
  	    	
  	    	if(! $parent.is(":visible")){
  	    		hideaftercomplete = true;
  	    		$parent.show();
  	    	}
  	    	
  	    	$element.css({"width":"auto","height":"auto", "margin-left":0, "margin-right":0});
  	    	
			var w = $element.outerWidth();
			var h = $element.outerHeight();
			var c = w / h;

			var pw = $parent.width();
			var ph = $parent.height();
			var pc = pw / ph;
			var dw = w;
			var dh = h;
			
			if(pw == 0 || ph == 0 || w == 0 || h == 0 ) {
				
				console.log("Fitme - Could not determine imge proportions.")
				return;
			}
			
			if(plugin.settings.framefit == true){
				if(pc > c){
					dw = pw;
					dh = pw / c;
				}else{
					dh = ph;
					dw = ph * c;
				}	
				$parent.css({overflow:"hidden"})	
			}else{
				if(dw > pw){
					dw = pw;
					dh = pw / c;
				}
				if(dh > ph){
					dh = ph;
					dw = ph * c;
				}
			}
			if(plugin.settings.centery){
				var mt =  (ph - dh) / 2
				plugin.data.marginTop =  mt;
				$element.css({"margin-top": mt });
			}
			if(plugin.settings.centerx){
				var ml =  (pw - dw) / 2;
				plugin.data.marginLeft = ml;
				$parent.css({"text-align":"left"});
				$element.css({"margin-left": ml});
			}
			$element.css({width: dw, height: dh, visibility:"visible"}).show();
			plugin.data.width = dw;
			plugin.data.height = dh;	
			
			
			if(plugin.settings.animate){
				$element.css({display:"none"}).fadeIn()
			}
			if(hideaftercomplete){
				$parent.hide();
			}
			
			$element.trigger('fitresize');
		}
		plugin.measures = function(){
		  return {
		  	width : plugin.data.width,
		  	height: plugin.data.height,
		  	marginLeft: plugin.data.marginLeft,
		  	marginTop: plugin.data.marginTop
		  }
		}
        plugin.init();
    }
    $.fn.fitme = function(options) {
        return this.each(function() {
            if (undefined == $(this).data('fitme')) {
                var plugin = new $.fitme(this, options);
                $(this).data('fitme', plugin);
            }else{
            	$(this).data('fitme').init();
            }
        });
    }
})(jQuery);
