(function(A){A.fn.treemap=function(C,F,E){E=A.extend({labelCell:0,dataCell:1,colorCell:2,headHeight:20,borderWidth:1,sort:true,nested:false,legend:false},E);var D=E.target;return this.pushStack(A.map(this,function(H){var I;if(!E.getData){if(!A.nodeName(H,"table")){return }I=B.getDataFromTable(H,E)}else{I=E.getData(H)}I=I.concat();if(A.fn.treemap.caller!=B.layoutRow){E.minColorValue=Number.POSITIVE_INFINITY;E.maxColorValue=Number.NEGATIVE_INFINITY;if(!E.colorDiscreteVal){E.colorDiscreteVal={num:0}}B.normalizeValues(I,E);E.colorDiscrete=E.minColorValue==Number.POSITIVE_INFINITY;E.rangeColorValue=E.maxColorValue-E.minColorValue}if(E.sort){I.sort(function(K,J){var M=J[1],L=K[1];M=M.constructor==Array?B.getValue(M):M;L=L.constructor==Array?B.getValue(L):L;return M-L})}E.target=D||H;E.numSquare=0;B.render(I,F,C,E);if(A.fn.treemap.caller!=B.layoutRow&&E.legend){jQuery(E.target).append(B.legend(F,E))}if(E.target==H&&A.nodeName(H,"table")){var G=jQuery(H).find(">").insertBefore(H);A(H).remove();H=G.get()}return H}))};var B={normalizeValues:function(G,E){for(var F=0,D=G.length;F<D;F++){if(G[F][1].constructor==Array){B.normalizeValues(G[F][1],E)}else{G[F][1]=parseFloat(G[F][1],10);var H=G[F][1];var C=G[F][2];if(C<E.minColorValue){E.minColorValue=C}if(C>E.maxColorValue){E.maxColorValue=C}if(!E.colorDiscreteVal[C]){E.colorDiscreteVal[C]=E.colorDiscreteVal.num++}}}},getDataFromTable:function(D,C){var E=[];A("tbody tr",D).each(function(){var F=A("td",this);if(C.labelCell===undefined){C.labelCell=C.dataCell}var G=[F.eq(C.labelCell).html(),F.eq(C.dataCell).html(),F.eq(C.colorCell).html()];E.push(G)});return E},emptyView:A("<div>").addClass("treemapView"),render:function(G,F,C,D){D.height=F;D.width=C;var E=B.calculateArea(G);D.viewAreaCoeff=C*F/E;D.view=B.emptyView.clone().css({width:C,height:F});B.squarify(G,[],F,true,D);A(D.target).empty().append(D.view)},squarify:function(E,K,J,D,M){if(J<=0){return }var H=K,L,I,F;do{K=H;L=B.calculateArea(K);if(E.length===0){return B.layoutRow(K,J,D,L,M,true)}F=E.shift();H=K.concat();H.push(F);I=L+(F[1].constructor==Array?B.getValue(F[1]):F[1])}while(B.worst(K,J,L,M.viewAreaCoeff)>=B.worst(H,J,I,M.viewAreaCoeff));var G=B.layoutRow(K,J,D,L,M);E.unshift(F);if(!G){G=B.layoutRow([["",L]],J,D,L,M,true)}var C;if(D){M.width-=G;C=M.width}else{M.height-=G;C=M.height}B.squarify(E,[],C,!D,M)},worst:function(J,I,K,F){var G=J.length;if(!G){return Number.POSITIVE_INFINITY}var E=I*I,H=K*K*F;var D=(E*(J[0][1].constructor==Array?B.getValue(J[0][1]):J[0][1]))/H;var C=H/(E*(J[G-1][1].constructor==Array?B.getValue(J[G-1][1]):J[G-1][1]));return Math.max(D,C)},emptyCell:A("<div>").addClass("treemapCell").css({float:"left",overflow:"hidden"}),emptySquare:A("<div>").addClass("treemapSquare").css("float","left"),layoutRow:function(L,P,F,S,H,O){var U=B.emptySquare.clone();var K,a=S/P;if(F){K=O?H.width:Math.min(Math.round(a*H.viewAreaCoeff),H.width);U.css({width:K,height:P}).addClass("treemapV")}else{K=O?H.height:Math.min(Math.round(a*H.viewAreaCoeff),H.height);U.css({height:K,width:P}).addClass("treemapH")}var Q=L.length-1,D=0,b=H.borderWidth,W=b*2,I=[];for(var Z=0;Z<=Q;Z++){var X=L[Z],R=X[1].constructor==Array,J=[],d=R?B.getValue(X[1]):X[1];var C=B.emptyCell.clone();if(!R){C.html(X[0]).attr("title",C.text()+" ("+d+"%)")}var Y=Z==Q;var G=K,M=Y?P-D:Math.round(d/a);if(M<=0){break}D+=M;var c={};if(b&&K>W&&M>W){if(jQuery.boxModel){G-=b*(2-(H.numSquare>=2||!H.numSquare&&H.nested?1:0)-(O&&H.nested?1:0));M-=b*(2-(!Y||H.nested?1:0)-(H.numSquare>=1&&!Z?1:0))}c.border=b+"px solid";if(!Y||H.nested){c["border"+(F?"Bottom":"Right")]="none"}if(H.numSquare>=2||!H.numSquare&&H.nested){c["border"+(F?"Left":"Top")]="none"}if(H.numSquare>=1&&!Z){c["border"+(F?"Top":"Left")]="none"}if(O&&H.nested){c["border"+(F?"Right":"Bottom")]="none"}}var T=F?M:G,V=F?G:M;c.height=T;c.width=V;if(R){if(H.headHeight){J=A("<div class='treemapHead'>").css({width:V,height:H.headHeight,overflow:"hidden"}).html(X[0]).attr("title",X[0]+" ("+d+")");if(F){T=M-=H.headHeight}else{T=G-=H.headHeight}}if(T>0){var N={};for(var E in H){if(H.hasOwnProperty(E)){N[E]=H[E]}}N=jQuery.extend(N,{getData:function(){return X[1].concat()},target:undefined,nested:true});C.treemap(V,T,N)}C.prepend(J)}else{if(X[2]){c.backgroundColor=B.getColor(X[2],H)}}C.css(c);I.push(C[0])}H.view.append(U.append(I));H.numSquare++;return K},calculateArea:function(G){if(G.total){return G.total}var D=0,F=G.length;for(var C=0;C<F;C++){var E=G[C][1];D+=E.constructor==Array?B.getValue(E):E}return(G.total=D)},getValue:function(C){if(!C.total){C.total=B.calculateArea(C)}return C.total},getColor:function(D,C){return D},getColorCode:function(E){var D,C;E=Math.round(E*510);if(E===0){return"#0000FF"}if(E<=255){D=E.toString(16);if(D.length<2){D="0"+D}C=(255-E).toString(16);if(C.length<2){C="0"+C}return"#00"+D+C}if(E<=510){E-=255;D=(E).toString(16);if(D.length<2){D="0"+D}C=(255-E).toString(16);if(C.length<2){C="0"+C}return"#"+D+C+"00"}},emptyLegendDescr:A("<div class='treemapLegendDescr'>").css({position:"absolute",left:25,width:200}),legend:function(F,E){var C=A("<div class='treemapLegend'>").css({position:"relative",float:"left",height:F-2});var G=A("<div>").css({width:20,height:F-2,border:"1px solid"});E.view.css({float:"left",marginRight:20});if(E.colorDiscrete){A.each(E.colorDiscreteVal,function(K,N){if(K!="num"){K=E.descriptionCallback?E.descriptionCallback(K):K;var J=Math.round(N*F/E.colorDiscreteVal.num);var L=A("<div>").css({height:20,width:20,backgroundColor:B.getColor(K,E),position:"absolute",bottom:J});var M=B.emptyLegendDescr.clone().text(K).css("bottom",J);C.append(L).append(M)}})}else{for(i=F-1;i>1;i--){var D=A("<div>").height(1).css("backgroundColor",B.getColorCode(i/F));G.append(D)}C.append(G);for(i=0;i<10;i++){var I=i*E.rangeColorValue/10+E.minColorValue;I=E.descriptionCallback?E.descriptionCallback(I):I;var H=B.emptyLegendDescr.clone().text(I.toString()).css("bottom",Math.round(i*F/10));C.append(H)}}return C}}})(jQuery);
