(function(a){"use strict";var b={factory:{},init:function(){this.h5ai=new this.factory.H5ai(h5aiOptions,h5aiLangs),this.pathCache=new this.factory.PathCache,this.connector=new this.factory.Connector,this.html=new this.factory.Html,this.extended=new this.factory.Extended,this.extended.init(),this.connector.init(),this.h5ai.init(),a.h5ai={click:a.proxy(this.h5ai.pathClick,this.h5ai)}}};b.factory.H5ai=function(b,c){var d=a(window),e=a(document),f={store:{viewmode:"h5ai.pref.viewmode",lang:"h5ai.pref.lang"},callbacks:{pathClick:[]},h5aiAbsHref:"/h5ai",viewmodes:["details","icons"],sortorder:{column:"name",ascending:!0},showTree:!0,slideTree:!0,folderStatus:{},lang:null,useBrowserLang:!0,setParentFolderLabels:!0,linkHoverStates:!0,dateFormat:"yyyy-MM-dd HH:mm",showThumbs:!0,zippedDownload:!0},g=a.extend({},f,b),h=function(){return g.h5aiAbsHref+"/php/api.php"},i=function(a){return g.h5aiAbsHref+"/images/"+a+".png"},j=function(a,b){return g.h5aiAbsHref+"/icons/"+(b?"48x48":"16x16")+"/"+a+".png"},k=function(b){a.isFunction(b)&&g.callbacks.pathClick.push(b)},l=function(b,c){a.each(g.callbacks.pathClick,function(a,d){d(b,c)})},m=function(){var b=amplify.store(g.store.viewmode);return a.inArray(b,g.viewmodes)>=0?b:g.viewmodes[0]},n=function(b){b&&amplify.store(g.store.viewmode,b),b=m(),a("#viewdetails,#viewicons").hide().removeClass("current"),g.viewmodes.length>1&&(a.inArray("details",g.viewmodes)>=0&&a("#viewdetails").show(),a.inArray("icons",g.viewmodes)>=0&&a("#viewicons").show()),b==="details"?(a("#viewdetails").closest("li").addClass("current"),a("#extended").addClass("details-view").removeClass("icons-view").show()):b==="icons"?(a("#viewicons").closest("li").addClass("current"),a("#extended").removeClass("details-view").addClass("icons-view").show()):a("#extended").hide()},o=function(){var b=function(){var b=d.height(),c=a("body > nav").outerHeight(),e=a("body > footer").outerHeight(),f=50,g=50;a("body").css({"margin-top":c+f,"margin-bottom":e+f}),a("#tree").css({top:c+g,height:b-c-e-36-2*g});try{a("#tree").get(0).updateScrollbar()}catch(h){}};d.resize(function(){b()}),b()},p=function(){a("#table").remove(),a("#viewdetails").closest("li").click(function(){n("details")}),a("#viewicons").closest("li").click(function(){n("icons")}),a("#extended .entry a").hover(function(){if(a("#extended").hasClass("icons-view")){var b=a(this);a(".status.default").hide(),a(".status.dynamic").empty().append(b.find(".label").clone()).append(a("<span class='sep'>·</span>")).append(b.find(".date").clone()).show(),b.closest(".entry").hasClass("folder")||a(".status.dynamic").append(a("<span class='sep'>·</span>")).append(b.find(".size").clone())}},function(){a(".status.default").show(),a(".status.dynamic").empty().hide()})},q=function(b,c){var d=a("#tree"),e=a("#extended");g.slideTree&&d.outerWidth()<e.offset().left||b?c?d.stop().css({left:0}):d.stop().animate({left:0}):c?d.stop().css({left:18-d.outerWidth()}):d.stop().animate({left:18-d.outerWidth()})},r=function(){a("#tree").hover(function(){q(!0)},function(){q()}),d.resize(function(){q()}),q(!1,!0)},s=function(b){var c=[];return a("a[href^='/']").each(function(){a(this).attr("href")===b&&c.push(this)}),a(c)},t=function(){g.linkHoverStates&&a("a[href^='/']:not(.linkedHoverStates)").each(function(){var b=a(this).addClass("linkedHoverStates"),c=b.attr("href");b.hover(function(){s(c).addClass("hover")},function(){s(c).removeClass("hover")})})},u=function(b,c,d){var e=amplify.store(g.store.lang),f=g.dateFormat,h,i,j;b[e]?c=e:d&&(h=navigator.language,b[h]?c=h:h.length>2&&b[h.substr(0,2)]&&(c=h.substr(0,2))),b[c]||(c="en"),i=b[c],i&&(a.each(i,function(b,c){a(".l10n-"+b).text(c)}),a(".lang").text(c),a(".langOption").removeClass("current"),a(".langOption."+c).addClass("current")),f=i.dateFormat||f,a("#extended .entry .date").each(function(){var b=a(this),c=b.data("time"),d=c?(new Date(c)).toString(f):"";b.text(d)})},v=function(b){var c=a(".langOptions"),d=[],e;a.each(b,function(a){d.push(a)}),d.sort(),e=a("<ul />"),a.each(d,function(c,d){a("<li class='langOption' />").addClass(d).text(d+" - "+b[d].lang).appendTo(e).click(function(){amplify.store(g.store.lang,d),u(b,d,!1)})}),a("#langSelector .langOptions").append(e),a("#langSelector").hover(function(){c.css("top","-"+c.outerHeight()+"px").stop(!0,!0).fadeIn()},function(){c.stop(!0,!0).fadeOut()})},w=function(b){var c=a(this),d=c.closest(".entry");c.hasClass("unknown")?a.get(h(),{action:"tree",href:d.find("> a").attr("href")},function(b){var e=a(b);c.removeClass("unknown"),e.find("> li").size()===0?c.replaceWith(a("<span class='blank' />")):(c.addClass("open"),d.find("> .content").replaceWith(e),a("#tree").get(0).updateScrollbar(),e.find(".indicator:not(.initiated)").click(w).addClass("initiated"))}):c.hasClass("open")?(c.removeClass("open"),a("#tree").get(0).updateScrollbar(!0),d.find("> .content").slideUp(function(){a("#tree").get(0).updateScrollbar()})):(c.addClass("open"),a("#tree").get(0).updateScrollbar(!0),d.find("> .content").slideDown(function(){a("#tree").get(0).updateScrollbar()}))},x=function(){a("#tree .entry.folder .indicator:not(.initiated)").click(w).addClass("initiated")},y=function(){var b=0,c=0,d=!1,f=function(){var b,c,d=a("#extended a.selected");d.size()>0?(d.each(function(){c=a(this).attr("href"),b=b?b+":"+c:c}),b=h()+"?action=zip&hrefs="+b,a("#download").show().find("a").attr("href",b)):a("#download").hide().find("a").attr("href","#")},i=function(d){var e=Math.min(b,d.pageX),f=Math.min(c,d.pageY),g=Math.abs(b-d.pageX),h=Math.abs(c-d.pageY),i;d.preventDefault(),a("#selection-rect").css({left:e,top:f,width:g,height:h}),i=a("#selection-rect").fracs("rect"),a("#extended a").removeClass("selecting").each(function(){var b=a(this),c=b.fracs("rect"),d=i.intersection(c);d&&!b.closest(".entry").hasClass("folder-parent")&&b.addClass("selecting")})},j=function(b){b.preventDefault(),e.unbind("mousemove",i),a("#selection-rect").hide().css({left:0,top:0,width:0,height:0}),a("#extended a.selecting.selected").removeClass("selecting").removeClass("selected"),a("#extended a.selecting").removeClass("selecting").addClass("selected"),f()},k=function(g){var h=a.fracs.viewport();b=g.pageX,c=g.pageY;if(g.button!==0||b>=h.right||c>=h.bottom)return;g.preventDefault(),d||(a("#extended a").removeClass("selected"),f()),a("#selection-rect").show().css({left:b,top:c,width:0,height:0}),i(g),e.bind("mousemove",i).one("mouseup",j)},l=function(a){return a.stopPropagation(),!1},m=function(a){d||l(a)};g.zippedDownload&&(a("body>nav,body>footer,#tree").bind("mousedown",l),a("#extended .entry a").bind("mousedown",m).live("mousedown",m),e.bind("mousedown",k).keydown(function(a){a.keyCode===17&&(d=!0)}).keyup(function(a){a.keyCode===17&&(d=!1)}))},z=function(){n(),o(),p(),r(),t(),v(c),u(c,g.lang,g.useBrowserLang),x(),y()};return{settings:g,api:h,image:i,icon:j,shiftTree:q,linkHoverStates:t,pathClick:k,triggerPathClick:l,initIndicators:x,init:z}},b.factory.Path=function(c,d){var e=function(a){try{return decodeURI(a)}catch(b){}return a},f,g,h,i;this.status=undefined,this.content=undefined,this.html={$crumb:undefined,$extended:undefined,$tree:undefined},this.treeOpen=!1,b.pathCache.pathEndsWithSlash(c)||(c+="/"),d?(f=a(d).find("td"),g=f.eq(0).find("img"),h=f.eq(1).find("a"),this.parentFolder=c,this.label=h.text(),this.dateOrgStr=f.eq(2).text(),this.date=Date.parse(this.dateOrgStr),this.time=this.date?this.date.getTime():0,this.size=f.eq(3).text(),this.href=h.attr("href"),this.alt=g.attr("alt"),this.icon16=g.attr("src")):(i=b.pathCache.splitPathname(c),this.parentFolder=i[0],this.label=e(i[1]),this.label==="/"&&(this.label=e(document.domain)+"/"),this.dateOrgStr="",this.date=null,this.time=0,this.size="",this.href=i[1],this.alt="[DIR]",this.icon16=b.h5ai.icon("folder")),b.pathCache.pathEndsWithSlash(this.label)&&(this.label=this.label.slice(0,-1)),this.icon48=this.icon16.replace("16x16","48x48"),this.isFolder=this.alt==="[DIR]",this.isParentFolder=this.isFolder&&this.label==="Parent Directory",this.absHref=this.isParentFolder?this.href:this.parentFolder+this.href,this.isCurrentFolder=this.absHref===document.location.pathname,this.isDomain=this.absHref==="/",this.isParentFolder&&b.h5ai.settings.setParentFolderLabels&&(this.isDomain?this.label=e(document.domain):this.label=e(b.pathCache.splitPathname(b.pathCache.splitPathname(this.parentFolder)[0])[1].slice(0,-1)))},b.factory.Path.prototype={isEmpty:function(){return!this.content||a.isEmptyObject(this.content)},onClick:function(a){b.h5ai.triggerPathClick(this,a)}},b.factory.PathCache=function(){var c={},d=/^(\/(.*\/)*)([^\/]+\/?)$/,e=/\/$/,f=function(a){var b;return a==="/"?["","/"]:(b=d.exec(a),[b[1],b[3]])},g=function(a){return e.test(a)},h=function(b,c){var d,e,f;return g(b)||(b+="/"),c?(d=a(c).find("td").eq(1).find("a"),e=d.text()==="Parent Directory",f=d.attr("href"),e?undefined:b+f):b},i=function(a,d){var e=h(a,d),f=c[e];return f||(f=new b.factory.Path(a,d),f.isParentFolder||(c[f.absHref]=f)),f};this.splitPathname=f,this.pathEndsWithSlash=g,this.getPath=i,this.cache=c},b.factory.Connector=function(){var c=/^text\/html;h5ai=/,d={},e=function(e,f){if(b.h5ai.settings.folderStatus[e]){f(b.h5ai.settings.folderStatus[e]);return}if(d[e]){f(d[e]);return}a.ajax({url:e,type:"HEAD",complete:function(a){var b=a.status;b===200&&c.test(a.getResponseHeader("Content-Type"))&&(b="h5ai"),d[e]=b,f(b)}})},f=function(a){a.isFolder&&!a.isParentFolder&&a.status===undefined&&e(a.absHref,function(c){c!=="h5ai"&&(a.status=c),b.html.updateHtml(a),b.h5ai.linkHoverStates()})},g=function(){a.each(b.pathCache.cache,function(a,b){f(b)})},h=function(d,g,h){e(d,function(e){if(e!=="h5ai"){h(e,{});return}a.ajax({url:d,type:"GET",dataType:"html",error:function(a){h(a.status,{})},success:function(e,i,j){var k={};if(!c.test(j.getResponseHeader("Content-Type"))){h(j.status,{});return}a(e).find("#table td").closest("tr").each(function(){var a=b.pathCache.getPath(d,this);a.isFolder&&(!a.isParentFolder||g)&&(k[a.absHref]=a,f(a))}),h("h5ai",k)}})})},i=function(a,c){h(a,!1,function(d,e){var f=b.pathCache.getPath(a);f.status=d,f.content=e,c(f)})},j=function(a,c,d){i(a,function(e){var f=b.pathCache.splitPathname(a)[0];e.treeOpen=!0,d&&(e.content[d.absHref]=d),f===""?c(e):j(f,c,e)})},k=function(){j(document.location.pathname,function(c){a("#tree").append(b.html.updateTreeHtml(c)).scrollpanel().show(),b.h5ai.shiftTree(!1,!0),b.h5ai.linkHoverStates(),setTimeout(function(){a("#tree").get(0).updateScrollbar()},1)})},l=function(){b.h5ai.settings.showTree&&(g(),k())};return{fetchStatusAndContent:h,init:l}},b.factory.Html=function(){var c=["bmp","gif","ico","image","jpg","jpeg","png","tiff"],d=function(a,c){b.h5ai.triggerPathClick(a,c)},e=function(c){var e,f;return c.html.$crumb&&c.html.$crumb.data("status")===c.status?c.html.$crumb:(e=a("<li class='crumb' />").data("path",c).addClass(c.isFolder?"folder":"file"),c.status&&e.data("status",c.status),f=a("<a><img src='"+b.h5ai.image("crumb")+"' alt='>' />"+c.label+"</a>").appendTo(e).attr("href",c.absHref).click(function(){d(c,"crumb")}),c.isDomain&&(e.addClass("domain"),f.find("img").attr("src",b.h5ai.image("home"))),c.isCurrentFolder&&e.addClass("current"),isNaN(c.status)||(c.status===200?a("<img class='hint' src='"+b.h5ai.image("page")+"' alt='not listable' />").appendTo(f):a("<span class='hint'>("+c.status+")</span>").appendTo(f)),c.html.$crumb&&c.html.$crumb.replaceWith(e),c.html.$crumb=e,e)},f=function(e){var f,g,h,i=e.date?e.date.toString(b.h5ai.settings.dateFormat):"",j=e.absHref.substr(e.absHref.lastIndexOf(".")+1),k=e.icon16,l=e.icon48;return e.html.$extended&&e.html.$extended.data("status")===e.status?e.html.$extended:(f=a("<li class='entry' />").data("path",e).addClass(e.isFolder?"folder":"file"),e.status&&f.data("status",e.status),b.h5ai.settings.showThumbs&&a.inArray(j.toLowerCase(),c)>=0&&(k=b.h5ai.api()+"?action=thumb&href="+e.absHref+"&width=16&height=16&mode=square",l=b.h5ai.api()+"?action=thumb&href="+e.absHref+"&width=96&height=46&mode=rational"),h=a("<span class='label'>"+e.label+"</span>"),g=a("<a />").attr("href",e.absHref).click(function(){d(e,"extended")}).appendTo(f).append(a("<span class='icon small'><img src='"+k+"' alt='"+e.alt+"' /></span>")).append(a("<span class='icon big'><img src='"+l+"' alt='"+e.alt+"' /></span>")).append(h).append(a("<span class='date' data-time='"+e.time+"'></span>")).append(a("<span class='size'>"+e.size+"</span>")),g.hover(function(){if(a("#extended").hasClass("icons-view")){var b=a(this);a(".status.default").hide(),a(".status.dynamic").empty().append(b.find(".label").clone()).append(a("<span class='sep'>·</span>")).append(b.find(".date").clone()).show(),b.closest(".entry").hasClass("folder")||a(".status.dynamic").append(a("<span class='sep'>·</span>")).append(b.find(".size").clone())}},function(){a(".status.default").show(),a(".status.dynamic").empty().hide()}),e.isParentFolder&&(b.h5ai.settings.setParentFolderLabels||h.addClass("l10n-parentDirectory"),f.addClass("folder-parent")),isNaN(e.status)||(e.status===200?(f.addClass("page"),g.find(".icon.small img").attr("src",b.h5ai.icon("folder-page")),g.find(".icon.big img").attr("src",b.h5ai.icon("folder-page",!0))):(f.addClass("error"),h.append(a("<span class='hint'> "+e.status+" </span>")))),e.html.$extended&&e.html.$extended.replaceWith(f),e.html.$extended=f,f)},g=function(c){var d,e,f,h,i,j;d=a("<div class='entry' />").data("path",c).addClass(c.isFolder?"folder":"file"),e=a("<span class='blank' />").appendTo(d),f=a("<a />").attr("href",c.absHref).click(function(){c.onClick(c,"tree")}).appendTo(d).append(a("<span class='icon'><img src='"+c.icon16+"' /></span>")).append(a("<span class='label'>"+c.label+"</span>"));if(c.isFolder){if(c.status===undefined||!c.isEmpty())h=a("<span class='indicator initiated'><img src='"+b.h5ai.image("tree")+"' /></span>").click(function(d){var e=h.closest(".entry");h.hasClass("unknown")?b.connector.fetchStatusAndContent(c.absHref,!1,function(b,d){c.status=b,c.content=d,c.treeOpen=!0,a("#tree").get(0).updateScrollbar(!0),g(c),a("#tree").get(0).updateScrollbar()}):h.hasClass("open")?(c.treeOpen=!1,h.removeClass("open"),a("#tree").get(0).updateScrollbar(!0),e.find("> ul.content").slideUp(function(){a("#tree").get(0).updateScrollbar()})):(c.treeOpen=!0,h.addClass("open"),a("#tree").get(0).updateScrollbar(!0),e.find("> ul.content").slideDown(function(){a("#tree").get(0).updateScrollbar()}))}),c.status===undefined?h.addClass("unknown"):c.treeOpen&&h.addClass("open"),e.replaceWith(h);c.isDomain&&(d.addClass("domain"),f.find(".icon img").attr("src",b.h5ai.icon("folder-home"))),c.isCurrentFolder&&(d.addClass("current"),f.find(".icon img").attr("src",b.h5ai.icon("folder-open"))),c.isEmpty()||(i=a("<ul class='content' />").appendTo(d),a.each(c.content,function(b,c){a("<li />").append(g(c)).appendTo(i)}),(c.status===undefined||!c.treeOpen)&&i.hide()),isNaN(c.status)||(c.status===200?(f.find(".icon img").attr("src",b.h5ai.icon("folder-page")),f.append(a("<span class='hint'><img src='"+b.h5ai.image("page")+"' /></span>"))):(d.addClass("error"),f.append(a("<span class='hint'>"+c.status+"</span>"))))}return c.html.$tree&&c.html.$tree.replaceWith(d),c.html.$tree=d,d},h=function(a){e(a),f(a),g(a)};return{updateCrumbHtml:e,updateExtendedHtml:f,updateTreeHtml:g,updateHtml:h}},b.factory.Extended=function(){var c={customHeader:"h5ai.header.html",customFooter:"h5ai.footer.html"},d=function(){document.title=document.domain+document.location.pathname;try{document.title=decodeURI(document.title)}catch(a){}},e=function(){var c=a("body > nav ul"),d="/",e=b.pathCache.getPath(d),f=document.location.pathname.split("/");c.append(b.html.updateCrumbHtml(e)),a.each(f,function(a,e){e!==""&&(d+=e+"/",c.append(b.html.updateCrumbHtml(b.pathCache.getPath(d))))})},f=function(){var c=a("#table th"),d=c.eq(1).find("a"),e=c.eq(2).find("a"),f=c.eq(3).find("a"),g=document.location.search,h={column:g.indexOf("C=N")>=0?"name":g.indexOf("C=M")>=0?"date":g.indexOf("C=S")>=0?"size":b.h5ai.settings.sortorder.column,ascending:g.indexOf("O=A")>=0?!0:g.indexOf("O=D")>=0?!1:b.h5ai.settings.sortorder.ascending},i,j,k;j=a("<ul/>"),k=a("<li class='header' />").appendTo(j).append(a("<a class='icon'></a>")).append(a("<a class='label' href='"+d.attr("href")+"'><span class='l10n-name'>"+d.text()+"</span></a>")).append(a("<a class='date' href='"+e.attr("href")+"'><span class='l10n-lastModified'>"+e.text()+"</span></a>")).append(a("<a class='size' href='"+f.attr("href")+"'><span class='l10n-size'>"+f.text()+"</span></a>")),h.ascending?i=a("<img src='"+b.h5ai.image("ascending")+"' class='sort' alt='ascending' />"):i=a("<img src='"+b.h5ai.image("descending")+"' class='sort' alt='descending' />"),h.column==="date"?k.find("a.date").prepend(i):h.column==="size"?k.find("a.size").prepend(i):k.find("a.label").append(i),a("#table td").closest("tr").each(function(){var a=b.pathCache.getPath(document.location.pathname,this);j.append(b.html.updateExtendedHtml(a))}),a("#extended").append(j),j.children(".entry:not(.parentfolder)").size()===0&&a("#extended").append(a("<div class='empty l10n-empty'>empty</div>"))},g=function(){a.ajax({url:c.customHeader,dataType:"html",success:function(b){a("#content > header").append(a(b)).show()}}),a.ajax({url:c.customFooter,dataType:"html",success:function(b){a("#content > footer").prepend(a(b)).show()}})},h=function(){a(".folderCount").text(a("#extended .entry.folder:not(.parentfolder)").size()),a(".fileCount").text(a("#extended .entry.file").size())};this.init=function(){d(),e(),f(),g(),h()}},a(function(){b.init()})})(jQuery)
