﻿/*
 * Thickbox 4.1 - Syake Original
 * Copyright (c) 2010 秋 Hiroaki Komatsu
*/


(function($){

$.fn.extend({
	thickbox:function(b,c,d){
		return this.each(function(){
			if(typeof b=="string"){
				var a=$.data(this,"thickbox");
				a[b].apply(a,[c,d])
			}else{
				new $.thickbox(this,b,c)
			}
		})
	}
});

$.thickbox=function(a,b){
	$.data(a,"thickbox",this);
	this.init(a,b);
}

$.thickbox.open=function(hr,f){
	$.thickbox.prototype.initOpen(hr,f);
}

$.extend($.thickbox.prototype,{
	h:{style:null,loadTmp:'<p style="color:#FFF;">loading...</p>',margin:60},
	init:function(e,f){
		var g=this;
		this.opts=$.extend(this.h,f);
		var j=this.root=$(e);
		$(j).bind("click.thickbox",function(){g.click(this);return false;});
	},
	initOpen:function(hr,f){
		this.opts=$.extend(this.h,f);
		this.open(hr);
	},
	click:function(b){
		var hr=b.href||b.alt;
		var rel=b.rel||false;
		var t=b.title||b.name||null;
		this.open(hr,rel,t);
	},
	open:function(hr,rel,t){
		var g=this;
		try{
			var closeTmp=g.opts["closeTmp"];
			var TB_overlay=$('<div id="TB_overlay"></div>');
			
			// overlay
			$(TB_overlay).bind("click.thickbox",g.remove);
			if(g.detectMacXFF()){
				$(TB_overlay).addClass("TB_overlayMacFFBGHack");
			}else{
				$(TB_overlay).addClass("TB_overlayBG");
			}
			
			// body
			if(typeof document.body.style.maxHeight==="undefined"){//if IE 6
				$("body","html").css({height:"100%",width:"100%"});
				$("html").css("overflow","hidden");
				$("body","html").css("overflow-x","hidden");
				$("body","html").css("overflow-y","hidden");
				window.scroll(0,0);
				if(document.getElementById("TB_HideSelect")===null){//iframe to hide select elements in ie6
					$("body").append("<iframe src='return false;' id='TB_HideSelect'>");
					$("body").append(TB_overlay);
				}
			}else{
				if(document.getElementById("TB_overlay")===null){
					$("body").append(TB_overlay);
				}
			}
			g.show(hr,rel,t);
		}catch(e){
			alert(e);
		}
	},
	show:function(hr,rel,t){
		var g=this;
		try{
			var TB_class=g.opts["style"];
			var loadTmp=g.opts["loadTmp"];
			
			// window
			var TB_window=$('<div id="TB_window"></div>');
			if(TB_class)$(TB_window).addClass(TB_class);
			$("body").append(TB_window);
			
			// close
			var TB_close=$('<div>');
			var TB_closeBtn=$('<a href="#" id="TB_closeWindowButton" title="Close">CLOSE</a>');
			$(TB_closeBtn).bind("click.thickbox",g.remove);
			$(TB_close).append(TB_closeBtn);
			
			// load
			var TB_load=$('<div id="TB_load">');
			$(TB_load).append($(loadTmp));
			$("body").append(TB_load);
			$(TB_load).show();
			
			// Ajax
			var url=(hr.indexOf("?")!==-1)?hr.substr(0,hr.indexOf("?")):hr;
			var imageReg=/\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
			if(url.toLowerCase().match(imageReg)){//code to show images
				$(TB_close).attr("id","TB_closeWindow");
				
				var TB_caption=(t)?$('<div id="TB_caption">'+t+'</div>'):null;
				var TB_secondLine=g.getSecondLine(hr,rel);
				var imgPreloader=new Image();
				imgPreloader.onload=function(){
					imgPreloader.onload = null;
					$(TB_load).remove();
					
					var pagesize=g.getPageSize();
					var x=pagesize[0]-150;
					var y=pagesize[1]-150;
					var imageWidth=imgPreloader.width;
					var imageHeight=imgPreloader.height;
					
					var TB_img=$('<img id="TB_Image">');
					$(TB_img).attr("src",imgPreloader.src);
					$(TB_img).attr("width",imageWidth);
					$(TB_img).attr("height",imageHeight);
					$(TB_img).attr("alt","");
					
					var w=imageWidth+30;
					var h=imageHeight+60;
					
					$(TB_window).animate(g.getPosition(w,h),"fast",function(){
						$(TB_window).attr("width",w);
						$(TB_window).attr("height",h);
						$(TB_window).append(TB_img);
						if(TB_caption)$(TB_window).append(TB_caption);
						if(TB_secondLine)$(TB_window).append(TB_secondLine);
						$(TB_window).append(TB_close);
						$(TB_window).css({display:"block"});
					});
				}
				imgPreloader.src=hr;
				
			}else{//code to show html
				$(TB_close).attr("id","TB_closeAjaxWindow");
				var q=g.getQueryParams(hr.substr(hr.indexOf("?")));
				var w=0,h=0;
				if(q.width){w=parseInt(q.width,10);if(isNaN(w))w=0;}
				if(q.height){h=parseInt(q.height,10);if(isNaN(h))h=0;}
				if(typeof document.body.style.maxHeight==="undefined"){//if IE 6
					h-=5;
				}
				if(w<=0)w=940;
				if(h<=0){
					var margin=g.opts["margin"];
					var tbH=0;
					if(window.innerHeight){
						tbH=window.innerHeight-10;
					}else if(document.documentElement&&0!=document.documentElement.clientHeight){
						tbH=document.documentElement.clientHeight-10;
					}else if(document.body){
						tbH=document.body.clientHeight-10;
					}
					tbH=Math.max(360,tbH);
					h=tbH-margin*2;
				}
				var iW=w;
				var iH=h;
				
				var TB_iframe=$('<iframe id="TB_iframeContent" frameborder="0" hspace="0">');
				$(TB_iframe).attr("src",hr);
				$(TB_iframe).css({"width":iW,"height":iH});
				$(TB_iframe).load(function(){
					$(TB_iframe).unbind('load',$(TB_iframe).onload);
					$(TB_load).remove();
					$(TB_window).animate(g.getPosition(w,h),"fast",function(){
						$(TB_window).attr("width",w);
						$(TB_window).attr("height",h);
						$(TB_window).append(TB_iframe);
						$(TB_window).append(TB_close);
						$(TB_window).css({display:"block"});
					});
				});
				$(TB_iframe).triggerHandler('load');
			}
		}catch(e){
		}
	},
	remove:function(b,j){
		$("#TB_closeWindowButton").hide();
		$("#TB_imageOff").unbind("click");
		$("#TB_closeWindowButton").unbind("click");
		$("#TB_iframe").remove();
		$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect,#TB_iframe').trigger("unload").unbind().remove();});
		$("#TB_load").remove();
		if(typeof document.body.style.maxHeight=="undefined"){//if IE 6
			$("body","html").css({height:"auto",width:"auto"});
			$("html").css("overflow","");
			$("body","html").css("overflow-x","");
			$("body","html").css("overflow-y","");
		}
		document.onkeydown = "";
		document.onkeyup = "";
		return false;
	},
	getSecondLine:function(hr,rel){
		var g=this;
		var TB_secondLine=null;
		try{
			if(rel){
				var TB_Prev=null;
				var TB_Next=null;
				var TB_FoundURL=false;
				var TB_imageCount=null;
				var TB_TempArray=$('a[rel='+rel+']').get();
				var n=TB_TempArray.length;
				for(var i=0;i<n;i++){
					var url=TB_TempArray[i].href;
					var title=TB_TempArray[i].title;
					if(url!=hr){
						if(TB_FoundURL){
							TB_Next=$('<span id="TB_next"></span>');
							$(TB_Next).append('<a href="'+url+'" title="'+title+'">Next &gt;</a>');
							break;
						}else{
							TB_Prev=$('<span id="TB_Prev"></span>');
							$(TB_Prev).append('<a href="'+url+'" title="'+title+'">&lt; Prev</a>');
						}
					}else{
						TB_FoundURL=true;
						TB_imageCount=$('<span>Image '+(i+1)+' / '+n+'</span>');
					}
				}
				
				var TB_secondLine=$('<div id="TB_secondLine">');
				if(TB_imageCount){
					$(TB_secondLine).append(TB_imageCount);
				}
				if(TB_Prev){
					$('a',TB_Prev).bind("click.thickbox",function(){
						if($(document).unbind("click",$(this).onclick)){$(document).unbind("click",$(this).onclick);}
						$("#TB_window").remove();
						g.show(this.href,rel,this.title);
						return false;
					});
					$(TB_secondLine).append(TB_Prev);
				}
				if(TB_Next){
					$('a',TB_Next).bind("click.thickbox",function(){
						if($(document).unbind("click",$(this).onclick)){$(document).unbind("click",$(this).onclick);}
						$("#TB_window").remove();
						g.show(this.href,rel,this.title);
						return false;
					});
					$(TB_secondLine).append(TB_Next);
				}
			}
		}catch(e){
		}
		return TB_secondLine;
	},
	getPageSize:function(){
		var de=document.documentElement;
		var w=window.innerWidth||self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth;
		var h=window.innerHeight||self.innerHeight||(de&&de.clientHeight)||document.body.clientHeight;
		return [w,h];
	},
	getPosition:function(w,h){
		var o={};
		o["width"]=w;
		o["height"]=h;
		o["marginLeft"]=0-parseInt((w/2),10);
		if(!(jQuery.browser.msie&&jQuery.browser.version<7)){
			o["marginTop"]=0-parseInt((h/2),10);
		}else{
			var doc=document;
			var ch=doc.documentElement.clientHeight?doc.documentElement.clientHeight:doc.body.clientHeight;
			var top=doc.documentElement?doc.documentElement.scrollTop:doc.body.scrollTop;
			o["marginTop"]=parseInt(((ch-h)/2),10)+top;
		}
		return o;
	},
	detectMacXFF:function(){
		var ua=navigator.userAgent.toLowerCase();
		if(ua.indexOf('mac')!=-1&&ua.indexOf('firefox')!=-1){
			return true;
		}
	},
	getQueryParams:function(u){
		var r={};
		if(u){
			var t=u.substring(1).split('&');
			var l=t.length;
			for(var i=0;i<l;i++){
				var p=t[i].indexOf('=');
				r[t[i].substring(0,p)]=t[i].substring(p+1);
			}
		}
		return r;
	}
});


})(jQuery);

