
/*global jQuery */

(function($) {
$.fn.imageview = function(message, options) {
	
	var loaded = function(){			
		var $this = $(this);
		var $parent = $this.parent();
		var params = $parent.data('imageview');
		
		if (params.centered){
			var w = $this.width();
			var h =  $this.height();
			if(w > 0 && h > 0) {
				var spaceh = Math.round(($parent.width() - w - 0.00000001) / 2);
				var spacev = Math.round(($parent.height() - h - 0.00000001) / 2);
				$this.css('margin', spacev + 'px ' + spaceh + 'px');
			}
		}	
		params.ready();	
	};
	
	var loaderror = function(){
		var $this = $(this); 
		var $parent = $this.parent();
		var params = $parent.data('imageview');
		
		if(params.errorimage) {
			$this.attr('src', params.errorimage);
		} else {
			$parent.hide();
		}
		
		params.ready();	
	};
	
	var attr, params; 
	
	if (message === "create"){
		
		if(this.data('imageview')) {
			this.find('img').remove();
		}		

		params = $.extend({centered: true, errorimage: null, ready: $.noop}, options);	
		this.data('imageview', params);
		
		if (params.src && params.src !== "") {
			attr = {src: params.src, 'class': 'imageview', load: loaded, error: loaderror};		
			if (params.width){
				attr.width = params.width;	
			}
			if (params.height) {
				attr.height = params.height;	
			}
			$("<img/>", attr).appendTo(this);	
		}
		
				
	} else if(message === "destroy") {
		this.removeData('imageview');
		this.empty();	
		
	} else if(message === "show") {
		params = this.data('imageview');
		params.src = options.src;	
		var $img = this.find('img.imageview');
		if($img.size() === 0){		
			attr = {src: params.src, 'class': 'imageview', load: loaded, error: loaderror};		
			if (params.width){
				attr.width = params.width;	
			}
			if (params.height){
				attr.height = params.height;	
			}
			$("<img/>", attr).appendTo(this);			
		} else {			
			$img.attr('src', params.src); 
		}
	} else if(message === "centerize") {
		return this.each(function() {
			var $this = $(this);
			var params = $this.data('imageview');
			var $img = $this.find('img');
			
			if (params.centered){
				var spaceh = Math.round(($this.width() - $img.width() - 0.00000001) / 2);
				var spacev = Math.round(($this.height() - $img.height() - 0.00000001) / 2);
				$img.css('margin', spacev + 'px ' + spaceh + 'px');
			}
		});
	} 
	
	return this;
};
})(jQuery);