You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by br...@apache.org on 2015/05/07 20:13:21 UTC

[1/6] drill git commit: Fancybox video

Repository: drill
Updated Branches:
  refs/heads/gh-pages bca47014e -> 1cbc6a769


http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/jquery.fancybox.pack.js
----------------------------------------------------------------------
diff --git a/static/fancybox/jquery.fancybox.pack.js b/static/fancybox/jquery.fancybox.pack.js
new file mode 100755
index 0000000..73f7578
--- /dev/null
+++ b/static/fancybox/jquery.fancybox.pack.js
@@ -0,0 +1,46 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0<a.indexOf("%")},l=function(a,d){var e=parseInt(a,10)||0;d&&E(a)&&(e*=b.getViewport()[d]/100);return Math.ceil(e)},w=function(a,b){return l(a,b)+"px"};f.extend(b,{version:"2.1.5",defaults:{padding:15,margin:20,
+width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!s,fitToView:!0,aspectRatio:!1,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},
+keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+
+(I?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,
+openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,
+isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k,
+c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&&
+k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||
+b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer=
+setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index<b.group.length-1))b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":c,"onUpdate.player":e,"beforeLoad.player":d}),e(),b.trigger("onPlayStart")}else c()},next:function(a){var d=b.current;d&&(q(a)||(a=d.direction.next),b.jumpto(d.index+1,a,"next"))},prev:function(a){var d=b.current;
+d&&(q(a)||(a=d.direction.prev),b.jumpto(d.index-1,a,"prev"))},jumpto:function(a,d,e){var c=b.current;c&&(a=l(a),b.direction=d||c.direction[a>=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d=
+a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),
+b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('<div id="fancybox-loading"><div></div></div>').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(),
+y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement;
+if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1<a.group.length&&k[c]!==v)return b[d](k[c]),e.preventDefault(),!1;if(-1<f.inArray(c,k))return b[d](),e.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(d,c,k,g){for(var h=f(d.target||null),j=!1;h.length&&!j&&!h.is(".fancybox-skin")&&!h.is(".fancybox-wrap");)j=h[0]&&!(h[0].style.overflow&&"hidden"===h[0].style.overflow)&&
+(h[0].clientWidth&&h[0].scrollWidth>h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1<b.group.length&&!a.canShrink){if(0<g||0<k)b.prev(0<g?"down":"left");else if(0>g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,
+{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,
+mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=
+!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");
+"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=
+this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href);
+f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,
+e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,
+outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("<div>").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}",
+g);break;case "swf":e='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',h="",f.each(a.swf,function(a,b){e+='<param name="'+a+'" value="'+b+'"></param>';h+=" "+a+'="'+b+'"'}),e+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+h+"></embed></object>"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll":
+"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside?
+h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth||
+h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),c<m&&(c=m,j=l(c/D)),j<u&&(j=u,c=l(j*D))):(c=Math.max(m,Math.min(c,n)),h.autoHeight&&
+"iframe"!==h.type&&(g.width(c),j=g.height()),j=Math.max(u,Math.min(j,p)));if(h.fitToView)if(g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height(),h.aspectRatio)for(;(a>z||y>r)&&(c>m&&j>u)&&!(19<d++);)j=Math.max(u,Math.min(p,j-10)),c=l(j*D),c<m&&(c=m,j=l(c/D)),c>n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&j<A&&c+x+q<z)&&(c+=q);g.width(c).height(j);e.width(c+x);a=e.width();
+y=e.height();e=(a>z||y>r)&&c>m&&j>u;c=h.aspectRatio?c<F&&j<B&&c<C&&j<A:(c<F||j<B)&&(c<C||j<A);f.extend(h,{dim:{width:w(a),height:w(y)},origWidth:C,origHeight:A,canShrink:e,canExpand:c,wPadding:x,hPadding:v,wrapSpace:y-k.outerHeight(!0),skinSpace:k.height()-j});!H&&(h.autoHeight&&j>u&&j<p&&!c)&&g.height("auto")},_getPosition:function(a){var d=b.current,e=b.getViewport(),c=d.margin,f=b.wrap.width()+c[1]+c[3],g=b.wrap.height()+c[0]+c[2],c={position:"absolute",top:c[0],left:c[3]};d.autoCenter&&d.fixed&&
+!a&&g<=e.h&&f<=e.w?c.position="fixed":d.locked||(c.top+=e.y,c.left+=e.x);c.top=w(Math.max(c.top,c.top+(e.h-g)*d.topRatio));c.left=w(Math.max(c.left,c.left+(e.w-f)*d.leftRatio));return c},_afterZoomIn:function(){var a=b.current;a&&(b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened"),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(d){!f(d.target).is("a")&&!f(d.target).parent().is("a")&&(d.preventDefault(),
+b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),!a.loop&&a.index===a.group.length-1?b.play(!1):b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=!1,b.play()))},_afterZoomOut:function(a){a=
+a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,d=a.element,e=a.orig,c={},f=50,g=50,h=a.hPadding,j=a.wPadding,m=b.getViewport();!e&&(a.isDom&&d.is(":visible"))&&(e=d.find("img:first"),e.length||(e=d));t(e)?(c=e.offset(),e.is("img")&&(f=e.outerWidth(),g=e.outerHeight())):
+(c.top=m.y+(m.h-g)*a.topRatio,c.left=m.x+(m.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)c.top-=m.y,c.left-=m.x;return c={top:w(c.top-h*a.topRatio),left:w(c.left-j*a.leftRatio),width:w(f+j),height:w(g+h)}},step:function(a,d){var e,c,f=d.prop;c=b.current;var g=c.wrapSpace,h=c.skinSpace;if("width"===f||"height"===f)e=d.end===d.start?1:(a-d.start)/(d.end-d.start),b.isClosing&&(e=1-e),c="width"===f?c.wPadding:c.hPadding,c=a-c,b.skin[f](l("width"===f?c:c-g*e)),b.inner[f](l("width"===
+f?c:c-g*e-h*e))},zoomIn:function(){var a=b.current,d=a.pos,e=a.openEffect,c="elastic"===e,k=f.extend({opacity:1},d);delete k.position;c?(d=this.getOrigPosition(),a.openOpacity&&(d.opacity=0.1)):"fade"===e&&(d.opacity=0.1);b.wrap.css(d).animate(k,{duration:"none"===e?0:a.openSpeed,easing:a.openEasing,step:c?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,d=a.closeEffect,e="elastic"===d,c={opacity:0.1};e&&(c=this.getOrigPosition(),a.closeOpacity&&(c.opacity=0.1));b.wrap.animate(c,
+{duration:"none"===d?0:a.closeSpeed,easing:a.closeEasing,step:e?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,d=a.nextEffect,e=a.pos,c={opacity:1},f=b.direction,g;e.opacity=0.1;"elastic"===d&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(e[g]=w(l(e[g])-200),c[g]="+=200px"):(e[g]=w(l(e[g])+200),c[g]="-=200px"));"none"===d?b._afterZoomIn():b.wrap.css(e).animate(c,{duration:a.nextSpeed,easing:a.nextEasing,complete:b._afterZoomIn})},changeOut:function(){var a=
+b.previous,d=a.prevEffect,e={opacity:0.1},c=b.direction;"elastic"===d&&(e["down"===c||"up"===c?"top":"left"]=("up"===c||"left"===c?"-":"+")+"=200px");a.wrap.animate(e,{duration:"none"===d?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!s,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){a=f.extend({},this.defaults,a);this.overlay&&this.close();this.overlay=
+f('<div class="fancybox-overlay"></div>').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?
+b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth),
+p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"===
+f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=
+b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('<div class="fancybox-title fancybox-title-'+c+'-wrap">'+e+"</div>");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,
+e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+
+":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('<div style="position:fixed;top:20px;"></div>').appendTo("body");var e=20===
+d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(d-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery);
\ No newline at end of file


[2/6] drill git commit: Fancybox video

Posted by br...@apache.org.
Fancybox video


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/8da3f222
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/8da3f222
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/8da3f222

Branch: refs/heads/gh-pages
Commit: 8da3f222dd1e9b253c9c6a92361d6158220b48f6
Parents: 6ed707b
Author: Tomer Shiran <ts...@gmail.com>
Authored: Fri May 1 23:22:37 2015 -0700
Committer: Tomer Shiran <ts...@gmail.com>
Committed: Fri May 1 23:22:37 2015 -0700

----------------------------------------------------------------------
 css/style.css                                   |    5 +-
 index.html                                      |   21 +
 static/fancybox/blank.gif                       |  Bin 0 -> 43 bytes
 static/fancybox/fancybox_loading.gif            |  Bin 0 -> 6567 bytes
 static/fancybox/fancybox_loading@2x.gif         |  Bin 0 -> 13984 bytes
 static/fancybox/fancybox_overlay.png            |  Bin 0 -> 1003 bytes
 static/fancybox/fancybox_sprite.png             |  Bin 0 -> 1362 bytes
 static/fancybox/fancybox_sprite@2x.png          |  Bin 0 -> 6553 bytes
 static/fancybox/helpers/fancybox_buttons.png    |  Bin 0 -> 1080 bytes
 .../helpers/jquery.fancybox-buttons.css         |   97 +
 .../fancybox/helpers/jquery.fancybox-buttons.js |  122 ++
 .../fancybox/helpers/jquery.fancybox-media.js   |  199 ++
 .../fancybox/helpers/jquery.fancybox-thumbs.css |   55 +
 .../fancybox/helpers/jquery.fancybox-thumbs.js  |  162 ++
 static/fancybox/jquery.fancybox.css             |  274 +++
 static/fancybox/jquery.fancybox.js              | 2020 ++++++++++++++++++
 static/fancybox/jquery.fancybox.pack.js         |   46 +
 17 files changed, 2999 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/css/style.css
----------------------------------------------------------------------
diff --git a/css/style.css b/css/style.css
index 63cd695..a01933b 100755
--- a/css/style.css
+++ b/css/style.css
@@ -308,8 +308,9 @@ a.anchor {
 #header .scroller .item .tc {
 	color:#FFF;
 	margin-left:80px;
-	position:absolute;
-	width:530px;
+	position:relative;
+	width:900px;
+  margin:0 auto;
 }
 
 #header .scroller .item .tc h1, #header .scroller .item .tc h2 {

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 86def74..d0c4c15 100755
--- a/index.html
+++ b/index.html
@@ -1,6 +1,25 @@
 ---
 layout: default
 ---
+<link href="{{ site.baseurl }}/static/fancybox/jquery.fancybox.css" rel="stylesheet" type="text/css">
+<script language="javascript" type="text/javascript" src="{{ site.baseurl }}/static/fancybox/jquery.fancybox.pack.js"></script>
+
+<script type="text/javascript">
+$(document).ready(function() {
+  $(".various").fancybox({
+maxWidth    : 800,
+                   maxHeight   : 600,
+                   fitToView   : true,
+                   autoSize    : true,
+                   beforeLoad  : function(){
+                       var url= $(this.element).attr("href");
+                       url = url.replace(new RegExp("watch\\?v=", "i"), 'v/');
+                       url += '?fs=1&autoplay=1';
+                       this.href = url
+                   }
+  });
+});
+</script>
 
 <div id="header" class="mw">
 
@@ -13,6 +32,8 @@ layout: default
 <div class="scroller">
   <div class="item">
     <div class="headlines tc">
+      <!--<iframe allowfullscreen="" frameborder="0" height="200" src="http://www.youtube.com/embed/SgD3RD2Shg4" style="float:right"></iframe>-->
+      <a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=SgD3RD2Shg4" style="float:right"><img src="http://1.bp.blogspot.com/-a4w9qhGaAxE/UnuBETl9rjI/AAAAAAAAHuE/x3ebr4IOfsw/s1600/iconmonstr-video-5-icon.png" height="160" width="320" style="border:solid 1px red"/></a>
       <h1 class="main-headline">Apache Drill</h1>
       <h2 id="sub-headline">Schema-free SQL Query Engine <br class="mobile-break" /> for Hadoop and NoSQL</h2>
       <a href="{{ site.baseurl }}/download/" class="download-headline btn btn-1 btn-1c"><span>DOWNLOAD NOW</span></a>

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/blank.gif
----------------------------------------------------------------------
diff --git a/static/fancybox/blank.gif b/static/fancybox/blank.gif
new file mode 100755
index 0000000..35d42e8
Binary files /dev/null and b/static/fancybox/blank.gif differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/fancybox_loading.gif
----------------------------------------------------------------------
diff --git a/static/fancybox/fancybox_loading.gif b/static/fancybox/fancybox_loading.gif
new file mode 100755
index 0000000..a03a40c
Binary files /dev/null and b/static/fancybox/fancybox_loading.gif differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/fancybox_loading@2x.gif
----------------------------------------------------------------------
diff --git a/static/fancybox/fancybox_loading@2x.gif b/static/fancybox/fancybox_loading@2x.gif
new file mode 100755
index 0000000..9205aeb
Binary files /dev/null and b/static/fancybox/fancybox_loading@2x.gif differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/fancybox_overlay.png
----------------------------------------------------------------------
diff --git a/static/fancybox/fancybox_overlay.png b/static/fancybox/fancybox_overlay.png
new file mode 100755
index 0000000..a439139
Binary files /dev/null and b/static/fancybox/fancybox_overlay.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/fancybox_sprite.png
----------------------------------------------------------------------
diff --git a/static/fancybox/fancybox_sprite.png b/static/fancybox/fancybox_sprite.png
new file mode 100755
index 0000000..fd8d5ca
Binary files /dev/null and b/static/fancybox/fancybox_sprite.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/fancybox_sprite@2x.png
----------------------------------------------------------------------
diff --git a/static/fancybox/fancybox_sprite@2x.png b/static/fancybox/fancybox_sprite@2x.png
new file mode 100755
index 0000000..d0e4779
Binary files /dev/null and b/static/fancybox/fancybox_sprite@2x.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/helpers/fancybox_buttons.png
----------------------------------------------------------------------
diff --git a/static/fancybox/helpers/fancybox_buttons.png b/static/fancybox/helpers/fancybox_buttons.png
new file mode 100755
index 0000000..0787207
Binary files /dev/null and b/static/fancybox/helpers/fancybox_buttons.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/helpers/jquery.fancybox-buttons.css
----------------------------------------------------------------------
diff --git a/static/fancybox/helpers/jquery.fancybox-buttons.css b/static/fancybox/helpers/jquery.fancybox-buttons.css
new file mode 100755
index 0000000..a26273a
--- /dev/null
+++ b/static/fancybox/helpers/jquery.fancybox-buttons.css
@@ -0,0 +1,97 @@
+#fancybox-buttons {
+	position: fixed;
+	left: 0;
+	width: 100%;
+	z-index: 8050;
+}
+
+#fancybox-buttons.top {
+	top: 10px;
+}
+
+#fancybox-buttons.bottom {
+	bottom: 10px;
+}
+
+#fancybox-buttons ul {
+	display: block;
+	width: 166px;
+	height: 30px;
+	margin: 0 auto;
+	padding: 0;
+	list-style: none;
+	border: 1px solid #111;
+	border-radius: 3px;
+	-webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+	   -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+	        box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+	background: rgb(50,50,50);
+	background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51)));
+	background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 );
+}
+
+#fancybox-buttons ul li {
+	float: left;
+	margin: 0;
+	padding: 0;
+}
+
+#fancybox-buttons a {
+	display: block;
+	width: 30px;
+	height: 30px;
+	text-indent: -9999px;
+	background-color: transparent;
+	background-image: url('fancybox_buttons.png');
+	background-repeat: no-repeat;
+	outline: none;
+	opacity: 0.8;
+}
+
+#fancybox-buttons a:hover {
+	opacity: 1;
+}
+
+#fancybox-buttons a.btnPrev {
+	background-position: 5px 0;
+}
+
+#fancybox-buttons a.btnNext {
+	background-position: -33px 0;
+	border-right: 1px solid #3e3e3e;
+}
+
+#fancybox-buttons a.btnPlay {
+	background-position: 0 -30px;
+}
+
+#fancybox-buttons a.btnPlayOn {
+	background-position: -30px -30px;
+}
+
+#fancybox-buttons a.btnToggle {
+	background-position: 3px -60px;
+	border-left: 1px solid #111;
+	border-right: 1px solid #3e3e3e;
+	width: 35px
+}
+
+#fancybox-buttons a.btnToggleOn {
+	background-position: -27px -60px;
+}
+
+#fancybox-buttons a.btnClose {
+	border-left: 1px solid #111;
+	width: 35px;
+	background-position: -56px 0px;
+}
+
+#fancybox-buttons a.btnDisabled {
+	opacity : 0.4;
+	cursor: default;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/helpers/jquery.fancybox-buttons.js
----------------------------------------------------------------------
diff --git a/static/fancybox/helpers/jquery.fancybox-buttons.js b/static/fancybox/helpers/jquery.fancybox-buttons.js
new file mode 100755
index 0000000..fd8b955
--- /dev/null
+++ b/static/fancybox/helpers/jquery.fancybox-buttons.js
@@ -0,0 +1,122 @@
+ /*!
+ * Buttons helper for fancyBox
+ * version: 1.0.5 (Mon, 15 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             buttons: {
+ *                 position : 'top'
+ *             }
+ *         }
+ *     });
+ *
+ */
+(function ($) {
+	//Shortcut for fancyBox object
+	var F = $.fancybox;
+
+	//Add helper object
+	F.helpers.buttons = {
+		defaults : {
+			skipSingle : false, // disables if gallery contains single image
+			position   : 'top', // 'top' or 'bottom'
+			tpl        : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'
+		},
+
+		list : null,
+		buttons: null,
+
+		beforeLoad: function (opts, obj) {
+			//Remove self if gallery do not have at least two items
+
+			if (opts.skipSingle && obj.group.length < 2) {
+				obj.helpers.buttons = false;
+				obj.closeBtn = true;
+
+				return;
+			}
+
+			//Increase top margin to give space for buttons
+			obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
+		},
+
+		onPlayStart: function () {
+			if (this.buttons) {
+				this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
+			}
+		},
+
+		onPlayEnd: function () {
+			if (this.buttons) {
+				this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
+			}
+		},
+
+		afterShow: function (opts, obj) {
+			var buttons = this.buttons;
+
+			if (!buttons) {
+				this.list = $(opts.tpl).addClass(opts.position).appendTo('body');
+
+				buttons = {
+					prev   : this.list.find('.btnPrev').click( F.prev ),
+					next   : this.list.find('.btnNext').click( F.next ),
+					play   : this.list.find('.btnPlay').click( F.play ),
+					toggle : this.list.find('.btnToggle').click( F.toggle ),
+					close  : this.list.find('.btnClose').click( F.close )
+				}
+			}
+
+			//Prev
+			if (obj.index > 0 || obj.loop) {
+				buttons.prev.removeClass('btnDisabled');
+			} else {
+				buttons.prev.addClass('btnDisabled');
+			}
+
+			//Next / Play
+			if (obj.loop || obj.index < obj.group.length - 1) {
+				buttons.next.removeClass('btnDisabled');
+				buttons.play.removeClass('btnDisabled');
+
+			} else {
+				buttons.next.addClass('btnDisabled');
+				buttons.play.addClass('btnDisabled');
+			}
+
+			this.buttons = buttons;
+
+			this.onUpdate(opts, obj);
+		},
+
+		onUpdate: function (opts, obj) {
+			var toggle;
+
+			if (!this.buttons) {
+				return;
+			}
+
+			toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
+
+			//Size toggle button
+			if (obj.canShrink) {
+				toggle.addClass('btnToggleOn');
+
+			} else if (!obj.canExpand) {
+				toggle.addClass('btnDisabled');
+			}
+		},
+
+		beforeClose: function () {
+			if (this.list) {
+				this.list.remove();
+			}
+
+			this.list    = null;
+			this.buttons = null;
+		}
+	};
+
+}(jQuery));

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/helpers/jquery.fancybox-media.js
----------------------------------------------------------------------
diff --git a/static/fancybox/helpers/jquery.fancybox-media.js b/static/fancybox/helpers/jquery.fancybox-media.js
new file mode 100755
index 0000000..3584c8a
--- /dev/null
+++ b/static/fancybox/helpers/jquery.fancybox-media.js
@@ -0,0 +1,199 @@
+/*!
+ * Media helper for fancyBox
+ * version: 1.0.6 (Fri, 14 Jun 2013)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             media: true
+ *         }
+ *     });
+ *
+ * Set custom URL parameters:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             media: {
+ *                 youtube : {
+ *                     params : {
+ *                         autoplay : 0
+ *                     }
+ *                 }
+ *             }
+ *         }
+ *     });
+ *
+ * Or:
+ *     $(".fancybox").fancybox({,
+ *         helpers : {
+ *             media: true
+ *         },
+ *         youtube : {
+ *             autoplay: 0
+ *         }
+ *     });
+ *
+ *  Supports:
+ *
+ *      Youtube
+ *          http://www.youtube.com/watch?v=opj24KnzrWo
+ *          http://www.youtube.com/embed/opj24KnzrWo
+ *          http://youtu.be/opj24KnzrWo
+ *			http://www.youtube-nocookie.com/embed/opj24KnzrWo
+ *      Vimeo
+ *          http://vimeo.com/40648169
+ *          http://vimeo.com/channels/staffpicks/38843628
+ *          http://vimeo.com/groups/surrealism/videos/36516384
+ *          http://player.vimeo.com/video/45074303
+ *      Metacafe
+ *          http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
+ *          http://www.metacafe.com/watch/7635964/
+ *      Dailymotion
+ *          http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
+ *      Twitvid
+ *          http://twitvid.com/QY7MD
+ *      Twitpic
+ *          http://twitpic.com/7p93st
+ *      Instagram
+ *          http://instagr.am/p/IejkuUGxQn/
+ *          http://instagram.com/p/IejkuUGxQn/
+ *      Google maps
+ *          http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
+ *          http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+ *          http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
+ */
+(function ($) {
+	"use strict";
+
+	//Shortcut for fancyBox object
+	var F = $.fancybox,
+		format = function( url, rez, params ) {
+			params = params || '';
+
+			if ( $.type( params ) === "object" ) {
+				params = $.param(params, true);
+			}
+
+			$.each(rez, function(key, value) {
+				url = url.replace( '$' + key, value || '' );
+			});
+
+			if (params.length) {
+				url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
+			}
+
+			return url;
+		};
+
+	//Add helper object
+	F.helpers.media = {
+		defaults : {
+			youtube : {
+				matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
+				params  : {
+					autoplay    : 1,
+					autohide    : 1,
+					fs          : 1,
+					rel         : 0,
+					hd          : 1,
+					wmode       : 'opaque',
+					enablejsapi : 1
+				},
+				type : 'iframe',
+				url  : '//www.youtube.com/embed/$3'
+			},
+			vimeo : {
+				matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
+				params  : {
+					autoplay      : 1,
+					hd            : 1,
+					show_title    : 1,
+					show_byline   : 1,
+					show_portrait : 0,
+					fullscreen    : 1
+				},
+				type : 'iframe',
+				url  : '//player.vimeo.com/video/$1'
+			},
+			metacafe : {
+				matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
+				params  : {
+					autoPlay : 'yes'
+				},
+				type : 'swf',
+				url  : function( rez, params, obj ) {
+					obj.swf.flashVars = 'playerVars=' + $.param( params, true );
+
+					return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
+				}
+			},
+			dailymotion : {
+				matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+				params  : {
+					additionalInfos : 0,
+					autoStart : 1
+				},
+				type : 'swf',
+				url  : '//www.dailymotion.com/swf/video/$1'
+			},
+			twitvid : {
+				matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
+				params  : {
+					autoplay : 0
+				},
+				type : 'iframe',
+				url  : '//www.twitvid.com/embed.php?guid=$1'
+			},
+			twitpic : {
+				matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
+				type : 'image',
+				url  : '//twitpic.com/show/full/$1/'
+			},
+			instagram : {
+				matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+				type : 'image',
+				url  : '//$1/p/$2/media/?size=l'
+			},
+			google_maps : {
+				matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
+				type : 'iframe',
+				url  : function( rez ) {
+					return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
+				}
+			}
+		},
+
+		beforeLoad : function(opts, obj) {
+			var url   = obj.href || '',
+				type  = false,
+				what,
+				item,
+				rez,
+				params;
+
+			for (what in opts) {
+				if (opts.hasOwnProperty(what)) {
+					item = opts[ what ];
+					rez  = url.match( item.matcher );
+
+					if (rez) {
+						type   = item.type;
+						params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
+
+						url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
+
+						break;
+					}
+				}
+			}
+
+			if (type) {
+				obj.href = url;
+				obj.type = type;
+
+				obj.autoHeight = false;
+			}
+		}
+	};
+
+}(jQuery));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/helpers/jquery.fancybox-thumbs.css
----------------------------------------------------------------------
diff --git a/static/fancybox/helpers/jquery.fancybox-thumbs.css b/static/fancybox/helpers/jquery.fancybox-thumbs.css
new file mode 100755
index 0000000..63d2943
--- /dev/null
+++ b/static/fancybox/helpers/jquery.fancybox-thumbs.css
@@ -0,0 +1,55 @@
+#fancybox-thumbs {
+	position: fixed;
+	left: 0;
+	width: 100%;
+	overflow: hidden;
+	z-index: 8050;
+}
+
+#fancybox-thumbs.bottom {
+	bottom: 2px;
+}
+
+#fancybox-thumbs.top {
+	top: 2px;
+}
+
+#fancybox-thumbs ul {
+	position: relative;
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+#fancybox-thumbs ul li {
+	float: left;
+	padding: 1px;
+	opacity: 0.5;
+}
+
+#fancybox-thumbs ul li.active {
+	opacity: 0.75;
+	padding: 0;
+	border: 1px solid #fff;
+}
+
+#fancybox-thumbs ul li:hover {
+	opacity: 1;
+}
+
+#fancybox-thumbs ul li a {
+	display: block;
+	position: relative;
+	overflow: hidden;
+	border: 1px solid #222;
+	background: #111;
+	outline: none;
+}
+
+#fancybox-thumbs ul li img {
+	display: block;
+	position: relative;
+	border: 0;
+	padding: 0;
+	max-width: none;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/helpers/jquery.fancybox-thumbs.js
----------------------------------------------------------------------
diff --git a/static/fancybox/helpers/jquery.fancybox-thumbs.js b/static/fancybox/helpers/jquery.fancybox-thumbs.js
new file mode 100755
index 0000000..5db3d4a
--- /dev/null
+++ b/static/fancybox/helpers/jquery.fancybox-thumbs.js
@@ -0,0 +1,162 @@
+ /*!
+ * Thumbnail helper for fancyBox
+ * version: 1.0.7 (Mon, 01 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             thumbs: {
+ *                 width  : 50,
+ *                 height : 50
+ *             }
+ *         }
+ *     });
+ *
+ */
+(function ($) {
+	//Shortcut for fancyBox object
+	var F = $.fancybox;
+
+	//Add helper object
+	F.helpers.thumbs = {
+		defaults : {
+			width    : 50,       // thumbnail width
+			height   : 50,       // thumbnail height
+			position : 'bottom', // 'top' or 'bottom'
+			source   : function ( item ) {  // function to obtain the URL of the thumbnail image
+				var href;
+
+				if (item.element) {
+					href = $(item.element).find('img').attr('src');
+				}
+
+				if (!href && item.type === 'image' && item.href) {
+					href = item.href;
+				}
+
+				return href;
+			}
+		},
+
+		wrap  : null,
+		list  : null,
+		width : 0,
+
+		init: function (opts, obj) {
+			var that = this,
+				list,
+				thumbWidth  = opts.width,
+				thumbHeight = opts.height,
+				thumbSource = opts.source;
+
+			//Build list structure
+			list = '';
+
+			for (var n = 0; n < obj.group.length; n++) {
+				list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>';
+			}
+
+			this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body');
+			this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap);
+
+			//Load each thumbnail
+			$.each(obj.group, function (i) {
+				var href = thumbSource( obj.group[ i ] );
+
+				if (!href) {
+					return;
+				}
+
+				$("<img />").load(function () {
+					var width  = this.width,
+						height = this.height,
+						widthRatio, heightRatio, parent;
+
+					if (!that.list || !width || !height) {
+						return;
+					}
+
+					//Calculate thumbnail width/height and center it
+					widthRatio  = width / thumbWidth;
+					heightRatio = height / thumbHeight;
+
+					parent = that.list.children().eq(i).find('a');
+
+					if (widthRatio >= 1 && heightRatio >= 1) {
+						if (widthRatio > heightRatio) {
+							width  = Math.floor(width / heightRatio);
+							height = thumbHeight;
+
+						} else {
+							width  = thumbWidth;
+							height = Math.floor(height / widthRatio);
+						}
+					}
+
+					$(this).css({
+						width  : width,
+						height : height,
+						top    : Math.floor(thumbHeight / 2 - height / 2),
+						left   : Math.floor(thumbWidth / 2 - width / 2)
+					});
+
+					parent.width(thumbWidth).height(thumbHeight);
+
+					$(this).hide().appendTo(parent).fadeIn(300);
+
+				}).attr('src', href);
+			});
+
+			//Set initial width
+			this.width = this.list.children().eq(0).outerWidth(true);
+
+			this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
+		},
+
+		beforeLoad: function (opts, obj) {
+			//Remove self if gallery do not have at least two items
+			if (obj.group.length < 2) {
+				obj.helpers.thumbs = false;
+
+				return;
+			}
+
+			//Increase bottom margin to give space for thumbs
+			obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
+		},
+
+		afterShow: function (opts, obj) {
+			//Check if exists and create or update list
+			if (this.list) {
+				this.onUpdate(opts, obj);
+
+			} else {
+				this.init(opts, obj);
+			}
+
+			//Set active element
+			this.list.children().removeClass('active').eq(obj.index).addClass('active');
+		},
+
+		//Center list
+		onUpdate: function (opts, obj) {
+			if (this.list) {
+				this.list.stop(true).animate({
+					'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
+				}, 150);
+			}
+		},
+
+		beforeClose: function () {
+			if (this.wrap) {
+				this.wrap.remove();
+			}
+
+			this.wrap  = null;
+			this.list  = null;
+			this.width = 0;
+		}
+	}
+
+}(jQuery));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/jquery.fancybox.css
----------------------------------------------------------------------
diff --git a/static/fancybox/jquery.fancybox.css b/static/fancybox/jquery.fancybox.css
new file mode 100755
index 0000000..367890a
--- /dev/null
+++ b/static/fancybox/jquery.fancybox.css
@@ -0,0 +1,274 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+.fancybox-wrap,
+.fancybox-skin,
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-image,
+.fancybox-wrap iframe,
+.fancybox-wrap object,
+.fancybox-nav,
+.fancybox-nav span,
+.fancybox-tmp
+{
+	padding: 0;
+	margin: 0;
+	border: 0;
+	outline: none;
+	vertical-align: top;
+}
+
+.fancybox-wrap {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 8020;
+}
+
+.fancybox-skin {
+	position: relative;
+	background: #f9f9f9;
+	color: #444;
+	text-shadow: none;
+	-webkit-border-radius: 4px;
+	   -moz-border-radius: 4px;
+	        border-radius: 4px;
+}
+
+.fancybox-opened {
+	z-index: 8030;
+}
+
+.fancybox-opened .fancybox-skin {
+	-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+	   -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+	        box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+}
+
+.fancybox-outer, .fancybox-inner {
+	position: relative;
+}
+
+.fancybox-inner {
+	overflow: hidden;
+}
+
+.fancybox-type-iframe .fancybox-inner {
+	-webkit-overflow-scrolling: touch;
+}
+
+.fancybox-error {
+	color: #444;
+	font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+	margin: 0;
+	padding: 15px;
+	white-space: nowrap;
+}
+
+.fancybox-image, .fancybox-iframe {
+	display: block;
+	width: 100%;
+	height: 100%;
+}
+
+.fancybox-image {
+	max-width: 100%;
+	max-height: 100%;
+}
+
+#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+	background-image: url('fancybox_sprite.png');
+}
+
+#fancybox-loading {
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	margin-top: -22px;
+	margin-left: -22px;
+	background-position: 0 -108px;
+	opacity: 0.8;
+	cursor: pointer;
+	z-index: 8060;
+}
+
+#fancybox-loading div {
+	width: 44px;
+	height: 44px;
+	background: url('fancybox_loading.gif') center center no-repeat;
+}
+
+.fancybox-close {
+	position: absolute;
+	top: -18px;
+	right: -18px;
+	width: 36px;
+	height: 36px;
+	cursor: pointer;
+	z-index: 8040;
+}
+
+.fancybox-nav {
+	position: absolute;
+	top: 0;
+	width: 40%;
+	height: 100%;
+	cursor: pointer;
+	text-decoration: none;
+	background: transparent url('blank.gif'); /* helps IE */
+	-webkit-tap-highlight-color: rgba(0,0,0,0);
+	z-index: 8040;
+}
+
+.fancybox-prev {
+	left: 0;
+}
+
+.fancybox-next {
+	right: 0;
+}
+
+.fancybox-nav span {
+	position: absolute;
+	top: 50%;
+	width: 36px;
+	height: 34px;
+	margin-top: -18px;
+	cursor: pointer;
+	z-index: 8040;
+	visibility: hidden;
+}
+
+.fancybox-prev span {
+	left: 10px;
+	background-position: 0 -36px;
+}
+
+.fancybox-next span {
+	right: 10px;
+	background-position: 0 -72px;
+}
+
+.fancybox-nav:hover span {
+	visibility: visible;
+}
+
+.fancybox-tmp {
+	position: absolute;
+	top: -99999px;
+	left: -99999px;
+	visibility: hidden;
+	max-width: 99999px;
+	max-height: 99999px;
+	overflow: visible !important;
+}
+
+/* Overlay helper */
+
+.fancybox-lock {
+    overflow: hidden !important;
+    width: auto;
+}
+
+.fancybox-lock body {
+    overflow: hidden !important;
+}
+
+.fancybox-lock-test {
+    overflow-y: hidden !important;
+}
+
+.fancybox-overlay {
+	position: absolute;
+	top: 0;
+	left: 0;
+	overflow: hidden;
+	display: none;
+	z-index: 8010;
+	background: url('fancybox_overlay.png');
+}
+
+.fancybox-overlay-fixed {
+	position: fixed;
+	bottom: 0;
+	right: 0;
+}
+
+.fancybox-lock .fancybox-overlay {
+	overflow: auto;
+	overflow-y: scroll;
+}
+
+/* Title helper */
+
+.fancybox-title {
+	visibility: hidden;
+	font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+	position: relative;
+	text-shadow: none;
+	z-index: 8050;
+}
+
+.fancybox-opened .fancybox-title {
+	visibility: visible;
+}
+
+.fancybox-title-float-wrap {
+	position: absolute;
+	bottom: 0;
+	right: 50%;
+	margin-bottom: -35px;
+	z-index: 8050;
+	text-align: center;
+}
+
+.fancybox-title-float-wrap .child {
+	display: inline-block;
+	margin-right: -100%;
+	padding: 2px 20px;
+	background: transparent; /* Fallback for web browsers that doesn't support RGBa */
+	background: rgba(0, 0, 0, 0.8);
+	-webkit-border-radius: 15px;
+	   -moz-border-radius: 15px;
+	        border-radius: 15px;
+	text-shadow: 0 1px 2px #222;
+	color: #FFF;
+	font-weight: bold;
+	line-height: 24px;
+	white-space: nowrap;
+}
+
+.fancybox-title-outside-wrap {
+	position: relative;
+	margin-top: 10px;
+	color: #fff;
+}
+
+.fancybox-title-inside-wrap {
+	padding-top: 10px;
+}
+
+.fancybox-title-over-wrap {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	color: #fff;
+	padding: 10px;
+	background: #000;
+	background: rgba(0, 0, 0, .8);
+}
+
+/*Retina graphics!*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+	   only screen and (min--moz-device-pixel-ratio: 1.5),
+	   only screen and (min-device-pixel-ratio: 1.5){
+
+	#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+		background-image: url('fancybox_sprite@2x.png');
+		background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
+	}
+
+	#fancybox-loading div {
+		background-image: url('fancybox_loading@2x.gif');
+		background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/8da3f222/static/fancybox/jquery.fancybox.js
----------------------------------------------------------------------
diff --git a/static/fancybox/jquery.fancybox.js b/static/fancybox/jquery.fancybox.js
new file mode 100755
index 0000000..e8e1987
--- /dev/null
+++ b/static/fancybox/jquery.fancybox.js
@@ -0,0 +1,2020 @@
+/*!
+ * fancyBox - jQuery Plugin
+ * version: 2.1.5 (Fri, 14 Jun 2013)
+ * @requires jQuery v1.6 or later
+ *
+ * Examples at http://fancyapps.com/fancybox/
+ * License: www.fancyapps.com/fancybox/#license
+ *
+ * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
+ *
+ */
+
+(function (window, document, $, undefined) {
+	"use strict";
+
+	var H = $("html"),
+		W = $(window),
+		D = $(document),
+		F = $.fancybox = function () {
+			F.open.apply( this, arguments );
+		},
+		IE =  navigator.userAgent.match(/msie/i),
+		didUpdate	= null,
+		isTouch		= document.createTouch !== undefined,
+
+		isQuery	= function(obj) {
+			return obj && obj.hasOwnProperty && obj instanceof $;
+		},
+		isString = function(str) {
+			return str && $.type(str) === "string";
+		},
+		isPercentage = function(str) {
+			return isString(str) && str.indexOf('%') > 0;
+		},
+		isScrollable = function(el) {
+			return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));
+		},
+		getScalar = function(orig, dim) {
+			var value = parseInt(orig, 10) || 0;
+
+			if (dim && isPercentage(orig)) {
+				value = F.getViewport()[ dim ] / 100 * value;
+			}
+
+			return Math.ceil(value);
+		},
+		getValue = function(value, dim) {
+			return getScalar(value, dim) + 'px';
+		};
+
+	$.extend(F, {
+		// The current version of fancyBox
+		version: '2.1.5',
+
+		defaults: {
+			padding : 15,
+			margin  : 20,
+
+			width     : 800,
+			height    : 600,
+			minWidth  : 100,
+			minHeight : 100,
+			maxWidth  : 9999,
+			maxHeight : 9999,
+			pixelRatio: 1, // Set to 2 for retina display support
+
+			autoSize   : true,
+			autoHeight : false,
+			autoWidth  : false,
+
+			autoResize  : true,
+			autoCenter  : !isTouch,
+			fitToView   : true,
+			aspectRatio : false,
+			topRatio    : 0.5,
+			leftRatio   : 0.5,
+
+			scrolling : 'auto', // 'auto', 'yes' or 'no'
+			wrapCSS   : '',
+
+			arrows     : true,
+			closeBtn   : true,
+			closeClick : false,
+			nextClick  : false,
+			mouseWheel : true,
+			autoPlay   : false,
+			playSpeed  : 3000,
+			preload    : 3,
+			modal      : false,
+			loop       : true,
+
+			ajax  : {
+				dataType : 'html',
+				headers  : { 'X-fancyBox': true }
+			},
+			iframe : {
+				scrolling : 'auto',
+				preload   : true
+			},
+			swf : {
+				wmode: 'transparent',
+				allowfullscreen   : 'true',
+				allowscriptaccess : 'always'
+			},
+
+			keys  : {
+				next : {
+					13 : 'left', // enter
+					34 : 'up',   // page down
+					39 : 'left', // right arrow
+					40 : 'up'    // down arrow
+				},
+				prev : {
+					8  : 'right',  // backspace
+					33 : 'down',   // page up
+					37 : 'right',  // left arrow
+					38 : 'down'    // up arrow
+				},
+				close  : [27], // escape key
+				play   : [32], // space - start/stop slideshow
+				toggle : [70]  // letter "f" - toggle fullscreen
+			},
+
+			direction : {
+				next : 'left',
+				prev : 'right'
+			},
+
+			scrollOutside  : true,
+
+			// Override some properties
+			index   : 0,
+			type    : null,
+			href    : null,
+			content : null,
+			title   : null,
+
+			// HTML templates
+			tpl: {
+				wrap     : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',
+				image    : '<img class="fancybox-image" src="{href}" alt="" />',
+				iframe   : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>',
+				error    : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
+				closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',
+				next     : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
+				prev     : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
+			},
+
+			// Properties for each animation type
+			// Opening fancyBox
+			openEffect  : 'fade', // 'elastic', 'fade' or 'none'
+			openSpeed   : 250,
+			openEasing  : 'swing',
+			openOpacity : true,
+			openMethod  : 'zoomIn',
+
+			// Closing fancyBox
+			closeEffect  : 'fade', // 'elastic', 'fade' or 'none'
+			closeSpeed   : 250,
+			closeEasing  : 'swing',
+			closeOpacity : true,
+			closeMethod  : 'zoomOut',
+
+			// Changing next gallery item
+			nextEffect : 'elastic', // 'elastic', 'fade' or 'none'
+			nextSpeed  : 250,
+			nextEasing : 'swing',
+			nextMethod : 'changeIn',
+
+			// Changing previous gallery item
+			prevEffect : 'elastic', // 'elastic', 'fade' or 'none'
+			prevSpeed  : 250,
+			prevEasing : 'swing',
+			prevMethod : 'changeOut',
+
+			// Enable default helpers
+			helpers : {
+				overlay : true,
+				title   : true
+			},
+
+			// Callbacks
+			onCancel     : $.noop, // If canceling
+			beforeLoad   : $.noop, // Before loading
+			afterLoad    : $.noop, // After loading
+			beforeShow   : $.noop, // Before changing in current item
+			afterShow    : $.noop, // After opening
+			beforeChange : $.noop, // Before changing gallery item
+			beforeClose  : $.noop, // Before closing
+			afterClose   : $.noop  // After closing
+		},
+
+		//Current state
+		group    : {}, // Selected group
+		opts     : {}, // Group options
+		previous : null,  // Previous element
+		coming   : null,  // Element being loaded
+		current  : null,  // Currently loaded element
+		isActive : false, // Is activated
+		isOpen   : false, // Is currently open
+		isOpened : false, // Have been fully opened at least once
+
+		wrap  : null,
+		skin  : null,
+		outer : null,
+		inner : null,
+
+		player : {
+			timer    : null,
+			isActive : false
+		},
+
+		// Loaders
+		ajaxLoad   : null,
+		imgPreload : null,
+
+		// Some collections
+		transitions : {},
+		helpers     : {},
+
+		/*
+		 *	Static methods
+		 */
+
+		open: function (group, opts) {
+			if (!group) {
+				return;
+			}
+
+			if (!$.isPlainObject(opts)) {
+				opts = {};
+			}
+
+			// Close if already active
+			if (false === F.close(true)) {
+				return;
+			}
+
+			// Normalize group
+			if (!$.isArray(group)) {
+				group = isQuery(group) ? $(group).get() : [group];
+			}
+
+			// Recheck if the type of each element is `object` and set content type (image, ajax, etc)
+			$.each(group, function(i, element) {
+				var obj = {},
+					href,
+					title,
+					content,
+					type,
+					rez,
+					hrefParts,
+					selector;
+
+				if ($.type(element) === "object") {
+					// Check if is DOM element
+					if (element.nodeType) {
+						element = $(element);
+					}
+
+					if (isQuery(element)) {
+						obj = {
+							href    : element.data('fancybox-href') || element.attr('href'),
+							title   : element.data('fancybox-title') || element.attr('title'),
+							isDom   : true,
+							element : element
+						};
+
+						if ($.metadata) {
+							$.extend(true, obj, element.metadata());
+						}
+
+					} else {
+						obj = element;
+					}
+				}
+
+				href  = opts.href  || obj.href || (isString(element) ? element : null);
+				title = opts.title !== undefined ? opts.title : obj.title || '';
+
+				content = opts.content || obj.content;
+				type    = content ? 'html' : (opts.type  || obj.type);
+
+				if (!type && obj.isDom) {
+					type = element.data('fancybox-type');
+
+					if (!type) {
+						rez  = element.prop('class').match(/fancybox\.(\w+)/);
+						type = rez ? rez[1] : null;
+					}
+				}
+
+				if (isString(href)) {
+					// Try to guess the content type
+					if (!type) {
+						if (F.isImage(href)) {
+							type = 'image';
+
+						} else if (F.isSWF(href)) {
+							type = 'swf';
+
+						} else if (href.charAt(0) === '#') {
+							type = 'inline';
+
+						} else if (isString(element)) {
+							type    = 'html';
+							content = element;
+						}
+					}
+
+					// Split url into two pieces with source url and content selector, e.g,
+					// "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
+					if (type === 'ajax') {
+						hrefParts = href.split(/\s+/, 2);
+						href      = hrefParts.shift();
+						selector  = hrefParts.shift();
+					}
+				}
+
+				if (!content) {
+					if (type === 'inline') {
+						if (href) {
+							content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
+
+						} else if (obj.isDom) {
+							content = element;
+						}
+
+					} else if (type === 'html') {
+						content = href;
+
+					} else if (!type && !href && obj.isDom) {
+						type    = 'inline';
+						content = element;
+					}
+				}
+
+				$.extend(obj, {
+					href     : href,
+					type     : type,
+					content  : content,
+					title    : title,
+					selector : selector
+				});
+
+				group[ i ] = obj;
+			});
+
+			// Extend the defaults
+			F.opts = $.extend(true, {}, F.defaults, opts);
+
+			// All options are merged recursive except keys
+			if (opts.keys !== undefined) {
+				F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
+			}
+
+			F.group = group;
+
+			return F._start(F.opts.index);
+		},
+
+		// Cancel image loading or abort ajax request
+		cancel: function () {
+			var coming = F.coming;
+
+			if (!coming || false === F.trigger('onCancel')) {
+				return;
+			}
+
+			F.hideLoading();
+
+			if (F.ajaxLoad) {
+				F.ajaxLoad.abort();
+			}
+
+			F.ajaxLoad = null;
+
+			if (F.imgPreload) {
+				F.imgPreload.onload = F.imgPreload.onerror = null;
+			}
+
+			if (coming.wrap) {
+				coming.wrap.stop(true, true).trigger('onReset').remove();
+			}
+
+			F.coming = null;
+
+			// If the first item has been canceled, then clear everything
+			if (!F.current) {
+				F._afterZoomOut( coming );
+			}
+		},
+
+		// Start closing animation if is open; remove immediately if opening/closing
+		close: function (event) {
+			F.cancel();
+
+			if (false === F.trigger('beforeClose')) {
+				return;
+			}
+
+			F.unbindEvents();
+
+			if (!F.isActive) {
+				return;
+			}
+
+			if (!F.isOpen || event === true) {
+				$('.fancybox-wrap').stop(true).trigger('onReset').remove();
+
+				F._afterZoomOut();
+
+			} else {
+				F.isOpen = F.isOpened = false;
+				F.isClosing = true;
+
+				$('.fancybox-item, .fancybox-nav').remove();
+
+				F.wrap.stop(true, true).removeClass('fancybox-opened');
+
+				F.transitions[ F.current.closeMethod ]();
+			}
+		},
+
+		// Manage slideshow:
+		//   $.fancybox.play(); - toggle slideshow
+		//   $.fancybox.play( true ); - start
+		//   $.fancybox.play( false ); - stop
+		play: function ( action ) {
+			var clear = function () {
+					clearTimeout(F.player.timer);
+				},
+				set = function () {
+					clear();
+
+					if (F.current && F.player.isActive) {
+						F.player.timer = setTimeout(F.next, F.current.playSpeed);
+					}
+				},
+				stop = function () {
+					clear();
+
+					D.unbind('.player');
+
+					F.player.isActive = false;
+
+					F.trigger('onPlayEnd');
+				},
+				start = function () {
+					if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
+						F.player.isActive = true;
+
+						D.bind({
+							'onCancel.player beforeClose.player' : stop,
+							'onUpdate.player'   : set,
+							'beforeLoad.player' : clear
+						});
+
+						set();
+
+						F.trigger('onPlayStart');
+					}
+				};
+
+			if (action === true || (!F.player.isActive && action !== false)) {
+				start();
+			} else {
+				stop();
+			}
+		},
+
+		// Navigate to next gallery item
+		next: function ( direction ) {
+			var current = F.current;
+
+			if (current) {
+				if (!isString(direction)) {
+					direction = current.direction.next;
+				}
+
+				F.jumpto(current.index + 1, direction, 'next');
+			}
+		},
+
+		// Navigate to previous gallery item
+		prev: function ( direction ) {
+			var current = F.current;
+
+			if (current) {
+				if (!isString(direction)) {
+					direction = current.direction.prev;
+				}
+
+				F.jumpto(current.index - 1, direction, 'prev');
+			}
+		},
+
+		// Navigate to gallery item by index
+		jumpto: function ( index, direction, router ) {
+			var current = F.current;
+
+			if (!current) {
+				return;
+			}
+
+			index = getScalar(index);
+
+			F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];
+			F.router    = router || 'jumpto';
+
+			if (current.loop) {
+				if (index < 0) {
+					index = current.group.length + (index % current.group.length);
+				}
+
+				index = index % current.group.length;
+			}
+
+			if (current.group[ index ] !== undefined) {
+				F.cancel();
+
+				F._start(index);
+			}
+		},
+
+		// Center inside viewport and toggle position type to fixed or absolute if needed
+		reposition: function (e, onlyAbsolute) {
+			var current = F.current,
+				wrap    = current ? current.wrap : null,
+				pos;
+
+			if (wrap) {
+				pos = F._getPosition(onlyAbsolute);
+
+				if (e && e.type === 'scroll') {
+					delete pos.position;
+
+					wrap.stop(true, true).animate(pos, 200);
+
+				} else {
+					wrap.css(pos);
+
+					current.pos = $.extend({}, current.dim, pos);
+				}
+			}
+		},
+
+		update: function (e) {
+			var type = (e && e.type),
+				anyway = !type || type === 'orientationchange';
+
+			if (anyway) {
+				clearTimeout(didUpdate);
+
+				didUpdate = null;
+			}
+
+			if (!F.isOpen || didUpdate) {
+				return;
+			}
+
+			didUpdate = setTimeout(function() {
+				var current = F.current;
+
+				if (!current || F.isClosing) {
+					return;
+				}
+
+				F.wrap.removeClass('fancybox-tmp');
+
+				if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
+					F._setDimension();
+				}
+
+				if (!(type === 'scroll' && current.canShrink)) {
+					F.reposition(e);
+				}
+
+				F.trigger('onUpdate');
+
+				didUpdate = null;
+
+			}, (anyway && !isTouch ? 0 : 300));
+		},
+
+		// Shrink content to fit inside viewport or restore if resized
+		toggle: function ( action ) {
+			if (F.isOpen) {
+				F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;
+
+				// Help browser to restore document dimensions
+				if (isTouch) {
+					F.wrap.removeAttr('style').addClass('fancybox-tmp');
+
+					F.trigger('onUpdate');
+				}
+
+				F.update();
+			}
+		},
+
+		hideLoading: function () {
+			D.unbind('.loading');
+
+			$('#fancybox-loading').remove();
+		},
+
+		showLoading: function () {
+			var el, viewport;
+
+			F.hideLoading();
+
+			el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
+
+			// If user will press the escape-button, the request will be canceled
+			D.bind('keydown.loading', function(e) {
+				if ((e.which || e.keyCode) === 27) {
+					e.preventDefault();
+
+					F.cancel();
+				}
+			});
+
+			if (!F.defaults.fixed) {
+				viewport = F.getViewport();
+
+				el.css({
+					position : 'absolute',
+					top  : (viewport.h * 0.5) + viewport.y,
+					left : (viewport.w * 0.5) + viewport.x
+				});
+			}
+		},
+
+		getViewport: function () {
+			var locked = (F.current && F.current.locked) || false,
+				rez    = {
+					x: W.scrollLeft(),
+					y: W.scrollTop()
+				};
+
+			if (locked) {
+				rez.w = locked[0].clientWidth;
+				rez.h = locked[0].clientHeight;
+
+			} else {
+				// See http://bugs.jquery.com/ticket/6724
+				rez.w = isTouch && window.innerWidth  ? window.innerWidth  : W.width();
+				rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();
+			}
+
+			return rez;
+		},
+
+		// Unbind the keyboard / clicking actions
+		unbindEvents: function () {
+			if (F.wrap && isQuery(F.wrap)) {
+				F.wrap.unbind('.fb');
+			}
+
+			D.unbind('.fb');
+			W.unbind('.fb');
+		},
+
+		bindEvents: function () {
+			var current = F.current,
+				keys;
+
+			if (!current) {
+				return;
+			}
+
+			// Changing document height on iOS devices triggers a 'resize' event,
+			// that can change document height... repeating infinitely
+			W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);
+
+			keys = current.keys;
+
+			if (keys) {
+				D.bind('keydown.fb', function (e) {
+					var code   = e.which || e.keyCode,
+						target = e.target || e.srcElement;
+
+					// Skip esc key if loading, because showLoading will cancel preloading
+					if (code === 27 && F.coming) {
+						return false;
+					}
+
+					// Ignore key combinations and key events within form elements
+					if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
+						$.each(keys, function(i, val) {
+							if (current.group.length > 1 && val[ code ] !== undefined) {
+								F[ i ]( val[ code ] );
+
+								e.preventDefault();
+								return false;
+							}
+
+							if ($.inArray(code, val) > -1) {
+								F[ i ] ();
+
+								e.preventDefault();
+								return false;
+							}
+						});
+					}
+				});
+			}
+
+			if ($.fn.mousewheel && current.mouseWheel) {
+				F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {
+					var target = e.target || null,
+						parent = $(target),
+						canScroll = false;
+
+					while (parent.length) {
+						if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
+							break;
+						}
+
+						canScroll = isScrollable( parent[0] );
+						parent    = $(parent).parent();
+					}
+
+					if (delta !== 0 && !canScroll) {
+						if (F.group.length > 1 && !current.canShrink) {
+							if (deltaY > 0 || deltaX > 0) {
+								F.prev( deltaY > 0 ? 'down' : 'left' );
+
+							} else if (deltaY < 0 || deltaX < 0) {
+								F.next( deltaY < 0 ? 'up' : 'right' );
+							}
+
+							e.preventDefault();
+						}
+					}
+				});
+			}
+		},
+
+		trigger: function (event, o) {
+			var ret, obj = o || F.coming || F.current;
+
+			if (!obj) {
+				return;
+			}
+
+			if ($.isFunction( obj[event] )) {
+				ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
+			}
+
+			if (ret === false) {
+				return false;
+			}
+
+			if (obj.helpers) {
+				$.each(obj.helpers, function (helper, opts) {
+					if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
+						F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);
+					}
+				});
+			}
+
+			D.trigger(event);
+		},
+
+		isImage: function (str) {
+			return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);
+		},
+
+		isSWF: function (str) {
+			return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);
+		},
+
+		_start: function (index) {
+			var coming = {},
+				obj,
+				href,
+				type,
+				margin,
+				padding;
+
+			index = getScalar( index );
+			obj   = F.group[ index ] || null;
+
+			if (!obj) {
+				return false;
+			}
+
+			coming = $.extend(true, {}, F.opts, obj);
+
+			// Convert margin and padding properties to array - top, right, bottom, left
+			margin  = coming.margin;
+			padding = coming.padding;
+
+			if ($.type(margin) === 'number') {
+				coming.margin = [margin, margin, margin, margin];
+			}
+
+			if ($.type(padding) === 'number') {
+				coming.padding = [padding, padding, padding, padding];
+			}
+
+			// 'modal' propery is just a shortcut
+			if (coming.modal) {
+				$.extend(true, coming, {
+					closeBtn   : false,
+					closeClick : false,
+					nextClick  : false,
+					arrows     : false,
+					mouseWheel : false,
+					keys       : null,
+					helpers: {
+						overlay : {
+							closeClick : false
+						}
+					}
+				});
+			}
+
+			// 'autoSize' property is a shortcut, too
+			if (coming.autoSize) {
+				coming.autoWidth = coming.autoHeight = true;
+			}
+
+			if (coming.width === 'auto') {
+				coming.autoWidth = true;
+			}
+
+			if (coming.height === 'auto') {
+				coming.autoHeight = true;
+			}
+
+			/*
+			 * Add reference to the group, so it`s possible to access from callbacks, example:
+			 * afterLoad : function() {
+			 *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
+			 * }
+			 */
+
+			coming.group  = F.group;
+			coming.index  = index;
+
+			// Give a chance for callback or helpers to update coming item (type, title, etc)
+			F.coming = coming;
+
+			if (false === F.trigger('beforeLoad')) {
+				F.coming = null;
+
+				return;
+			}
+
+			type = coming.type;
+			href = coming.href;
+
+			if (!type) {
+				F.coming = null;
+
+				//If we can not determine content type then drop silently or display next/prev item if looping through gallery
+				if (F.current && F.router && F.router !== 'jumpto') {
+					F.current.index = index;
+
+					return F[ F.router ]( F.direction );
+				}
+
+				return false;
+			}
+
+			F.isActive = true;
+
+			if (type === 'image' || type === 'swf') {
+				coming.autoHeight = coming.autoWidth = false;
+				coming.scrolling  = 'visible';
+			}
+
+			if (type === 'image') {
+				coming.aspectRatio = true;
+			}
+
+			if (type === 'iframe' && isTouch) {
+				coming.scrolling = 'scroll';
+			}
+
+			// Build the neccessary markup
+			coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );
+
+			$.extend(coming, {
+				skin  : $('.fancybox-skin',  coming.wrap),
+				outer : $('.fancybox-outer', coming.wrap),
+				inner : $('.fancybox-inner', coming.wrap)
+			});
+
+			$.each(["Top", "Right", "Bottom", "Left"], function(i, v) {
+				coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
+			});
+
+			F.trigger('onReady');
+
+			// Check before try to load; 'inline' and 'html' types need content, others - href
+			if (type === 'inline' || type === 'html') {
+				if (!coming.content || !coming.content.length) {
+					return F._error( 'content' );
+				}
+
+			} else if (!href) {
+				return F._error( 'href' );
+			}
+
+			if (type === 'image') {
+				F._loadImage();
+
+			} else if (type === 'ajax') {
+				F._loadAjax();
+
+			} else if (type === 'iframe') {
+				F._loadIframe();
+
+			} else {
+				F._afterLoad();
+			}
+		},
+
+		_error: function ( type ) {
+			$.extend(F.coming, {
+				type       : 'html',
+				autoWidth  : true,
+				autoHeight : true,
+				minWidth   : 0,
+				minHeight  : 0,
+				scrolling  : 'no',
+				hasError   : type,
+				content    : F.coming.tpl.error
+			});
+
+			F._afterLoad();
+		},
+
+		_loadImage: function () {
+			// Reset preload image so it is later possible to check "complete" property
+			var img = F.imgPreload = new Image();
+
+			img.onload = function () {
+				this.onload = this.onerror = null;
+
+				F.coming.width  = this.width / F.opts.pixelRatio;
+				F.coming.height = this.height / F.opts.pixelRatio;
+
+				F._afterLoad();
+			};
+
+			img.onerror = function () {
+				this.onload = this.onerror = null;
+
+				F._error( 'image' );
+			};
+
+			img.src = F.coming.href;
+
+			if (img.complete !== true) {
+				F.showLoading();
+			}
+		},
+
+		_loadAjax: function () {
+			var coming = F.coming;
+
+			F.showLoading();
+
+			F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
+				url: coming.href,
+				error: function (jqXHR, textStatus) {
+					if (F.coming && textStatus !== 'abort') {
+						F._error( 'ajax', jqXHR );
+
+					} else {
+						F.hideLoading();
+					}
+				},
+				success: function (data, textStatus) {
+					if (textStatus === 'success') {
+						coming.content = data;
+
+						F._afterLoad();
+					}
+				}
+			}));
+		},
+
+		_loadIframe: function() {
+			var coming = F.coming,
+				iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))
+					.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)
+					.attr('src', coming.href);
+
+			// This helps IE
+			$(coming.wrap).bind('onReset', function () {
+				try {
+					$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();
+				} catch (e) {}
+			});
+
+			if (coming.iframe.preload) {
+				F.showLoading();
+
+				iframe.one('load', function() {
+					$(this).data('ready', 1);
+
+					// iOS will lose scrolling if we resize
+					if (!isTouch) {
+						$(this).bind('load.fb', F.update);
+					}
+
+					// Without this trick:
+					//   - iframe won't scroll on iOS devices
+					//   - IE7 sometimes displays empty iframe
+					$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
+
+					F._afterLoad();
+				});
+			}
+
+			coming.content = iframe.appendTo( coming.inner );
+
+			if (!coming.iframe.preload) {
+				F._afterLoad();
+			}
+		},
+
+		_preloadImages: function() {
+			var group   = F.group,
+				current = F.current,
+				len     = group.length,
+				cnt     = current.preload ? Math.min(current.preload, len - 1) : 0,
+				item,
+				i;
+
+			for (i = 1; i <= cnt; i += 1) {
+				item = group[ (current.index + i ) % len ];
+
+				if (item.type === 'image' && item.href) {
+					new Image().src = item.href;
+				}
+			}
+		},
+
+		_afterLoad: function () {
+			var coming   = F.coming,
+				previous = F.current,
+				placeholder = 'fancybox-placeholder',
+				current,
+				content,
+				type,
+				scrolling,
+				href,
+				embed;
+
+			F.hideLoading();
+
+			if (!coming || F.isActive === false) {
+				return;
+			}
+
+			if (false === F.trigger('afterLoad', coming, previous)) {
+				coming.wrap.stop(true).trigger('onReset').remove();
+
+				F.coming = null;
+
+				return;
+			}
+
+			if (previous) {
+				F.trigger('beforeChange', previous);
+
+				previous.wrap.stop(true).removeClass('fancybox-opened')
+					.find('.fancybox-item, .fancybox-nav')
+					.remove();
+			}
+
+			F.unbindEvents();
+
+			current   = coming;
+			content   = coming.content;
+			type      = coming.type;
+			scrolling = coming.scrolling;
+
+			$.extend(F, {
+				wrap  : current.wrap,
+				skin  : current.skin,
+				outer : current.outer,
+				inner : current.inner,
+				current  : current,
+				previous : previous
+			});
+
+			href = current.href;
+
+			switch (type) {
+				case 'inline':
+				case 'ajax':
+				case 'html':
+					if (current.selector) {
+						content = $('<div>').html(content).find(current.selector);
+
+					} else if (isQuery(content)) {
+						if (!content.data(placeholder)) {
+							content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() );
+						}
+
+						content = content.show().detach();
+
+						current.wrap.bind('onReset', function () {
+							if ($(this).find(content).length) {
+								content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
+							}
+						});
+					}
+				break;
+
+				case 'image':
+					content = current.tpl.image.replace('{href}', href);
+				break;
+
+				case 'swf':
+					content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>';
+					embed   = '';
+
+					$.each(current.swf, function(name, val) {
+						content += '<param name="' + name + '" value="' + val + '"></param>';
+						embed   += ' ' + name + '="' + val + '"';
+					});
+
+					content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>';
+				break;
+			}
+
+			if (!(isQuery(content) && content.parent().is(current.inner))) {
+				current.inner.append( content );
+			}
+
+			// Give a chance for helpers or callbacks to update elements
+			F.trigger('beforeShow');
+
+			// Set scrolling before calculating dimensions
+			current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
+
+			// Set initial dimensions and start position
+			F._setDimension();
+
+			F.reposition();
+
+			F.isOpen = false;
+			F.coming = null;
+
+			F.bindEvents();
+
+			if (!F.isOpened) {
+				$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
+
+			} else if (previous.prevMethod) {
+				F.transitions[ previous.prevMethod ]();
+			}
+
+			F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
+
+			F._preloadImages();
+		},
+
+		_setDimension: function () {
+			var viewport   = F.getViewport(),
+				steps      = 0,
+				canShrink  = false,
+				canExpand  = false,
+				wrap       = F.wrap,
+				skin       = F.skin,
+				inner      = F.inner,
+				current    = F.current,
+				width      = current.width,
+				height     = current.height,
+				minWidth   = current.minWidth,
+				minHeight  = current.minHeight,
+				maxWidth   = current.maxWidth,
+				maxHeight  = current.maxHeight,
+				scrolling  = current.scrolling,
+				scrollOut  = current.scrollOutside ? current.scrollbarWidth : 0,
+				margin     = current.margin,
+				wMargin    = getScalar(margin[1] + margin[3]),
+				hMargin    = getScalar(margin[0] + margin[2]),
+				wPadding,
+				hPadding,
+				wSpace,
+				hSpace,
+				origWidth,
+				origHeight,
+				origMaxWidth,
+				origMaxHeight,
+				ratio,
+				width_,
+				height_,
+				maxWidth_,
+				maxHeight_,
+				iframe,
+				body;
+
+			// Reset dimensions so we could re-check actual size
+			wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
+
+			wPadding = getScalar(skin.outerWidth(true)  - skin.width());
+			hPadding = getScalar(skin.outerHeight(true) - skin.height());
+
+			// Any space between content and viewport (margin, padding, border, title)
+			wSpace = wMargin + wPadding;
+			hSpace = hMargin + hPadding;
+
+			origWidth  = isPercentage(width)  ? (viewport.w - wSpace) * getScalar(width)  / 100 : width;
+			origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
+
+			if (current.type === 'iframe') {
+				iframe = current.content;
+
+				if (current.autoHeight && iframe.data('ready') === 1) {
+					try {
+						if (iframe[0].contentWindow.document.location) {
+							inner.width( origWidth ).height(9999);
+
+							body = iframe.contents().find('body');
+
+							if (scrollOut) {
+								body.css('overflow-x', 'hidden');
+							}
+
+							origHeight = body.outerHeight(true);
+						}
+
+					} catch (e) {}
+				}
+
+			} else if (current.autoWidth || current.autoHeight) {
+				inner.addClass( 'fancybox-tmp' );
+
+				// Set width or height in case we need to calculate only one dimension
+				if (!current.autoWidth) {
+					inner.width( origWidth );
+				}
+
+				if (!current.autoHeight) {
+					inner.height( origHeight );
+				}
+
+				if (current.autoWidth) {
+					origWidth = inner.width();
+				}
+
+				if (current.autoHeight) {
+					origHeight = inner.height();
+				}
+
+				inner.removeClass( 'fancybox-tmp' );
+			}
+
+			width  = getScalar( origWidth );
+			height = getScalar( origHeight );
+
+			ratio  = origWidth / origHeight;
+
+			// Calculations for the content
+			minWidth  = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
+			maxWidth  = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
+
+			minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
+			maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
+
+			// These will be used to determine if wrap can fit in the viewport
+			origMaxWidth  = maxWidth;
+			origMaxHeight = maxHeight;
+
+			if (current.fitToView) {
+				maxWidth  = Math.min(viewport.w - wSpace, maxWidth);
+				maxHeight = Math.min(viewport.h - hSpace, maxHeight);
+			}
+
+			maxWidth_  = viewport.w - wMargin;
+			maxHeight_ = viewport.h - hMargin;
+
+			if (current.aspectRatio) {
+				if (width > maxWidth) {
+					width  = maxWidth;
+					height = getScalar(width / ratio);
+				}
+
+				if (height > maxHeight) {
+					height = maxHeight;
+					width  = getScalar(height * ratio);
+				}
+
+				if (width < minWidth) {
+					width  = minWidth;
+					height = getScalar(width / ratio);
+				}
+
+				if (height < minHeight) {
+					height = minHeight;
+					width  = getScalar(height * ratio);
+				}
+
+			} else {
+				width = Math.max(minWidth, Math.min(width, maxWidth));
+
+				if (current.autoHeight && current.type !== 'iframe') {
+					inner.width( width );
+
+					height = inner.height();
+				}
+
+				height = Math.max(minHeight, Math.min(height, maxHeight));
+			}
+
+			// Try to fit inside viewport (including the title)
+			if (current.fitToView) {
+				inner.width( width ).height( height );
+
+				wrap.width( width + wPadding );
+
+				// Real wrap dimensions
+				width_  = wrap.width();
+				height_ = wrap.height();
+
+				if (current.aspectRatio) {
+					while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
+						if (steps++ > 19) {
+							break;
+						}
+
+						height = Math.max(minHeight, Math.min(maxHeight, height - 10));
+						width  = getScalar(height * ratio);
+
+						if (width < minWidth) {
+							width  = minWidth;
+							height = getScalar(width / ratio);
+						}
+
+						if (width > maxWidth) {
+							width  = maxWidth;
+							height = getScalar(width / ratio);
+						}
+
+						inner.width( width ).height( height );
+
+						wrap.width( width + wPadding );
+
+						width_  = wrap.width();
+						height_ = wrap.height();
+					}
+
+				} else {
+					width  = Math.max(minWidth,  Math.min(width,  width  - (width_  - maxWidth_)));
+					height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
+				}
+			}
+
+			if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
+				width += scrollOut;
+			}
+
+			inner.width( width ).height( height );
+
+			wrap.width( width + wPadding );
+
+			width_  = wrap.width();
+			height_ = wrap.height();
+
+			canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
+			canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
+
+			$.extend(current, {
+				dim : {
+					width	: getValue( width_ ),
+					height	: getValue( height_ )
+				},
+				origWidth  : origWidth,
+				origHeight : origHeight,
+				canShrink  : canShrink,
+				canExpand  : canExpand,
+				wPadding   : wPadding,
+				hPadding   : hPadding,
+				wrapSpace  : height_ - skin.outerHeight(true),
+				skinSpace  : skin.height() - height
+			});
+
+			if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
+				inner.height('auto');
+			}
+		},
+
+		_getPosition: function (onlyAbsolute) {
+			var current  = F.current,
+				viewport = F.getViewport(),
+				margin   = current.margin,
+				width    = F.wrap.width()  + margin[1] + margin[3],
+				height   = F.wrap.height() + margin[0] + margin[2],
+				rez      = {
+					position: 'absolute',
+					top  : margin[0],
+					left : margin[3]
+				};
+
+			if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
+				rez.position = 'fixed';
+
+			} else if (!current.locked) {
+				rez.top  += viewport.y;
+				rez.left += viewport.x;
+			}
+
+			rez.top  = getValue(Math.max(rez.top,  rez.top  + ((viewport.h - height) * current.topRatio)));
+			rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width)  * current.leftRatio)));
+
+			return rez;
+		},
+
+		_afterZoomIn: function () {
+			var current = F.current;
+
+			if (!current) {
+				return;
+			}
+
+			F.isOpen = F.isOpened = true;
+
+			F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
+
+			F.update();
+
+			// Assign a click event
+			if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
+				F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
+					if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
+						e.preventDefault();
+
+						F[ current.closeClick ? 'close' : 'next' ]();
+					}
+				});
+			}
+
+			// Create a close button
+			if (current.closeBtn) {
+				$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
+					e.preventDefault();
+
+					F.close();
+				});
+			}
+
+			// Create navigation arrows
+			if (current.arrows && F.group.length > 1) {
+				if (current.loop || current.index > 0) {
+					$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
+				}
+
+				if (current.loop || current.index < F.group.length - 1) {
+					$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
+				}
+			}
+
+			F.trigger('afterShow');
+
+			// Stop the slideshow if this is the last item
+			if (!current.loop && current.index === current.group.length - 1) {
+				F.play( false );
+
+			} else if (F.opts.autoPlay && !F.player.isActive) {
+				F.opts.autoPlay = false;
+
+				F.play();
+			}
+		},
+
+		_afterZoomOut: function ( obj ) {
+			obj = obj || F.current;
+
+			$('.fancybox-wrap').trigger('onReset').remove();
+
+			$.extend(F, {
+				group  : {},
+				opts   : {},
+				router : false,
+				current   : null,
+				isActive  : false,
+				isOpened  : false,
+				isOpen    : false,
+				isClosing : false,
+				wrap   : null,
+				skin   : null,
+				outer  : null,
+				inner  : null
+			});
+
+			F.trigger('afterClose', obj);
+		}
+	});
+
+	/*
+	 *	Default transitions
+	 */
+
+	F.transitions = {
+		getOrigPosition: function () {
+			var current  = F.current,
+				element  = current.element,
+				orig     = current.orig,
+				pos      = {},
+				width    = 50,
+				height   = 50,
+				hPadding = current.hPadding,
+				wPadding = current.wPadding,
+				viewport = F.getViewport();
+
+			if (!orig && current.isDom && element.is(':visible')) {
+				orig = element.find('img:first');
+
+				if (!orig.length) {
+					orig = element;
+				}
+			}
+
+			if (isQuery(orig)) {
+				pos = orig.offset();
+
+				if (orig.is('img')) {
+					width  = orig.outerWidth();
+					height = orig.outerHeight();
+				}
+
+			} else {
+				pos.top  = viewport.y + (viewport.h - height) * current.topRatio;
+				pos.left = viewport.x + (viewport.w - width)  * current.leftRatio;
+			}
+
+			if (F.wrap.css('position') === 'fixed' || current.locked) {
+				pos.top  -= viewport.y;
+				pos.left -= viewport.x;
+			}
+
+			pos = {
+				top     : getValue(pos.top  - hPadding * current.topRatio),
+				left    : getValue(pos.left - wPadding * current.leftRatio),
+				width   : getValue(width  + wPadding),
+				height  : getValue(height + hPadding)
+			};
+
+			return pos;
+		},
+
+		step: function (now, fx) {
+			var ratio,
+				padding,
+				value,
+				prop       = fx.prop,
+				current    = F.current,
+				wrapSpace  = current.wrapSpace,
+				skinSpace  = current.skinSpace;
+
+			if (prop === 'width' || prop === 'height') {
+				ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
+
+				if (F.isClosing) {
+					ratio = 1 - ratio;
+				}
+
+				padding = prop === 'width' ? current.wPadding : current.hPadding;
+				value   = now - padding;
+
+				F.skin[ prop ](  getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) ) );
+				F.inner[ prop ]( getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
+			}
+		},
+
+		zoomIn: function () {
+			var current  = F.current,
+				startPos = current.pos,
+				effect   = current.openEffect,
+				elastic  = effect === 'elastic',
+				endPos   = $.extend({opacity : 1}, startPos);
+
+			// Remove "position" property that breaks older IE
+			delete endPos.position;
+
+			if (elastic) {
+				startPos = this.getOrigPosition();
+
+				if (current.openOpacity) {
+					startPos.opacity = 0.1;
+				}
+
+			} else if (effect === 'fade') {
+				startPos.opacity = 0.1;
+			}
+
+			F.wrap.css(startPos).animate(endPos, {
+				duration : effect === 'none' ? 0 : current.openSpeed,
+				easing   : current.openEasing,
+				step     : elastic ? this.step : null,
+				complete : F._afterZoomIn
+			});
+		},
+
+		zoomOut: function () {
+			var current  = F.current,
+				effect   = current.closeEffect,
+				elastic  = effect === 'elastic',
+				endPos   = {opacity : 0.1};
+
+			if (elastic) {
+				endPos = this.getOrigPosition();
+
+				if (current.closeOpacity) {
+					endPos.opacity = 0.1;
+				}
+			}
+
+			F.wrap.animate(endPos, {
+				duration : effect === 'none' ? 0 : current.closeSpeed,
+				easing   : current.closeEasing,
+				step     : elastic ? this.step : null,
+				complete : F._afterZoomOut
+			});
+		},
+
+		changeIn: function () {
+			var current   = F.current,
+				effect    = current.nextEffect,
+				startPos  = current.pos,
+				endPos    = { opacity : 1 },
+				direction = F.direction,
+				distance  = 200,
+				field;
+
+			startPos.opacity = 0.1;
+
+			if (effect === 'elastic') {
+				field = direction === 'down' || direction === 'up' ? 'top' : 'left';
+
+				if (direction === 'down' || direction === 'right') {
+					startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
+					endPos[ field ]   = '+=' + distance + 'px';
+
+				} else {
+					startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
+					endPos[ field ]   = '-=' + distance + 'px';
+				}
+			}
+
+			// Workaround for http://bugs.jquery.com/ticket/12273
+			if (effect === 'none') {
+				F._afterZoomIn();
+
+			} else {
+				F.wrap.css(startPos).animate(endPos, {
+					duration : current.nextSpeed,
+					easing   : current.nextEasing,
+					complete : F._afterZoomIn
+				});
+			}
+		},
+
+		changeOut: function () {
+			var previous  = F.previous,
+				effect    = previous.prevEffect,
+				endPos    = { opacity : 0.1 },
+				direction = F.direction,
+				distance  = 200;
+
+			if (effect === 'elastic') {
+				endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
+			}
+
+			previous.wrap.animate(endPos, {
+				duration : effect === 'none' ? 0 : previous.prevSpeed,
+				easing   : previous.prevEasing,
+				complete : function () {
+					$(this).trigger('onReset').remove();
+				}
+			});
+		}
+	};
+
+	/*
+	 *	Overlay helper
+	 */
+
+	F.helpers.overlay = {
+		defaults : {
+			closeClick : true,      // if true, fancyBox will be closed when user clicks on the overlay
+			speedOut   : 200,       // duration of fadeOut animation
+			showEarly  : true,      // indicates if should be opened immediately or wait until the content is ready
+			css        : {},        // custom CSS properties
+			locked     : !isTouch,  // if true, the content will be locked into overlay
+			fixed      : true       // if false, the overlay CSS position property will not be set to "fixed"
+		},
+
+		overlay : null,      // current handle
+		fixed   : false,     // indicates if the overlay has position "fixed"
+		el      : $('html'), // element that contains "the lock"
+
+		// Public methods
+		create : function(opts) {
+			opts = $.extend({}, this.defaults, opts);
+
+			if (this.overlay) {
+				this.close();
+			}
+
+			this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( F.coming ? F.coming.parent : opts.parent );
+			this.fixed   = false;
+
+			if (opts.fixed && F.defaults.fixed) {
+				this.overlay.addClass('fancybox-overlay-fixed');
+
+				this.fixed = true;
+			}
+		},
+
+		open : function(opts) {
+			var that = this;
+
+			opts = $.extend({}, this.defaults, opts);
+
+			if (this.overlay) {
+				this.overlay.unbind('.overlay').width('auto').height('auto');
+
+			} else {
+				this.create(opts);
+			}
+
+			if (!this.fixed) {
+				W.bind('resize.overlay', $.proxy( this.update, this) );
+
+				this.update();
+			}
+
+			if (opts.closeClick) {
+				this.overlay.bind('click.overlay', function(e) {
+					if ($(e.target).hasClass('fancybox-overlay')) {
+						if (F.isActive) {
+							F.close();
+						} else {
+							that.close();
+						}
+
+						return false;
+					}
+				});
+			}
+
+			this.overlay.css( opts.css ).show();
+		},
+
+		close : function() {
+			var scrollV, scrollH;
+
+			W.unbind('resize.overlay');
+
+			if (this.el.hasClass('fancybox-lock')) {
+				$('.fancybox-margin').removeClass('fancybox-margin');
+
+				scrollV = W.scrollTop();
+				scrollH = W.scrollLeft();
+
+				this.el.removeClass('fancybox-lock');
+
+				W.scrollTop( scrollV ).scrollLeft( scrollH );
+			}
+
+			$('.fancybox-overlay').remove().hide();
+
+			$.extend(this, {
+				overlay : null,
+				fixed   : false
+			});
+		},
+
+		// Private, callbacks
+
+		update : function () {
+			var width = '100%', offsetWidth;
+
+			// Reset width/height so it will not mess
+			this.overlay.width(width).height('100%');
+
+			// jQuery does not return reliable result for IE
+			if (IE) {
+				offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
+
+				if (D.width() > offsetWidth) {
+					width = D.width();
+				}
+
+			} else if (D.width() > W.width()) {
+				width = D.width();
+			}
+
+			this.overlay.width(width).height(D.height());
+		},
+
+		// This is where we can manipulate DOM, because later it would cause iframes to reload
+		onReady : function (opts, obj) {
+			var overlay = this.overlay;
+
+			$('.fancybox-overlay').stop(true, true);
+
+			if (!overlay) {
+				this.create(opts);
+			}
+
+			if (opts.locked && this.fixed && obj.fixed) {
+				if (!overlay) {
+					this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false;
+				}
+
+				obj.locked = this.overlay.append( obj.wrap );
+				obj.fixed  = false;
+			}
+
+			if (opts.showEarly === true) {
+				this.beforeShow.apply(this, arguments);
+			}
+		},
+
+		beforeShow : function(opts, obj) {
+			var scrollV, scrollH;
+
+			if (obj.locked) {
+				if (this.margin !== false) {
+					$('*').filter(function(){
+						return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );
+					}).addClass('fancybox-margin');
+
+					this.el.addClass('fancybox-margin');
+				}
+
+				scrollV = W.scrollTop();
+				scrollH = W.scrollLeft();
+
+				this.el.addClass('fancybox-lock');
+
+				W.scrollTop( scrollV ).scrollLeft( scrollH );
+			}
+
+			this.open(opts);
+		},
+
+		onUpdate : function() {
+			if (!this.fixed) {
+				this.update();
+			}
+		},
+
+		afterClose: function (opts) {
+			// Remove overlay if exists and fancyBox is not opening
+			// (e.g., it is not being open using afterClose callback)
+			//if (this.overlay && !F.isActive) {
+			if (this.overlay && !F.coming) {
+				this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
+			}
+		}
+	};
+
+	/*
+	 *	Title helper
+	 */
+
+	F.helpers.title = {
+		defaults : {
+			type     : 'float', // 'float', 'inside', 'outside' or 'over',
+			position : 'bottom' // 'top' or 'bottom'
+		},
+
+		beforeShow: function (opts) {
+			var current = F.current,
+				text    = current.title,
+				type    = opts.type,
+				title,
+				target;
+
+			if ($.isFunction(text)) {
+				text = text.call(current.element, current);
+			}
+
+			if (!isString(text) || $.trim(text) === '') {
+				return;
+			}
+
+			title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">' + text + '</div>');
+
+			switch (type) {
+				case 'inside':
+					target = F.skin;
+				break;
+
+				case 'outside':
+					target = F.wrap;
+				break;
+
+				case 'over':
+					target = F.inner;
+				break;
+
+				default: // 'float'
+					target = F.skin;
+
+					title.appendTo('body');
+
+					if (IE) {
+						title.width( title.width() );
+					}
+
+					title.wrapInner('<span class="child"></span>');
+
+					//Increase bottom margin so this title will also fit into viewport
+					F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
+				break;
+			}
+
+			title[ (opts.position === 'top' ? 'prependTo'  : 'appendTo') ](target);
+		}
+	};
+
+	// jQuery plugin initialization
+	$.fn.fancybox = function (options) {
+		var index,
+			that     = $(this),
+			selector = this.selector || '',
+			run      = function(e) {
+				var what = $(this).blur(), idx = index, relType, relVal;
+
+				if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
+					relType = options.groupAttr || 'data-fancybox-group';
+					relVal  = what.attr(relType);
+
+					if (!relVal) {
+						relType = 'rel';
+						relVal  = what.get(0)[ relType ];
+					}
+
+					if (relVal && relVal !== '' && relVal !== 'nofollow') {
+						what = selector.length ? $(selector) : that;
+						what = what.filter('[' + relType + '="' + relVal + '"]');
+						idx  = what.index(this);
+					}
+
+					options.index = idx;
+
+					// Stop an event from bubbling if everything is fine
+					if (F.open(what, options) !== false) {
+						e.preventDefault();
+					}
+				}
+			};
+
+		options = options || {};
+		index   = options.index || 0;
+
+		if (!selector || options.live === false) {
+			that.unbind('click.fb-start').bind('click.fb-start', run);
+
+		} else {
+			D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
+		}
+
+		this.filter('[data-fancybox-start=1]').trigger('click');
+
+		return this;
+	};
+
+	// Tests that need a body at doc ready
+	D.ready(function() {
+		var w1, w2;
+
+		if ( $.scrollbarWidth === undefined ) {
+			// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
+			$.scrollbarWidth = function() {
+				var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),
+					child  = parent.children(),
+					width  = child.innerWidth() - child.height( 99 ).innerWidth();
+
+				parent.remove();
+
+				return width;
+			};
+		}
+
+		if ( $.support.fixedPosition === undefined ) {
+			$.support.fixedPosition = (function() {
+				var elem  = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'),
+					fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
+
+				elem.remove();
+
+				return fixed;
+			}());
+		}
+
+		$.extend(F.defaults, {
+			scrollbarWidth : $.scrollbarWidth(),
+			fixed  : $.support.fixedPosition,
+			parent : $('body')
+		});
+
+		//Get real width of page scroll-bar
+		w1 = $(window).width();
+
+		H.addClass('fancybox-lock-test');
+
+		w2 = $(window).width();
+
+		H.removeClass('fancybox-lock-test');
+
+		$("<style type='text/css'>.fancybox-margin{margin-right:" + (w2 - w1) + "px;}</style>").appendTo("head");
+	});
+
+}(window, document, jQuery));
\ No newline at end of file


[5/6] drill git commit: Bridget's auth doc

Posted by br...@apache.org.
Bridget's auth doc


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/3ababd8c
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/3ababd8c
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/3ababd8c

Branch: refs/heads/gh-pages
Commit: 3ababd8c408c683e27ec6318319559926094202e
Parents: bca4701
Author: Kristine Hahn <kh...@maprtech.com>
Authored: Thu May 7 11:10:22 2015 -0700
Committer: Kristine Hahn <kh...@maprtech.com>
Committed: Thu May 7 11:10:22 2015 -0700

----------------------------------------------------------------------
 _data/docs.json                                 |  73 +++++++--
 .../075-configuring-user-authentication.md      | 157 +++++++++++++++++++
 _docs/img/UserAuthProcess.PNG                   | Bin 0 -> 30800 bytes
 _docs/img/UserAuth_ODBC_Driver.png              | Bin 0 -> 83049 bytes
 4 files changed, 219 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/3ababd8c/_data/docs.json
----------------------------------------------------------------------
diff --git a/_data/docs.json b/_data/docs.json
index 4aca3af..91d3fe5 100644
--- a/_data/docs.json
+++ b/_data/docs.json
@@ -783,8 +783,8 @@
             "next_title": "Configuration Options Introduction", 
             "next_url": "/docs/configuration-options-introduction/", 
             "parent": "Configure Drill", 
-            "previous_title": "Configuring User Impersonation", 
-            "previous_url": "/docs/configuring-user-impersonation/", 
+            "previous_title": "Configuring User Authentication", 
+            "previous_url": "/docs/configuring-user-authentication/", 
             "relative_path": "_docs/configure-drill/080-configuration-options.md", 
             "title": "Configuration Options", 
             "url": "/docs/configuration-options/"
@@ -936,8 +936,8 @@
                         }
                     ], 
                     "children": [], 
-                    "next_title": "Configuration Options", 
-                    "next_url": "/docs/configuration-options/", 
+                    "next_title": "Configuring User Authentication", 
+                    "next_url": "/docs/configuring-user-authentication/", 
                     "parent": "Configure Drill", 
                     "previous_title": "Configuring Resources for a Shared Drillbit", 
                     "previous_url": "/docs/configuring-resources-for-a-shared-drillbit/", 
@@ -952,6 +952,23 @@
                             "url": "/docs/configure-drill/"
                         }
                     ], 
+                    "children": [], 
+                    "next_title": "Configuration Options", 
+                    "next_url": "/docs/configuration-options/", 
+                    "parent": "Configure Drill", 
+                    "previous_title": "Configuring User Impersonation", 
+                    "previous_url": "/docs/configuring-user-impersonation/", 
+                    "relative_path": "_docs/configure-drill/075-configuring-user-authentication.md", 
+                    "title": "Configuring User Authentication", 
+                    "url": "/docs/configuring-user-authentication/"
+                }, 
+                {
+                    "breadcrumbs": [
+                        {
+                            "title": "Configure Drill", 
+                            "url": "/docs/configure-drill/"
+                        }
+                    ], 
                     "children": [
                         {
                             "breadcrumbs": [
@@ -1041,8 +1058,8 @@
                     "next_title": "Configuration Options Introduction", 
                     "next_url": "/docs/configuration-options-introduction/", 
                     "parent": "Configure Drill", 
-                    "previous_title": "Configuring User Impersonation", 
-                    "previous_url": "/docs/configuring-user-impersonation/", 
+                    "previous_title": "Configuring User Authentication", 
+                    "previous_url": "/docs/configuring-user-authentication/", 
                     "relative_path": "_docs/configure-drill/080-configuration-options.md", 
                     "title": "Configuration Options", 
                     "url": "/docs/configuration-options/"
@@ -1209,7 +1226,7 @@
             "title": "Configuring Resources for a Shared Drillbit", 
             "url": "/docs/configuring-resources-for-a-shared-drillbit/"
         }, 
-        "Configuring User Impersonation": {
+        "Configuring User Authentication": {
             "breadcrumbs": [
                 {
                     "title": "Configure Drill", 
@@ -1220,6 +1237,23 @@
             "next_title": "Configuration Options", 
             "next_url": "/docs/configuration-options/", 
             "parent": "Configure Drill", 
+            "previous_title": "Configuring User Impersonation", 
+            "previous_url": "/docs/configuring-user-impersonation/", 
+            "relative_path": "_docs/configure-drill/075-configuring-user-authentication.md", 
+            "title": "Configuring User Authentication", 
+            "url": "/docs/configuring-user-authentication/"
+        }, 
+        "Configuring User Impersonation": {
+            "breadcrumbs": [
+                {
+                    "title": "Configure Drill", 
+                    "url": "/docs/configure-drill/"
+                }
+            ], 
+            "children": [], 
+            "next_title": "Configuring User Authentication", 
+            "next_url": "/docs/configuring-user-authentication/", 
+            "parent": "Configure Drill", 
             "previous_title": "Configuring Resources for a Shared Drillbit", 
             "previous_url": "/docs/configuring-resources-for-a-shared-drillbit/", 
             "relative_path": "_docs/configure-drill/070-configuring-user-impersonation.md", 
@@ -9388,8 +9422,8 @@
                         }
                     ], 
                     "children": [], 
-                    "next_title": "Configuration Options", 
-                    "next_url": "/docs/configuration-options/", 
+                    "next_title": "Configuring User Authentication", 
+                    "next_url": "/docs/configuring-user-authentication/", 
                     "parent": "Configure Drill", 
                     "previous_title": "Configuring Resources for a Shared Drillbit", 
                     "previous_url": "/docs/configuring-resources-for-a-shared-drillbit/", 
@@ -9404,6 +9438,23 @@
                             "url": "/docs/configure-drill/"
                         }
                     ], 
+                    "children": [], 
+                    "next_title": "Configuration Options", 
+                    "next_url": "/docs/configuration-options/", 
+                    "parent": "Configure Drill", 
+                    "previous_title": "Configuring User Impersonation", 
+                    "previous_url": "/docs/configuring-user-impersonation/", 
+                    "relative_path": "_docs/configure-drill/075-configuring-user-authentication.md", 
+                    "title": "Configuring User Authentication", 
+                    "url": "/docs/configuring-user-authentication/"
+                }, 
+                {
+                    "breadcrumbs": [
+                        {
+                            "title": "Configure Drill", 
+                            "url": "/docs/configure-drill/"
+                        }
+                    ], 
                     "children": [
                         {
                             "breadcrumbs": [
@@ -9493,8 +9544,8 @@
                     "next_title": "Configuration Options Introduction", 
                     "next_url": "/docs/configuration-options-introduction/", 
                     "parent": "Configure Drill", 
-                    "previous_title": "Configuring User Impersonation", 
-                    "previous_url": "/docs/configuring-user-impersonation/", 
+                    "previous_title": "Configuring User Authentication", 
+                    "previous_url": "/docs/configuring-user-authentication/", 
                     "relative_path": "_docs/configure-drill/080-configuration-options.md", 
                     "title": "Configuration Options", 
                     "url": "/docs/configuration-options/"

http://git-wip-us.apache.org/repos/asf/drill/blob/3ababd8c/_docs/configure-drill/075-configuring-user-authentication.md
----------------------------------------------------------------------
diff --git a/_docs/configure-drill/075-configuring-user-authentication.md b/_docs/configure-drill/075-configuring-user-authentication.md
new file mode 100755
index 0000000..841d3e5
--- /dev/null
+++ b/_docs/configure-drill/075-configuring-user-authentication.md
@@ -0,0 +1,157 @@
+---
+title: "Configuring User Authentication"
+parent: "Configure Drill"
+---
+Authentication is the process of proving a user’s identity to access a process running on a system. Drill currently supports username/password based authentication through the use of the Linux Pluggable Authentication Module (PAM). The authentication option is available through JDBC and ODBC interfaces. Linux PAM provides authentication modules that interface with any installed PAM authentication entity, such as the local operating system password file (passwd or login) or LDAP. 
+ 
+If user impersonation is enabled, Drill executes the client requests as the authenticated user. Otherwise, Drill executes client requests as the user that started the Drillbit process. You can enable both authorization and impersonation to improve Drill security. See [Configuring User Impersonation]({{site.baseurl}}/docs/configuring-user-impersonation/).
+
+When using PAM for authentication, each user that has permission to run Drill must exist in the list of users that resides on each Drill node in the cluster. The username (including uid) and password for each user must be identical across all of the Drill nodes. 
+
+## User Authentication Process
+
+When user authentication is configured, each user that accesses the Drillbit process through a client, such as SQLLine, must provide their username and password for access. 
+
+When launching SQLLine, a user must include the `–n` and `–p` parameters with their username and password in the SQLLine argument:  
+       `sqlline –u jdbc:drill:zk=10.10.11.112:5181 –n bob –p bobdrill`
+
+ 
+When a user connects to Drill from a BI tool, such as Tableau, the MapR Drill ODBC driver prompts the user for their username and password:
+
+![ODBC Driver]({{site.baseurl}}/docs/img/UserAuth_ODBC_Driver.png)
+
+The client passes the username and password to a Drillbit, which then passes the credentials to PAM. If PAM can verify that the user is authorized to access Drill, the user can connect to the Drillbit process from the client and issue queries against the file system or other storage plugins, such as Hive or HBase. However, if PAM cannot verify that the user is authorized to access Drill, the client returns an error.
+ 
+The following image illustrates the user authentication process in Drill:
+
+![]({{site.baseurl}}/docs/img/UserAuthProcess.png)
+
+### Installing and Configuring PAM
+
+Install and configure the provided Drill PAM. Drill only supports the PAM provided here.
+ 
+Complete the following steps to install and configure PAM for Drill:
+
+1. Download the `tar.gz` file for the Linux platform:  
+   [http://sourceforge.net/projects/jpam/files/jpam/jpam-1.1/](http://sourceforge.net/projects/jpam/files/jpam/jpam-1.1/)
+2. Untar the file, and copy the `libjpam.so` file into a directory.  
+   Example:` /opt/pam/`
+3. Run the following command, and include the directory where you put the `libjpam.so` file:  
+   `export DRILLBIT_JAVA_OPTS=" -Djava.library.path=<directory>"`  
+   Example: `export DRILLBIT_JAVA_OPTS=" -Djava.library.path=/opt/pam/"`
+4. Add the following block to `drill.exec` in the `drill-override.conf` file located in `<DRILLINSTALL_HOME>/conf/`:  
+
+          drill.exec {
+           security.user.auth {
+                 enabled: true,
+                 packages += "org.apache.drill.exec.rpc.user.security",
+                 impl: "pam",
+                 pam_profiles: [ "sudo", "login" ]
+           } 
+          }
+
+5. (Optional) To add or remove different PAM profiles, add or delete the profile names in the `“pam_profiles”` array.  
+6. Restart the Drillbit process on each Drill node.
+   * In a MapR cluster, run the following command:  
+
+              maprcli node services -name drill-bits -action restart -nodes <hostname> -f
+   * In a non-MapR environment, run the following command: 
+ 
+              <DRILLINSTALL_HOME>/bin/drillbit.sh restart
+
+### Implementing and Configuring a Custom Authenticator
+
+Administrators can use the template provided here to develop and implement a custom username/password based authenticator.
+
+Complete the following steps to build and implement a custom authenticator:
+
+1. Build the following Java file into a JAR file: 
+ 
+           MyCustomDrillUserAuthenticatorImpl.java 
+           
+           package myorg.dept.drill.security;
+           
+           import org.apache.drill.common.config.DrillConfig;
+           import org.apache.drill.exec.exception.DrillbitStartupException;
+           
+           import java.io.IOException;
+           
+           /*
+           * Implement {@link org.apache.drill.exec.rpc.user.security.UserAuthenticator} for illustraing how to develop a custom authenticator and use it in Drill
+           */
+           @UserAuthenticatorTemplate(type = “myCustomAuthenticatorType”)
+           public class MyCustomDrillUserAuthenticatorImpl implements UserAuthenticator {
+           
+            public static final String TEST_USER_1 = "testUser1";
+            public static final String TEST_USER_2 = "testUser2";
+            public static final String TEST_USER_1_PASSWORD = "testUser1Password";
+            public static final String TEST_USER_2_PASSWORD = "testUser2Password";
+           
+           /**
+           * Setup for authenticating user credentials.
+           */
+            @Override
+            public void setup(DrillConfig drillConfig) throws DrillbitStartupException {
+              // If the authenticator has any setup such as making sure authenticator provider servers are up and running or 
+              // needed libraries are available, it should be added here.
+            }
+           
+           /**
+           * Authenticate the given <i>user</i> and <i>password</i> combination.
+           *
+           * @param userName
+           * @param password
+           * @throws UserAuthenticationException if authentication fails for given user and password.
+           */
+            @Override
+            public void authenticate(String userName, String password) throws UserAuthenticationException {
+           
+              if (!(TEST_USER_1.equals(user) && TEST_USER_1_PASSWORD.equals(password)) &&
+              !(TEST_USER_2.equals(user) && TEST_USER_2_PASSWORD.equals(password))) {
+            throw new UserAuthenticationException(“custom failure message if the admin wants to show it to user”);
+              }
+            }
+           
+           /**
+           * Close the authenticator. Used to release resources. Ex. LDAP authenticator opens connections to LDAP server,
+           * such connections resources are released in a safe manner as part of close.
+           *
+           * @throws IOException
+           */
+            @Override
+            public void close() throws IOException {
+              // Any clean up such as releasing files/network resources should be done here
+            }
+           }  
+
+
+2. Add the JAR file that you built to the following directory on each Drill node:  
+   ` <DRILLINSTALL_HOME>/jars`
+3. Add the following block to the `drill.exec` section in the `drill-override.conf` file located in `<DRILLINSTALL_HOME>/conf/`:  
+
+              drill.exec {
+               security.user.auth {
+                	enabled: true,
+                	packages += "myorg.dept.drill.security",
+                	impl: "myCustomAuthenticatorType"
+               }
+              }  
+4. Restart the Drillbit process on each Drill node.
+   * In a MapR cluster, run the following command:  
+
+              maprcli node services -name drill-bits -action restart -nodes <hostname> -f
+   * In a non-MapR environment, run the following command: 
+ 
+              <DRILLINSTALL_HOME>/bin/drillbit.sh restart
+       
+
+
+
+
+
+
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/drill/blob/3ababd8c/_docs/img/UserAuthProcess.PNG
----------------------------------------------------------------------
diff --git a/_docs/img/UserAuthProcess.PNG b/_docs/img/UserAuthProcess.PNG
new file mode 100755
index 0000000..4d9f626
Binary files /dev/null and b/_docs/img/UserAuthProcess.PNG differ

http://git-wip-us.apache.org/repos/asf/drill/blob/3ababd8c/_docs/img/UserAuth_ODBC_Driver.png
----------------------------------------------------------------------
diff --git a/_docs/img/UserAuth_ODBC_Driver.png b/_docs/img/UserAuth_ODBC_Driver.png
new file mode 100755
index 0000000..811652e
Binary files /dev/null and b/_docs/img/UserAuth_ODBC_Driver.png differ


[6/6] drill git commit: Merge branch 'gh-pages' of https://github.com/tshiran/drill into gh-pages

Posted by br...@apache.org.
Merge branch 'gh-pages' of https://github.com/tshiran/drill into gh-pages


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/1cbc6a76
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/1cbc6a76
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/1cbc6a76

Branch: refs/heads/gh-pages
Commit: 1cbc6a76962913aea3c0cd7d8a5c8b98ee69f2ac
Parents: cd454b3 3ababd8
Author: Tomer Shiran <ts...@gmail.com>
Authored: Thu May 7 11:11:05 2015 -0700
Committer: Tomer Shiran <ts...@gmail.com>
Committed: Thu May 7 11:11:05 2015 -0700

----------------------------------------------------------------------
 _data/docs.json                                 |  73 +++++++--
 .../075-configuring-user-authentication.md      | 157 +++++++++++++++++++
 _docs/img/UserAuthProcess.PNG                   | Bin 0 -> 30800 bytes
 _docs/img/UserAuth_ODBC_Driver.png              | Bin 0 -> 83049 bytes
 4 files changed, 219 insertions(+), 11 deletions(-)
----------------------------------------------------------------------



[4/6] drill git commit: Added new videos to home page

Posted by br...@apache.org.
Added new videos to home page


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/cd454b32
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/cd454b32
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/cd454b32

Branch: refs/heads/gh-pages
Commit: cd454b324c01a51c602e2cf61446f8dff7adc926
Parents: bca4701 2e4d595
Author: Tomer Shiran <ts...@gmail.com>
Authored: Thu May 7 11:10:18 2015 -0700
Committer: Tomer Shiran <ts...@gmail.com>
Committed: Thu May 7 11:10:18 2015 -0700

----------------------------------------------------------------------
 css/style.css                                   |  714 +++----
 css/video-box.css                               |   55 +
 index.html                                      |   27 +
 static/fancybox/blank.gif                       |  Bin 0 -> 43 bytes
 static/fancybox/fancybox_loading.gif            |  Bin 0 -> 6567 bytes
 static/fancybox/fancybox_loading@2x.gif         |  Bin 0 -> 13984 bytes
 static/fancybox/fancybox_overlay.png            |  Bin 0 -> 1003 bytes
 static/fancybox/fancybox_sprite.png             |  Bin 0 -> 1362 bytes
 static/fancybox/fancybox_sprite@2x.png          |  Bin 0 -> 6553 bytes
 static/fancybox/helpers/fancybox_buttons.png    |  Bin 0 -> 1080 bytes
 .../helpers/jquery.fancybox-buttons.css         |   97 +
 .../fancybox/helpers/jquery.fancybox-buttons.js |  122 ++
 .../fancybox/helpers/jquery.fancybox-media.js   |  199 ++
 .../fancybox/helpers/jquery.fancybox-thumbs.css |   55 +
 .../fancybox/helpers/jquery.fancybox-thumbs.js  |  162 ++
 static/fancybox/jquery.fancybox.css             |  274 +++
 static/fancybox/jquery.fancybox.js              | 2020 ++++++++++++++++++
 static/fancybox/jquery.fancybox.pack.js         |   46 +
 18 files changed, 3414 insertions(+), 357 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/cd454b32/css/style.css
----------------------------------------------------------------------
diff --cc css/style.css
index 1a34217,a01933b..9828806
--- a/css/style.css
+++ b/css/style.css
@@@ -1,5 -1,5 +1,4 @@@
  @charset "UTF-8";
--/* CSS Document */
  
  @import url(http://fonts.googleapis.com/css?family=Lato:400,300,700);
  
@@@ -13,7 -13,7 +12,7 @@@ html 
  
  body {
    font-family: 'PT Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
--	padding:0;
++  padding:0;
    margin: 0;
    height: 100%;
  }
@@@ -27,79 -27,82 +26,79 @@@
  .nw { white-space:nowrap; }
  
  a.anchor {
--	display:none;
--	font-size:0px;
--	position:absolute;
--	margin-top:-50px;
++  display:none;
++  font-size:0px;
++  position:absolute;
++  margin-top:-50px;
  }
  
  .home_txt a.anchor {
--	margin-top:-90px;
++  margin-top:-90px;
  }
  
  #menu {
--	position:fixed;	
--	top:0;
--	width:100%;
--	z-index:5;
++  position:fixed;  
++  top:0;
++  width:100%;
++  z-index:5;
  }
  
 +/* This seems to override menu position fixed. Fixed positioning allows menu to always be available at the top of the viewport, and JS is not needed to do this */
 +/*
  #menu.r {
--	position:absolute;
++  position:absolute;
  }
 +*/
  
  #menu ul {
--	background:#051221;
--	display:block;
--	font-size:0px;
--	list-style:none;
--	overflow:hidden;
--	padding:0;
--	text-align:right;
--	/*
--	-webkit-box-shadow: 1px 1px 1px 0px rgba(0, 0, 0, 0.4);
--	-moz-box-shadow:    1px 1px 1px 0px rgba(0, 0, 0, 0.4);
--	box-shadow:         1px 1px 1px 0px rgba(0, 0, 0, 0.4);
--	*/
++  background:#051221;
++  display:block;
++  font-size:0px;
++  list-style:none;
++  overflow:hidden;
++  padding:0;
++  text-align:right;
++  /*
++  -webkit-box-shadow: 1px 1px 1px 0px rgba(0, 0, 0, 0.4);
++  -moz-box-shadow:    1px 1px 1px 0px rgba(0, 0, 0, 0.4);
++  box-shadow:         1px 1px 1px 0px rgba(0, 0, 0, 0.4);
++  */
  }
  
  #menu ul li {
--	display:inline-block;
--	font-size:14px;
--	margin:0;
--	padding:0;
++  display:inline-block;
++  font-size:14px;
++  margin:0;
++  padding:0;
  }
  
  #menu ul li.logo {
--	float:left;
--	padding-left:30px;
++  float:left;
++  padding-left:30px;
  }
  
  #menu ul li.logo:hover { background:none; }
  
  #menu ul li.logo a {
--	background:url(../images/apachedrill.png) no-repeat center;
--	background-size:auto 27px;
--	display:block;
--	height:50px;
--	padding:0;
--	width:80px;
++  background:url(../images/apachedrill.png) no-repeat center;
++  background-size:auto 27px;
++  display:block;
++  height:50px;
++  padding:0;
++  width:80px;
  }
  
  #menu ul li a {
--	color:#FFF;
--	text-decoration:none;
--	line-height:50px;
--	padding:14px 20px;
++  color:#FFF;
++  text-decoration:none;
++  line-height:50px;
++  padding:14px 20px;
  }
 -/*
 -#menu ul li.d, #menu ul li.d:hover {
 -	background:#4aaf4c;
 -	font-weight:bold;
 -	text-transform:uppercase;
 -}
 -*/
 +
  #menu ul li.d, #menu ul li.d:hover {
--	background-color: #4aaf4c;
--	font-size:12px;
--	text-transform:uppercase;
++  background-color: #4aaf4c;
++  font-size:12px;
++  text-transform:uppercase;
  }
  #menu ul li.d a .fam {
    position: relative;
@@@ -108,34 -111,34 +107,34 @@@
  }
  
  #menu ul li.d:hover {
--	background-color:#348436;
++  background-color:#348436;
  }
  
  #menu ul li.d * {
--	cursor:pointer;
++  cursor:pointer;
  }
  
  #menu ul li.d a {
--	padding:0px 30px 0 40px;
--	display:block;
++  padding:0px 30px 0 40px;
++  display:block;
  }
  
  
  #menu ul li.l {
--	cursor:pointer;	
++  cursor:pointer;  
  }
  
  #menu ul li.l span {
--	background:url(../images/len.png) no-repeat center;
--	background-size:auto 16px;
--	display:block;
--	line-height:50px;
--	padding:0 20px;
--	width:16px;
++  background:url(../images/len.png) no-repeat center;
++  background-size:auto 16px;
++  display:block;
++  line-height:50px;
++  padding:0 20px;
++  width:16px;
  }
  
  #menu ul li.l.open {
--	background-color:#145aa8;
++  background-color:#145aa8;
  }
  
  #menu ul li#twitter-menu-item {
@@@ -153,277 -156,278 +152,278 @@@
  }
  
  #menu ul li ul {
--	background:#1a6bc7;
--	display:none;
--	margin:0;
--	padding:0;
--	position:absolute;
--	text-align:left;
++  background:#1a6bc7;
++  display:none;
++  margin:0;
++  padding:0;
++  position:absolute;
++  text-align:left;
  }
  
  #menu ul li ul li {
--	display:block;
++  display:block;
  }
  
  #menu ul li ul li a {
--	display:block;
--	line-height:30px;
--	padding:3px 20px;
++  display:block;
++  line-height:30px;
++  padding:3px 20px;
  }
  
  #menu ul li ul li a:hover {
--	background:#145aa8;
++  background:#145aa8;
  }
  
  #menu ul li:hover {
--	background:#1a6bc7;	
++  background:#1a6bc7;  
  }
  
  #menu ul li:hover ul {
--	display:block;
++  display:block;
  }
  #menu ul li.clear-float{
    display:none;
  }
  #subhead {
--	background:#145aa8;
--	color:#FFF;
--	font-size:12px;
--	font-weight:bold;
--	height:40px;
--	line-height:40px;
--	left:0px;
--	letter-spacing:1px;
--	right:0px;
--	position:fixed;	
--	text-align:center;
--	text-transform:uppercase;
--	top:10px;
--	z-index:4;	
--	
--	-webkit-transition: all 0.3s;
--	transition: all 0.3s;
++  background:#145aa8;
++  color:#FFF;
++  font-size:12px;
++  font-weight:bold;
++  height:40px;
++  line-height:40px;
++  left:0px;
++  letter-spacing:1px;
++  right:0px;
++  position:fixed;  
++  text-align:center;
++  text-transform:uppercase;
++  top:10px;
++  z-index:4;  
++  
++  -webkit-transition: all 0.3s;
++  transition: all 0.3s;
  }
  
  #subhead.show {
--	top:50px;
++  top:50px;
  }
  
  #subhead ul {
--	list-style:none;
--	margin:0;
--	padding:0;
++  list-style:none;
++  margin:0;
++  padding:0;
  }
  
  #subhead ul li {
--	display:inline-block;
--	list-style:none;
--	margin:0;
--	padding:0 35px 0 35px;
++  display:inline-block;
++  list-style:none;
++  margin:0;
++  padding:0 35px 0 35px;
  }
  
  #subhead ul li a {
--	background-size:16px auto;
--	background-position:left center;
--	background-repeat:no-repeat;
--	color:#FFF;
--	display:block;
--	padding:0 0 0 25px;
--	text-decoration:none;
++  background-size:16px auto;
++  background-position:left center;
++  background-repeat:no-repeat;
++  color:#FFF;
++  display:block;
++  padding:0 0 0 25px;
++  text-decoration:none;
  }
  
  #subhead ul li.ag a {
--	background-image:url(../images/agility-w.png);
++  background-image:url(../images/agility-w.png);
  }
  
  #subhead ul li.fl a {
--	background-image:url(../images/flexibility-w.png);
++  background-image:url(../images/flexibility-w.png);
  }
  
  #subhead ul li.fam a {
--	background-image:url(../images/familiarity-w.png);
++  background-image:url(../images/familiarity-w.png);
  }
  
  #header {
--	background:url(../images/reel-bg.png) no-repeat;
--	background-size:cover;
--	height:300px;
--	overflow:hidden;
--	position:relative;
++  background:url(../images/reel-bg.png) no-repeat;
++  background-size:cover;
++  height:300px;
++  overflow:hidden;
++  position:relative;
  }
  
  #header .scroller {
--	margin-left:0px;	
--	overflow:hidden;
++  margin-left:0px;  
++  overflow:hidden;
  }
  
  #header .scroller .item {
--	
--	float:left;
--	height:300px;
--	position:relative;
--	width:100%;	
--	z-index:1;
++  
++  float:left;
++  height:300px;
++  position:relative;
++  width:100%;  
++  z-index:1;
  }
  
  #header .scroller .item p a {
--	color:#FFF;
--	font-weight:bold;
--	overflow: hidden;
--	text-decoration:none;	
--	
--	position: relative;
--	display: inline-block;
--	outline: none;
--	vertical-align: bottom;
--	text-decoration: none;
--	white-space: nowrap;
++  color:#FFF;
++  font-weight:bold;
++  overflow: hidden;
++  text-decoration:none;  
++  
++  position: relative;
++  display: inline-block;
++  outline: none;
++  vertical-align: bottom;
++  text-decoration: none;
++  white-space: nowrap;
  }
  
  #header .scroller .item p a::before {
--	position: absolute;
--	top: 0;
--	left: 0;
--	z-index: -1;
--	width: 100%;
--	height: 100%;
--	background: rgba(149,165,166,0.4);
--	content: '';
--	-webkit-transition: -webkit-transform 0.3s;
--	transition: transform 0.3s;
--	-webkit-transform: scaleY(0.618) translateX(-100%);
--	transform: scaleY(0.618) translateX(-100%);
++  position: absolute;
++  top: 0;
++  left: 0;
++  z-index: -1;
++  width: 100%;
++  height: 100%;
++  background: rgba(149,165,166,0.4);
++  content: '';
++  -webkit-transition: -webkit-transform 0.3s;
++  transition: transform 0.3s;
++  -webkit-transform: scaleY(0.618) translateX(-100%);
++  transform: scaleY(0.618) translateX(-100%);
  }
  
  #header .scroller .item p a:hover::before,
  #header .scroller .item p a:focus::before {
--	-webkit-transform: scaleY(0.618) translateX(0);
--	transform: scaleY(0.618) translateX(0);
++  -webkit-transform: scaleY(0.618) translateX(0);
++  transform: scaleY(0.618) translateX(0);
  }
  
  
  #header .scroller .item .tc {
--	color:#FFF;
--	margin-left:80px;
- 	position:absolute;
- 	width:530px;
 -	position:relative;
 -	width:900px;
++  color:#FFF;
++  margin-left:80px;
++  position:relative;
++  width:900px;
+   margin:0 auto;
  }
  
  #header .scroller .item .tc h1, #header .scroller .item .tc h2 {
--	font-size:36px;
--	font-weight:lighter;
--	margin:0 0 8px 0;
--	padding:0;
++  font-size:36px;
++  font-weight:lighter;
++  margin:0 0 8px 0;
++  padding:0;
  }
  #header .scroller .item .tc h2 {
    font-size: 20px;
  }
  
  #header .scroller .item .tc p {
--	font-size:14px;
--	font-weight:lighter;
--	line-height:24px;
--	margin:0;
--	padding:0;
++  font-size:14px;
++  font-weight:lighter;
++  line-height:24px;
++  margin:0;
++  padding:0;
  }
  
  #header .scroller .item .btn {
--	background: none;
--	border: 2px solid #fff;
--	cursor: pointer;
--	color:#FFF;
--	display: inline-block;
--	font-size:12px;
--	font-weight: bold;
--	outline: none;
--	margin-top:18px;
--	position: relative;
--	padding: 5px 30px;
--	text-decoration:none;
--	text-transform: uppercase;
--	
--	-webkit-transition: all 0.3s;
--	-moz-transition: all 0.3s;
--	transition: all 0.3s;
++  background: none;
++  border: 2px solid #fff;
++  cursor: pointer;
++  color:#FFF;
++  display: inline-block;
++  font-size:12px;
++  font-weight: bold;
++  outline: none;
++  margin-top:18px;
++  position: relative;
++  padding: 5px 30px;
++  text-decoration:none;
++  text-transform: uppercase;
++  
++  -webkit-transition: all 0.3s;
++  -moz-transition: all 0.3s;
++  transition: all 0.3s;
  }
  
  #header .scroller .item .btn:after {
--	content: '';
--	position: absolute;
--	z-index: -1;
--	-webkit-transition: all 0.3s;
--	-moz-transition: all 0.3s;
--	transition: all 0.3s;
++  content: '';
++  position: absolute;
++  z-index: -1;
++  -webkit-transition: all 0.3s;
++  -moz-transition: all 0.3s;
++  transition: all 0.3s;
  }
  
  #header .scroller .item .btn-1c:after {
--	width: 0%;
--	height: 100%;
--	top: 0;
--	left: 0;
--	background: #fff;
++  width: 0%;
++  height: 100%;
++  top: 0;
++  left: 0;
++  background: #fff;
  }
  
  #header .scroller .item .btn-1c:hover,
  #header .scroller .item .btn-1c:active {
--	color: #0e83cd;
++  color: #0e83cd;
  }
  
  #header .scroller .item .btn-1c:hover:after,
  #header .scroller .item .btn-1c:active:after {
--	width: 100%;
++  width: 100%;
  }
  
  #header .aLeft {
--	cursor:pointer;
--	height:30px;
--	left:20px;
--	margin-top:-15px;
--	position:absolute;
--	top:50%;
--	width:30px;	
--	z-index:2;
++  cursor:pointer;
++  height:30px;
++  left:20px;
++  margin-top:-15px;
++  position:absolute;
++  top:50%;
++  width:30px;  
++  z-index:2;
  }
  
  #header .aRight {
--	cursor:pointer;
--	height:30px;
--	right:20px;
--	margin-top:-15px;
--	position:absolute;
--	top:50%;
--	width:30px;	
--	z-index:2;
++  cursor:pointer;
++  height:30px;
++  right:20px;
++  margin-top:-15px;
++  position:absolute;
++  top:50%;
++  width:30px;  
++  z-index:2;
  }
  
  .dots {
--	bottom:30px;
--	right:80px;
--	position:absolute;
--	z-index:2;	
++  bottom:30px;
++  right:80px;
++  position:absolute;
++  z-index:2;  
  }
  
  .dots .dot {
--	border-radius: 50%;
--	background-color: transparent;
--	box-shadow: inset 0 0 0 2px white;
--	-webkit-transition: box-shadow 0.3s ease;
--	transition: box-shadow 0.3s ease;
--	
--	cursor:pointer;
--	display:inline-block;
--	height:10px;
--	margin-left:10px;
--	width:10px;
++  border-radius: 50%;
++  background-color: transparent;
++  box-shadow: inset 0 0 0 2px white;
++  -webkit-transition: box-shadow 0.3s ease;
++  transition: box-shadow 0.3s ease;
++  
++  cursor:pointer;
++  display:inline-block;
++  height:10px;
++  margin-left:10px;
++  width:10px;
  }
  
  .dots .dot:hover,
  .dots .dot:focus {
--	box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.6)
++  box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.6)
  }
  
  .dots .dot.sel {
--	box-shadow: inset 0 0 0 8px white;
++  box-shadow: inset 0 0 0 8px white;
  }
  div.alertbar
    {
@@@ -441,140 -445,176 +441,140 @@@ span.strong 
  }
  
  .introWrapper {
--	border-bottom:1px solid #CCC;
--	margin-bottom:50px;	
++  border-bottom:1px solid #CCC;
++  margin-bottom:50px;  
  }
  
  table.intro {
--	background:url(../images/intro-bg.gif) no-repeat center;
--	table-layout:fixed;
--	text-align:center;	
++  background:url(../images/intro-bg.gif) no-repeat center;
++  table-layout:fixed;
++  text-align:center;  
    width: 940px;
  }
  
  table.intro td {
--	background-position:center 25px;
--	background-repeat:no-repeat;
--	background-size:25px auto;
--	padding:65px 0 40px 0;
--	position:relative;
--	vertical-align:top;
++  background-position:center 25px;
++  background-repeat:no-repeat;
++  background-size:25px auto;
++  padding:65px 0 40px 0;
++  position:relative;
++  vertical-align:top;
  }
  
  table.intro td.ag {
--	background-image:url(../images/agility.png);
++  background-image:url(../images/agility.png);
  }
  
  table.intro td.fl {
--	background-image:url(../images/flexibility.png);
++  background-image:url(../images/flexibility.png);
  }
  
  table.intro td.fam {
--	background-image:url(../images/familiarity.png);
++  background-image:url(../images/familiarity.png);
  }
  
  table.intro h1 {
--	font-size:36px;
--	font-weight:normal;
--	margin:0;
--	padding:0;
++  font-size:36px;
++  font-weight:normal;
++  margin:0;
++  padding:0;
  }
  
  table.intro p {
--	font-size:16px;
--	font-weight:lighter;
--	line-height:22px;
--	margin:0;
--	padding:2px 35px 30px 35px;
++  font-size:16px;
++  font-weight:lighter;
++  line-height:22px;
++  margin:0;
++  padding:2px 35px 30px 35px;
  }
  
  table.intro span {
--	bottom:30px;
--	display:block;
--	position:absolute;
--	width:100%;
++  bottom:30px;
++  display:block;
++  position:absolute;
++  width:100%;
  }
  
  table.intro a {
--	color:#1a6bc7;
--	font-size:12px;	
--	font-weight: bold;
++  color:#1a6bc7;
++  font-size:12px;  
++  font-weight: bold;
  }
  
  .home_txt { 
--	text-align:center;
--	padding-bottom:25px;
++  text-align:center;
++  padding-bottom:25px;
  }
  
  .home_txt h1 {
--	font-size:36px;
--	font-weight:normal;
--	line-height:44px;	
--	margin:0;
++  font-size:36px;
++  font-weight:normal;
++  line-height:44px;  
++  margin:0;
  }
  
  .home_txt h2 {
--	font-size:16px;
--	font-weight:normal;
--	line-height:24px;	
++  font-size:16px;
++  font-weight:normal;
++  line-height:24px;  
  }
  
  .home_txt p {
--	font-size:16px;
--	font-weight:lighter;
--	line-height:24px;
--	margin:40px auto;
--	width:770px;	
 -}
 -
 -.getInvolved {
 -	background:#f6f5f7;
 -	font-size:14px;
 -	font-weight:lighter;
 -	line-height:26px;
 -	padding:50px 0;
 -}
 -
 -.getInvolved .wrapper {
 -	margin:auto;
 -	width:780px;
 -}
 -
 -.getInvolved a {
 -	color:#1a6bc7;
 -	text-decoration:none;
 -}
 -
 -.getInvolved table {
 -	font-size:12px;	
 -	margin-top:10px;
 -	table-layout:fixed;
 -	width:100%;
 -}
 -.getInvolved table td, .getInvolved table th {
 -	text-align:left;
 -}
 -
 -.getInvolved table th {
 -	border-bottom:1px solid #e9e9e9;	
 -}
 -
 -.getInvolved table td {
 -	border-top:1px solid #f0f0f0;	
++  font-size:16px;
++  font-weight:lighter;
++  line-height:24px;
++  margin:40px auto;
++  width:770px;  
  }
  
  #blu {
--	display:table;
--	font-size:12px;
--	font-weight:lighter;
--	line-height:28px;
--	table-layout:fixed;
++  display:table;
++  font-size:12px;
++  font-weight:lighter;
++  line-height:28px;
++  table-layout:fixed;
  }
  
  #blu a {
--	color:#FFF;
--	text-decoration:none;
++  color:#FFF;
++  text-decoration:none;
  }
  
  #blu .cell {
--	color:#FFF;
--	display:table-cell;	
--	padding:40px 0;
--	overflow:hidden;
--	vertical-align:middle;
++  color:#FFF;
++  display:table-cell;  
++  padding:40px 0;
++  overflow:hidden;
++  vertical-align:middle;
  }
  
  #blu .cell.left {
--	background:#1b2b3e;
--	padding-right:54px;
++  background:#1b2b3e;
++  padding-right:54px;
  }
  
  #blu .cell.left .wrapper {
--	float:right;	
++  float:right;  
  }
  
  #blu .cell.right {
--	background:#184f8d;
--	padding-left:54px;
++  background:#184f8d;
++  padding-left:54px;
  }
  
  #blu .cell.right .wrapper {
--	float:left;	
++  float:left;  
  }
  
  #blu .cell .wrapper {
--	width:425px;
++  width:425px;
  }
  
  #blu h2 {
--	font-size:24px;
--	font-weight:lighter;	
--	margin:0 0 10px 0;
--	padding:0;
++  font-size:24px;
++  font-weight:lighter;  
++  margin:0 0 10px 0;
++  padding:0;
  }
  
  .page-wrap:after {
@@@ -584,140 -624,158 +584,140 @@@
  #footer {
    color: black;
    background-color: white;
--	font-size:9px;
--	font-weight:lighter;
--	line-height:20px;
--	padding:30px 0;
--	text-align:center;
++  font-size:9px;
++  font-weight:lighter;
++  line-height:20px;
++  padding:30px 0;
++  text-align:center;
  }
  #footer, .page-wrap:after {
    height: 60px;
  }
  
  #footer .wrapper {
--	padding:0 80px;
++  padding:0 80px;
  }
  
  .bui {
--	display:none;
--	position:fixed;
--	top:0;
--	left:0;
--	right:0;
--	bottom:0;
--	background:rgba(0,0,0,0.8);
--	z-index:4;	
++  display:none;
++  position:fixed;
++  top:0;
++  left:0;
++  right:0;
++  bottom:0;
++  background:rgba(0,0,0,0.8);
++  z-index:4;  
  }
  
  .disclaimer {
--	background:#f6f5f5;
--	font-size:12px;
--	font-weight:lighter;
--	line-height:24px;
--	text-align:center;
++  background:#f6f5f5;
++  font-size:12px;
++  font-weight:lighter;
++  line-height:24px;
++  text-align:center;
  }
  
  .disclaimer .wrapper {
--	margin:auto;
--	padding:50px 0 50px 0;
--	width:780px;
++  margin:auto;
++  padding:50px 0 50px 0;
++  width:780px;
  }
  
  .disclaimer h2 {
--	font-size:24px;
--	font-weight:lighter;	
--	margin:0 0 10px 0;
--	padding:0;
++  font-size:24px;
++  font-weight:lighter;  
++  margin:0 0 10px 0;
++  padding:0;
  }
  
  .int_text {
--	margin:40px auto 30px auto;
--	width:780px;
++  margin:40px auto 30px auto;
++  width:780px;
  }
  
  /* Blog */
  div.post.int_text {
--	margin:40px auto 60px auto;
++  margin:40px auto 60px auto;
  }
  
  .int_text a, .int_title a {
--	color:#1a6bc7;
--	/* font-weight:normal;	*/
++  color:#1a6bc7;
++  /* font-weight:normal;  */
  }
  
  .int_text p, .int_text ul, .int_text ol { 
--	font-size:16px;
--	line-height:28px;
--	
++  font-size:16px;
++  line-height:28px;
++  
  }
  
  .int_text p.l1 {
--	padding-left:30px;	
++  padding-left:30px;  
  }
  
  .int_text h2 {
--	font-size:24px;
--	font-weight:normal;	
--	margin:30px 0 0 0;
++  font-size:24px;
++  font-weight:normal;  
++  margin:30px 0 0 0;
  }
  
  .int_text img {
--	display:block;
--	margin:30px auto;	
 -}
 -
 -.int_text table {
 -	font-size:14px;
 -	margin-bottom:50px;
 -	width:100%;	
 -}
 -.int_text table td, .int_text table th {
 -	padding:7px;
 -	text-align:left;
 -}
 -
 -.int_text table tr td:first-child, .int_text table tr th:first-child {
 -	padding-left:0px;
 -}
 -
 -.int_text table.ul td {
 -	border-top:1px solid #e9e9e9;
++  display:block;
++  margin:30px auto;  
  }
  
  ul.num {
--	list-style:decimal;	
++  list-style:decimal;  
  }
  
  .int_title {
--	font-size:16px;
--	font-weight:lighter;
--	margin:auto;
--	margin-top:80px;
--	padding:0 0 15px 0;
--	position:relative;
--	text-align:center;
--	width:600px;	
++  font-size:16px;
++  font-weight:lighter;
++  margin:auto;
++  margin-top:80px;
++  padding:0 0 15px 0;
++  position:relative;
++  text-align:center;
++  width:600px;  
  }
  
  .int_title.int_title_img {
--	background-position:center top;
--	background-repeat:no-repeat;
--	background-size:25px auto;
--	padding-top:40px;	
++  background-position:center top;
++  background-repeat:no-repeat;
++  background-size:25px auto;
++  padding-top:40px;  
  }
  
  .int_title.int_title_img.architecture {
--	background-image:url(../images/architecture.png);	
++  background-image:url(../images/architecture.png);  
  }
  
  .int_title.int_title_img.community {
--	background-image:url(../images/community.png);	
++  background-image:url(../images/community.png);  
  }
  
  .int_title.int_title_img.download {
--	background-image:url(../images/download.png);	
++  background-image:url(../images/download.png);  
  }
  
  .int_title p {
--	line-height:30px;
--	margin:10px 0 25px 0;
++  line-height:30px;
++  margin:10px 0 25px 0;
  }
  
  .int_title h1 {
--	font-size:36px;
--	margin: 20px 0px 20px 0px;
++  font-size:36px;
++  margin: 20px 0px 20px 0px;
  }
  
  .int_title:after {
--	background:#1a6bc7;
--	bottom:24px;
--	content:" ";
--	height:5px;
--	left:275px;
--	position:absolute;
--	width:50px;
++  background:#1a6bc7;
++  bottom:24px;
++  content:" ";
++  height:5px;
++  left:275px;
++  position:absolute;
++  width:50px;
  }
  
  table.intro a:before, table.intro a:after {
@@@ -726,9 -784,9 +726,9 @@@
  }
  
  table.intro a, .int_title a {
--	display:inline-block;
++  display:inline-block;
      overflow: hidden;
--	outline: medium none;
++  outline: medium none;
      position: relative;
      text-decoration: none;
      vertical-align: bottom;
@@@ -737,15 -795,58 +737,15 @@@
  
  #header .dots, .aLeft, .aRight { display:none; }
  
 -div.download { text-align:center; }
 -
 -div.download table { table-layout:fixed; }
 -
 -div.download table a {
 -	background-size:16px auto;
 -	background-position:17px center;
 -	background-repeat:no-repeat;
 -	padding:10px 35px 10px 45px;
 -	line-height:40px;
 -	font-size:12px;
 -	font-weight:normal;
 -	color:#FFF;	
 -}
 -
 -div.download table a.dl {
 -	background-color:#4aaf4c;
 -	background-size:13px auto;
 -	background-image:url(../images/download-ico.png);
 -}
 -
 -div.download table a.dl:hover {
 -	background-color:#348436;
 -}
 -
 -div.download table a.find {
 -	background-color:#4aaf4c;
 -	background-image:url(../images/btn-lens.png);
 -}
 -
 -div.download table a.find:hover {
 -	background-color:#348436;
 -}
 -
 -div.download table a.tutorial {
 -    background-color:#1a6bc7;
 -    background-image:url(../images/btn-lens.png);
 -}
 -
 -div.download table a.tutorial:hover {
 -    background-color:#145aa8;
 -}
 -
  p.info {
--	background-color: #ffc;
--	border: solid 1px #cc9;
--	padding: 5px;
++  background-color: #ffc;
++  border: solid 1px #cc9;
++  padding: 5px;
  }
  
  /* This is to address an issue in Markdown processing which introduces <p> inside <li>. */
  li p {
--	margin-top: 0px;
++  margin-top: 0px;
  }
  
  .hidden {

http://git-wip-us.apache.org/repos/asf/drill/blob/cd454b32/css/video-box.css
----------------------------------------------------------------------
diff --cc css/video-box.css
index 0000000,a0dde80..f343730
mode 000000,100644..100644
--- a/css/video-box.css
+++ b/css/video-box.css
@@@ -1,0 -1,53 +1,55 @@@
+ div#video-box{
+   position:relative;
+   float:right;
+   width:320px;
+   height:160px;
+ }
++
+ div#video-box div.background {
+   position:absolute;
+   background-color:#fff;
+   height:100%;
+   width:100%;
+   opacity:.15;
+ }
++
+ div#video-box div.row {
+   position:absolute;
+   height:40px;
+   width:100%;
+   border-bottom:dotted 1px #999;
+   top:0px;
+   font-size:12px;
+   color:black;
+   line-height:40px;
+   
+ }
+ 
+ div#video-box div.row.r1 {
+   top:40px;
+ }
+ 
+ div#video-box div.row.r2 {
+   top:80px;
+ }
+ 
+ div#video-box div.row.r3 {
+   top:120px;
+   border-bottom:none;
+ }
+ 
+ div#video-box div.row div {
+   overflow: hidden;
+   margin:5px;
+   height:30px;
+   float:left;
+ }
+ 
+ div#video-box div.row div img {
+   height:40px;
+   margin:-5px 0;
+ }
+ 
+ div#video-box a {
+   color:#006;
+ }


[3/6] drill git commit: Video box

Posted by br...@apache.org.
Video box


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/2e4d595a
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/2e4d595a
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/2e4d595a

Branch: refs/heads/gh-pages
Commit: 2e4d595a5d420f0f431f8d6921d9a54a1d1ff555
Parents: 8da3f22
Author: Tomer Shiran <ts...@gmail.com>
Authored: Thu May 7 10:57:51 2015 -0700
Committer: Tomer Shiran <ts...@gmail.com>
Committed: Thu May 7 10:57:51 2015 -0700

----------------------------------------------------------------------
 css/video-box.css | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++
 index.html        | 30 ++++++++++++++++------------
 2 files changed, 71 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/2e4d595a/css/video-box.css
----------------------------------------------------------------------
diff --git a/css/video-box.css b/css/video-box.css
new file mode 100644
index 0000000..a0dde80
--- /dev/null
+++ b/css/video-box.css
@@ -0,0 +1,53 @@
+div#video-box{
+  position:relative;
+  float:right;
+  width:320px;
+  height:160px;
+}
+div#video-box div.background {
+  position:absolute;
+  background-color:#fff;
+  height:100%;
+  width:100%;
+  opacity:.15;
+}
+div#video-box div.row {
+  position:absolute;
+  height:40px;
+  width:100%;
+  border-bottom:dotted 1px #999;
+  top:0px;
+  font-size:12px;
+  color:black;
+  line-height:40px;
+  
+}
+
+div#video-box div.row.r1 {
+  top:40px;
+}
+
+div#video-box div.row.r2 {
+  top:80px;
+}
+
+div#video-box div.row.r3 {
+  top:120px;
+  border-bottom:none;
+}
+
+div#video-box div.row div {
+  overflow: hidden;
+  margin:5px;
+  height:30px;
+  float:left;
+}
+
+div#video-box div.row div img {
+  height:40px;
+  margin:-5px 0;
+}
+
+div#video-box a {
+  color:#006;
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/2e4d595a/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index d0c4c15..8871015 100755
--- a/index.html
+++ b/index.html
@@ -2,23 +2,24 @@
 layout: default
 ---
 <link href="{{ site.baseurl }}/static/fancybox/jquery.fancybox.css" rel="stylesheet" type="text/css">
+<link href="{{ site.baseurl }}/css/video-box.css" rel="stylesheet" type="text/css">
 <script language="javascript" type="text/javascript" src="{{ site.baseurl }}/static/fancybox/jquery.fancybox.pack.js"></script>
 
 <script type="text/javascript">
+
 $(document).ready(function() {
   $(".various").fancybox({
-maxWidth    : 800,
-                   maxHeight   : 600,
-                   fitToView   : true,
-                   autoSize    : true,
-                   beforeLoad  : function(){
-                       var url= $(this.element).attr("href");
-                       url = url.replace(new RegExp("watch\\?v=", "i"), 'v/');
-                       url += '?fs=1&autoplay=1';
-                       this.href = url
-                   }
+    fitToView: true,
+    autoSize: true,
+    beforeLoad: function(){
+      var url= $(this.element).attr("href");
+      url = url.replace(new RegExp("watch\\?v=", "i"), 'v/');
+      url += '?fs=1&autoplay=1';
+      this.href = url
+    }
   });
 });
+
 </script>
 
 <div id="header" class="mw">
@@ -32,8 +33,13 @@ maxWidth    : 800,
 <div class="scroller">
   <div class="item">
     <div class="headlines tc">
-      <!--<iframe allowfullscreen="" frameborder="0" height="200" src="http://www.youtube.com/embed/SgD3RD2Shg4" style="float:right"></iframe>-->
-      <a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=SgD3RD2Shg4" style="float:right"><img src="http://1.bp.blogspot.com/-a4w9qhGaAxE/UnuBETl9rjI/AAAAAAAAHuE/x3ebr4IOfsw/s1600/iconmonstr-video-5-icon.png" height="160" width="320" style="border:solid 1px red"/></a>
+      <div id="video-box">   
+        <div class="background"></div>
+        <div class="row r0"><div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=65c42i7Xg7Q"><img src="http://img.youtube.com/vi/65c42i7Xg7Q/1.jpg" /></a></div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=65c42i7Xg7Q">The Rise of the Non-Relational Datastore</a></div>
+        <div class="row r1"><div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=MYY51kiFPTk"><img src="http://img.youtube.com/vi/MYY51kiFPTk/1.jpg" /></a></div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=MYY51kiFPTk">Deployment Options and Client Access</a></div>
+        <div class="row r2"><div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=bhmNbH2yzhM"><img src="http://img.youtube.com/vi/bhmNbH2yzhM/1.jpg" /></a></div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=bhmNbH2yzhM">Connecting to Data Sources</a></div>
+        <div class="row r3"><div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=6pGeQOXDdD8"><img src="http://img.youtube.com/vi/6pGeQOXDdD8/1.jpg" /></a></div><a class="various fancybox.iframe" href="http://www.youtube.com/watch?v=6pGeQOXDdD8">High-Performance SQL with a JSON Model</a></div>
+      </div>
       <h1 class="main-headline">Apache Drill</h1>
       <h2 id="sub-headline">Schema-free SQL Query Engine <br class="mobile-break" /> for Hadoop and NoSQL</h2>
       <a href="{{ site.baseurl }}/download/" class="download-headline btn btn-1 btn-1c"><span>DOWNLOAD NOW</span></a>