var MooColumns=new Class({Implements:Options,options:{selector:".multiColumn",className:"multiColumn",numOfColumns:2,defaultNumOfColumns:2,gutterWidth:5,gutterClassName:"gutter",columnClassName:"column",tweak:{x:0,y:0,width:0},splittableElements:["p","div","span","ul"],morePrecise:true,tolerance:10,colBreaksTrump:true,debug:false,useHeight:true},sizerElWrapper:null,columnParents:[],mooColumnsAreasArr:[],initialize:function(a){this.setOptions(a);if($type(parseFloat(this.options.numOfColumns))!="number"){this.options.numOfColumns=this.options.defaultNumOfColumns}this.sizerElWrapper=new Element("div",{id:"sizerElWrapper"}).inject(document.body,"inside").setStyles({visibility:"hidden",position:"absolute",display:"block",padding:0,margin:0,top:0,left:0,width:0,height:0,overflow:"hidden"});this.columnParents=$(document.body).getElements(this.options.selector);this.columnParents.each(function(d,b){var e=this.getOrSetId($(d));var c=new MooColumnsArea(this.options,d);this.mooColumnsAreasArr[e]=c;d.className+="-screen"}.bind(this))},getOrSetId:function(c){if(!c.id){var e=new Date();var b=e.getMilliseconds().toString();var a=Math.floor(Math.random()*1000);if(c.nodeName){c.id=c.nodeName.toString()+"-"+b+a.toString()}else{c.id="element"+b+a.toString()}}return c.id}});var MooColumnsArea=new Class({Implements:Options,options:{parentEl:null,printEl:null,debug:null,colBreakDepth:5},columnElsArr:[],gutterElsArr:[],colWidth:null,targetHeight:null,tempContentHolder:null,sizerEl:null,tallest:0,unsplittableTags:["td","tr","table","tbody"],hasColBreaks:false,initialize:function(b,e){this.setOptions(b);this.options.parentEl=e;this.options.parentElHeight=this.options.parentEl.getComputedSize().height;this.sizerEl=new Element("div").inject($("sizerElWrapper"),"inside").setStyles({visibility:"hidden",position:"absolute",display:"block",padding:0,margin:0,top:0,left:0});this.options.printEl=new Element("div",{"class":this.options.className+"-print"}).inject(this.options.parentEl,"after").set("html",this.options.parentEl.innerHTML);this.options.parentEl.empty();var d=new Element("div").setStyles({display:"block",position:"relative",padding:0,margin:0}).inject(this.options.parentEl,"top");this.options.parentEl=e.getFirst();var c=d.getStyle("width").toInt()+this.options.tweak.width.toInt();var a=(100*c)/d.getStyle("width").toInt();d.setStyles({width:a+"%",left:this.options.tweak.x});this.go();window.addEvent("resize",function(){$clear(f);var f=(function(){this.setHeights()}.bind(this)).delay(100)}.bind(this))},go:function(){var a=this.options.numOfColumns-1;if(this.options.gutterWidth.toString().contains("px")){this.options.gutterWidth=Math.round((100*parseFloat(this.options.gutterWidth))/this.options.parentEl.getCoordinates().width)}var b=Math.round(a*parseFloat(this.options.gutterWidth)/this.options.numOfColumns);this.colWidth=Math.round(100/this.options.numOfColumns)-b;var c=Math.round((this.options.parentEl.getCoordinates().width*this.colWidth)/100);this.sizerEl.setStyle("width",c).set("html",this.options.printEl.innerHTML);if(this.options.useHeight){this.options.tolerance=0;this.targetHeight=this.options.parentElHeight}else{this.targetHeight=Math.round(this.sizerEl.getCoordinates().height/this.options.numOfColumns)}this.makeWireFrame();this.options.printEl.set("html",this.options.printEl.get("html").stripScripts().split(/<!--[^(-->)]*-->/).join(""));this.wrapTextNodes(this.options.printEl);this.convertColBreaks(this.options.printEl);if($(this.options.printEl).getElements(".colBreak").length>0){this.hasColBreaks=true}while(this.options.colBreakDepth>0){this.splitColBreakParents(this.options.printEl);this.options.colBreakDepth--}if(this.options.colBreaksTrump===true&&this.hasColBreaks){this.options.morePrecise=false}var d;if(this.hasColBreaks&&this.options.colBreaksTrump){d=this.divideContent2()}else{d=this.divideContent()}for(i=0;i<d.length;i++){this.columnElsArr[i].set("html",d[i].innerHTML)}if(this.options.morePrecise){this.shaveColumns()}this.columnsContentArr=d;this.setHeights()},setHeights:function(){this.options.parentEl.setStyles({overflow:"hidden",height:"0"});this.tallest=0;if(!this.options.debug){if(this.options.useHeight){this.tallest=this.options.parentElHeight}else{for(i=0;i<this.columnsContentArr.length;i++){if(this.columnElsArr[i].getCoordinates().height>this.tallest){this.tallest=this.columnElsArr[i].getCoordinates().height}}if(this.options.parentEl.getScrollSize().y>0){this.tallest=this.options.parentEl.getScrollSize().y}}for(i=0;i<this.columnElsArr.length;i++){this.columnElsArr[i].setStyles({top:0,bottom:0});this.options.parentEl.setStyle("height",this.tallest)}if(Browser.Engine.trident4){this.options.parentEl.getParent().setStyle("height",this.tallest);this.gutterElsArr.each(function(b,a){b.setStyle("height","100%")})}}},makeWireFrame:function(){this.options.parentEl.empty();for(i=0;i<this.options.numOfColumns;i++){colLeft=(i*(parseFloat(this.colWidth)+parseFloat(this.options.gutterWidth)));this.columnElsArr[i]=new Element("div",{"class":"column"}).inject(this.options.parentEl,"inside").setStyles({display:"block",position:"absolute",left:colLeft+"%",top:this.options.tweak.y,width:this.colWidth+"%"});if(i<this.options.numOfColumns-1){this.gutterElsArr[i]=new Element("div",{"class":"gutter"}).inject(this.options.parentEl,"inside").setStyles({display:"block",position:"absolute",left:(colLeft+parseFloat(this.colWidth)+"%"),top:this.options.tweak.y,width:parseFloat(this.options.gutterWidth)+"%",bottom:0});if(this.options.debug){this.gutterElsArr[i].setStyle("background","yellow")}}if(this.options.debug){this.columnElsArr[i].setStyle("background","#eee")}}if(this.options.debug){this.options.parentEl.setStyle("background","#ccc")}},convertColBreaks:function(h){var b=$(h).getElements("hr");for(var a=0;a<b.length;a++){var j=$(b[a]);var g=j.getNext()&&j.getNext().get("tag")==="hr";var f=j.getNext()&&j.getNext().get("tag")==="br"&&j.getNext().getNext()&&j.getNext().getNext().get("tag")==="hr";var e=j.getNext()&&j.getNext().get("tag")==="p"&&!j.getNext().get("html")&&j.getNext().getNext()&&j.getNext().getNext().get("tag")==="hr";var d=j.getNext()&&j.getNext().getNext()&&j.getNext().getNext().getNext()&&j.getNext().get("tag")==="p"&&j.getNext().getNext().get("tag")==="p"&&j.getNext().getNext().getNext().get("tag")==="hr"&&!j.getNext().get("html")&&!j.getNext().getNext().get("html");if(d||e||f||g){var c=new Element("span",{"class":"colBreak"}).inject(j,"before");this.hasColBreaks=true}if(d){j.getNext().getNext().getNext().dispose()}if(d||e||f){j.getNext().getNext().dispose()}if(d||e||f||g){j.getNext().dispose();j.dispose()}}},splitColBreakParents:function(a){$(a).getElements(".colBreak").each(function(g,c){if(!g.getParent()){return}if(!g.getParent().hasClass("wrapper-print")&&!this.unsplittableTags.contains(g.getParent().get("tag"))){var e=g.getParent();var h=e.clone(false);if(!h||h.hasClass("colBreak")){return}var j=$(e).childNodes;var d=j[0];var b=1;while(d&&!d.className||d&&d.className!="colBreak"){if(d.parentNode.className&&d.parentNode.className.contains("multi")){return}if($type(d)==="textnode"||$type(d)==="whitespace"){if(h&&h.innerHTML&&d.nodeValue){h.set("html",h.get("html")+d.nodeValue);d.parentNode.removeChild(d)}else{break}}else{d.inject(h,"bottom")}b++;d=j[b]}var f=e.clone(true,true).inject(e,"after");$(h).replaces($(e));if(f.getElements(".colBreak").length>=1){$(f.getElements(".colBreak")[0]).inject(h,"after")}}}.bind(this))},wrapTextNodes:function(a){var c=$(a).childNodes;for(i=0;i<c.length;i++){if($type(c[i])==="textnode"){var b=new Element("p").inject(c[i],"after").set("html",c[i].nodeValue);c[i].parentNode.removeChild(c[i])}}},divideContent:function(){this.tempContentHolder=new Element("div",{id:"tempContentHolder"}).set("html",this.options.printEl.innerHTML).inject(document.body,"inside").setStyles({display:"none",position:"absolute"});this.sizerEl.empty();var c=[];var a=0;var b=1300;while(this.sizerEl.getCoordinates().height<=this.targetHeight&&$(this.tempContentHolder).getFirst()&&b>0){b--;if(!c[a]){c[a]=new Element("div")}$(this.tempContentHolder).getFirst().inject(this.sizerEl,"inside");if(this.sizerEl.getCoordinates().height>=this.targetHeight||(this.sizerEl.getLast()&&this.sizerEl.getLast().hasClass("colBreak"))){$(c[a]).set("html",this.sizerEl.innerHTML);this.sizerEl.empty();a++;if(a>=this.options.numOfColumns){a=this.options.numOfColumns-1}if(!c[a]){c[a]=new Element("div")}if(!this.tempContentHolder.getFirst()){$(c[a]).set("html",this.tempContentHolder.innerHTML+$(c[a]).innerHTML)}}}$(c[a]).set("html",$(c[a]).innerHTML+this.sizerEl.innerHTML);this.sizerEl.empty();return c},divideContent2:function(){this.tempContentHolder=new Element("div",{id:"tempContentHolder"}).set("html",this.options.printEl.innerHTML).inject(document.body,"inside").setStyles({display:"none",position:"absolute"});this.sizerEl.empty();var c=[];var a=0;var b=1300;while(a<this.options.numOfColumns&&b>0){b--;if(!c[a]){c[a]=new Element("div")}if(this.tempContentHolder.getFirst()){$(this.tempContentHolder).getFirst().inject(this.sizerEl,"inside")}if(this.sizerEl.getLast()&&this.sizerEl.getLast().hasClass("colBreak")){$(c[a]).set("html",this.sizerEl.innerHTML);this.sizerEl.empty();a++;if(a>=this.options.numOfColumns){a=this.options.numOfColumns-1}if(!c[a]){c[a]=new Element("div")}if(!this.tempContentHolder.getFirst()){$(c[a]).set("html",this.tempContentHolder.innerHTML+$(c[a]).innerHTML)}}}$(c[a]).set("html",$(c[a]).innerHTML+this.sizerEl.innerHTML);this.sizerEl.empty();return c},shaveColumns:function(){for(i=0;i<this.columnElsArr.length-1;i++){var c=this.columnElsArr[i].getCoordinates().height-this.targetHeight;var g=this.columnElsArr[i].getLast();var f=g&&g.get("tag")&&this.options.splittableElements.contains(g.get("tag"));if(c>0&&f){var b=g.getCoordinates().height-c+this.options.tolerance;var h=g.clone().inject($("sizerElWrapper"),"inside");h.empty();var a=50;while(a>0&&g.childNodes.length&&g.getCoordinates().height>b){a--;if($type(g.childNodes[g.childNodes.length-1])==="textnode"||$type(g.childNodes[g.childNodes.length-1])==="whitespace"){var d=50;var e=g.childNodes[g.childNodes.length-1].nodeValue.split(" ");while(d>0&&g.childNodes[g.childNodes.length-1].nodeValue.length>=0&&g.getCoordinates().height>b){d--;if($defined(e.getLast())){h.innerHTML=e.getLast().toString()+" "+h.innerHTML}e=e.filter(function(k,j){return j<(e.length-1)&&$defined(k)});g.childNodes[g.childNodes.length-1].nodeValue=e.join(" ")}if(!$defined(e.getLast())){g.removeChild(g.childNodes[g.childNodes.length-1])}}else{if($(g.childNodes[g.childNodes.length-1])){if($(g.childNodes[g.childNodes.length-1]).hasClass("colBreak")){a=0}else{$(g.childNodes[g.childNodes.length-1]).inject(h,"top")}}}}h.inject(this.columnElsArr[i+1],"top")}else{if(c>this.options.tolerance&&!f){g.inject(this.columnElsArr[i+1],"top")}}}}});
