P4.Util={blurbify:function(A,B){if(A!=null&&A.length>B){return A.substring(0,B-3)+"..."}else{return A}},parseCurrency:function(D){if(!D){return null}if(!this.matchesExactly(D,/(- )?\(?.?[0-9]+[0-9\.\,]*\)?/)){alert('unable to parse currency "'+D+'"')}var B=/\(.[0-9\.\,]*\)/g.test(D);var A=/- .[0-9\.\,]*/g.test(D);if(B){D=D.split(/[\(\)]/g)[1]}if(A){D=D.substring(2)}if(!/^[0-9][0-9]+.*/.test(D)){D=D.substring(1,D.length)}if(this.isCommaSeparator(D)){D=D.replace(/\./g,"");D=D.replace(/\,/g,".")}else{D=D.replace(/\,/g,"")
}var C=new Number(D);return B||A?-C:C},formatNumberLike:function(F,A,E,D){var B=this.getCurrencySymbol(A);var C=this.getFractionSeparator(A);return this.formatNumber(F,E,C,B,D)},formatNumber:function(F,J,C,E,H){var A=J==null?1:Math.pow(10,J);if(!E){E=""}if(!C){C="."}var B=false;if(F<0){B=true;F=F*-1}F=F.toString().replace(/\|\./g,"");if(isNaN(F)){F="0"}var G=Math.floor((F*A+0.5)%A);F=Math.floor((F*A+0.5)/A).toString();if(G<10){G="0"+G}G=C+G;for(var D=0;D<Math.floor((F.length-(1+D))/3);D++){F=F.substring(0,F.length-(4*D+3))+","+F.substring(F.length-(4*D+3))
}var I=E+F+G;if(H){return(B?"-":"+")+I}else{if(B){return"- "+I}else{return I}}},removeIdAttribute:function(){$A(arguments).each(function(B){var A=$(B);if(B){A.removeAttribute("id")}})},matchesExactly:function(A,B){return B.test(A)&&A.match(B)[0].length==A.length},isCommaSeparator:function(A){return this.matchesExactly(A,/.*\,[0-9]{2}/)},isRightClick:function(A){return(A.which&&A.which==3)||(A.button&&A.button==2)},getFractionSeparator:function(A){return this.isCommaSeparator(A)?",":"."},getCurrencySymbol:function(A){if(/\([^0-9][0-9]+\.*/.test(A)){return A.charAt(1)
}if(/-[^0-9][0-9]+\.*/.test(A)){return A.charAt(1)}if(/-\ [^0-9][0-9]+\.*/.test(A)){return A.charAt(2)}else{if(/[^0-9][0-9]+\.*/.test(A)){return A.charAt(0)}else{return null}}},stripPx:function(A){if(A==null||A=="0"){return 0}var B=A.match(/([0-9]+)px/);if(B){return new Number(B[1])}else{throw'no "px" units found on value "'+A+'"'}},getOffsetToPutOnPage:function(F){F=$(F);var E={x:0,y:0};var D=Position.cumulativeOffset(F);var H=this.getWindowScroll(window);if(D[0]<H.left){E.x=D[0]-H.left}if(D[1]<H.top){E.y=D[1]-H.top
}var A=Element.getDimensions(F);var C=D[0]+A.width;var I=H.left+H.width-20;if(!E.x&&C>I){E.x=I-C}var G=D[1]+A.height;var B=H.top+H.height-20;if(!E.y&&G>B){E.y=B-G}if(D[0]+E.x<H.left){E.x=H.left-D[0]}if(D[1]+E.y<H.top){E.y=H.top-D[1]}return E},getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;
H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}return{top:T,left:L,width:W,height:H}},positionOnPage:function(C,B){C=$(C);var E=this.getOffsetToPutOnPage(C);if(E.x||E.y){var D=B&&B.duration!=null&&B.duration==0;if(typeof Effect!="undefined"&&typeof Effect.Move!="undefined"&&!D){B=Object.extend({},B);Object.extend(B,E);return new Effect.Move(C,B)}else{var A=C.cumulativeOffset();
C.setStyle({left:(A.left+E.x)+"px",top:(A.top+E.y)+"px"})}}else{if(B.afterFinish){B.afterFinish()}}},getDefinedTop:function(A){return this.stripPx(Element.getStyle(A,"top"))},getDefinedLeft:function(A){return this.stripPx(Element.getStyle(A,"left"))},getDefinedHeight:function(A){return this.stripPx(Element.getStyle(A,"height"))},getDefinedWidth:function(A){return this.stripPx(Element.getStyle(A,"width"))},oddEven:function(A){$A(A).each(function(C,B){if(B%2==0){Element.removeClassName(C,"odd");Element.addClassName(C,"even")
}else{Element.removeClassName(C,"even");Element.addClassName(C,"odd")}})}};document.getElementsByIdRegex=function(A,B,C){if(A.id&&B.test(A.id)){C.push(A)}$(A.childNodes).each(function(D){this.getElementsByIdRegex(D,B,C)}.bind(this))};String.prototype.enumToCamelCase=function(){return this.replace(/_/,"-").toLowerCase().toLowerCamelCase()};String.prototype.toLowerCamelCase=function(){var A=this.camelize();return A.charAt(0).toLowerCase()+A.substring(1)};String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"")
};Element.getChildWithNodeName=function(A,B){B=B.toLowerCase();return $A(A.childNodes).detect(function(C){return C.nodeName.toLowerCase()==B})};P4.Util.KeyWatcher=Class.create({initialize:function(A){this.down=false;document.observe("keydown",function(B){if(B.keyCode==A){this.down=true}}.bindAsEventListener(this));document.observe("keyup",function(B){if(B.keyCode==A){this.down=false}}.bindAsEventListener(this))}});