jQuery.fn.extend({
	
	captify:function(a){
		
		var a=$.extend({
			speedOver:"fast",
			speedOut:"normal",
			hideDelay:500,
			animation:"slide",
			prefix:"",
			opacity:"0.35",
			className:"caption-bottom",
			position:"bottom",spanWidth:"100%"},a);
		
		
		$(this).each(function(){
			
			var b=this;
			
			$(this).load(function(){
				
				$this=b;
				
				if(this.hasInit){
					return false
				}
				this.hasInit=true;
				
				var d=false;
				var m=false;
				var g=$("#"+$(this).attr("rel"));
				var f=!g.length?$(this).attr("alt"):g.html();
				
				g.remove();
				
				var h=this.parent&&this.parent.tagName=="a"?this.parent:$(this);
				var c=h.wrap("<div></div>").parent();
				
				c.css({
					overflow:"hidden",
					padding:0,
					fontSize:0.1});
				
				c.addClass("caption-wrapper");
				c.width($(this).width());
				c.height($(this).height());
				
				$.map(["top","right","bottom","left"],function(p){
					c.css("margin-"+p,$(b).css("margin-"+p));
					$.map(["style","width","color"],
					function(q){
						var r="border-"+p+"-"+q;
						c.css(r,$(b).css(r))}
					)}
				);
				
				$(b).css({border:"0 none"});
				
				var o=$("div:last",c.append("<div></div>")).addClass(a.className);
				var l=$("div:last",c.append("<div></div>")).addClass(a.className).append(a.prefix).append(f);
				
				$("*",c).css({margin:0}).show();
				
				var j=jQuery.browser.msie?"static":"relative";
				
				o.css({zIndex:1,position:j,opacity:a.animation=="fade"?0:a.opacity,width:a.spanWidth});
				
				if(a.position=="bottom"){
					var k=parseInt(o.css("border-top-width").replace("px",""))+parseInt(l.css("padding-top").replace("px",""))-1;
					l.css("paddingTop",k)
				}
				
				l.css({position:j,zIndex:2,background:"none",border:"0 none",opacity:a.animation=="fade"?0:1,width:a.spanWidth});
				o.width(l.outerWidth());o.height(l.height());
				
				var n=(a.position=="bottom"&&jQuery.browser.msie)?-4:0;
				var i=(a.position=="top")?{hide:-$(b).height()-o.outerHeight()-1,show:-$(b).height()}:{hide:0,show:-o.outerHeight()+n};
				
				l.css("marginTop",-o.outerHeight());
				o.css("marginTop",i[a.animation=="fade"||a.animation=="always-on"?"show":"hide"]);
				
				var e=function(){
					if(!d&&!m){
						var p=a.animation=="fade"?{opacity:0}:{marginTop:i.hide};
						o.animate(p,a.speedOut);
						
						if(a.animation=="fade"){
							l.animate({opacity:0},a.speedOver)
						}
					}
				};
				
				if(a.animation!="always-on"){
					
					$(this).hover(function(){
						m=true;
						if(!d){
							var p=a.animation=="fade"?{opacity:a.opacity}:{marginTop:i.show};
							o.animate(p,a.speedOver);
							if(a.animation=="fade"){
								l.animate({opacity:1},a.speedOver/2)
							}
						}
					},function(){
						m=false;
						window.setTimeout(e,a.hideDelay)
					});
					
					$("div",c).hover(function(){
						d=true
					},function(){
						d=false;
						window.setTimeout(e,a.hideDelay)
					}
				)}
			});
			
			if(this.complete||this.naturalWidth>0){$(b).trigger("load")}
			
		})
	}
});
