Object.inspect=function(i){var I=[];if(typeof i in["string","number"]){return i}else{for(property in i)if(typeof i[property]!="function")I.push(property+' => '+(typeof i[property]=="string"?'"'+i[property]+'"':i[property]))}
return("'"+i+"' #"+typeof i+": {"+I.join(", ")+"}")}
Array.flatten=function(l,i){if(i===undefined){i=false}
var I=[],O=l.length;for(var C=0;C<O;C++){var c=l[C];if(c instanceof Array){var o=c.flatten(i);I=I.concat(o)}else if(!i||c!=undefined){I.push(c)}}
return I};if(!Array.prototype.flatten){Array.prototype.flatten=function(i){return Array.flatten(this,i)}}
var Builder={node:function(i){var o=this,I=document.createElement('div');I.innerHTML="<"+i+"></"+i+">";if(arguments[1])if(o._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)){o._children(I.firstChild,arguments[1])}else{var l=o._attributes(arguments[1]);if(l.length)I.innerHTML="<"+i+" "+l+"></"+i+">"}
if(arguments[2])o._children(I.firstChild,arguments[2]);return I.firstChild},_text:function(i){return document.createTextNode(i)},_attributes:function(i){var I=[];for(attribute in i)I.push((attribute=='className'?'class':attribute)+'="'+i[attribute].toString().escapeHTML()+'"');return I.join(" ")},_children:function(I,i){var o=this;if(typeof i=='object'){i=i.flatten();for(var l=0;l<i.length;l++)if(typeof i[l]=='object')I.appendChild(i[l]);else
if(o._isStringOrNumber(i[l]))I.appendChild(o._text(i[l]))}else
if(o._isStringOrNumber(i))I.appendChild(o._text(i))},_isStringOrNumber:function(i){return(typeof i=='string'||typeof i=='number')}}
String.prototype.camelize=function(){var O=this,i=O.split('-');if(i.length==1)return i[0];var I=O.indexOf("-")==0?i[0].charAt(0).toUpperCase()+i[0].substring(1):i[0];for(var o=1,l=i.length;o<l;o++){var c=i[o];I+=c.charAt(0).toUpperCase()+c.substring(1)}
return I}
Element.getStyle=function(i,l){i=$(i);var I=i.style[l.camelize()];if(!I)if(document.defaultView&&document.defaultView.getComputedStyle){var o=document.defaultView.getComputedStyle(i,null);I=(o!=null)?o.getPropertyValue(l):null}else if(i.currentStyle){I=i.currentStyle[l.camelize()]}
if(I=='auto')I=null;return I}
Element.makePositioned=function(i){i=$(i);if(Element.getStyle(i,'position')=='static')i.style.position="relative"}
Element.makeClipping=function(i){i=$(i);i._overflow=Element.getStyle(i,'overflow')||'visible';if(i._overflow!='hidden')i.style.overflow='hidden'}
Element.undoClipping=function(i){i=$(i);if(i._overflow!='hidden')i.style.overflow=i._overflow}
Element.collectTextNodesIgnoreClass=function(o,I){var i=$(o).childNodes,O="";var l=new RegExp("^([^ ]+ )*"+I+"( [^ ]+)*$","i");for(var c=0;c<i.length;c++){if(i[c].nodeType==3){O+=i[c].nodeValue}else{if((!i[c].className.match(l))&&i[c].hasChildNodes())O+=Element.collectTextNodesIgnoreClass(i[c],I)}}
return O}
Position.positionedOffset=function(i){var l=0,I=0;do{l+=i.offsetTop||0;I+=i.offsetLeft||0;i=i.offsetParent;if(i){p=Element.getStyle(i,'position');if(p=='relative'||p=='absolute')break}} while(i);return[I,l]}
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){Position.cumulativeOffset=function(i){var l=0,I=0;do{l+=i.offsetTop||0;I+=i.offsetLeft||0;if(i.offsetParent==document.body)if(Element.getStyle(i,'position')=='absolute')break;i=i.offsetParent} while(i);return[I,l]}}
Position.page=function(I){if(i==document.body)return[0,0];var o=0,l=0,i=I;do{o+=i.offsetTop||0;l+=i.offsetLeft||0;if(i.offsetParent==document.body)if(Element.getStyle(i,'position')=='absolute')break} while(i=i.offsetParent);i=I;do{o-=i.scrollTop||0;l-=i.scrollLeft||0} while(i=i.parentNode);return[l,o]}
Position.offsetParent=function(i){if(i.offsetParent)return i.offsetParent;if(i==document.body)return i;while((i=i.parentNode)&&i!=document.body)if(Element.getStyle(i,'position')!='static')return i;return document.body}
Position.clone=function(l,i){var I=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{})
l=$(l);var c=Position.page(l);i=$(i);var o=[0,0],O=null;if(Element.getStyle(i,'position')=='absolute'){O=Position.offsetParent(i);o=Position.page(O)}
if(O==document.body){o[0]-=document.body.offsetLeft;o[1]-=document.body.offsetTop}
if(I.setLeft)i.style.left=(c[0]-o[0]+I.offsetLeft)+"px";if(I.setTop)i.style.top=(c[1]-o[1]+I.offsetTop)+"px";if(I.setWidth)i.style.width=l.offsetWidth+"px";if(I.setHeight)i.style.height=l.offsetHeight+"px"}
Position.absolutize=function(i){i=$(i);if(i.style.position=='absolute')return;Position.prepare();var I=Position.positionedOffset(i),c=I[1],o=I[0],O=i.clientWidth,l=i.clientHeight;i._originalLeft=o-parseFloat(i.style.left||0);i._originalTop=c-parseFloat(i.style.top||0);i._originalWidth=i.style.width;i._originalHeight=i.style.height;i.style.position='absolute';i.style.top=c+'px';;i.style.left=o+'px';;i.style.width=O+'px';;i.style.height=l+'px'}
Position.relativize=function(i){i=$(i);if(i.style.position=='relative')return;Position.prepare();i.style.position='relative';var l=parseFloat(i.style.top||0)-(i._originalTop||0),I=parseFloat(i.style.left||0)-(i._originalLeft||0);i.style.top=l+'px';i.style.left=I+'px';i.style.height=i._originalHeight;i.style.width=i._originalWidth}
Element.Class={toggle:function(i,I){if(Element.Class.has(i,I)){Element.Class.remove(i,I);if(arguments.length==3)Element.Class.add(i,arguments[2])}else{Element.Class.add(i,I);if(arguments.length==3)Element.Class.remove(i,arguments[2])}},get:function(i){i=$(i);return i.className.split(' ')},remove:function(i){i=$(i);var I;for(var l=1;l<arguments.length;l++){I=new RegExp("(^|\\s)"+arguments[l]+"(\\s|$)",'g');i.className=i.className.replace(I,'')}},add:function(i){i=$(i);for(var I=1;I<arguments.length;I++){Element.Class.remove(i,arguments[I]);i.className+=(i.className.length>0?' ':'')+arguments[I]}},has:function(i){i=$(i);if(!i||!i.className)return false;var I;for(var l=1;l<arguments.length;l++){if((typeof arguments[l]=='object')&&(arguments[l].constructor==Array)){for(var o=0;o<arguments[l].length;o++){I=new RegExp("(^|\\s)"+arguments[l][o]+"(\\s|$)");if(!I.test(i.className))return false}}else{I=new RegExp("(^|\\s)"+arguments[l]+"(\\s|$)");if(!I.test(i.className))return false}}
return true},has_any:function(i){i=$(i);if(!i||!i.className)return false;var I;for(var l=1;l<arguments.length;l++){if((typeof arguments[l]=='object')&&(arguments[l].constructor==Array)){for(var o=0;o<arguments[l].length;o++){I=new RegExp("(^|\\s)"+arguments[l][o]+"(\\s|$)");if(I.test(i.className))return true}}else{I=new RegExp("(^|\\s)"+arguments[l]+"(\\s|$)");if(I.test(i.className))return true}}
return false},childrenWith:function(o,l){var i=$(o).getElementsByTagName('*');var I=[];for(var O=0;O<i.length;O++){if(Element.Class.has(i[O],l)){I.push(i[O]);break}}
return I}}
String.prototype.parseQuery=function(){var c=this,o=c;if(o.substring(0,1)=='?'){o=c.substring(1)}
var i={},I=o.split('&');for(var O=0;O<I.length;O++){var l=I[O].split('=');i[l[0]]=l[1]}
return i}