LowPro={};LowPro.Version='0.4';if(!Element.addMethods)
Element.addMethods=function(o){Object.extend(Element.Methods,o)};DOM={nextElement:function(element){element=$(element);while(element=element.nextSibling)
if(element.nodeType==1)return element;return null;},previousElement:function(element){element=$(element);while(element=element.previousSibling)
if(element.nodeType==1)return element;return null;},remove:function(element){element=$(element);return element.parentNode.removeChild(element);},insertAfter:function(element,node,otherNode){element=$(element);return element.insertBefore(node,otherNode.nextSibling);},addBefore:function(element,node){element=$(element);return element.parentNode.insertBefore(node,element);},addAfter:function(element,node){element=$(element);return $(element.parentNode).insertAfter(node,element);},replaceElement:function(element,node){$(element).parentNode.replaceChild(node,element);return node;}};Element.addMethods(DOM);DOM.Builder={IE_TRANSLATIONS:{'class':'className','for':'htmlFor'},ieAttrSet:function(attrs,attr,el){var trans;if(trans=this.IE_TRANSLATIONS[attr])el[trans]=attrs[attr];else if(attr=='style')el.style.cssText=attrs[attr];else if(attr.match(/^on/))el[attr]=new Function(attrs[attr]);else el.setAttribute(attr,attrs[attr]);},tagFunc:function(tag){return function(){var attrs,children;if(arguments.length>0){if(arguments[0].nodeName||typeof arguments[0]=="string")
children=arguments;else{attrs=arguments[0];children=[].slice.call(arguments,1);};}
return DOM.Builder.create(tag,attrs,children);};},create:function(tag,attrs,children){attrs=attrs||{};children=children||[];var isIE=navigator.userAgent.match(/MSIE/);var el=document.createElement((isIE&&attrs.name)?"<"+tag+" name="+attrs.name+">":tag);for(var attr in attrs){if(typeof attrs[attr]!='function'){if(isIE)this.ieAttrSet(attrs,attr,el);else el.setAttribute(attr,attrs[attr].toString());};}
for(var i=0;i<children.length;i++){if(typeof children[i]=='string')
children[i]=document.createTextNode(children[i]);el.appendChild(children[i]);}
return $(el);}};(function(){var els=("p|div|span|strong|em|img|table|tr|td|th|thead|tbody|tfoot|pre|code|"+"h1|h2|h3|h4|h5|h6|ul|ol|li|form|input|textarea|legend|fieldset|"+"select|option|blockquote|cite|br|hr|dd|dl|dt|address|a|button|abbr|acronym|"+"script|link|style|bdo|ins|del|object|param|col|colgroup|optgroup|caption|"+"label|dfn|kbd|samp|var").split("|");var el,i=0;while(el=els[i++])
window['$'+el]=DOM.Builder.tagFunc(el);})();
// Adapted from DOM Ready extension by Dan Webb
// http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
// which was based on work by Matthias Miller, Dean Edwards and John Resig
Object.extend(Event,{_domReady:function(){if(arguments.callee.done)return;arguments.callee.done=true;if(Event._timer)clearInterval(Event._timer);Event._readyCallbacks.each(function(f){f()});Event._readyCallbacks=null;},onReady:function(f){if(!this._readyCallbacks){var domReady=this._domReady;if(domReady.done)return f();if(document.addEventListener)
document.addEventListener("DOMContentLoaded",domReady,false);
/*@cc_on @*/
/*@if (@_win32)
var dummy = location.protocol == "https:" ?  "https://javascript:void(0)" : "javascript:void(0)";
document.write("<script id=__ie_onload defer src='" + dummy + "'><\/script>");
document.getElementById("__ie_onload").onreadystatechange = function() {
if (this.readyState == "complete") { domReady(); }
};
/*@end @*/
if(/WebKit/i.test(navigator.userAgent)){this._timer=setInterval(function(){if(/loaded|complete/.test(document.readyState))domReady();},10);}
Event.observe(window,'load',domReady);Event._readyCallbacks=[];}
Event._readyCallbacks.push(f);}});if(typeof Element.Methods.observe=='undefined')Element.addMethods({observe:function(el,event,callback){Event.observe(el,event,callback);},stopObserving:function(el,event,callback){Event.stopObserving(el,event,callback);}});
// Replace out existing event observe code with Dean Edwards' addEvent
// http://dean.edwards.name/weblog/2005/10/add-event/
Object.extend(Event,{observe:function(el,type,func){el=$(el);if(!func.$$guid)func.$$guid=Event._guid++;if(!el.events)el.events={};var handlers=el.events[type];if(!handlers){handlers=el.events[type]={};if(el["on"+type]){handlers[0]=el["on"+type];}}
handlers[func.$$guid]=func;el["on"+type]=Event._handleEvent;if(!Event.observers)Event.observers=[];Event.observers.push([el,type,func,false]);},stopObserving:function(el,type,func){el=$(el);if(el.events&&el.events[type])delete el.events[type][func.$$guid];for(var i=0;i<Event.observers.length;i++){if(Event.observers[i]&&Event.observers[i][0]==el&&Event.observers[i][1]==type&&Event.observers[i][2]==func)delete Event.observers[i];}},_handleEvent:function(e){var returnValue=true;e=e||Event._fixEvent(window.event);var handlers=this.events[e.type],el=$(this);for(var i in handlers){el.$$handleEvent=handlers[i];if(el.$$handleEvent(e)===false)returnValue=false;}
return returnValue;},_fixEvent:function(e){e.preventDefault=Event._preventDefault;e.stopPropagation=Event._stopPropagation;return e;},_preventDefault:function(){this.returnValue=false},_stopPropagation:function(){this.cancelBubble=true},_guid:1});Object.extend(Event,{trigger:function(element,event,fakeEvent){element=$(element);fakeEvent=fakeEvent||{type:event};if(element.events&&element.events[event]){$H(element.events[event]).each(function(cache){cache[1].call(element,fakeEvent);});}}});
// Based on event:Selectors by Justin Palmer
// http://encytemedia.com/event-selectors/
Event.addBehavior=function(rules){var ab=this.addBehavior;Object.extend(ab.rules,rules);if(!ab.responderApplied){Ajax.Responders.register({onComplete:function(){if(Event.addBehavior.reassignAfterAjax)
setTimeout(function(){ab.unload();ab.load(ab.rules)},10);}});ab.responderApplied=true;}
if(ab.autoTrigger){this.onReady(ab.load.bind(ab,rules));}};Object.extend(Event.addBehavior,{rules:{},cache:[],reassignAfterAjax:true,autoTrigger:true,load:function(rules){for(var selector in rules){var observer=rules[selector];var sels=selector.split(',');sels.each(function(sel){var parts=sel.split(/:(?=[a-z]+$)/),css=parts[0],event=parts[1];$$(css).each(function(element){if(event){$(element).observe(event,observer);Event.addBehavior.cache.push([element,event,observer]);}else{if(!element.$$assigned||!element.$$assigned.include(observer)){if(observer.attach)observer.attach(element);else observer.call($(element));element.$$assigned=element.$$assigned||[];element.$$assigned.push(observer);}}});});}},unload:function(){this.cache.each(function(c){Event.stopObserving.apply(Event,c);});this.cache=[];}});Event.observe(window,'unload',Event.addBehavior.unload.bind(Event.addBehavior));Behavior={create:function(members){var behavior=function(){if(this==window){var args=[],behavior=arguments.callee;for(var i=0;i<arguments.length;i++)
args.push(arguments[i]);return function(element){var initArgs=[this].concat(args);behavior.attach.apply(behavior,initArgs);};}else this.element=$(arguments[0]);};behavior.prototype.initialize=Prototype.K;Object.extend(behavior.prototype,members);Object.extend(behavior,Behavior.ClassMethods);return behavior;},ClassMethods:{attach:function(){var element=arguments[0];var bound=new this(element);bound.initialize.apply(bound,[].slice.call(arguments,1));this._bindEvents(bound);return bound;},_bindEvents:function(bound){for(var member in bound)
if(member.match(/^on(.+)/)&&typeof bound[member]=='function')
bound.element.observe(RegExp.$1,bound[member].bindAsEventListener(bound));}}};