/*
 * jQuery Gallery Box Plugin
 * Copyright (C) 2008 Xacti, Corp.
 * @version 0.0.2
 */


;(function($) {

	$.fn.gallerybox = function ( option ){

	
		var options = {
		overlayOpacity:0.8,
		images:[]
			/*
				{img: String, iitle: String, thumb: string}
			*/
		};

	
	/*	$.Gallerybox = $.Gallerybox || new $.GalleryboxClass();*/
		var gallery = new GalleryboxClass( $.extend(options, option) );
				
		$(this).click(function(){return gallery.open()});

	};


	/*$.extend($.GalleryboxClass.prototype,{
	});*/


	var galleryboxHTML = '<div id="gallerybox-overlay"></div><div id="gallerybox"><div id="gallerybox-strip"><div id="gallerybox-image-title"></div><a href="#" id="gallerybox-close"><span>Close</span> <strong>&times;</strong></a><div id="gallerybox-gallery"></div></div><div id="gallerybox-imagebox"><img id="gallerybox-image" /><img id="gallerybox-image-loader"/></div></div>';
	var time;

	function GalleryboxClass(options){
		this.options = options;
		this
	};


	GalleryboxClass.prototype.open = function(){
		$('body').append(galleryboxHTML);
		var opacity=this.options.overlayOpacity;
		$('#gallerybox-overlay').hide().css("opacity",opacity).fadeIn();
		$('#gallerybox').css({"top":0,"left":0}).hide();
		$('embed, object, select').css({ 'visibility' : 'hidden' });

		$('#gallerybox-imagebox').css({width:"100px",height:"100px"});
		$('#gallerybox-strip').css("visibility","hidden");
		$('#gallerybox-image').css("visibility","hidden");

		$("#gallerybox-image-loader").css({position:"absolute",visibility:"hidden",left:"-2000px"}).load(function(){
					var fce=function(){

						var w=$("#gallerybox-image-loader").width();
						var h=$("#gallerybox-image-loader").height();

						var img=$('#gallerybox-image-loader').get(0);
						var bg=$('#gallerybox-overlay').get(0);
						var gal=$('#gallerybox-strip').get(0);
						var middle={x:bg.offsetWidth/2,y:bg.offsetHeight/2};
						var size={x:img.offsetWidth/2,y:(img.offsetHeight+gal.offsetHeight)/2};
						var x=bg.offsetLeft+middle.x-size.x;
						var y=bg.offsetTop+middle.y-size.y;
						if(x<0)x=0;
						if(y<0)y=0;

						//alert(ot-((oh-h)/2));
						$('#gallerybox').animate({top: y+"px" ,left: x+"px"});
						$('#gallerybox-imagebox').animate({width:w+"px",height:h+"px"},function(){
							if($('#gallerybox').length){
								$('#gallerybox-image').attr("src",$("#gallerybox-image-loader").attr("src")).fadeIn().css("visibility","visible");
								$('#gallerybox-strip').css("visibility","visible");
							}
						});
					};
					time=setTimeout(fce,10);
		});

		for(var i=0;i<this.options.images.length;i++)addThumb(this.options.images[i]);
		$("#gallerybox-gallery a").eq(0).click();

		$(window).bind('resize',resize).bind('scroll',placeBg);
		
		$('#gallerybox').show();

		placeBg();
		placeImgBox();


		//TODO$('#gallerybox-imagebox').css({width:100,height:100}).animate({ width: 600, height: 400 }, "normal",function(){$(window).triggerHandler('resize')});

		$("#gallerybox-overlay, #gallerybox-close").click(this.close);

		return false;
	};

	GalleryboxClass.prototype.close = function(){
		$("#gallerybox-image-loader").attr('src','');
		clearTimeout(time);
		$(window).unbind('resize',resize).unbind('scroll',placeBg);
		$('#gallerybox').hide().remove();
		$('#gallerybox-overlay').fadeOut(function(){$(this).remove()});
		$('embed, object, select').css({ 'visibility' : 'visible' });
		return false;
	}


	/*helper functions*/

	function placeImgBox (){var img=$('#gallerybox').get(0);var bg=$('#gallerybox-overlay').get(0);var middle={x:bg.offsetWidth/2,y:bg.offsetHeight/2};var size={x:img.offsetWidth/2,y:img.offsetHeight/2};var x=bg.offsetLeft+middle.x-size.x;var y=bg.offsetTop+middle.y-size.y;if(x<0)x=0;if(y<0)y=0;img.style.top=y+"px";img.style.left=x+"px"};
	function placeBg(){var bg=$('#gallerybox-overlay').get(0);var scrolled=(window.pageXOffset==undefined)?{x:document.documentElement.scrollLeft,y:document.documentElement.scrollTop}:{x:window.pageXOffset,y:window.pageYOffset};bg.style.width=0;bg.style.height=0;var winsize=(window.innerHeight==undefined)?{x:document.documentElement.clientWidth+'px',y:document.documentElement.clientHeight+'px'}:{x:'100%',y:'100%'};bg.style.top=scrolled.y+'px';bg.style.left=scrolled.x+'px';bg.style.width=winsize.x;bg.style.height=winsize.y;};
	function resize(){placeBg();placeImgBox()};


	function addThumb(img){
		var ni=$('<a href="#"><img src="'+img.thumb+'" /></a>');
		ni.click(function(){return selThumb(this,img)});
		$('#gallerybox-gallery').append(ni);
	}

	function selThumb(el,img){
		
		$("#gallerybox-gallery a").removeClass('gallerybox-selected');
		$(el).addClass('gallerybox-selected');
		$("#gallerybox-image-title").fadeOut(function(){$(this).html(img.title).fadeIn()});
		$("#gallerybox-image").fadeOut(function(){$("#gallerybox-image-loader").attr("src",img.img);});


		return false;

	}



})(jQuery);

