/**
 * The Flowerpot
 *
 * @package		The Flowerpot
 * @version		1.42
 * @author		Matthew Riley MacPherson
 * @copyright	Copyright (c) 2009, Matthew Riley MacPherson
 * @license		MIT License (http://www.opensource.org/licenses/mit-license.php)
 * @license		GNU General Public License (GPL) version 2 or later (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
 * @link		http://flowerpot.googlecode.com/
 */
(function(b){b.the_flowerpot=new function(){this.l={ajax_error:"An error occurred during the request.",close:"Close",loading:'Loading... "Esc" to close',next:"Next →",previous:"← Previous"};this.p={ajax:false,desc:false,dom_img:0,gal_i:0,gal_s:false,gal_size:0,old_set:false,overlay:false,ready:false,rel:"",size:{},slow_anim:false,speed:0,src:false,type:"image"};this.s={anim_speed:500,anim_multiplier:3,aux_opacity:0.75,detect_type:true,gallery_thumbnails:false,overlay_opacity:0.5,thumbnail_height:40}};var a=b.the_flowerpot;a.detect_type=function(e,c){var d="image";if(a.s.detect_type){if(e.match(/\.(png|jpg|jpeg|gif|bmp)/i)){d="image"}else{if(!e.match(/^.*:\/\/.*/i)||e.match(window.location.host)){d="div"}else{if(e.match(/vimeo\.com/i)){d="vimeo"}else{if(e.match(/youtube\.com/i)){d="youtube"}else{d="iframe"}}}}}if(c.match(/image/i)){d="image"}else{if(c.match(/div/i)){d="div"}else{if(c.match(/iframe/i)){d="iframe"}else{if(c.match(/vimeo/i)){d="vimeo"}else{if(c.match(/youtube/i)){d="youtube"}}}}}return d};a.ie6_resize_overlay=function(){var c=b("#flowerpotjs-overlay");c.css("height",b().height());c.css("width",b(window).width())};a.image=function(c){a.p.dom_img=new Image();b(a.p.dom_img).load(function(){a.resize("#flowerpotjs-image")});a.p.dom_img.src=b("#flowerpotjs-image").attr("src")};a.init=function(e,c){b.extend(a.l,c);b.extend(a.s,e);var d='<div id="flowerpotjs-overlay" style="display:none;"><span style="display:none;">'+a.l.loading+'</span></div><div id="flowerpotjs-contents" style="display:none;"></div>';b("body").append(d);b("#flowerpotjs-overlay").css({opacity:0});b("#flowerpotjs-overlay span").css({"-moz-border-radius":"3px","-webkit-border-radius":"2px"});b("#flowerpotjs-close,#flowerpotjs-overlay").live("click",function(f){if(f.shiftKey){a.p.slow_anim=true}if(f.button==0&&a.p.ready){a.hide();b(this).trigger("blur");f.preventDefault()}a.p.slow_anim=false});b(".flowerpot").live("click",function(g){if(a.p.overlay){return}if(g.shiftKey){a.p.slow_anim=true}if(g.button==0){a.p.rel=b(this).attr("rel");if(a.p.rel.match(/gallery\[([^ ]*)\]/i)){var f=a.p.rel.replace(/.*(gallery\[([^ ]*)\]).*/i,"$1");a.p.gal_s=b('.flowerpot[rel*="'+f+'"]');a.p.gal_i=a.p.gal_s.index(this);a.p.gal_size=a.p.gal_s.length;b(this).flowerpot()}else{b(this).flowerpot()}b(this).trigger("blur");g.preventDefault()}a.p.slow_anim=false});b("#flowerpotjs-prev-link").live("click",function(f){if(f.shiftKey){a.p.slow_anim=true}a.p.rel=b(this).attr("rel");if(a.p.ready&&a.p.gal_size>0){if(f.button==0){a.gallery_move("prev")}}a.p.slow_anim=false;b(this).trigger("blur");f.preventDefault()});b("#flowerpotjs-next-link").live("click",function(f){if(f.shiftKey){a.p.slow_anim=true}a.p.rel=b(this).attr("rel");if(a.p.ready&&a.p.gal_size>0){if(f.button==0){a.gallery_move("next")}}a.p.slow_anim=false;b(this).trigger("blur");f.preventDefault()});b(".flowerpotjs-gallery-index-link").live("click",function(f){if(f.shiftKey){a.p.slow_anim=true}a.p.rel=b(this).attr("rel");if(a.p.ready&&a.p.gal_size>0){if(f.button==0){a.gallery_move(a.p.rel.replace(/.*gid\[(\d*)\].*/i,"$1"))}}a.p.slow_anim=false;b(this).trigger("blur");f.preventDefault()});b().keydown(function(g){var f=false;if(g.shiftKey){a.p.slow_anim=true}switch(g.keyCode){case 27:if(a.p.ready||a.p.overlay){a.hide();f=true}break;case 35:if(a.p.ready&&a.p.gal_size>0){a.gallery_move(a.p.gal_size-1);f=true}break;case 36:if(a.p.ready&&a.p.gal_size>0){a.gallery_move(0);f=true}break;case 37:if(a.p.ready&&a.p.gal_size>0){a.gallery_move("prev");f=true}break;case 39:if(a.p.ready&&a.p.gal_size>0){a.gallery_move("next");f=true}break}if(f){g.preventDefault()}a.p.slow_anim=false});b(window).resize(function(f){if(a.p.ready){if(a.p.type=="image"){a.resize("#flowerpotjs-image")}else{if(a.p.type=="div"){a.resize("#flowerpotjs-div-inline")}else{if(a.p.type=="iframe"){a.resize("#flowerpotjs-iframe-inline")}}}if(b.browser.msie&&b.browser.version<7){a.ie6_resize_overlay()}f.preventDefault()}})};a.gallery_move=function(c){if(c===a.p.gal_i){return false}b("#flowerpotjs-contents").hide();a.p.ready=false;switch(c){case"prev":a.p.gal_i--;if(a.p.gal_i<0){a.p.gal_i=a.p.gal_size-1}break;case"next":a.p.gal_i++;if(a.p.gal_i>=a.p.gal_size){a.p.gal_i=0}break;default:a.p.gal_i=c;break}if(a.p.src&&!a.p.ajax&&a.p.type=="div"){b(a.p.src).swap("#flowerpotjs-div-swap")}if(a.p.gal_size>1&&a.s.gallery_thumbnails){b("#flowerpotjs-controls-images li").removeClass("flowerpotjs-thumbnail-active").eq(a.p.gal_i).addClass("flowerpotjs-thumbnail-active")}a.p.gal_s.eq(a.p.gal_i).flowerpot()};a.hide=function(){a.p.ready=false;a.p.dom_img=0;var f=b("#flowerpotjs-contents"),d=b(".flowerpotjs-gallery-link,.flowerpotjs-gallery-link-bg,.flowerpotjs-gallery-index-link"),e=b("object,embed"),c=b("#flowerpotjs-overlay");a.p.speed=(a.p.slow_anim)?a.s.anim_speed*a.s.anim_multiplier:a.s.anim_speed;a.p.gal_size=0;if(a.p.type=="div"){if(a.p.ajax){b("#flowerpotjs-div-inline").empty()}else{b(a.p.src).swap("#flowerpotjs-div-swap")}}b("#flowerpotjs-media").empty();if(b.browser.msie&&b.browser.version<8){e.css("visibility","visible")}f.fadeOut(a.p.speed);d.dequeue();d.fadeOut(a.p.speed);f.queue(function(){f.dequeue();b("#flowerpotjs-contents").empty();b("#flowerpotjs-controls").remove();c.fadeOut(a.p.speed)});c.queue(function(){c.dequeue();if((b.browser.msie&&b.browser.version<8)||b.browser.opera){e.css("visibility","visible")}b("body").removeClass("flowerpot-active");if(a.p.old_set){b.extend(a.s,a.p.old_set);a.p.old_set=false}a.p.overlay=false})};a.locale=function(c){b.extend(a.l,c)};a.resize=function(e,m){var i=b("#flowerpotjs-contents"),n=b("#flowerpotjs-description"),g=b("#flowerpotjs-controls-images"),j,f=b(e),c,k=b(window).height(),d=b(window).width();if(!m){m=a.p.size}var h=k-k/5,l=d-d/5;j=(a.p.dom_img.height)?a.p.dom_img.height:h;c=(a.p.dom_img.width)?a.p.dom_img.width:l;j=(m.height)?m.height:j;c=(m.width)?m.width:c;if(a.p.dom_img.width&&m.width&&!m.height){j=a.p.dom_img.height/(a.p.dom_img.width/m.width)}if(a.p.dom_img.height&&m.height&&!m.width){c=a.p.dom_img.width/(a.p.dom_img.height/m.height)}if(c>l){j=j*(l/c);c=l;if(j>h){c=c*(h/j);j=h}}else{if(j>h){c=c*(h/j);j=h;if(c>l){j=j*(l/c);c=l}}}if(a.p.type=="iframe"){j-=10;c-=10}j=Math.round(j);c=Math.round(c);f.height(j+"px");f.width(c+"px");i.css({height:j+"px",width:c+"px"});if(b.browser.msie&&b.browser.version<7){a.ie6_resize_overlay()}else{i.css({"margin-top":"-"+(j/2)+"px","margin-left":"-"+(c/2)+"px"})}if(a.p.desc){b("#flowerpotjs-description-bg").css({height:n.height()});b("#flowerpotjs-description,#flowerpotjs-description-bg").css({bottom:"-"+parseInt(n.height()+3)+"px"})}if(a.s.gallery_thumbnails&&a.p.gal_size>1){while(g.width()>d){g.height*=2;g.height+=2}}};a.settings=function(c){b.extend(a.s,c)};a.show=function(){if(!a.p.overlay){return}var f=b("#flowerpotjs-contents"),e=b("#flowerpotjs-close"),c=b("#flowerpotjs-description"),d=b("#flowerpotjs-overlay span");if(b.browser.msie&&b.browser.version<8){b("object,embed").css("visibility","hidden");b("#flowerpotjs-contents object,#flowerpotjs-contents embed").css("visibility","visible")}d.fadeOut(a.p.speed);f.fadeIn(a.p.speed);b("#flowerpotjs-description,#flowerpotjs-description-bg").css({bottom:"-"+parseInt(c.height()+3)+"px"});e.css({right:"-"+parseInt(e.width()+15)+"px"});if(a.p.gal_size>1&&a.s.gallery_thumbnails){b("#flowerpotjs-controls-images").css({display:"block",opacity:a.s.aux_opacity}).children("li").eq(a.p.gal_i).addClass("flowerpotjs-thumbnail-active")}if(c.length>0&&!(b.browser.msie&&b.browser.version==6)){f.css({"margin-top":parseInt(f.css("margin-top"))-parseInt(c.height()*0.25+3)})}b("#flowerpotjs-description-bg").css({height:parseInt(c.height())});f.queue(function(){f.dequeue();d.dequeue();d.hide()});a.p.ready=true};b.fn.flowerpot=function(t,e){b.extend(true,a.p,{desc:false,dom_img:0,overlay:false,ready:false,rel:b(this).attr("rel"),size:{},src:false,type:"image"});b.extend(true,a.p,e);if(!a.p.src){a.p.src=(a.p.rel.match(/src\[([^ ]*)\]/i))?a.p.rel.replace(/.*src\[([^ ]*)\].*/i,"$1"):b(this).attr("href")}if(a.p.src&&a.p.src!="#"){a.p.old_set=(!a.p.old_set&&t)?b.extend(a.p.old_set,a.s):a.p.old_set;b.extend(a.s,t);a.p.type=a.detect_type(a.p.src,a.p.rel);var n={};if(a.p.rel.match(/height\[([^ ]*)\]/i)){n.height=a.p.rel.replace(/.*height\[([^ ]*)\].*/i,"$1")}if(a.p.rel.match(/width\[([^ ]*)\]/i)){n.width=a.p.rel.replace(/.*width\[([^ ]*)\].*/i,"$1")}b.extend(a.p,{size:n});var u=b("#flowerpotjs-contents"),m=b("#flowerpotjs-controls"),q=b(".flowerpotjs-gallery-link,.flowerpotjs-gallery-link-bg"),j=b("object,embed"),s=b("#flowerpotjs-overlay"),o="",h="",k,r,c,l,p,d,g;a.p.speed=(a.p.slow_anim)?a.s.anim_speed*a.s.anim_multiplier:a.s.anim_speed;if(!a.p.desc){a.p.desc=b("#"+b(this).attr("id")+"-flowerpot-description");a.p.desc=(a.p.desc.length>0)?a.p.desc.html():b(this).attr("title")}s.css({opacity:a.s.overlay_opacity});s.fadeIn(parseInt(a.p.speed/2));s.queue(function(){s.dequeue();b("#flowerpotjs-overlay span").animate({opacity:1},a.p.speed).fadeIn(a.p.speed/5);b("body").addClass("flowerpot-active")});a.p.overlay=true;switch(a.p.type){case"div":k=a.p.src;if(k.substr(0,1)=="#"){k=k.substr(1,k.length-1);a.p.ajax=false}else{a.p.ajax=true}o='<div id="flowerpotjs-div-inline"><div id="flowerpotjs-div-swap" style="display:none;"></div></div>';break;case"iframe":o='<iframe id="flowerpotjs-iframe-inline" src="'+a.p.src+'"></iframe>';break;case"image":o='<img alt="Image overlay" src="'+a.p.src+'" id="flowerpotjs-image" />';break;case"vimeo":r=b.extend({width:400,height:300},a.p.size);a.p.src=a.p.src.replace(/https?:\/\/(www\.)?vimeo\.com\/(\d*)/i,"$2");o='<div id="flowerpotjs-media"><object id="flowerpotjs-media-vimeo" name="flowerpotjs-media-vimeo" width="'+r.width+'" height="'+r.height+'"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id='+a.p.src+'&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id='+a.p.src+'&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+r.width+'" height="'+r.height+'"></embed></object></div>';break;case"youtube":r=b.extend({width:480,height:385},a.p.size);a.p.src=a.p.src.replace(/watch\?v=/i,"v/");o='<div id="flowerpotjs-media"><object id="flowerpotjs-media-youtube" name="flowerpotjs-media-youtube" width="'+r.width+'" height="'+r.height+'"><param name="movie" value="'+a.p.src+'&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="'+a.p.src+'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+r.width+'" height="'+r.height+'"></embed></object></div>';break}if(m.length==0&&a.p.gal_size>1){h='<div id="flowerpotjs-controls"><span id="flowerpotjs-prev-link-bg" class="flowerpotjs-gallery-link-bg"></span><a href="#prev" id="flowerpotjs-prev-link" class="flowerpotjs-gallery-link" rel="'+a.p.rel+'">'+a.l.previous+'</a><span id="flowerpotjs-next-link-bg" class="flowerpotjs-gallery-link-bg"></span><a href="#next" id="flowerpotjs-next-link" class="flowerpotjs-gallery-link" rel="'+a.p.rel+'">'+a.l.next+"</a>";if(a.s.gallery_thumbnails){h+='<ul id="flowerpotjs-controls-images">';for(p=0;p<a.p.gal_size;p++){c=a.p.gal_s.eq(p);d=c.attr("rel");g=(d.match(/src\[([^ ]*)\]/i))?d.replace(/.*src\[([^ ]*)\].*/i,"$1"):c.attr("href");switch(a.detect_type(g,d)){case"image":l='<img src="'+g+'" height="'+a.s.thumbnail_height+'" />';break;case"youtube":l='<img src="http://img.youtube.com/vi/'+g.replace(/.*v(=|\/)([^&#]*).*/i,"$2")+'/3.jpg" height="'+a.s.thumbnail_height+'" />';break;default:l='<span style="height:'+Math.round(a.s.thumbnail_height*0.75)+"px;padding-top:"+Math.round(a.s.thumbnail_height*0.25)+'px;">'+parseInt(p+1)+"</span>";break}h+='<li><a href="'+c.attr("href")+'" rel="'+d+" gid["+p+']" class="flowerpotjs-gallery-index-link">'+l+"</a></li>"}h+="</ul>"}h+="</div>"}if(a.p.desc){o+='<div id="flowerpotjs-description-bg"></div><div id="flowerpotjs-description">'+a.p.desc+"</div>"}o+='<a href="#close" id="flowerpotjs-close">'+a.l.close+"</a>";if(m.length==0&&a.p.gal_size>1){u.after(h)}if(b.browser.msie&&b.browser.version<8){b("object,embed").css("visibility","hidden");b("#flowerpotjs-contents object,#flowerpotjs-contents embed").css("visibility","visible")}u.html(o).css({"-moz-border-radius":"2px","-webkit-border-radius":"1px"});b("#flowerpotjs-description-bg,.flowerpotjs-gallery-link-bg").css({opacity:a.s.aux_opacity});b("#flowerpotjs-close,#flowerpotjs-description,#flowerpotjs-description-bg").css({"-moz-border-radius":"3px","-webkit-border-radius":"2px"});b(".flowerpotjs-gallery-link,.flowerpotjs-gallery-link-bg").css({"-moz-border-radius":"3px","-webkit-border-radius":"2px"}).fadeIn(a.p.speed);switch(a.p.type){case"div":a.resize("#flowerpotjs-div-inline");if(a.p.ajax){b.ajax({type:"GET",async:false,url:a.p.src,dataType:"text",success:function(i){b("#flowerpotjs-div-inline").html(i)},error:function(w,i,v){b("#flowerpotjs-div-inline").html(a.l.ajax_error)}})}else{b(a.p.src).swap("#flowerpotjs-div-swap")}a.show();break;case"iframe":a.resize("#flowerpotjs-iframe-inline");a.show();break;case"image":if(b.browser.opera){a.image();a.show()}else{b("#flowerpotjs-image").load(function f(i){if(a.p.type=="image"){a.image()}if(b.browser.msie&&b.browser.version>=7){a.show()}else{b(a.p.dom_img).load(function(){a.show()})}})}break;case"vimeo":a.resize("#flowerpotjs-media",r);a.show();break;case"youtube":a.resize("#flowerpotjs-media",r);a.show();break}u.queue(function(){u.dequeue();s.show()})}else{a.p.gal_size=0;a.p.type="image";a.hide();throw ("Attempted to load an overlay using The Flowerpot, but the src value was invalid or null.")}return this};b.fn.swap=function(d){d=b(d)[0];var e=this[0],c=e.parentNode.insertBefore(document.createTextNode(""),e);d.parentNode.insertBefore(e,d);c.parentNode.insertBefore(d,c);c.parentNode.removeChild(c);return this};b().ready(function(){a.init()})})(jQuery);