/* * Thickbox 3.1 - One Box To Rule Them All. * By Cody Lindley (http://www.codylindley.com) * Copyright (c) 2007 cody lindley * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php */ //グローバルの名前空間用のオブジェクトを用意する var THICKBOX = {}; THICKBOX.tb_pathToImage = "";// "/common/images/loadingAnimation.gif"; THICKBOX.tmpPage; THICKBOX.linkPage; THICKBOX.TB_WIDTH; THICKBOX.TB_HEIGHT; // ページ上部からの位置 THICKBOX.pageTop = 10; /*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ //on page load call tb_init $(document).ready(function(){ if (window == window.parent){ THICKBOX.tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox imgLoader = new Image();// preload image imgLoader.src = THICKBOX.tb_pathToImage; }else { //2009/09/28 add h.kobayashi $(".thickbox_link").click(function () { var doc = window.document; if(window != window.parent){ doc = parent.document; } if ($("#TB_iframeContent",doc).size() > 0){ THICKBOX.showLoading(); $('#TB_window',doc).hide(); } return true; }); //2009/09/28 add h.kobayashi $("#tmpDesign > p > img:eq(0)").ready(function(){ var url = this.href || this.alt; var caption = this.title || this.name || null; var doc = window.document; if(window != window.parent){ doc = parent.document; } if ($("#TB_iframeContent",doc).size() > 0){ var tmpImage = $("#tmpDesign > p > img:eq(0)"); var preImg = new Image(); preImg.src = tmpImage.attr("src"); preImg.onload = THICKBOX._imageLoaded; if (preImg.width > preImg.height){ THICKBOX.TB_WIDTH = 820; THICKBOX.TB_HEIGHT = 725; }else{ THICKBOX.TB_WIDTH = 820; THICKBOX.TB_HEIGHT = 725; } THICKBOX.TB_WIDTH = THICKBOX.TB_WIDTH + 15; THICKBOX.TB_HEIGHT = THICKBOX.TB_HEIGHT + 30; var ajaxContentW = THICKBOX.TB_WIDTH - 29; var ajaxContentH = THICKBOX.TB_HEIGHT - 80; $("#TB_title",doc).width(ajaxContentW); //$("#TB_ajaxWindowTitle",doc).text(caption); $('#TB_window',doc).width(ajaxContentW); $('#TB_window',doc).height(ajaxContentH + 30); $("#TB_iframeContent",doc).width(ajaxContentW); $("#TB_iframeContent",doc).height(ajaxContentH); var doctop = 0; doctop = doc.documentElement.scrollTop; // 画面中央に位置を調整 if (jQuery.browser.msie && jQuery.browser.version < 7) { offsetTop = (doc.documentElement.clientHeight - THICKBOX.TB_HEIGHT)/2; }else{ offsetTop = ($("body",doc).height() - THICKBOX.TB_HEIGHT)/2; } if ($(document).scrollTop() + offsetTop >= 0){ $("#TB_window",doc).css("top",doctop + offsetTop + "px"); }else{ $("#TB_window",doc).css("top",doctop + "px"); } docwidth = $("body",doc).width(); marginsize = ((docwidth - THICKBOX.TB_WIDTH)/2); $("#TB_window",doc).css("left","0px"); $("#TB_window",doc).css("margin-left",marginsize + "px"); $("#TB_window",doc).css("margin-right",marginsize + "px"); $('#TB_load',doc).hide(); } //$('#TB_window',doc).css("left",$('#TB_window',doc).position().left + "px"); }); } }); //2009.09.28 add kobayashi THICKBOX._imageLoaded = function(){ var url = this.href || this.alt; var caption = this.title || this.name || null; var doc = window.document; if(Boolean(parent)){ doc = parent.document; } if (this.width > this.height){ THICKBOX.TB_WIDTH = 800; THICKBOX.TB_HEIGHT = 570; }else{ THICKBOX.TB_WIDTH = 620; THICKBOX.TB_HEIGHT = 650; } THICKBOX.TB_WIDTH = THICKBOX.TB_WIDTH + 15; THICKBOX.TB_HEIGHT = THICKBOX.TB_HEIGHT + 30; var ajaxContentW = THICKBOX.TB_WIDTH - 29; var ajaxContentH = THICKBOX.TB_HEIGHT - 80; $("#TB_title",doc).width(ajaxContentW); //$("#TB_ajaxWindowTitle",doc).text(caption); $('#TB_window',doc).width(ajaxContentW); $('#TB_window',doc).height(ajaxContentH + 30); $("#TB_iframeContent",doc).width(ajaxContentW); $("#TB_iframeContent",doc).height(ajaxContentH); var doctop = 0; doctop = doc.documentElement.scrollTop; // 画面中央に位置を調整 if (jQuery.browser.msie && jQuery.browser.version < 7) { offsetTop = (doc.documentElement.clientHeight - THICKBOX.TB_HEIGHT)/2; }else{ offsetTop = ($("body",doc).height() - THICKBOX.TB_HEIGHT)/2; } if ($(document).scrollTop() + offsetTop >= 0){ $("#TB_window",doc).css("top",doctop + offsetTop + "px"); }else{ $("#TB_window",doc).css("top",doctop + "px"); } docwidth = $("body",doc).width(); marginsize = ((docwidth - THICKBOX.TB_WIDTH)/2); $("#TB_window",doc).css("left","0px"); $("#TB_window",doc).css("margin-left",marginsize + "px"); $("#TB_window",doc).css("margin-right",marginsize + "px"); $('#TB_load',doc).hide(); $('#TB_window',doc).show(); //$("#TB_iframeContent",doc).attr("src",THICKBOX.linkPage); }; //add thickbox to href & area elements that have a class of .thickbox THICKBOX.tb_init = function(domChunk){ $(domChunk).click(function(){ var t = this.title || this.name || null; var a = this.href || this.alt; var g = this.rel || false; THICKBOX.tb_show(t,a,g); this.blur(); return false; }); }; THICKBOX.tb_show = function(caption, url, imageGroup) {//function called when the user clicks on a thickbox link try { if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 $("body","html").css({height: "100%", width: "100%"}); //$("html").css("overflow","hidden"); if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6 $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>"); $("#TB_overlay").click(THICKBOX.tb_remove); } $("#TB_HideSelect").css("overflow","hidden"); }else{//all others if(document.getElementById("TB_overlay") === null){ $("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>"); $("#TB_overlay").click(THICKBOX.tb_remove); } } if(THICKBOX.tb_detectMacXFF()){ $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash }else{ $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity } if(caption===null){caption="";} if ($('#TB_load').size() == 0){ $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page } THICKBOX.showLoading(); var baseURL; if(url.indexOf("?")!==-1){ //ff there is a query string involved baseURL = url.substr(0, url.indexOf("?")); }else{ baseURL = url; } var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/; var urlType = baseURL.toLowerCase().match(urlString); var image_height = 0; if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images TB_PrevCaption = ""; TB_PrevURL = ""; TB_PrevHTML = ""; TB_NextCaption = ""; TB_NextURL = ""; TB_NextHTML = ""; TB_imageCount = ""; TB_FoundURL = false; if(imageGroup){ TB_TempArray = $("a[@rel="+imageGroup+"]").get(); for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); if (!(TB_TempArray[TB_Counter].href == url)) { if (TB_FoundURL) { TB_NextCaption = TB_TempArray[TB_Counter].title; TB_NextURL = TB_TempArray[TB_Counter].href; TB_NextHTML = "<span id='TB_next'> <a href='#'>Next ></a></span>"; } else { TB_PrevCaption = TB_TempArray[TB_Counter].title; TB_PrevURL = TB_TempArray[TB_Counter].href; TB_PrevHTML = "<span id='TB_prev'> <a href='#'>< Prev</a></span>"; } } else { TB_FoundURL = true; TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length); } } } imgPreloader = new Image(); imgPreloader.onload = function(){ imgPreloader.onload = null; // Resizing large images - orginal by Christian Montoya edited by me. var pagesize = THICKBOX.tb_getPageSize(); var x = pagesize[0] - 150; var y = pagesize[1] - 150; var imageWidth = imgPreloader.width; var imageHeight = imgPreloader.height; if (imageWidth > x) { imageHeight = imageHeight * (x / imageWidth); imageWidth = x; if (imageHeight > y) { imageWidth = imageWidth * (y / imageHeight); imageHeight = y; } } else if (imageHeight > y) { imageWidth = imageWidth * (y / imageHeight); imageHeight = y; if (imageWidth > x) { imageHeight = imageHeight * (x / imageWidth); imageWidth = x; } } // End Resizing THICKBOX.TB_WIDTH = imageWidth + 30; THICKBOX.TB_HEIGHT = imageHeight + 60; image_height = THICKBOX.TB_HEIGHT; $("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow' style='padding:10px 5px;'><a href='#' id='TB_closeWindowButton' title='閉じる'><img src='../common/images/bt_close.gif' alt='閉じる' width='31' height='31' /></a></div>"); $("#TB_closeWindowButton").click(THICKBOX.tb_remove); if (!(TB_PrevHTML === "")) { function goPrev(){ if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);} $("#TB_window").remove(); $("body").append("<div id='TB_window'></div>"); THICKBOX.tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); return false; } $("#TB_prev").click(goPrev); } if (!(TB_NextHTML === "")) { function goNext(){ $("#TB_window").remove(); $("body").append("<div id='TB_window'></div>"); THICKBOX.tb_show(TB_NextCaption, TB_NextURL, imageGroup); return false; } $("#TB_next").click(goNext); } document.onkeydown = function(e){ if (e == null) { // ie keycode = event.keyCode; } else { // mozilla keycode = e.which; } if(keycode == 27){ // close THICKBOX.tb_remove(); } else if(keycode == 190){ // display previous image if(!(TB_NextHTML == "")){ document.onkeydown = ""; goNext(); } } else if(keycode == 188){ // display next image if(!(TB_PrevHTML == "")){ document.onkeydown = ""; goPrev(); } } }; THICKBOX.tb_position(); //$("#TB_load").remove(); $("#TB_load").hide(); $("#TB_ImageOff").click(THICKBOX.tb_remove); $("#TB_window").css({display:"block"}); //for safari using css instead of show }; imgPreloader.src = url; image_height = 500; }else{//code to show html var queryString = url.replace(/^[^\?]+\??/,''); var params = THICKBOX.tb_parseQuery( queryString ); THICKBOX.TB_WIDTH = (params['width']*1) + 15 || 630; //defaults to 630 if no paramaters were added to URL THICKBOX.TB_HEIGHT = (params['height']*1) + 30 || 440; //defaults to 440 if no paramaters were added to URL ajaxContentW = THICKBOX.TB_WIDTH - 29; ajaxContentH = THICKBOX.TB_HEIGHT - 80; if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window urlNoQuery = url.split('TB_'); $("#TB_iframeContent").remove(); if(params['modal'] != "true"){//iframe no modal $("#TB_window").css({visibility:"hidden",display:"block"}); $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='閉じる'><img src='../common/images/bt_close.gif' alt='閉じる' width='31' height='31' /></a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='THICKBOX.tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>"); }else{//iframe modal $("#TB_overlay").unbind(); $("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='THICKBOX.tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>"); } }else{// not an iframe, ajax if($("#TB_window").css("display") != "block"){ if(params['modal'] != "true"){//ajax no modal $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'><img src='../common/images/bt_close.gif' alt='閉じる' width='31' height='31' /></a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>"); }else{//ajax modal $("#TB_overlay").unbind(); $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>"); } }else{//this means the window is already up, we are just loading new content via ajax $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; $("#TB_ajaxContent")[0].scrollTop = 0; $("#TB_ajaxWindowTitle").html(caption); } } $("#TB_closeWindowButton").click(THICKBOX.tb_remove); if(url.indexOf('TB_inline') != -1){ $("#TB_ajaxContent").append($('#' + params['inlineId']).children()); $("#TB_window").unload(function () { $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished }); THICKBOX.tb_position(); //$("#TB_load").remove(); $("#TB_load").hide(); $("#TB_window").css({display:"block"}); }else if(url.indexOf('TB_iframe') != -1){ THICKBOX.tb_position(); if($.browser.safari){//safari needs help because it will not fire iframe onload //$("#TB_load").remove(); $("#TB_load").hide(); $("#TB_window").css({display:"block"}); } }else{ $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method THICKBOX.tb_position(); //$("#TB_load").remove(); $("#TB_load").hide(); THICKBOX.tb_init("#TB_ajaxContent a.thickbox"); $("#TB_window").css({display:"block"}); }); } image_height = THICKBOX.TB_HEIGHT; } // customize 2009/0914 $("#TB_overlay").height($(document).height()); // 画面中央に位置を調整 //var offsetTop = ($(window).height() - THICKBOX.TB_HEIGHT)/2; //if ($(document).scrollTop() + offsetTop >= 0){ // $("#TB_window").css("top",$(document).scrollTop() + offsetTop + "px"); //}else{ // $("#TB_window").css("top",$(document).scrollTop() + "px"); //} var doctop = 0; if (jQuery.browser.msie) { doctop = document.documentElement.scrollTop; }else{ doctop = document.documentElement.scrollTop || window.pageYOffset; } // 画面中央に位置を調整 /*if (jQuery.browser.msie && jQuery.browser.version < 7) { offsetTop = (document.documentElement.clientHeight - image_height)/2; //offsetTop = (document.documentElement.clientHeight)/2; }else{ offsetTop = ($("body").height() - image_height)/2; //offsetTop = ($("body").height())/2; }*/ offsetTop = pageTop; if ($(document).scrollTop() + offsetTop >= 0){ $("#TB_window").css("top",doctop + offsetTop + "px"); }else{ $("#TB_window").css("top",doctop + "px"); } //$("#TB_window").css("top",pageTop + "px") if(!params['modal']){ document.onkeyup = function(e){ if (e == null) { // ie keycode = event.keyCode; } else { // mozilla keycode = e.which; } if(keycode == 27){ // close THICKBOX.tb_remove(); } }; } } catch(e) { //nothing here } }; //helper functions below THICKBOX.tb_showIframe = function(){ //$("#TB_load").remove(); $("#TB_load").hide(); $("#TB_window").css({visibility:"visible",display:"block"}); }; THICKBOX.tb_remove = function() { $("#TB_imageOff").unbind("click"); $("#TB_closeWindowButton").unbind("click"); $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();}); $("#TB_load").hide(); if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 $("body","html").css({height: "auto", width: "auto"}); $("html").css("overflow",""); } document.onkeydown = ""; document.onkeyup = ""; return false; }; THICKBOX.tb_position = function() { $("#TB_window").css({marginLeft: '-' + parseInt((THICKBOX.TB_WIDTH / 2),10) + 'px', width: THICKBOX.TB_WIDTH + 'px'}); //if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6 // $("#TB_window").css({marginTop: '-' + parseInt((THICKBOX.TB_HEIGHT / 2),10) + 'px'}); //} }; THICKBOX.tb_parseQuery = function( query ) { var Params = {}; if ( ! query ) {return Params;}// return empty object var Pairs = query.split(/[;&]/); for ( var i = 0; i < Pairs.length; i++ ) { var KeyVal = Pairs[i].split('='); if ( ! KeyVal || KeyVal.length != 2 ) {continue;} var key = unescape( KeyVal[0] ); var val = unescape( KeyVal[1] ); val = val.replace(/\+/g, ' '); Params[key] = val; } return Params; }; THICKBOX.tb_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; arrayPageSize = [w,h]; return arrayPageSize; }; THICKBOX.tb_detectMacXFF = function() { var userAgent = navigator.userAgent.toLowerCase(); if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { return true; } }; THICKBOX.showLoading = function(){ var doc = window.document; if(window != window.parent){ doc = parent.document; } var doctop = 0; doctop = doc.documentElement.scrollTop || window.pageYOffset;; var offsetTop = 0; // 画面中央に位置を調整 /*if (jQuery.browser.msie && jQuery.browser.version < 7) { offsetTop = doc.documentElement.clientHeight/2; }else{ offsetTop = $("body",doc).height()/2; }*/ offsetTop = THICKBOX.TB_HEIGHT/2; //offsetTop = pageTop; $("#TB_load",doc).css("top",offsetTop + doctop + "px"); //$("#TB_load").css("top", + offsetTop + pageTop + "px") $("#TB_load",doc).show(); };