/**
Klightbox 1.0
@requires jQuery v1.3 or 1.4
by Oriol Tendero - oriol@tendero.cat
January 2011

HTML example:
	<div class="klightbox">
		<img rel="img;;url image;;Plain text or escaped HTML;;width[optional;;height[optional" src="url thumbnail" class="hide" />
		<img rel="html;;escaped HTML;;Plain text or escaped HTML;;width[optional;;height[optional" src="url thumbnail" class="hide" />
	</div>
	
	or
	
	<img rel="img;;url image;;Plain text or escaped HTML[noText;;width[optional;;height[optional" src="url thumbnail" class="hide klightbox" />

How to initialize klightbox:

	Call the javascript function "_klightbox();" to initialize klightbox or set to true variable "$.klightbox_autoload"
*/
$.klightbox_autoload = false;
$.klightbox_width = 600;
$.klightbox_height = 400;


$(document).ready(function(){ if($.klightbox_autoload){ _klightbox(); } });
function _klightbox(){
	
	$('.viewport,.vwtooltip,.vwlayer').remove();
	$('body').append('<div class="viewport"><div class="vwclose">Click to close</div></div><div class="vwtooltip"></div><div class="vwlayer"></div>');
	
	//Image proloaders
	$('.klightbox img, img.klightbox').each(function(){
		$(this).imagesLoaded(function(){
			//$(this).fadeOut(0);
			$(this).removeClass("hide");
			//$(this).fadeIn(300);
		});
	});

	$('.klightbox').click(function(e){
		
		$.wh = parseInt(jQuery(window).height());
		$.ww = parseInt(jQuery(window).width());
		
		if( ($(this).find("img")).length == 0){
			var info = (""+$(this).attr("rel")).split(";;");
		}else{
			var info = (""+$(this).find("img").attr("rel")).split(";;");
		}
		
		//Final rendering viewport size
		if(info.length > 3 && info[3] != null && info[3] != ""){
			var render_width = info[3];
			var render_height = info[4];
		}else{
			var render_width = $.klightbox_width;
			var render_height = $.klightbox_height;
		}
		
		$('.vwlayer').css("width",$.ww+"px");
		$('.vwlayer').css("height",$.wh+"px");
		$('.vwlayer').css("display","block");
		if(!$.browser.msie){
			$('.vwlayer').fadeOut(0);
			$('.vwlayer').fadeIn(250);
		}
		
		if(info[2] != "noText" && info[2] != null && info[2] != ""){
			var textmargin = 100;
		}else{
			var textmargin = 0;
		}
		var top = parseInt( $(document).scrollTop()+($.wh/2)-(render_height/2) ); if(top < 25){ top = 25; }
		var left = parseInt( ($.ww/2)-(render_width/2)-textmargin );
		$('.viewport').data("top",top);
		$('.viewport').data("left",left);
		
		//Asign new content
		$('.viewport *:not(.vwclose)').remove();
		$.klightbox_type = info[0];
		if($.klightbox_type == "img" || $.klightbox_type == "" || $.klightbox_type == null){
			var urlImg = info[1];
			$('.viewport').data("text",(unescape(info[2])).replace(/\+/gi," "));
			$('.viewport').prepend('<img class="imageklightbox hide" src="'+urlImg+'"/>');
		}else{
			var html = (unescape(info[1])).replace(/\+/gi," ");
			$('.viewport').data("text",(unescape(info[2])).replace(/\+/gi," "));
			$('.viewport').prepend(html);
		}
		$('.viewport').css("width","10px");
		$('.viewport').css("height","10px");
		
		//Mouse click
		$('.viewport').css("top", e.pageY+"px");
		$('.viewport').css("left", e.pageX+"px");
		$('.viewport').data("X",e.pageX);
		$('.viewport').data("Y",e.pageY);
		
		$('.viewport').css("display","block");
		$('.viewport *').fadeOut(0);
		$('.viewport *:not(.imageklightbox)').fadeIn(1500);
		
		$('.viewport').animate({"width":render_width+"px","height":render_height+"px", "top":top+"px", "left":left+"px"}, {queue:true, duration:750, easing:"easeOutCubic",
			complete:function(){
				var text = $('.viewport').data("text");
				if(textmargin == 0){ return false; }
				$('.vwtooltip').html("");
				$('.vwtooltip').css("top",$('.viewport').data("top")+"px");
				$('.vwtooltip').css("left",parseInt(parseInt($('.viewport').data("left"))+parseInt(render_width)+20)+"px");
				$('.vwtooltip').css("display","block");
				$('.vwtooltip').animate({"width":"200px"},{duration:500,easing:"easeOutQuad"});
				text = text.replace(/</gi,"%3C");
				text = text.replace(/>/gi,"%3E");
				setTimeout(function(){ _typeText($('.vwtooltip'),text,20,5); }, 500);
			}
		});
		
		
		//Thumbnail preuse
		if($.klightbox_type == "img" || $.klightbox_type == "" || $.klightbox_type == null){
			if( ($(this).find("img")).length == 0){
				var obj = $(this);
			}else{
				var obj = $(this).find("img");
			}
			$('.viewport').prepend('<img class="imageklightboxpre" src="'+obj.attr("src")+'"/>');
			$('.imageklightboxpre').fadeOut(0);
			$('.imageklightboxpre').fadeIn(500);
			$('.imageklightboxpre').css("width","10px");
			$('.imageklightboxpre').css("height","10px");
			$('.imageklightboxpre').animate({"width":render_width+"px","height":render_height+"px","top":"10px","left":"10px"},{queue:false, duration:750, easing:"easeOutCubic", 
				complete:function(){
					$('.imageklightbox').imagesLoaded(function(){
						$('.imageklightboxpre').fadeOut(500,function(){ $(this).remove(); });
						$('.imageklightbox').css("width",render_width+"px");
						$('.imageklightbox').css("height",render_height+"px");
						$('.imageklightbox').removeClass("hide");
					});
				}
			});
		}
	});
	$('.viewport,.vwlayer').click(function(){
		
		if($('.vwtooltip').css("display") != "none"){
			$('.vwtooltip').html("");
			_typeText($('.vwtooltip'),"unloading...");
			$('.vwtooltip').animate({"width":"0px"},{duration:500,easing:"easeInQuad",
				complete:function(){
					$('.vwtooltip').css("display","none");
					if($.klightbox_type == "img" || $.klightbox_type == "" || $.klightbox_type == null){
						$('.viewport *:not(.imageklightbox)').fadeOut(300);
						$('.viewport .imageklightbox').fadeOut(750);
					}
					$('.imageklightbox').animate({"width":"10px","height":"10px"},{queue:false, duration:500, easing:"easeInCubic"});
					$('.viewport').animate({"width":"10px","height":"10px", "top":$('.viewport').data("Y")+"px", "left":$('.viewport').data("X")+"px"}, {queue:true, duration:500, easing:"easeInCubic", 
						complete:function(){
							$('.viewport').css("display","none");
							if(!$.browser.msie){ 
								$('.vwlayer').fadeOut(250, function(){ $('.vwlayer').css("display","none"); });
							}else{
								$('.vwlayer').css("display","none");
							}
						}
					});
				}
			});
		}else{
			$('.vwtooltip').css("display","none");
			if($.klightbox_type == "img" || $.klightbox_type == "" || $.klightbox_type == null){
				$('.viewport *:not(.imageklightbox)').fadeOut(300);
				$('.viewport .imageklightbox').fadeOut(750);
			}
			$('.imageklightbox').animate({"width":"10px","height":"10px"},{queue:false, duration:500, easing:"easeInCubic"});
			$('.viewport').animate({"width":"10px","height":"10px", "top":$('.viewport').data("Y")+"px", "left":$('.viewport').data("X")+"px"}, {queue:true, duration:500, easing:"easeInCubic", 
				complete:function(){
					$('.viewport').css("display","none");
					if(!$.browser.msie){ 
						$('.vwlayer').fadeOut(250, function(){ $('.vwlayer').css("display","none"); });
					}else{
						$('.vwlayer').css("display","none");
					}
				}
			});
		}
	});
}

$(document).ready(function(){
	$(window).resize(function() {
		_layerSize();
	});
});
function _layerSize(){
	if($('.vwlayer').length > 0){
		$.wh = parseInt(jQuery(window).height());
		$.ww = parseInt(jQuery(window).width());
		$('.vwlayer').css("width",$.ww+"px");
		$('.vwlayer').css("height",$.wh+"px");
	}
}

// $('img.photo',this).imagesLoaded(myFunction)
// execute a callback when all images have loaded.
// needed because .load() doesn't work on cached images

// mit license. paul irish. 2010.
// webkit fix from Oren Solomianik. thx!

// callback function is passed the last image to load
//   as an argument, and the collection as `this`


$.fn.imagesLoaded = function(callback){
  var elems = this.filter('img'),
      len   = elems.length;
      
  elems.bind('load',function(){
      if (--len <= 0){ callback.call(elems,this); }
  }).each(function(){
     // cached images don't fire load sometimes, so we reset src.
     if (this.complete || this.complete === undefined){
        var src = this.src;
        // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
        // data uri bypasses webkit log warning (thx doug jones)
        this.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
        this.src = src;
     }  
  }); 

  return this;
};
