(function($) {
	
	var ELEMENT_DATA_KEY = 'frame_preview_instance';
	var EVENT_NAMESPACE = 'event.frame_preview';
	
	var methods = 
	{
		init:function(options)
		{
			var defaults = 
			{
			};
			
			return this.each(function(){
				
				$this = $(this);
				var state = $this.data(ELEMENT_DATA_KEY);
				
				if(!state)
				{
					if(options)
					{					
						$.extend(defaults, options);
					}
					$this.data(ELEMENT_DATA_KEY, new FramePreview(this, defaults));
				}
			});
		},
		
		print:function()
		{
			console.log(this.data(ELEMENT_DATA_KEY));
		},
		
		destroy:function()
		{
			this.removeData(ELEMENT_DATA_KEY);
		},
		
		eventNamespace:function()
		{
			return EVENT_NAMESPACE;
		}
	};
	
	function FramePreview(el, defaults)
	{
		$(el).find('.preview_container').addClass(defaults.style + '_preview_container');
		$(el).find('.preview_container .frame').attr('src', defaults.frame);
		$(el).find('.preview_container .matte').attr('src', defaults.matte);
		$(el).find('.preview_container .product').attr('src', defaults.product);
		
		$(el).find('.preview_container div div:nth-child(1)').addClass(defaults.style + '_frame');
		$(el).find('.preview_container div div:nth-child(2)').addClass(defaults.style + '_matte');
		$(el).find('.preview_container div div:nth-child(3)').addClass(defaults.style + '_product');
		
		this.onChange = function(data, key, value)
		{	
			if(value !== '')
			{
				$(el).find('.preview_container .' + key).css('visibility', 'visible');		
				$(el).find('.preview_container .' + key).attr('src', value);
			}
			else
			{
				$(el).find('.preview_container .' + key).css('visibility', 'hidden');		
			}
		};
		
		$(el).bind(EVENT_NAMESPACE, this.onChange);
	}
	
	$.fn.framepreview = function(method)
	{	
		if(methods[method]) 
		{			
			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
		} 
		else
		{
			if(typeof method === 'object' || !method) 
			{				
				return methods.init.apply(this, arguments);
			}
			else 
			{
				$.error('Method ' + method + ' DNE');
			}	
		} 
	};
})(jQuery);
