/* Prototype JavaScript framework, version 1.5.0_rc1 * (c) 2005 Sam Stephenson */ var Prototype={ Version:'1.5.0_rc1', ScriptFragment:'(?:)((\n|\r|.)*?)(?:<\/script>)', emptyFunction:function(){}, K:function(x){return x} } var Class={ create:function(){ return function(){ this.initialize.apply(this,arguments); } } } var Abstract=new Object(); Object.extend=function(destination,source){ for(var property in source){ destination[property]=source[property]; } return destination; } Object.extend(Object,{ inspect:function(object){ try{ if(object==undefined)return'undefined'; if(object==null)return'null'; return object.inspect?object.inspect():object.toString(); }catch(e){ if(e instanceof RangeError)return'...'; throw e; } }, keys:function(object){ var keys=[]; for(var property in object) keys.push(property); return keys; }, values:function(object){ var values=[]; for(var property in object) values.push(object[property]); return values; }, clone:function(object){ return Object.extend({},object); } }); Function.prototype.bind=function(){ var __method=this,args=$A(arguments),object=args.shift(); return function(){ return __method.apply(object,args.concat($A(arguments))); } } Function.prototype.bindAsEventListener=function(object){ var __method=this,args=$A(arguments),object=args.shift(); return function(event){ return __method.apply(object,[(event||window.event)].concat(args).concat($A(arguments))); } } Object.extend(Number.prototype,{ toColorPart:function(){ var digits=this.toString(16); if(this<16)return'0'+digits; return digits; }, succ:function(){ return this+1; }, times:function(iterator){ $R(0,this,true).each(iterator); return this; } }); var Try={ these:function(){ var returnValue; for(var i=0;i0){ if(match=source.match(pattern)){ result+=source.slice(0,match.index); result+=(replacement(match)||'').toString(); source=source.slice(match.index+match[0].length); }else{ result+=source,source=''; } } return result; }, sub:function(pattern,replacement,count){ replacement=this.gsub.prepareReplacement(replacement); count=count===undefined?1:count; return this.gsub(pattern,function(match){ if(--count<0)return match[0]; return replacement(match); }); }, scan:function(pattern,iterator){ this.gsub(pattern,iterator); return this; }, truncate:function(length,truncation){ length=length||30; truncation=truncation===undefined?'...':truncation; return this.length>length? this.slice(0,length-truncation.length)+truncation:this; }, strip:function(){ return this.replace(/^\s+/,'').replace(/\s+$/,''); }, stripTags:function(){ return this.replace(/<\/?[^>]+>/gi,''); }, stripScripts:function(){ return this.replace(new RegExp(Prototype.ScriptFragment,'img'),''); }, extractScripts:function(){ var matchAll=new RegExp(Prototype.ScriptFragment,'img'); var matchOne=new RegExp(Prototype.ScriptFragment,'im'); return(this.match(matchAll)||[]).map(function(scriptTag){ return(scriptTag.match(matchOne)||['',''])[1]; }); }, evalScripts:function(){ return this.extractScripts().map(function(script){return eval(script)}); }, escapeHTML:function(){ var div=document.createElement('div'); var text=document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML:function(){ var div=document.createElement('div'); div.innerHTML=this.stripTags(); return div.childNodes[0]?div.childNodes[0].nodeValue:''; }, toQueryParams:function(){ var pairs=this.match(/^\??(.*)$/)[1].split('&'); return pairs.inject({},function(params,pairString){ var pair=pairString.split('='); var value=pair[1]?decodeURIComponent(pair[1]):undefined; params[decodeURIComponent(pair[0])]=value; return params; }); }, toArray:function(){ return this.split(''); }, camelize:function(){ var oStringList=this.split('-'); if(oStringList.length==1)return oStringList[0]; var camelizedString=this.indexOf('-')==0 ?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1) :oStringList[0]; for(var i=1,len=oStringList.length;i=result) result=value; }); return result; }, min:function(iterator){ var result; this.each(function(value,index){ value=(iterator||Prototype.K)(value,index); if(result==undefined||valueb?1:0; }).pluck('value'); }, toArray:function(){ return this.collect(Prototype.K); }, zip:function(){ var iterator=Prototype.K,args=$A(arguments); if(typeof args.last()=='function') iterator=args.pop(); var collections=[this].concat(args).map($A); return this.map(function(value,index){ return iterator(collections.pluck(index)); }); }, inspect:function(){ return'#'; } } Object.extend(Enumerable,{ map:Enumerable.collect, find:Enumerable.detect, select:Enumerable.findAll, member:Enumerable.include, entries:Enumerable.toArray }); var $A=Array.from=function(iterable){ if(!iterable)return[]; if(iterable.toArray){ return iterable.toArray(); }else{ var results=[]; for(var i=0;i1?this:this[0]; }, uniq:function(){ return this.inject([],function(array,value){ return array.include(value)?array:array.concat([value]); }); }, inspect:function(){ return'['+this.map(Object.inspect).join(', ')+']'; } }); var Hash={ _each:function(iterator){ for(var key in this){ var value=this[key]; if(typeof value=='function')continue; var pair=[key,value]; pair.key=key; pair.value=value; iterator(pair); } }, keys:function(){ return this.pluck('key'); }, values:function(){ return this.pluck('value'); }, merge:function(hash){ return $H(hash).inject($H(this),function(mergedHash,pair){ mergedHash[pair.key]=pair.value; return mergedHash; }); }, toQueryString:function(){ return this.map(function(pair){ return pair.map(encodeURIComponent).join('='); }).join('&'); }, inspect:function(){ return'#'; } } function $H(object){ var hash=Object.extend({},object||{}); Object.extend(hash,Enumerable); Object.extend(hash,Hash); return hash; } ObjectRange=Class.create(); Object.extend(ObjectRange.prototype,Enumerable); Object.extend(ObjectRange.prototype,{ initialize:function(start,end,exclusive){ this.start=start; this.end=end; this.exclusive=exclusive; }, _each:function(iterator){ var value=this.start; while(this.include(value)){ iterator(value); value=value.succ(); } }, include:function(value){ if(value=200&&this.transport.status<300); }, responseIsFailure:function(){ return!this.responseIsSuccess(); } } Ajaxp.Request=Class.create(); Ajaxp.Request.Events= ['Uninitialized','Loading','Loaded','Interactive','Complete']; Ajaxp.Request.prototype=Object.extend(new Ajaxp.Base(),{ initialize:function(url,options){ this.transport=Ajaxp.getTransport(); this.setOptions(options); this.request(url); }, request:function(url){ var parameters=this.options.parameters||''; if(parameters.length>0)parameters+='&_='; if(this.options.method!='get'&&this.options.method!='post'){ parameters+=(parameters.length>0?'&':'')+'_method='+this.options.method; this.options.method='post'; } try{ this.url=url; if(this.options.method=='get'&¶meters.length>0) this.url+=(this.url.match(/\?/)?'&':'?')+parameters; Ajaxp.Responders.dispatch('onCreate',this,this.transport); this.transport.open(this.options.method,this.url, this.options.asynchronous); if(this.options.asynchronous) setTimeout(function(){this.respondToReadyState(1)}.bind(this),10); this.transport.onreadystatechange=this.onStateChange.bind(this); this.setRequestHeaders(); var body=this.options.postBody?this.options.postBody:parameters; this.transport.send(this.options.method=='post'?body:null); if(!this.options.asynchronous&&this.transport.overrideMimeType) this.onStateChange(); }catch(e){ this.dispatchException(e); } }, setRequestHeaders:function(){ var requestHeaders= ['X-Requested-With','XMLHttpRequest', 'X-Prototype-Version',Prototype.Version, 'Accept','text/javascript, text/html, application/xml, text/xml, */*']; if(this.options.method=='post'){ requestHeaders.push('Content-type',this.options.contentType); if(this.transport.overrideMimeType) requestHeaders.push('Connection','close'); } if(this.options.requestHeaders) requestHeaders.push.apply(requestHeaders,this.options.requestHeaders); for(var i=0;i'; }, recursivelyCollect:function(element,property){ element=$(element); var elements=[]; while(element=element[property]) if(element.nodeType==1) elements.push(Element.extend(element)); return elements; }, ancestors:function(element){ return $(element).recursivelyCollect('parentNode'); }, descendants:function(element){ element=$(element); return $A(element.getElementsByTagName('*')); }, previousSiblings:function(element){ return $(element).recursivelyCollect('previousSibling'); }, nextSiblings:function(element){ return $(element).recursivelyCollect('nextSibling'); }, siblings:function(element){ element=$(element); return element.previousSiblings().reverse().concat(element.nextSiblings()); }, match:function(element,selector){ element=$(element); if(typeof selector=='string') selector=new Selector(selector); return selector.match(element); }, up:function(element,expression,index){ return Selector.findElement($(element).ancestors(),expression,index); }, down:function(element,expression,index){ return Selector.findElement($(element).descendants(),expression,index); }, previous:function(element,expression,index){ return Selector.findElement($(element).previousSiblings(),expression,index); }, next:function(element,expression,index){ return Selector.findElement($(element).nextSiblings(),expression,index); }, getElementsBySelector:function(){ var args=$A(arguments),element=$(args.shift()); return Selector.findChildElements(element,args); }, getElementsByClassName:function(element,className){ element=$(element); return document.getElementsByClassName(className,element); }, getHeight:function(element){ element=$(element); return element.offsetHeight; }, classNames:function(element){ return new Element.ClassNames(element); }, hasClassName:function(element,className){ if(!(element=$(element)))return; return Element.classNames(element).include(className); }, addClassName:function(element,className){ if(!(element=$(element)))return; Element.classNames(element).add(className); return element; }, removeClassName:function(element,className){ if(!(element=$(element)))return; Element.classNames(element).remove(className); return element; }, observe:function(){ Event.observe.apply(Event,arguments); return $A(arguments).first(); }, stopObserving:function(){ Event.stopObserving.apply(Event,arguments); return $A(arguments).first(); }, cleanWhitespace:function(element){ element=$(element); var node=element.firstChild; while(node){ var nextNode=node.nextSibling; if(node.nodeType==3&&!/\S/.test(node.nodeValue)) element.removeChild(node); node=nextNode; } return element; }, empty:function(element){ return $(element).innerHTML.match(/^\s*$/); }, childOf:function(element,ancestor){ element=$(element),ancestor=$(ancestor); while(element=element.parentNode) if(element==ancestor)return true; return false; }, scrollTo:function(element){ element=$(element); var x=element.x?element.x:element.offsetLeft, y=element.y?element.y:element.offsetTop; window.scrollTo(x,y); return element; }, getStyle:function(element,style){ element=$(element); var value=element.style[style.camelize()]; if(!value){ if(document.defaultView&&document.defaultView.getComputedStyle){ var css=document.defaultView.getComputedStyle(element,null); value=css?css.getPropertyValue(style):null; }else if(element.currentStyle){ value=element.currentStyle[style.camelize()]; } } if(window.opera&&['left','top','right','bottom'].include(style)) if(Element.getStyle(element,'position')=='static')value='auto'; return value=='auto'?null:value; }, setStyle:function(element,style){ element=$(element); for(var name in style) element.style[name.camelize()]=style[name]; return element; }, getDimensions:function(element){ element=$(element); if(Element.getStyle(element,'display')!='none') return{width:element.offsetWidth,height:element.offsetHeight}; var els=element.style; var originalVisibility=els.visibility; var originalPosition=els.position; els.visibility='hidden'; els.position='absolute'; els.display=''; var originalWidth=element.clientWidth; var originalHeight=element.clientHeight; els.display='none'; els.position=originalPosition; els.visibility=originalVisibility; return{width:originalWidth,height:originalHeight}; }, makePositioned:function(element){ element=$(element); var pos=Element.getStyle(element,'position'); if(pos=='static'||!pos){ element._madePositioned=true; element.style.position='relative'; if(window.opera){ element.style.top=0; element.style.left=0; } } return element; }, undoPositioned:function(element){ element=$(element); if(element._madePositioned){ element._madePositioned=undefined; element.style.position= element.style.top= element.style.left= element.style.bottom= element.style.right=''; } return element; }, makeClipping:function(element){ element=$(element); if(element._overflow)return; element._overflow=element.style.overflow||'auto'; if((Element.getStyle(element,'overflow')||'visible')!='hidden') element.style.overflow='hidden'; return element; }, undoClipping:function(element){ element=$(element); if(!element._overflow)return; element.style.overflow=element._overflow=='auto'?'':element._overflow; element._overflow=null; return element; } } if(document.all){ Element.Methods.update=function(element,html){ element=$(element); var tagName=element.tagName.toUpperCase(); if(['THEAD','TBODY','TR','TD'].indexOf(tagName)>-1){ var div=document.createElement('div'); switch(tagName){ case'THEAD': case'TBODY': div.innerHTML=''+html.stripScripts()+'
'; depth=2; break; case'TR': div.innerHTML=''+html.stripScripts()+'
'; depth=3; break; case'TD': div.innerHTML='
'+html.stripScripts()+'
'; depth=4; } $A(element.childNodes).each(function(node){ element.removeChild(node) }); depth.times(function(){div=div.firstChild}); $A(div.childNodes).each( function(node){element.appendChild(node)}); }else{ element.innerHTML=html.stripScripts(); } setTimeout(function(){html.evalScripts()},10); return element; } } Object.extend(Element,Element.Methods); var _nativeExtensions=false; if(!window.HTMLElement&&/Konqueror|Safari|KHTML/.test(navigator.userAgent)){ ['','Form','Input','TextArea','Select'].each(function(tag){ var klass=window['HTML'+tag+'Element']={}; klass.prototype=document.createElement(tag?tag.toLowerCase():'div').__proto__; }); } Element.addMethods=function(methods){ Object.extend(Element.Methods,methods||{}); function copy(methods,destination){ var cache=Element.extend.cache; for(var property in methods){ var value=methods[property]; destination[property]=cache.findOrStore(value); } } if(typeof HTMLElement!='undefined'){ copy(Element.Methods,HTMLElement.prototype); copy(Form.Methods,HTMLFormElement.prototype); [HTMLInputElement,HTMLTextAreaElement,HTMLSelectElement].each(function(klass){ copy(Form.Element.Methods,klass.prototype); }); _nativeExtensions=true; } } var Toggle=new Object(); Toggle.display=Element.toggle; Abstract.Insertion=function(adjacency){ this.adjacency=adjacency; } Abstract.Insertion.prototype={ initialize:function(element,content){ this.element=$(element); this.content=content.stripScripts(); if(this.adjacency&&this.element.insertAdjacentHTML){ try{ this.element.insertAdjacentHTML(this.adjacency,this.content); }catch(e){ var tagName=this.element.tagName.toLowerCase(); if(tagName=='tbody'||tagName=='tr'){ this.insertContent(this.contentFromAnonymousTable()); }else{ throw e; } } }else{ this.range=this.element.ownerDocument.createRange(); if(this.initializeRange)this.initializeRange(); this.insertContent([this.range.createContextualFragment(this.content)]); } setTimeout(function(){content.evalScripts()},10); }, contentFromAnonymousTable:function(){ var div=document.createElement('div'); div.innerHTML=''+this.content+'
'; return $A(div.childNodes[0].childNodes[0].childNodes); } } var Insertion=new Object(); Insertion.Before=Class.create(); Insertion.Before.prototype=Object.extend(new Abstract.Insertion('beforeBegin'),{ initializeRange:function(){ this.range.setStartBefore(this.element); }, insertContent:function(fragments){ fragments.each((function(fragment){ this.element.parentNode.insertBefore(fragment,this.element); }).bind(this)); } }); Insertion.Top=Class.create(); Insertion.Top.prototype=Object.extend(new Abstract.Insertion('afterBegin'),{ initializeRange:function(){ this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent:function(fragments){ fragments.reverse(false).each((function(fragment){ this.element.insertBefore(fragment,this.element.firstChild); }).bind(this)); } }); Insertion.Bottom=Class.create(); Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion('beforeEnd'),{ initializeRange:function(){ this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent:function(fragments){ fragments.each((function(fragment){ this.element.appendChild(fragment); }).bind(this)); } }); Insertion.After=Class.create(); Insertion.After.prototype=Object.extend(new Abstract.Insertion('afterEnd'),{ initializeRange:function(){ this.range.setStartAfter(this.element); }, insertContent:function(fragments){ fragments.each((function(fragment){ this.element.parentNode.insertBefore(fragment, this.element.nextSibling); }).bind(this)); } }); Element.ClassNames=Class.create(); Element.ClassNames.prototype={ initialize:function(element){ this.element=$(element); }, _each:function(iterator){ this.element.className.split(/\s+/).select(function(name){ return name.length>0; })._each(iterator); }, set:function(className){ this.element.className=className; }, add:function(classNameToAdd){ if(this.include(classNameToAdd))return; this.set(this.toArray().concat(classNameToAdd).join(' ')); }, remove:function(classNameToRemove){ if(!this.include(classNameToRemove))return; this.set(this.select(function(className){ return className!=classNameToRemove; }).join(' ')); }, toString:function(){ return this.toArray().join(' '); } } Object.extend(Element.ClassNames.prototype,Enumerable); var Selector=Class.create(); Selector.prototype={ initialize:function(expression){ this.params={classNames:[]}; this.expression=expression.toString().strip(); this.parseExpression(); this.compileMatcher(); }, parseExpression:function(){ function abort(message){throw'Parse error in selector: '+message;} if(this.expression=='')abort('empty expression'); var params=this.params,expr=this.expression,match,modifier,clause,rest; while(match=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){ params.attributes=params.attributes||[]; params.attributes.push({name:match[2],operator:match[3],value:match[4]||match[5]||''}); expr=match[1]; } if(expr=='*')return this.params.wildcard=true; while(match=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)){ modifier=match[1],clause=match[2],rest=match[3]; switch(modifier){ case'#':params.id=clause;break; case'.':params.classNames.push(clause);break; case'': case undefined:params.tagName=clause.toUpperCase();break; default:abort(expr.inspect()); } expr=rest; } if(expr.length>0)abort(expr.inspect()); }, buildMatchExpression:function(){ var params=this.params,conditions=[],clause; if(params.wildcard) conditions.push('true'); if(clause=params.id) conditions.push('element.id == '+clause.inspect()); if(clause=params.tagName) conditions.push('element.tagName.toUpperCase() == '+clause.inspect()); if((clause=params.classNames).length>0) for(var i=0;i=0){ opt=element.options[index]; value=opt.value||opt.text; } return[element.name,value]; }, selectMany:function(element){ var value=[]; for(var i=0;i=this.offset[1]&& y=this.offset[0]&& x=this.offset[1]&& this.ycomp=this.offset[0]&& this.xcomp