
(function($){var opts={},imgPreloader=new Image,imgTypes=['png','jpg','jpeg','gif'],loadingTimer,loadingFrame=1;$.fn.hoverbox=function(settings){opts.settings=$.extend({},$.fn.hoverbox.defaults,settings);$.fn.hoverbox.init();return this.each(function(){var $this=$(this);var o=$.metadata?$.extend({},opts.settings,$this.metadata()):opts.settings;$this.unbind('click').click(function(){$.fn.hoverbox.start(this,o);return false;});});};$.fn.hoverbox.start=function(el,o){if(opts.animating)return false;if(o.overlayShow){$("#hover_wrap").prepend('<div id="hover_overlay"></div>');$("#hover_overlay").css({'width':$(window).width(),'height':$(document).height(),'opacity':o.overlayOpacity});if($.browser.msie){$("#hover_wrap").prepend('<iframe id="hover_bigIframe" scrolling="no" frameborder="0"></iframe>');$("#hover_bigIframe").css({'width':$(window).width(),'height':$(document).height(),'opacity':0});}
$("#hover_overlay").click($.fn.hoverbox.close);}
opts.itemArray=[];opts.itemNum=0;if(jQuery.isFunction(o.itemLoadCallback)){o.itemLoadCallback.apply(this,[opts]);var c=$(el).children("img:first").length?$(el).children("img:first"):$(el);var tmp={'width':c.width(),'height':c.height(),'pos':$.fn.hoverbox.getPosition(c)}
for(var i=0;i<opts.itemArray.length;i++){opts.itemArray[i].o=$.extend({},o,opts.itemArray[i].o);if(o.zoomSpeedIn>0||o.zoomSpeedOut>0){opts.itemArray[i].orig=tmp;}}}else{if(!el.rel||el.rel==''){var item={url:el.href,title:el.title,o:o};if(o.zoomSpeedIn>0||o.zoomSpeedOut>0){var c=$(el).children("img:first").length?$(el).children("img:first"):$(el);item.orig={'width':c.width(),'height':c.height(),'pos':$.fn.hoverbox.getPosition(c)}}
opts.itemArray.push(item);}else{var arr=$("a[@rel="+el.rel+"]").get();for(var i=0;i<arr.length;i++){var tmp=$.metadata?$.extend({},o,$(arr[i]).metadata()):o;var item={url:arr[i].href,title:arr[i].title,o:tmp};if(o.zoomSpeedIn>0||o.zoomSpeedOut>0){var c=$(arr[i]).children("img:first").length?$(arr[i]).children("img:first"):$(el);item.orig={'width':c.width(),'height':c.height(),'pos':$.fn.hoverbox.getPosition(c)}}
if(arr[i].href==el.href)opts.itemNum=i;opts.itemArray.push(item);}}}
$.fn.hoverbox.changeItem(opts.itemNum);};$.fn.hoverbox.changeItem=function(n){$.fn.hoverbox.showLoading();opts.itemNum=n;$("#hover_nav").empty();$("#hover_outer").stop();$("#hover_title").hide();$(document).unbind("keydown");imgRegExp=imgTypes.join('|');imgRegExp=new RegExp('\.'+imgRegExp+'$','i');var url=opts.itemArray[n].url;if(url.match(/#/)){var target=window.location.href.split('#')[0];target=url.replace(target,'');$.fn.hoverbox.showItem('<div id="hover_div">'+$(target).html()+'</div>');$("#hover_loading").hide();}else if(url.match(imgRegExp)){$(imgPreloader).unbind('load').bind('load',function(){$("#hover_loading").hide();opts.itemArray[n].o.frameWidth=imgPreloader.width;opts.itemArray[n].o.frameHeight=imgPreloader.height;$.fn.hoverbox.showItem('<img id="hover_img" src="'+imgPreloader.src+'" />');}).attr('src',url+'?rand='+Math.floor(Math.random()*999999999));}else{$.fn.hoverbox.showItem('<iframe id="hover_frame" onload="$.fn.hoverbox.showIframe()" name="hover_iframe'+Math.round(Math.random()*1000)+'" frameborder="0" hspace="0" src="'+url+'"></iframe>');}};$.fn.hoverbox.showIframe=function(){$("#hover_loading").hide();$("#hover_frame").show();};$.fn.hoverbox.showItem=function(val){$.fn.hoverbox.preloadNeighborImages();var viewportPos=$.fn.hoverbox.getViewport();var itemSize=$.fn.hoverbox.getMaxSize(viewportPos[0]-50,viewportPos[1]-100,opts.itemArray[opts.itemNum].o.frameWidth,opts.itemArray[opts.itemNum].o.frameHeight);var itemLeft=viewportPos[2]+Math.round((viewportPos[0]-itemSize[0])/2)-20;var itemTop=viewportPos[3]+Math.round((viewportPos[1]-itemSize[1])/2)-40;var itemOpts={'left':itemLeft,'top':itemTop,'width':itemSize[0]+'px','height':itemSize[1]+'px'}
if(opts.active){$('#hover_content').fadeOut("normal",function(){$("#hover_content").empty();$("#hover_outer").animate(itemOpts,"normal",function(){$("#hover_content").append($(val)).fadeIn("normal");$.fn.hoverbox.updateDetails();});});}else{opts.active=true;$("#hover_content").empty();if($("#hover_content").is(":animated")){console.info('animated!');}
if(opts.itemArray[opts.itemNum].o.zoomSpeedIn>0){opts.animating=true;itemOpts.opacity="show";$("#hover_outer").css({'top':opts.itemArray[opts.itemNum].orig.pos.top-18,'left':opts.itemArray[opts.itemNum].orig.pos.left-18,'height':opts.itemArray[opts.itemNum].orig.height,'width':opts.itemArray[opts.itemNum].orig.width});$("#hover_content").append($(val)).show();$("#hover_outer").animate(itemOpts,opts.itemArray[opts.itemNum].o.zoomSpeedIn,function(){opts.animating=false;$.fn.hoverbox.updateDetails();});}else{$("#hover_content").append($(val)).show();$("#hover_outer").css(itemOpts).show();$.fn.hoverbox.updateDetails();}}};$.fn.hoverbox.updateDetails=function(){$("#hover_bg,#hover_close").show();if(opts.itemArray[opts.itemNum].title!==undefined&&opts.itemArray[opts.itemNum].title!==''){$('#hover_title div').html(opts.itemArray[opts.itemNum].title);$('#hover_title').show();}
if(opts.itemArray[opts.itemNum].o.hideOnContentClick){$("#hover_content").click($.fn.hoverbox.close);}else{$("#hover_content").unbind('click');}
if(opts.itemNum!=0){$("#hover_nav").append('<a id="hover_left" href="javascript:;"></a>');$('#hover_left').click(function(){$.fn.hoverbox.changeItem(opts.itemNum-1);return false;});}
if(opts.itemNum!=(opts.itemArray.length-1)){$("#hover_nav").append('<a id="hover_right" href="javascript:;"></a>');$('#hover_right').click(function(){$.fn.hoverbox.changeItem(opts.itemNum+1);return false;});}
$(document).keydown(function(event){if(event.keyCode==27){$.fn.hoverbox.close();}else if(event.keyCode==37&&opts.itemNum!=0){$.fn.hoverbox.changeItem(opts.itemNum-1);}else if(event.keyCode==39&&opts.itemNum!=(opts.itemArray.length-1)){$.fn.hoverbox.changeItem(opts.itemNum+1);}});};$.fn.hoverbox.preloadNeighborImages=function(){if((opts.itemArray.length-1)>opts.itemNum){preloadNextImage=new Image();preloadNextImage.src=opts.itemArray[opts.itemNum+1].url;}
if(opts.itemNum>0){preloadPrevImage=new Image();preloadPrevImage.src=opts.itemArray[opts.itemNum-1].url;}};$.fn.hoverbox.close=function(){if(opts.animating)return false;$(imgPreloader).unbind('load');$(document).unbind("keydown");$("#hover_loading,#hover_title,#hover_close,#hover_bg").hide();$("#hover_nav").empty();opts.active=false;if(opts.itemArray[opts.itemNum].o.zoomSpeedOut>0){var itemOpts={'top':opts.itemArray[opts.itemNum].orig.pos.top-18,'left':opts.itemArray[opts.itemNum].orig.pos.left-18,'height':opts.itemArray[opts.itemNum].orig.height,'width':opts.itemArray[opts.itemNum].orig.width,'opacity':'hide'};opts.animating=true;$("#hover_outer").animate(itemOpts,opts.itemArray[opts.itemNum].o.zoomSpeedOut,function(){$("#hover_content").hide().empty();$("#hover_overlay,#hover_bigIframe").remove();opts.animating=false;});}else{$("#hover_outer").hide();$("#hover_content").hide().empty();$("#hover_overlay,#hover_bigIframe").fadeOut("fast").remove();}};$.fn.hoverbox.showLoading=function(){clearInterval(loadingTimer);var pos=$.fn.hoverbox.getViewport();$("#hover_loading").css({'left':((pos[0]-40)/2+pos[2]),'top':((pos[1]-40)/2+pos[3])}).show();$("#hover_loading").bind('click',$.fn.hoverbox.close);loadingTimer=setInterval($.fn.hoverbox.animateLoading,66);};$.fn.hoverbox.animateLoading=function(el,o){if(!$("#hover_loading").is(':visible')){clearInterval(loadingTimer);return;}
$("#hover_loading > div").css('top',(loadingFrame*-40)+'px');loadingFrame=(loadingFrame+1)%12;};$.fn.hoverbox.init=function(){if(!$('#hover_wrap').length){$('<div id="hover_wrap"><div id="hover_loading"><div></div></div><div id="hover_outer"><div id="hover_inner"><div id="hover_nav"></div><div id="hover_close"></div><div id="hover_content"></div><div id="hover_title"></div></div></div></div>').appendTo("body");}
if($.browser.msie){$("#hover_inner").prepend('<iframe id="hover_freeIframe" scrolling="no" frameborder="0"></iframe>');}
if(jQuery.fn.pngFix)$(document).pngFix();$("#hover_close").click($.fn.hoverbox.close);};$.fn.hoverbox.getPosition=function(el){var pos=el.offset();pos.top+=$.fn.hoverbox.num(el,'paddingTop');pos.top+=$.fn.hoverbox.num(el,'borderTopWidth');pos.left+=$.fn.hoverbox.num(el,'paddingLeft');pos.left+=$.fn.hoverbox.num(el,'borderLeftWidth');return pos;};$.fn.hoverbox.num=function(el,prop){return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;};$.fn.hoverbox.getPageScroll=function(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft;}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft;}
return[xScroll,yScroll];};$.fn.hoverbox.getViewport=function(){var scroll=$.fn.hoverbox.getPageScroll();var h=$.browser.opera&&$.browser.version>"9.5"&&$.fn.jquery<="1.2.6"?document.documentElement["clientHeight"]:$(window).height();return[$(window).width(),h,scroll[0],scroll[1]];};$.fn.hoverbox.getMaxSize=function(maxWidth,maxHeight,imageWidth,imageHeight){var r=Math.min(Math.min(maxWidth,imageWidth)/imageWidth,Math.min(maxHeight,imageHeight)/imageHeight);return[Math.round(r*imageWidth),Math.round(r*imageHeight)];};$.fn.hoverbox.defaults={hideOnContentClick:false,zoomSpeedIn:500,zoomSpeedOut:500,frameWidth:600,frameHeight:400,overlayShow:false,overlayOpacity:0.4,itemLoadCallback:null};})(jQuery);
