(function($) { $.fn.galleryViewer = function(setup) { var imgArr = new Array(); setup = jQuery.extend({ galleryfolder:'', overlayBgColor:'#000', overlayOpacity:0.8, imageBtnPrev:'?img=prev', imageBtnNext:'?img=next', imageBtnSlideShow:'?img=play', imageBtnSlideShowPause:'?img=pause', imageBtnClose:'?img=close', imageBlank:'?img=blank', containerBorderSize:10, containerResizeSpeed:400, slideshow:true, slideshowAutoStart:false, slideShowDuration:6000, imageInfo:false, imageInfoLink:'?info=', showShare:false, shareLink:'?share=', showDownloadLink:false, downloadLink:'?download=', txtDownload:'Download', txtImageInfo:'Image info', txtImageInfoHide:'Hide info', txtShare:'Share this', txtShareHide:'Hide sharing', txtAuthor:'by', txtImage:'Image', txtOf:'of', imageArray:imgArr, currentImage:0 },setup); var dimensions = jQuery.extend({ pWidth:0, pHeight:0, wWidth:0, wHeight:0, posTop:0, posLeft:0, scroll:0 },dimensions); var imgElements = this; var resizing = false; var origImgWidth = 0; var origImgHeight = 0; var myPlayer = null; function executeLink() { initViewer(this,imgElements); return false; } function initViewer(elClicked,imgElements) { $('embed,object,select').css({'visibility':'hidden'}); createViewer(); setup.imageArray.length = 0; setup.currentImage = 0; for( var i = 0; i < imgElements.length; i++ ) { setup.imageArray.push(new Array( $(imgElements[i]).attr('href') , $(imgElements[i]).attr('title') , $(imgElements[i]).attr('caption') , $(imgElements[i]).attr('author') , $(imgElements[i]).attr('orig') , $(imgElements[i]).attr('video') )); } while( setup.currentImage < (setup.imageArray.length-1) && setup.imageArray[setup.currentImage][0] != $(elClicked).attr('href') ) { setup.currentImage++; } viewImage(); } function createViewer() { getWindowDimensions(); $('
').appendTo("body").css({ backgroundColor:setup.overlayBgColor, opacity:setup.overlayOpacity, width:dimensions.pWidth, height:dimensions.pHeight }).click(function() { closeOverlay(); }).fadeIn(); viewer = '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
'; $('
').html(viewer).appendTo("body").css({ top:dimensions.posTop, left:dimensions.posLeft }).click(function() { closeOverlay(); }).show(); $("#imgInfoBox").click(function(event){ event.stopPropagation(); }); //myPlayer = _V_("videoPlayer"); if(setup.imageInfo) { $('').appendTo('#imgInfo'); $(''+setup.txtImageInfo+'').appendTo('#viewExif').click(function(event) { imageInfo(); return false; }); } if(setup.showShare) { $('').appendTo('#imgInfo'); $(''+setup.txtShare+'').appendTo('#viewShare').click(function(event) { showShare(); return false; }); } if(setup.showDownloadLink) { $(''+setup.txtDownload+'').appendTo('#imgInfo'); } if(setup.slideshow) { var ssLink = $('').appendTo("#imgSlideShow").click(function() { startSlideShow(); }).show(); if(setup.slideshowAutoStart) ssLink.trigger('click'); } $('').appendTo("#viewerClose").click(function() { closeOverlay(); }).show(); // resizing window $(window).resize(function() { getWindowDimensions(); $('#gJv2overlay').css({ width:dimensions.wWidth, height:dimensions.wHeight }); if(resizing != true) { resizing = true; $.gDoTimeout( 'resize', 1000 , function(){ resizeViewer(false); resizing = false; }); } }); } function getWindowDimensions() { dimensions.wWidth = $(window).width(); dimensions.wHeight = $(window).height(); dimensions.pWidth = $(document).width(); dimensions.pHeight = $(document).height(); dimensions.scroll = $(window).scrollTop(); dimensions.posTop = dimensions.scroll + (dimensions.wHeight / 10); dimensions.posLeft = $(window).scrollLeft(); } function videoPlayer() { $('#imgDiv').hide(); if(myPlayer != null) { if(myPlayer.techName == "html5") { myPlayer.tag.src = ""; myPlayer.tech.removeTriggers(); myPlayer.load(); } //myPlayer.tech.destroy(); myPlayer.destroy(); $(myPlayer.el).remove(); } var code = '
'; $(code).prependTo('#imgDivWrap'); $("#gJv2videoPlayerWrap").click(function(event){ event.stopPropagation(); }); myPlayer = _V_("videoPlayer"); } function viewImage() { removeImageInfo(); $('#imgLoading').show(); $('#imgImg, #imgNav, #imgInfoBox').hide(); var preloadImage = new Image(); preloadImage.onload = function() { if(setup.imageArray[setup.currentImage][5] != null) { videoPlayer(); } else { $('#gJv2videoPlayerWrap').remove(); myPlayer = null; $('#imgDiv').show(); $('#imgImg').attr('src', setup.imageArray[setup.currentImage][0]); } origImgWidth = preloadImage.width; origImgHeight = preloadImage.height; resizeViewer(true); preloadImage.onload=function(){}; }; preloadImage.src = setup.imageArray[setup.currentImage][0]; }; function imageMaxSize(imgWidth,imgHeight) { var extraHeight = 60; var imgTotalMargin = (setup.containerBorderSize*4); var maxHeight = dimensions.wHeight - imgTotalMargin - extraHeight; var maxWidth = dimensions.wWidth - imgTotalMargin; if( imgHeight > maxHeight ) { var newHeight = maxHeight; var newWidth = Math.floor((newHeight / imgHeight) * imgWidth); if( newWidth > maxWidth ) { newWidth = maxWidth; newHeight = Math.floor((newWidth / imgWidth) * imgHeight); } dimensions.imgHeight = newHeight; dimensions.imgWidth = newWidth; } else if( imgWidth > maxWidth ) { var newWidth = maxWidth; var newHeight = Math.floor((newWidth / imgWidth) * imgHeight); if( newHeight > maxHeight ) { newHeight = maxHeight; newWidth = Math.floor((newHeight / imgHeight) * newWidth); } dimensions.imgHeight = newHeight; dimensions.imgWidth = newWidth; } else { dimensions.imgHeight = imgHeight; dimensions.imgWidth = imgWidth; } } function resizeViewer(initImg) { var extraHeight = 60; var imgMargin = (setup.containerBorderSize*2); imageMaxSize(origImgWidth,origImgHeight); var imgWrapWidth = (dimensions.imgWidth + imgMargin); var imgWrapHeight = (dimensions.imgHeight + imgMargin); dimensions.posTop = dimensions.scroll + ((dimensions.wHeight - imgWrapHeight)/2) - (extraHeight/2); if(dimensions.posTop < imgMargin) dimensions.posTop = imgMargin; $('#gJv2imgViewer').animate({ top: dimensions.posTop }, setup.containerResizeSpeed); if(!initImg) $('#imgImg').animate({ width:dimensions.imgWidth, height:dimensions.imgHeight }, setup.containerResizeSpeed); $('#imgDivWrap').animate({ width: imgWrapWidth }); $('#imgNav').css({ height: imgWrapHeight }); $('#imgDiv').animate({ width: dimensions.imgWidth, height: dimensions.imgHeight }, setup.containerResizeSpeed, function() { if(initImg) showImg(dimensions.imgWidth,dimensions.imgHeight); }); if(myPlayer != null) { myPlayer.width(dimensions.imgWidth); myPlayer.height(dimensions.imgHeight); } $('#imgInfoBox').css({ width: dimensions.imgWidth }); $('#imgPrevious, #imgNext').css({ height: dimensions.imgHeight + (setup.containerBorderSize * 2) }); }; function showImg(w,h) { $('#imgLoading').hide(); $('#imgImg').css({width:w,height:h}).fadeIn(function() { $('#imgNav').show(); $('#imgPrevious, #imgNext').css({'background':'transparent url(' + setup.imageBlank + ') no-repeat'}); if( setup.currentImage != 0 ) { $('#imgPrevious').unbind().hover(function() { $(this).css({ 'background':'url('+setup.imageBtnPrev+') left 15% no-repeat' }); },function() { $(this).css({ 'background':'transparent url('+setup.imageBlank+') no-repeat' }); }).show().bind('click',function() { if(setup.sshowOn) stopSlideshow(); setup.currentImage--; viewImage(); return false; }); } if( setup.currentImage != setup.imageArray.length-1 ) { $('#imgNext').unbind().hover(function() { $(this).css({ 'background':'url('+setup.imageBtnNext+') right 15% no-repeat' }); },function() { $(this).css({ 'background':'transparent url('+setup.imageBlank+') no-repeat' }); }).show().bind('click',function() { if(setup.sshowOn) stopSlideshow(); setup.currentImage++; viewImage(); return false; }); } $(document).keydown(function(objEvent) { eventKeyPress(objEvent); }); $('#imgInfoBox').slideDown('fast'); if( setup.imageArray[setup.currentImage][1] ) { $('#imgTitle').html(setup.imageArray[setup.currentImage][1]).show(); if(setup.imageArray[setup.currentImage][2]!=null) $('#imgCaption').html(setup.imageArray[setup.currentImage][2]).show(); else $('#imgCaption').html('').show(); if(setup.imageArray[setup.currentImage][3]!=null) $('#imgAuthor').html(' '+setup.txtAuthor+' '+setup.imageArray[setup.currentImage][3]).show(); else $('#imgAuthor').html('').show(); var origVal = setup.imageArray[setup.currentImage][4].replace(setup.galleryfolder,''); $('#imgCurrentOriginal').val(origVal); if(setup.showDownloadLink) $('#downloadLinkRef').attr('href',setup.downloadLink+origVal); } if( setup.imageArray.length > 1 ) $('#imgCount').html(setup.txtImage+' '+(setup.currentImage+1)+' '+setup.txtOf+' '+setup.imageArray.length).show(); }); preloadNextPrev(); }; function imageInfo() { if($('#exifBg').length == 0) { removeShare(); var src = $('#imgCurrentOriginal').val(); src = escape(src); var w = $('#imgDiv').width(); var h = $('#imgDiv').height(); $('
').css({ opacity:0.5, width:w, height:h }).appendTo('#imgNav'); $('
').css({ width:(w-40), height:(h-40) }).load(setup.imageInfoLink+src.replace(setup.galleryfolder,'')).appendTo('#imgNav').bind('click',function(event){event.stopPropagation();removeImageInfo();}); $('#viewExif a').text(setup.txtImageInfoHide); } else { removeImageInfo(); } } function removeImageInfo() { $('#exifInfo').remove(); $('#exifBg').remove(); $('#viewExif a').text(setup.txtImageInfo); } function showShare() { if($('#shareBg').length == 0) { removeImageInfo(); var src = $('#imgCurrentOriginal').val(); src = escape(src); var w = $('#imgDiv').width(); var h = $('#imgDiv').height(); $('
').css({ opacity:0.5, width:w, height:h }).appendTo('#imgNav'); $('
').css({ width:(w-40), height:(h-40) }).load(setup.shareLink+src.replace(setup.galleryfolder,'')).appendTo('#imgNav').bind('click',function(event){event.stopPropagation();removeShare();}); $('#viewShare a').text(setup.txtShareHide); } else { removeShare(); } } function removeShare() { $('#shareInfo').remove(); $('#shareBg').remove(); $('#viewShare a').text(setup.txtShare); } function clearImage() { $('#imgTitle').html(''); $('#imgCaption').html(''); $('#imgAuthor').html(''); } function nextSlide() { clearImage(); setup.currentImage++; viewImage(); if(setup.sshowOn && setup.currentImage < setup.imageArray.length-1) { $.gDoTimeout( 'sss', setup.slideShowDuration , function(){ nextSlide(); }); } return false; } function startSlideShow() { setup.sshowOn = true; $("#imgSlideShow img").remove(); $('').appendTo("#imgSlideShow").click(function() { stopSlideshow(); }).show(); $.gDoTimeout( 'ss', setup.slideShowDuration , function(){ nextSlide(); }); } function stopSlideshow() { setup.sshowOn = false; $.gDoTimeout( 'ss' ); $.gDoTimeout( 'sss' ); $("#imgSlideShow img").remove(); $('').appendTo("#imgSlideShow").click(function() { startSlideShow(); }).show(); } function preloadNextPrev() { if ( (setup.imageArray.length -1) > setup.currentImage ) { objNext = new Image(); objNext.src = setup.imageArray[setup.currentImage + 1][0]; } if ( setup.currentImage > 0 ) { objPrev = new Image(); objPrev.src = setup.imageArray[setup.currentImage -1][0]; } } function closeOverlay() { $('#gJv2imgViewer').fadeOut(200,function() { $(this).remove(); $('#gJv2overlay').fadeOut(500,function() { $(this).remove(); }); }); $('embed, object, select').css({ 'visibility':'visible' }); } function eventKeyPress(objEvent) { if( objEvent == null ) { keycode = event.keyCode; escapeKey = 27; } else { keycode = objEvent.keyCode; escapeKey = objEvent.DOM_VK_ESCAPE; } if(keycode == escapeKey) closeOverlay(); else if(keycode==39 && setup.currentImage!=(setup.imageArray.length-1) ) { setup.currentImage++; viewImage(); $(document).unbind(); } else if(keycode==37 && setup.currentImage!=0) { setup.currentImage--; viewImage(); $(document).unbind(); } } return this.unbind('click').click(executeLink); }; })(jQuery); function uploadAnother( ref ) { var tempFile = window.document.createElement( 'INPUT' ); tempFile.setAttribute( 'type', 'file' ); tempFile.className = 'fileupload'; tempFile.setAttribute( 'name', 'fileupload[]' ); var tempForm = false; var tempParent = false; var ok = true; try { while( ok == true ) { if( tempParent == false ) { tempParent = ref.parentNode; } else if ( tempParent.nodeName.toLowerCase() == 'form' ) { tempForm = tempParent; ok = false; } else { tempParent = tempParent.parentNode; } } // ends while } catch( e ) {}; ok = null; tempForm.insertBefore( tempFile, ref ); if (tempForm.length-1 >= 5){ tempForm.removeChild(ref); } return false; } // ends uploadAnother /* * jQuery doTimeout: Like setTimeout, but better! - v1.0 - 3/3/2010 * http://benalman.com/projects/jquery-dotimeout-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function($){var a={},c="gDoTimeout",d=Array.prototype.slice;$[c]=function(){return b.apply(window,[0].concat(d.call(arguments)))};$.fn[c]=function(){var f=d.call(arguments),e=b.apply(this,[c+f[0]].concat(f));return typeof f[0]==="number"||typeof f[1]==="number"?this:e};function b(l){var m=this,h,k={},g=l?$.fn:$,n=arguments,i=4,f=n[1],j=n[2],p=n[3];if(typeof f!=="string"){i--;f=l=0;j=n[1];p=n[2]}if(l){h=m.eq(0);h.data(l,k=h.data(l)||{})}else{if(f){k=a[f]||(a[f]={})}}k.id&&clearTimeout(k.id);delete k.id;function e(){if(l){h.removeData(l)}else{if(f){delete a[f]}}}function o(){k.id=setTimeout(function(){k.fn()},j)}if(p){k.fn=function(q){if(typeof p==="string"){p=g[p]}p.apply(m,d.call(n,i))===true&&!q?o():e()};o()}else{if(k.fn){j===undefined?e():k.fn(j===false);return true}else{e()}}}})(jQuery);