/*
 * jQuery SuperBox! 0.9.1
 * Copyright (c) 2009 Pierre Bertet (pierrebertet.net)
 * Licensed under the MIT (MIT-LICENSE.txt)
 *
 * TODO :
 * - Document.load if init is before </body> against IE crash.
 * - Animations
 * - Image / Gallery mode : display a legend
*/

;(function($){
	
	var $overlay, $wrapper, $container, $superbox, $loading, $nextprev, $nextBtn, $prevBtn;
	var galleryGroups = {};
	var galleryMode = false;
	var hideElts = $([]);
	
	$.superbox = function() {
		if ($.browser.msie && $.browser.version < 7) {//IE6の場合、select要素を非表示
			hideElts = hideElts.add("select");
		}
		createElements();
		dispatch();
	};
	
	
	/********************************************
	Dispatch types
	********************************************/
	function dispatch() {
		$("a[rel^=superbox],area[rel^=superbox]").each(function(){
			var $this = $(this);
			$this.superbox();
		});
	};
	
	
	/********************************************
	Superbox メソッド
	********************************************/
	$.fn.superbox = function() {
		
		var $elt = this;
		
		$elt.click(function(e) {
			e.preventDefault();
			prepareBox();
				
			initLoading(function() {// Loading anim

				$iframe = $('<iframe src="'+ $elt.attr("href") +'" name="'+ $elt.attr("href") +'" frameborder="0" scrolling="auto" hspace="0" width="'+ 832 +'" height="'+ 434 +'"></iframe>');
				$iframe.load(function() {
					$superbox.width( 832 +"px" );
					$innerbox.height( 434 +"px" );
						
					showBox();// Show box
						
				}).appendTo($innerbox);
			});
		});
	};
	
	/********************************************
	Next / Previous
	********************************************/
	function nextPrev($elt, group){
		$nextprev.show();
		
		galleryMode = true;
		
		var nextKey = $elt.get(0)._superboxGroupKey + 1,
		    prevKey = nextKey - 2;
		
		if (galleryGroups[group][nextKey]) {// Next
			$nextBtn.removeClass("disabled").unbind("click").bind("click", function(){
				galleryGroups[group][nextKey].click();
			});
		} else {
			$nextBtn.addClass("disabled").unbind("click");
		}
		
		if (galleryGroups[group][prevKey]) {// Prev
			$prevBtn.removeClass("disabled").unbind("click").bind("click", function(){
				galleryGroups[group][prevKey].click();
			});
		} else {
			$prevBtn.addClass("disabled").unbind("click");
		}
	};
	
	
	/********************************************
	Hide Box
	********************************************/
	function hideBox(){
		$loading.hide();
		$nextprev.hide();
		$wrapper.hide().css({position: "fixed", top: 0});
		$innerbox.empty();
	};
	

	/********************************************
	Hide Box + Overlay
	********************************************/
	function hideAll(callback) {
		hideBox();
		$overlay.fadeOut(300, function() {
			hideElts.show();// Show hidden elements for IE6
			$('html, body').scrollTo(0, 2000, {queue:true, easing:'easeOutQuint'});// スクロール位置を先頭に移動
		});
		galleryMode = false;
	};
	

	/********************************************
	"Loading..."
	********************************************/
	function initLoading(callback) {
		
		var loading = function() {
			if($.browser.msie && $.browser.version < 7) {// IE6
				$wrapper.css({position: "absolute", top:"50%"});
			}
			hideElts.hide();// Hide elements for IE6
			
			$loading.show();
			callback();
		};
		
		if (galleryMode) {
			$overlay.css("opacity", 0.8).show();
			loading();
		} else {
			$overlay.css("opacity", 0).show().fadeTo(300, 0.8, loading);
		}
	};
	
	
	/********************************************
	"Prepare" box : Show $superbox with top:-99999px;
	********************************************/
	function prepareBox() {
		$wrapper.show();
		$innerbox.empty();
		$superbox.css({position: "absolute", top: "-99999px"});
	};
	

	/********************************************
	Display box
	********************************************/
	function showBox() {
		
		$loading.hide();
		
		$superbox.css({position: "static", top: 0, opacity: 0});// Show $superbox
		
		if ($.browser.msie && $.browser.version < 8) {// IE6 and IE7
			$superbox.css({position: "relative", top:"-50%"});
		
		if ($.browser.msie && $.browser.version < 7)// IE6
			$wrapper.css({position: "absolute", top:"50%"});
		}
		
		if ( $(window).height() < $wrapper.height() ) {
			$wrapper.css({position: "absolute", top: ($wrapper.offset().top + 10) + "px"});
		}
		
		$superbox.fadeTo(300,1);
	};
	
	
	/********************************************
	Create base elements (overlay, wrapper, box, loading)
	********************************************/
	function createElements(){
		if (!$.superbox.elementsReady) {//複数回の呼び出しを禁止
		    
			$overlay = $('<div id="superbox-overlay"></div>').appendTo("body").hide();// Overlay (background)
			
			$wrapper = $('<div id="superbox-wrapper"></div>').appendTo("body").hide();// Wrapper
			
			$container = $('<div id="superbox-container"></div>').appendTo($wrapper);// Box container
			
			$superbox = $('<div id="superbox"></div>').appendTo($container);// Box
			
			$innerbox = $('<div id="superbox-innerbox"></div>').appendTo($superbox);// Inner box
			
			$nextprev = $('<p class="nextprev"></p>').appendTo($superbox).hide();
			$prevBtn = $('<a class="prev"><strong><span></span></strong></a>').appendTo($nextprev);
			$nextBtn = $('<a class="next"><strong><span></span></strong></a>').appendTo($nextprev);
			
			$loading = $('<p class="loading"><img src="images/loadSpinner.gif"/></p>').appendTo($container).hide();
			
			//$toolTip = $('<p class="toolTip">CLOSE</p>').appendTo("body");
			
			$overlay.add($wrapper).click(function() {
				hideAll();
			});
			
			/*
			$("body").mousemove(function(e) {

				var boxTop = $superbox.position().top;
				var boxLeft = $superbox.position().left;
				var boxW = $superbox.width() + 50;
				var boxH = $superbox.height() + 30;
				
				if (e.pageY <= 10 || e.pageY >= $('body').height() + 10 || e.pageX <= 10 || e.pageX >= $('body').width() + 10) {
					$toolTip.stop(true , true).fadeOut(300);
				} else if (e.pageY > boxTop && e.pageY < boxTop + boxH && e.pageX > boxLeft && e.pageX < boxLeft + boxW) {
					$toolTip.stop(true , true).fadeOut(300);
				} else {
					$toolTip.stop(true , true).fadeIn(300);
					$toolTip.css({top : e.pageY - 40, left : e.pageX - 65});
				}
				
			});
			*/
			
			$superbox.click(function(e) {
				e.stopPropagation();
			});
			
			$.superbox.elementsReady = true;// Dont call this function twice
		}
	};
	
})(jQuery);
