(function($) {
	var rel_gallery = false, elementArray = {}, elementIndex = 0, busy = false, opts = {}, $page_wrapper, $image_wrapper, $loader_wrapper, $i_w, $i_h, $w_w, $w_h, $c_x, $c_y, $r_x, $r_y, $p_x, $p_y, $element_next, $element_prev,
	_show_loading = function(opts) {
		busy = true;
		var randomIndex = Math.floor(Math.random() * opts.frasi.length);
		var frase_loading = opts.frasi[randomIndex];
		$loader_wrapper = $("<div id=\"supersizebox-loader\" />").hide();
		$("<p></p>").addClass("text").html(frase_loading.testo).appendTo($loader_wrapper);
		$("<p></p>").addClass("author").html(frase_loading.autore).appendTo($loader_wrapper);
		$("<p></p>").addClass("loading").html("<span>caricamento immagine in corso</span>").appendTo($loader_wrapper);
		$loader_wrapper.appendTo($image_wrapper);
		$loader_wrapper.css({"marginTop":"-"+$($loader_wrapper).height()/2+"px"});
		$loader_wrapper.fadeIn(700);		
	},
	_remove_loading = function() {
		busy = false;
		$($loader_wrapper).fadeOut(400, function() {
			$(this).remove();
		});		
	},
	_close = function() {
		if (!busy) {
			_hide_nav();
			$($image_wrapper).find("img").fadeOut(400);
			$($page_wrapper).animate({"left":"0"},700);
			$("body").css({"overflow":"auto"}).removeClass("supersized");
			$($element_next).hide();
			$($element_prev).hide();
		}
	},
	_start_image = function($image_src) {
		if (!$("body").hasClass("supersized")) {
			$("body").addClass("supersized").css({overflow:"hidden"});
			$($page_wrapper).animate({"left":"-120%"},700,function() {
				_show_image($image_src);
			});
		} else {
			$($image_wrapper).find("img").fadeOut(200, function() {
				_show_image($image_src);
			});
		}
	},
	_next_image = function() {
		elementIndex = elementIndex+1;
		$new_image_src = $(elementArray[elementIndex]).attr("href");
		_hide_nav();
		$($image_wrapper).find("img").fadeOut(200,function() {
			$(this).remove();
			_show_loading(opts);
			_show_image($new_image_src);
		});
	},
	_prev_image = function() {
		elementIndex = elementIndex-1;
		$new_image_src = $(elementArray[elementIndex]).attr("href");
		_hide_nav();
		$($image_wrapper).find("img").fadeOut(200,function() {
			$(this).remove();
			_show_loading(opts);
			_show_image($new_image_src);
		});
	},
	_show_nav = function() {
		$($element_next).show();
		$($element_prev).show();	
	},
	_hide_nav = function() {
		$($element_next).hide();
		$($element_prev).hide();
	},
	_show_image = function($image_src) {
		var $image = new Image();
		$($image).load(function () {
			window.setTimeout(function() {
				$($image).css({"position":"absolute"}).hide().appendTo($image_wrapper).fadeIn(400);
				_remove_loading();
				$i_w = $($image).width();
				$i_h = $($image).height();
				$w_w = $(window).width();
				$w_h = $(window).height();
				$c_x = ($w_w-$i_w)/2;
				$c_y = ($w_h-$i_h)/2;
				$r_x = $i_w/$w_w;
				$r_y = $i_h/$w_h;
//				$($image).css({left: $c_x+'px', top: $c_y+'px'});
				$($image).css({left: '50%', top: '50%',marginTop: ($i_h/2)*-1,marginLeft: ($i_w/2)*-1});
				$($image).fadeIn();
				if (elementIndex > 0) {
					$($element_prev).show();
				}
				if (rel_gallery) {
					if (elementIndex < elementArray.size()-1) {
						$($element_next).show();
					}
				}
			}, 1500);
	    }).attr('src', $image_src);
	},
	_move = function(position) {
		if (!busy) {
			var $p_x = position.clientX;
			var $p_y = position.clientY;
			if ($r_x > 1) {
				$($image_wrapper).find("img").css({marginLeft: $p_x*(1 - $r_x) - $w_w/2});
			}
			if ($r_y > 1) {
				$($image_wrapper).find("img").css({marginTop: $p_y*(1 - $r_y) - $w_h/2});
			}
		}
	};
	$(window).resize(function() {
		$w_w = $(window).width();
		$w_h = $(window).height();
		$r_x = $i_w/$w_w;
		$r_y = $i_h/$w_h;
		if ($r_x > 1) {
			$($image_wrapper).find("img").css({marginLeft: $p_x*(1 - $r_x) - $w_w/2});
		} else {
			$($image_wrapper).find("img").css({marginLeft: $i_w/2*-1});
		}
		if ($r_y > 1) {
			$($image_wrapper).find("img").css({marginTop: $p_y*(1 - $r_y) - $w_h/2});
		} else {
			$($image_wrapper).find("img").css({marginTop: $i_h/2*-1});
		}
	});

	
    $.fn.supersizeMe = function(opts) {
		opts = $.extend($.fn.supersizeMe.defaults, opts);
		$.supersizeMe.init(opts);
        return this.each(function() {
            $.supersizeMe(this, opts);
        });
    };
	
	$.fn.supersizeMe.defaults = {
		page_id: "",
		frasi: [
			{testo: "La gente ignora il design che ignora le persone.",autore: "Chimero Frank"},
			{testo: "Il buon design &egrave; evidente. Il grande design &egrave; trasparente.",autore: "Sparano Joe"},
			{testo: "Il processo di design, al suo meglio, integra le aspirazioni dell'arte, della scienza e della cultura.",autore: "Jeff Smith"},
			{testo: "Il design &egrave; l'intelligenza fatta visibile.",autore: "Alina Wheeler"},
			{testo: "Il design &egrave; dove scienza e arte raggiungono il bilanciamento perfetto.",autore: "Robin Mathew"},
			{testo: "Tutto &egrave; stato progettato. Poche cose sono state progettate bene.",autore: "Brian Reed"}	
		]
	};

    $.supersizeMe = function(element, opts) {
		$(element).append("<span class=\"supersize-handle\"></span>");
		$(element).click(function() {
		
			var rel = $(element).attr('rel') || '';
			if (!rel || rel == '' || rel === 'nofollow') {
//				elementArray = element;
				elementIndex = 1;
			} else {
				rel_gallery = true;
				elementArray = $("a[rel=" + rel + "], area[rel=" + rel + "]");
				elementIndex = elementArray.index(this);
			}
			_show_loading(opts);
			_start_image($(this).attr("href"));
			return false;
		});
    };

	$.supersizeMe.init = function(options) {
		if ($("#supersizebox-image-container").length) {
			return;
		}
		opts = options;
		$page_wrapper = $("#"+opts.page_id).css({"position":"relative","top":0,"left":0,"zIndex":99999});
		$image_wrapper = $('<div id="supersizebox-image-container" />').css({position:"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:1}).appendTo("body");
		$element_next = $('<a href=\"javascript:void(0);\" id="supersizebox-next" />').hide().appendTo($image_wrapper).click(function(e) {
			e.stopPropagation();
			_next_image();
		});
		$element_prev = $('<a href=\"javascript:void(0);\" id="supersizebox-prev" />').hide().appendTo($image_wrapper).click(function(e) {
			e.stopPropagation();
			_prev_image();
		});
		
		$($image_wrapper).mousemove(function(e){
			_move(e);
		}).click(function() {
			_close();
		});
	}
})(jQuery);
