/*
 * jQuery ScaleUt Plugin
 * version: 1.0.0 (2011/01/10)
 * Author: Emanuele Tortolone @ FillStudio
 * http://www.fillstudio.com
 */

(function( $ )
{
	function ScaleUt(element, opts)
	{
		this.defaults = {
				type : "FIT_WIDTH",
				originalW : 0,
				originalH : 0,
				finalW : 0,
				finalH : 0
		};
		
		this.options = $.extend(this.defaults, opts);
		this.instance = $(element);
		this.scaleObject = new Object();
		this.FIT_WIDTH = "FIT_WIDTH";
		this.FIT_HEIGHT = "FIT_HEIGHT";
		this.FIT_AREA = "FIT_AREA";
		this.CROP = "CROP";
	};
	
	ScaleUt.prototype = {
			init : function()
			{
				switch (this.options['type'])
				{
					case this.FIT_WIDTH :
						this.scaleObject = this.fitWidth(this.options['originalW'], this.options['originalH'], this.options['finalW']);
					break;
					
					case this.FIT_HEIGHT :
						this.scaleObject = this.fitHeight(this.options['originalW'], this.options['originalH'], this.options['finalH']);
					break;
					
					case this.FIT_AREA :
						this.scaleObject = this.fitArea(this.options['originalW'], this.options['originalH'], this.options['finalW'], this.options['finalH']);
					break;
					
					default:
						alert("SET A VALID SCALE TYPE.");
						return;
					break;
				}
				
				if(this.scaleObject)
				{
					this.instance.data('x', this.scaleObject.x);
					this.instance.data('y', this.scaleObject.y);
					this.instance.data('w', this.scaleObject.w);
					this.instance.data('h', this.scaleObject.h);
				}
				
			},
			
			fitWidth : function(originalWidth, originalHeight, finalWidth)
			{
				var finalHeight = (finalWidth * originalHeight) / originalWidth;
				return {x:0, y:0, w:parseInt(finalWidth), h:parseInt(finalHeight)};
			},
			
			fitHeight : function(originalWidth, originalHeight,finalHeight)
			{
				var ratio = originalWidth / originalHeight;
				var finalWidth = Math.round(finalHeight / (1 / ratio));
				
				return {x:0, y:0, w:finalWidth, h:finalHeight};
			},
			
			fitArea : function(originalWidth, originalHeight, finalWidth, finalHeight)
			{
				var ratio = originalWidth / originalHeight;
				var ratioTemp;
				var newW;
				var newH;
				
				if (ratio > 1)
				{
					//HORIZONTAL
					newW = finalWidth;
					newH = newW / ratio;
					if (newH > finalHeight)
					{
						ratioTemp = newW / newH;
						newH = finalHeight;
						newW = newH * ratioTemp;
					}
				}
				else
				{
					//VERTICAL
					newH = finalHeight;
					newW = newH * ratio;
					if (newW > finalWidth)
					{
						ratioTemp = newW / newH;
						newW = finalWidth;
						newH = newW / ratioTemp;
					}
				}
				
				var centerX = ((finalWidth - newW) / 2);
				var centerY = ((finalHeight - newH) / 2);
				
				return {x:(centerX), y:(centerY), w:(newW), h:(newH)};
			}
	};
	
	$.fn.scaleUt = function(options) 
	{
		if(this.length) 
		{
			this.each(function() 
			{
				var new_scaleUt = new ScaleUt(this, options);
				new_scaleUt.init();
			});
		}
	};
	
})( jQuery );
