var Prototype={ Version: '1.4.0', 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(property in source){ destination[property]=source[property]} return destination} 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}} 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 return function(event){ return __method.call(object,event || window.event)}} 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;i]+>/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(eval) }, 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('=') params[pair[0]]=pair[1] 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 || value)) result=value }) return result }, min: function(iterator){ var result this.each(function(value,index){ value=(iterator || Prototype.K)(value,index) if(value<=(result || value)) result=value }) return result }, partition: function(iterator){ var trues=[],falses=[] this.each(function(value,index){ ((iterator || Prototype.K)(value,index)? trues : falses).push(value) }) return [trues,falses] }, pluck: function(property){ var results=[] this.each(function(value,index){ results.push(value[property]) }) return results }, reject: function(iterator){ var results=[] this.each(function(value,index){ if(!iterator(value,index)) results.push(value) }) return results }, sortBy: function(iterator){ return this.collect(function(value,index){ return{value: value,criteria: iterator(value,index)} }).sort(function(left,right){ var a=left.criteria,b=right.criteria return ab ? 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){ iterator(value=collections.pluck(index)) return value }) }, 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;i'}} 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 do{ iterator(value) value=value.succ() }while(this.include(value)) }, include: function(value){ if(value=200&&this.transport.status<300) }, responseIsFailure: function(){ return !this.responseIsSuccess()}} Ajax.Request=Class.create() Ajax.Request.Events= ['Uninitialized','Loading','Loaded','Interactive','Complete'] Ajax.Request.prototype=Object.extend(new Ajax.Base(),{ initialize: function(url,options){ this.transport=Ajax.getTransport() this.setOptions(options) this.request(url) }, request: function(url){ var parameters=this.options.parameters || '' if(parameters.length>0)parameters+='&_=' try{ this.url=url if(this.options.method=='get'&¶meters.length>0) this.url+=(this.url.match(/\?/)? '&' : '?')+parameters Ajax.Responders.dispatch('onCreate',this,this.transport) this.transport.open(this.options.method,this.url, this.options.asynchronous) if(this.options.asynchronous){ this.transport.onreadystatechange=this.onStateChange.bind(this) setTimeout((function(){this.respondToReadyState(1)}).bind(this),10)} this.setRequestHeaders() var body=this.options.postBody ? this.options.postBody : parameters this.transport.send(this.options.method=='post' ? body : null) }catch(e){ this.dispatchException(e)} }, setRequestHeaders: function(){ var requestHeaders= ['X-Requested-With','XMLHttpRequest', 'X-Prototype-Version',Prototype.Version] if(this.options.method=='post'){ requestHeaders.push('Content-type', 'application/x-www-form-urlencoded') if(this.transport.overrideMimeType) requestHeaders.push('Connection','close')} if(this.options.requestHeaders) requestHeaders.push.apply(requestHeaders,this.options.requestHeaders) for(var i=0;i' 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 Field={ clear: function(){ for(var i=0;i=0){ opt=element.options[index] value=opt.value if(!value&&!('value' in opt)) value=opt.text} return [element.name,value] }, selectMany: function(element){ var value=new Array() for(var i=0;i=this.offset[1]&& y=this.offset[0]&& x=this.offset[1]&& this.ycomp=this.offset[0]&& this.xcomp