var Prototype={ Version:'1.6.0.3', Browser:{ IE:!!(window.attachEvent&& navigator.userAgent.indexOf('Opera')===-1), Opera:navigator.userAgent.indexOf('Opera')>-1, WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1, Gecko:navigator.userAgent.indexOf('Gecko')>-1&& navigator.userAgent.indexOf('KHTML')===-1, MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/) }, BrowserFeatures:{ XPath:!!document.evaluate, SelectorsAPI:!!document.querySelector, ElementExtensions:!!window.HTMLElement, SpecificElementExtensions: document.createElement('div')['__proto__']&& document.createElement('div')['__proto__']!== document.createElement('form')['__proto__'] }, ScriptFragment:']*>([\\S\\s]*?)<\/script>', JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/, emptyFunction:function(){}, K:function(x){return x} }; if(Prototype.Browser.MobileSafari) Prototype.BrowserFeatures.SpecificElementExtensions=false; var Class={ create:function(){ var parent=null,properties=$A(arguments); if(Object.isFunction(properties[0])) parent=properties.shift(); function klass(){ this.initialize.apply(this,arguments); } Object.extend(klass,Class.Methods); klass.superclass=parent; klass.subclasses=[]; if(parent){ var subclass=function(){}; subclass.prototype=parent.prototype; klass.prototype=new subclass; parent.subclasses.push(klass); } for(var i=0;i0){ if(match=source.match(pattern)){ result+=source.slice(0,match.index); result+=String.interpret(replacement(match)); 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=Object.isUndefined(count)?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 String(this); }, truncate:function(length,truncation){ length=length||30; truncation=Object.isUndefined(truncation)?'...':truncation; return this.length>length? this.slice(0,length-truncation.length)+truncation:String(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 self=arguments.callee; self.text.data=this; return self.div.innerHTML; }, unescapeHTML:function(){ var div=new Element('div'); div.innerHTML=this.stripTags(); return div.childNodes[0]?(div.childNodes.length>1? $A(div.childNodes).inject('',function(memo,node){return memo+node.nodeValue}): div.childNodes[0].nodeValue):''; }, toQueryParams:function(separator){ var match=this.strip().match(/([^?#]*)(#.*)?$/); if(!match)return{}; return match[1].split(separator||'&').inject({},function(hash,pair){ if((pair=pair.split('='))[0]){ var key=decodeURIComponent(pair.shift()); var value=pair.length>1?pair.join('='):pair[0]; if(value!=undefined)value=decodeURIComponent(value); if(key in hash){ if(!Object.isArray(hash[key]))hash[key]=[hash[key]]; hash[key].push(value); } else hash[key]=value; } return hash; }); }, toArray:function(){ return this.split(''); }, succ:function(){ return this.slice(0,this.length-1)+ String.fromCharCode(this.charCodeAt(this.length-1)+1); }, times:function(count){ return count<1?'':new Array(count+1).join(this); }, camelize:function(){ var parts=this.split('-'),len=parts.length; if(len==1)return parts[0]; var camelized=this.charAt(0)=='-' ?parts[0].charAt(0).toUpperCase()+parts[0].substring(1) :parts[0]; for(var i=1;i-1; }, startsWith:function(pattern){ return this.indexOf(pattern)===0; }, endsWith:function(pattern){ var d=this.length-pattern.length; return d>=0&&this.lastIndexOf(pattern)===d; }, empty:function(){ return this==''; }, blank:function(){ return/^\s*$/.test(this); }, interpolate:function(object,pattern){ return new Template(this,pattern).evaluate(object); } }); if(Prototype.Browser.WebKit||Prototype.Browser.IE)Object.extend(String.prototype,{ escapeHTML:function(){ return this.replace(/&/g,'&').replace(//g,'>'); }, unescapeHTML:function(){ return this.stripTags().replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); } }); String.prototype.gsub.prepareReplacement=function(replacement){ if(Object.isFunction(replacement))return replacement; var template=new Template(replacement); return function(match){return template.evaluate(match)}; }; String.prototype.parseQuery=String.prototype.toQueryParams; Object.extend(String.prototype.escapeHTML,{ div:document.createElement('div'), text:document.createTextNode('') }); String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text); var Template=Class.create({ initialize:function(template,pattern){ this.template=template.toString(); this.pattern=pattern||Template.Pattern; }, evaluate:function(object){ if(Object.isFunction(object.toTemplateReplacements)) object=object.toTemplateReplacements(); return this.template.gsub(this.pattern,function(match){ if(object==null)return''; var before=match[1]||''; if(before=='\\')return match[2]; var ctx=object,expr=match[3]; var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; match=pattern.exec(expr); if(match==null)return before; while(match!=null){ var comp=match[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1]; ctx=ctx[comp]; if(null==ctx||''==match[3])break; expr=expr.substring('['==match[3]?match[1].length:match[0].length); match=pattern.exec(expr); } return before+String.interpret(ctx); }); } }); Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/; var $break={}; var Enumerable={ each:function(iterator,context){ var index=0; try{ this._each(function(value){ iterator.call(context,value,index++); }); }catch(e){ if(e!=$break)throw e; } return this; }, eachSlice:function(number,iterator,context){ var index=-number,slices=[],array=this.toArray(); if(number<1)return array; while((index+=number)=result) result=value; }); return result; }, min:function(iterator,context){ iterator=iterator||Prototype.K; var result; this.each(function(value,index){ value=iterator.call(context,value,index); if(result==null||valueb?1:0; }).pluck('value'); }, toArray:function(){ return this.map(); }, zip:function(){ var iterator=Prototype.K,args=$A(arguments); if(Object.isFunction(args.last())) iterator=args.pop(); var collections=[this].concat(args).map($A); return this.map(function(value,index){ return iterator(collections.pluck(index)); }); }, size:function(){ return this.toArray().length; }, inspect:function(){ return'#'; } }; Object.extend(Enumerable,{ map:Enumerable.collect, find:Enumerable.detect, select:Enumerable.findAll, filter:Enumerable.findAll, member:Enumerable.include, entries:Enumerable.toArray, every:Enumerable.all, some:Enumerable.any }); function $A(iterable){ if(!iterable)return[]; if(iterable.toArray)return iterable.toArray(); var length=iterable.length||0,results=new Array(length); while(length--)results[length]=iterable[length]; return results; } if(Prototype.Browser.WebKit){ $A=function(iterable){ if(!iterable)return[]; if(!(typeof iterable==='function'&&typeof iterable.length=== 'number'&&typeof iterable.item==='function')&&iterable.toArray) return iterable.toArray(); var length=iterable.length||0,results=new Array(length); while(length--)results[length]=iterable[length]; return results; }; } Array.from=$A; Object.extend(Array.prototype,Enumerable); if(!Array.prototype._reverse)Array.prototype._reverse=Array.prototype.reverse; Object.extend(Array.prototype,{ _each:function(iterator){ for(var i=0,length=this.length;i1?this:this[0]; }, uniq:function(sorted){ return this.inject([],function(array,value,index){ if(0==index||(sorted?array.last()!=value:!array.include(value))) array.push(value); return array; }); }, intersect:function(array){ return this.uniq().findAll(function(item){ return array.detect(function(value){return item===value}); }); }, clone:function(){ return[].concat(this); }, size:function(){ return this.length; }, inspect:function(){ return'['+this.map(Object.inspect).join(', ')+']'; }, toJSON:function(){ var results=[]; this.each(function(object){ var value=Object.toJSON(object); if(!Object.isUndefined(value))results.push(value); }); return'['+results.join(', ')+']'; } }); if(Object.isFunction(Array.prototype.forEach)) Array.prototype._each=Array.prototype.forEach; if(!Array.prototype.indexOf)Array.prototype.indexOf=function(item,i){ i||(i=0); var length=this.length; if(i<0)i=length+i; for(;i'; }, toJSON:function(){ return Object.toJSON(this.toObject()); }, clone:function(){ return new Hash(this); } } })()); Hash.prototype.toTemplateReplacements=Hash.prototype.toObject; Hash.from=$H; var ObjectRange=Class.create(Enumerable,{ 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(value1&&!((readyState==4)&&this._complete)) this.respondToReadyState(this.transport.readyState); }, setRequestHeaders:function(){ var headers={ 'X-Requested-With':'XMLHttpRequest', 'X-Prototype-Version':Prototype.Version, 'Accept':'text/javascript, text/html, application/xml, text/xml, */*' }; if(this.method=='post'){ headers['Content-type']=this.options.contentType+ (this.options.encoding?'; charset='+this.options.encoding:''); if(this.transport.overrideMimeType&& (navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005) headers['Connection']='close'; } if(typeof this.options.requestHeaders=='object'){ var extras=this.options.requestHeaders; if(Object.isFunction(extras.push)) for(var i=0,length=extras.length;i=200&&status<300); }, getStatus:function(){ try{ return this.transport.status||0; }catch(e){return 0} }, respondToReadyState:function(readyState){ var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this); if(state=='Complete'){ try{ this._complete=true; (this.options['on'+response.status] ||this.options['on'+(this.success()?'Success':'Failure')] ||Prototype.emptyFunction)(response,response.headerJSON); }catch(e){ this.dispatchException(e); } var contentType=response.getHeader('Content-type'); if(this.options.evalJS=='force' ||(this.options.evalJS&&this.isSameOrigin()&&contentType &&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) this.evalResponse(); } try{ (this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON); Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON); }catch(e){ this.dispatchException(e); } if(state=='Complete'){ this.transport.onreadystatechange=Prototype.emptyFunction; } }, isSameOrigin:function(){ var m=this.url.match(/^\s*https?:\/\/[^\/]*/); return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({ protocol:location.protocol, domain:document.domain, port:location.port?':'+location.port:'' })); }, getHeader:function(name){ try{ return this.transport.getResponseHeader(name)||null; }catch(e){return null} }, evalResponse:function(){ try{ return eval((this.transport.responseText||'').unfilterJSON()); }catch(e){ this.dispatchException(e); } }, dispatchException:function(exception){ (this.options.onException||Prototype.emptyFunction)(this,exception); Ajax.Responders.dispatch('onException',this,exception); } }); Ajax.Request.Events= ['Uninitialized','Loading','Loaded','Interactive','Complete']; Ajax.Response=Class.create({ initialize:function(request){ this.request=request; var transport=this.transport=request.transport, readyState=this.readyState=transport.readyState; if((readyState>2&&!Prototype.Browser.IE)||readyState==4){ this.status=this.getStatus(); this.statusText=this.getStatusText(); this.responseText=String.interpret(transport.responseText); this.headerJSON=this._getHeaderJSON(); } if(readyState==4){ var xml=transport.responseXML; this.responseXML=Object.isUndefined(xml)?null:xml; this.responseJSON=this._getResponseJSON(); } }, status:0, statusText:'', getStatus:Ajax.Request.prototype.getStatus, getStatusText:function(){ try{ return this.transport.statusText||''; }catch(e){return''} }, getHeader:Ajax.Request.prototype.getHeader, getAllHeaders:function(){ try{ return this.getAllResponseHeaders(); }catch(e){return null} }, getResponseHeader:function(name){ return this.transport.getResponseHeader(name); }, getAllResponseHeaders:function(){ return this.transport.getAllResponseHeaders(); }, _getHeaderJSON:function(){ var json=this.getHeader('X-JSON'); if(!json)return null; json=decodeURIComponent(escape(json)); try{ return json.evalJSON(this.request.options.sanitizeJSON|| !this.request.isSameOrigin()); }catch(e){ this.request.dispatchException(e); } }, _getResponseJSON:function(){ var options=this.request.options; if(!options.evalJSON||(options.evalJSON!='force'&& !(this.getHeader('Content-type')||'').include('application/json'))|| this.responseText.blank()) return null; try{ return this.responseText.evalJSON(options.sanitizeJSON|| !this.request.isSameOrigin()); }catch(e){ this.request.dispatchException(e); } } }); Ajax.Updater=Class.create(Ajax.Request,{ initialize:function($super,container,url,options){ this.container={ success:(container.success||container), failure:(container.failure||(container.success?null:container)) }; options=Object.clone(options); var onComplete=options.onComplete; options.onComplete=(function(response,json){ this.updateContent(response.responseText); if(Object.isFunction(onComplete))onComplete(response,json); }).bind(this); $super(url,options); }, updateContent:function(responseText){ var receiver=this.container[this.success()?'success':'failure'], options=this.options; if(!options.evalScripts)responseText=responseText.stripScripts(); if(receiver=$(receiver)){ if(options.insertion){ if(Object.isString(options.insertion)){ var insertion={};insertion[options.insertion]=responseText; receiver.insert(insertion); } else options.insertion(receiver,responseText); } else receiver.update(responseText); } } }); Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{ initialize:function($super,container,url,options){ $super(options); this.onComplete=this.options.onComplete; this.frequency=(this.options.frequency||2); this.decay=(this.options.decay||1); this.updater={}; this.container=container; this.url=url; this.start(); }, start:function(){ this.options.onComplete=this.updateComplete.bind(this); this.onTimerEvent(); }, stop:function(){ this.updater.options.onComplete=undefined; clearTimeout(this.timer); (this.onComplete||Prototype.emptyFunction).apply(this,arguments); }, updateComplete:function(response){ if(this.options.decay){ this.decay=(response.responseText==this.lastText? this.decay*this.options.decay:1); this.lastText=response.responseText; } this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency); }, onTimerEvent:function(){ this.updater=new Ajax.Updater(this.container,this.url,this.options); } }); function $(element){ if(arguments.length>1){ for(var i=0,elements=[],length=arguments.length;i'; delete attributes.name; return Element.writeAttribute(document.createElement(tagName),attributes); } if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName)); return Element.writeAttribute(cache[tagName].cloneNode(false),attributes); }; Object.extend(this.Element,element||{}); if(element)this.Element.prototype=element.prototype; }).call(window); Element.cache={}; Element.Methods={ visible:function(element){ return $(element).style.display!='none'; }, toggle:function(element){ element=$(element); Element[Element.visible(element)?'hide':'show'](element); return element; }, hide:function(element){ element=$(element); element.style.display='none'; return element; }, show:function(element){ element=$(element); element.style.display=''; return element; }, remove:function(element){ element=$(element); element.parentNode.removeChild(element); return element; }, update:function(element,content){ element=$(element); if(content&&content.toElement)content=content.toElement(); if(Object.isElement(content))return element.update().insert(content); content=Object.toHTML(content); element.innerHTML=content.stripScripts(); content.evalScripts.bind(content).defer(); return element; }, replace:function(element,content){ element=$(element); if(content&&content.toElement)content=content.toElement(); else if(!Object.isElement(content)){ content=Object.toHTML(content); var range=element.ownerDocument.createRange(); range.selectNode(element); content.evalScripts.bind(content).defer(); content=range.createContextualFragment(content.stripScripts()); } element.parentNode.replaceChild(content,element); return element; }, insert:function(element,insertions){ element=$(element); if(Object.isString(insertions)||Object.isNumber(insertions)|| Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML))) insertions={bottom:insertions}; var content,insert,tagName,childNodes; for(var position in insertions){ content=insertions[position]; position=position.toLowerCase(); insert=Element._insertionTranslations[position]; if(content&&content.toElement)content=content.toElement(); if(Object.isElement(content)){ insert(element,content); continue; } content=Object.toHTML(content); tagName=((position=='before'||position=='after') ?element.parentNode:element).tagName.toUpperCase(); childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts()); if(position=='top'||position=='after')childNodes.reverse(); childNodes.each(insert.curry(element)); content.evalScripts.bind(content).defer(); } return element; }, wrap:function(element,wrapper,attributes){ element=$(element); if(Object.isElement(wrapper)) $(wrapper).writeAttribute(attributes||{}); else if(Object.isString(wrapper))wrapper=new Element(wrapper,attributes); else wrapper=new Element('div',wrapper); if(element.parentNode) element.parentNode.replaceChild(wrapper,element); wrapper.appendChild(element); return wrapper; }, inspect:function(element){ element=$(element); var result='<'+element.tagName.toLowerCase(); $H({'id':'id','className':'class'}).each(function(pair){ var property=pair.first(),attribute=pair.last(); var value=(element[property]||'').toString(); if(value)result+=' '+attribute+'='+value.inspect(true); }); return result+'>'; }, 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){ return $(element).select("*"); }, firstDescendant:function(element){ element=$(element).firstChild; while(element&&element.nodeType!=1)element=element.nextSibling; return $(element); }, immediateDescendants:function(element){ if(!(element=$(element).firstChild))return[]; while(element&&element.nodeType!=1)element=element.nextSibling; if(element)return[element].concat($(element).nextSiblings()); return[]; }, 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){ if(Object.isString(selector)) selector=new Selector(selector); return selector.match($(element)); }, up:function(element,expression,index){ element=$(element); if(arguments.length==1)return $(element.parentNode); var ancestors=element.ancestors(); return Object.isNumber(expression)?ancestors[expression]: Selector.findElement(ancestors,expression,index); }, down:function(element,expression,index){ element=$(element); if(arguments.length==1)return element.firstDescendant(); return Object.isNumber(expression)?element.descendants()[expression]: Element.select(element,expression)[index||0]; }, previous:function(element,expression,index){ element=$(element); if(arguments.length==1)return $(Selector.handlers.previousElementSibling(element)); var previousSiblings=element.previousSiblings(); return Object.isNumber(expression)?previousSiblings[expression]: Selector.findElement(previousSiblings,expression,index); }, next:function(element,expression,index){ element=$(element); if(arguments.length==1)return $(Selector.handlers.nextElementSibling(element)); var nextSiblings=element.nextSiblings(); return Object.isNumber(expression)?nextSiblings[expression]: Selector.findElement(nextSiblings,expression,index); }, select:function(){ var args=$A(arguments),element=$(args.shift()); return Selector.findChildElements(element,args); }, adjacent:function(){ var args=$A(arguments),element=$(args.shift()); return Selector.findChildElements(element.parentNode,args).without(element); }, identify:function(element){ element=$(element); var id=element.readAttribute('id'),self=arguments.callee; if(id)return id; do{id='anonymous_element_'+self.counter++}while($(id)); element.writeAttribute('id',id); return id; }, readAttribute:function(element,name){ element=$(element); if(Prototype.Browser.IE){ var t=Element._attributeTranslations.read; if(t.values[name])return t.values[name](element,name); if(t.names[name])name=t.names[name]; if(name.include(':')){ return(!element.attributes||!element.attributes[name])?null: element.attributes[name].value; } } return element.getAttribute(name); }, writeAttribute:function(element,name,value){ element=$(element); var attributes={},t=Element._attributeTranslations.write; if(typeof name=='object')attributes=name; else attributes[name]=Object.isUndefined(value)?true:value; for(var attr in attributes){ name=t.names[attr]||attr; value=attributes[attr]; if(t.values[attr])name=t.values[attr](element,value); if(value===false||value===null) element.removeAttribute(name); else if(value===true) element.setAttribute(name,name); else element.setAttribute(name,value); } return element; }, getHeight:function(element){ return $(element).getDimensions().height; }, getWidth:function(element){ return $(element).getDimensions().width; }, classNames:function(element){ return new Element.ClassNames(element); }, hasClassName:function(element,className){ if(!(element=$(element)))return; var elementClassName=element.className; return(elementClassName.length>0&&(elementClassName==className|| new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName))); }, addClassName:function(element,className){ if(!(element=$(element)))return; if(!element.hasClassName(className)) element.className+=(element.className?' ':'')+className; return element; }, removeClassName:function(element,className){ if(!(element=$(element)))return; element.className=element.className.replace( new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip(); return element; }, toggleClassName:function(element,className){ if(!(element=$(element)))return; return element[element.hasClassName(className)? 'removeClassName':'addClassName'](className); }, 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.blank(); }, descendantOf:function(element,ancestor){ element=$(element),ancestor=$(ancestor); if(element.compareDocumentPosition) return(element.compareDocumentPosition(ancestor)&8)===8; if(ancestor.contains) return ancestor.contains(element)&&ancestor!==element; while(element=element.parentNode) if(element==ancestor)return true; return false; }, scrollTo:function(element){ element=$(element); var pos=element.cumulativeOffset(); window.scrollTo(pos[0],pos[1]); return element; }, getStyle:function(element,style){ element=$(element); style=style=='float'?'cssFloat':style.camelize(); var value=element.style[style]; if(!value||value=='auto'){ var css=document.defaultView.getComputedStyle(element,null); value=css?css[style]:null; } if(style=='opacity')return value?parseFloat(value):1.0; return value=='auto'?null:value; }, getOpacity:function(element){ return $(element).getStyle('opacity'); }, setStyle:function(element,styles){ element=$(element); var elementStyle=element.style,match; if(Object.isString(styles)){ element.style.cssText+=';'+styles; return styles.include('opacity')? element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element; } for(var property in styles) if(property=='opacity')element.setOpacity(styles[property]); else elementStyle[(property=='float'||property=='cssFloat')? (Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'): property]=styles[property]; return element; }, setOpacity:function(element,value){ element=$(element); element.style.opacity=(value==1||value==='')?'': (value<0.00001)?0:value; return element; }, getDimensions:function(element){ element=$(element); var display=element.getStyle('display'); if(display!='none'&&display!=null) return{width:element.offsetWidth,height:element.offsetHeight}; var els=element.style; var originalVisibility=els.visibility; var originalPosition=els.position; var originalDisplay=els.display; els.visibility='hidden'; els.position='absolute'; els.display='block'; var originalWidth=element.clientWidth; var originalHeight=element.clientHeight; els.display=originalDisplay; 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(Prototype.Browser.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; element._overflow=Element.getStyle(element,'overflow')||'auto'; if(element._overflow!=='hidden') element.style.overflow='hidden'; return element; }, undoClipping:function(element){ element=$(element); if(!element._overflow)return element; element.style.overflow=element._overflow=='auto'?'':element._overflow; element._overflow=null; return element; }, cumulativeOffset:function(element){ var valueT=0,valueL=0; do{ valueT+=element.offsetTop||0; valueL+=element.offsetLeft||0; element=element.offsetParent; }while(element); return Element._returnOffset(valueL,valueT); }, positionedOffset:function(element){ var valueT=0,valueL=0; do{ valueT+=element.offsetTop||0; valueL+=element.offsetLeft||0; element=element.offsetParent; if(element){ if(element.tagName.toUpperCase()=='BODY')break; var p=Element.getStyle(element,'position'); if(p!=='static')break; } }while(element); return Element._returnOffset(valueL,valueT); }, absolutize:function(element){ element=$(element); if(element.getStyle('position')=='absolute')return element; var offsets=element.positionedOffset(); var top=offsets[1]; var left=offsets[0]; var width=element.clientWidth; var height=element.clientHeight; element._originalLeft=left-parseFloat(element.style.left||0); element._originalTop=top-parseFloat(element.style.top||0); element._originalWidth=element.style.width; element._originalHeight=element.style.height; element.style.position='absolute'; element.style.top=top+'px'; element.style.left=left+'px'; element.style.width=width+'px'; element.style.height=height+'px'; return element; }, relativize:function(element){ element=$(element); if(element.getStyle('position')=='relative')return element; element.style.position='relative'; var top=parseFloat(element.style.top||0)-(element._originalTop||0); var left=parseFloat(element.style.left||0)-(element._originalLeft||0); element.style.top=top+'px'; element.style.left=left+'px'; element.style.height=element._originalHeight; element.style.width=element._originalWidth; return element; }, cumulativeScrollOffset:function(element){ var valueT=0,valueL=0; do{ valueT+=element.scrollTop||0; valueL+=element.scrollLeft||0; element=element.parentNode; }while(element); return Element._returnOffset(valueL,valueT); }, getOffsetParent:function(element){ if(element.offsetParent)return $(element.offsetParent); if(element==document.body)return $(element); while((element=element.parentNode)&&element!=document.body) if(Element.getStyle(element,'position')!='static') return $(element); return $(document.body); }, viewportOffset:function(forElement){ var valueT=0,valueL=0; var element=forElement; do{ valueT+=element.offsetTop||0; valueL+=element.offsetLeft||0; if(element.offsetParent==document.body&& Element.getStyle(element,'position')=='absolute')break; }while(element=element.offsetParent); element=forElement; do{ if(!Prototype.Browser.Opera||(element.tagName&&(element.tagName.toUpperCase()=='BODY'))){ valueT-=element.scrollTop||0; valueL-=element.scrollLeft||0; } }while(element=element.parentNode); return Element._returnOffset(valueL,valueT); }, clonePosition:function(element,source){ var options=Object.extend({ setLeft:true, setTop:true, setWidth:true, setHeight:true, offsetTop:0, offsetLeft:0 },arguments[2]||{}); source=$(source); var p=source.viewportOffset(); element=$(element); var delta=[0,0]; var parent=null; if(Element.getStyle(element,'position')=='absolute'){ parent=element.getOffsetParent(); delta=parent.viewportOffset(); } if(parent==document.body){ delta[0]-=document.body.offsetLeft; delta[1]-=document.body.offsetTop; } if(options.setLeft)element.style.left=(p[0]-delta[0]+options.offsetLeft)+'px'; if(options.setTop)element.style.top=(p[1]-delta[1]+options.offsetTop)+'px'; if(options.setWidth)element.style.width=source.offsetWidth+'px'; if(options.setHeight)element.style.height=source.offsetHeight+'px'; return element; } }; Element.Methods.identify.counter=1; Object.extend(Element.Methods,{ getElementsBySelector:Element.Methods.select, childElements:Element.Methods.immediateDescendants }); Element._attributeTranslations={ write:{ names:{ className:'class', htmlFor:'for' }, values:{} } }; if(Prototype.Browser.Opera){ Element.Methods.getStyle=Element.Methods.getStyle.wrap( function(proceed,element,style){ switch(style){ case'left':case'top':case'right':case'bottom': if(proceed(element,'position')==='static')return null; case'height':case'width': if(!Element.visible(element))return null; var dim=parseInt(proceed(element,style),10); if(dim!==element['offset'+style.capitalize()]) return dim+'px'; var properties; if(style==='height'){ properties=['border-top-width','padding-top', 'padding-bottom','border-bottom-width']; } else{ properties=['border-left-width','padding-left', 'padding-right','border-right-width']; } return properties.inject(dim,function(memo,property){ var val=proceed(element,property); return val===null?memo:memo-parseInt(val,10); })+'px'; default:return proceed(element,style); } } ); Element.Methods.readAttribute=Element.Methods.readAttribute.wrap( function(proceed,element,attribute){ if(attribute==='title')return element.title; return proceed(element,attribute); } ); } else if(Prototype.Browser.IE){ Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap( function(proceed,element){ element=$(element); try{element.offsetParent} catch(e){return $(document.body)} var position=element.getStyle('position'); if(position!=='static')return proceed(element); element.setStyle({position:'relative'}); var value=proceed(element); element.setStyle({position:position}); return value; } ); $w('positionedOffset viewportOffset').each(function(method){ Element.Methods[method]=Element.Methods[method].wrap( function(proceed,element){ element=$(element); try{element.offsetParent} catch(e){return Element._returnOffset(0,0)} var position=element.getStyle('position'); if(position!=='static')return proceed(element); var offsetParent=element.getOffsetParent(); if(offsetParent&&offsetParent.getStyle('position')==='fixed') offsetParent.setStyle({zoom:1}); element.setStyle({position:'relative'}); var value=proceed(element); element.setStyle({position:position}); return value; } ); }); Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap( function(proceed,element){ try{element.offsetParent} catch(e){return Element._returnOffset(0,0)} return proceed(element); } ); Element.Methods.getStyle=function(element,style){ element=$(element); style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize(); var value=element.style[style]; if(!value&&element.currentStyle)value=element.currentStyle[style]; if(style=='opacity'){ if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/)) if(value[1])return parseFloat(value[1])/100; return 1.0; } if(value=='auto'){ if((style=='width'||style=='height')&&(element.getStyle('display')!='none')) return element['offset'+style.capitalize()]+'px'; return null; } return value; }; Element.Methods.setOpacity=function(element,value){ function stripAlpha(filter){ return filter.replace(/alpha\([^\)]*\)/gi,''); } element=$(element); var currentStyle=element.currentStyle; if((currentStyle&&!currentStyle.hasLayout)|| (!currentStyle&&element.style.zoom=='normal')) element.style.zoom=1; var filter=element.getStyle('filter'),style=element.style; if(value==1||value===''){ (filter=stripAlpha(filter))? style.filter=filter:style.removeAttribute('filter'); return element; }else if(value<0.00001)value=0; style.filter=stripAlpha(filter)+ 'alpha(opacity='+(value*100)+')'; return element; }; Element._attributeTranslations={ read:{ names:{ 'class':'className', 'for':'htmlFor' }, values:{ _getAttr:function(element,attribute){ return element.getAttribute(attribute,2); }, _getAttrNode:function(element,attribute){ var node=element.getAttributeNode(attribute); return node?node.value:""; }, _getEv:function(element,attribute){ attribute=element.getAttribute(attribute); return attribute?attribute.toString().slice(23,-2):null; }, _flag:function(element,attribute){ return $(element).hasAttribute(attribute)?attribute:null; }, style:function(element){ return element.style.cssText.toLowerCase(); }, title:function(element){ return element.title; } } } }; Element._attributeTranslations.write={ names:Object.extend({ cellpadding:'cellPadding', cellspacing:'cellSpacing' },Element._attributeTranslations.read.names), values:{ checked:function(element,value){ element.checked=!!value; }, style:function(element,value){ element.style.cssText=value?value:''; } } }; Element._attributeTranslations.has={}; $w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr){ Element._attributeTranslations.write.names[attr.toLowerCase()]=attr; Element._attributeTranslations.has[attr.toLowerCase()]=attr; }); (function(v){ Object.extend(v,{ href:v._getAttr, src:v._getAttr, type:v._getAttr, action:v._getAttrNode, disabled:v._flag, checked:v._flag, readonly:v._flag, multiple:v._flag, onload:v._getEv, onunload:v._getEv, onclick:v._getEv, ondblclick:v._getEv, onmousedown:v._getEv, onmouseup:v._getEv, onmouseover:v._getEv, onmousemove:v._getEv, onmouseout:v._getEv, onfocus:v._getEv, onblur:v._getEv, onkeypress:v._getEv, onkeydown:v._getEv, onkeyup:v._getEv, onsubmit:v._getEv, onreset:v._getEv, onselect:v._getEv, onchange:v._getEv }); })(Element._attributeTranslations.read.values); } else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){ Element.Methods.setOpacity=function(element,value){ element=$(element); element.style.opacity=(value==1)?0.999999: (value==='')?'':(value<0.00001)?0:value; return element; }; } else if(Prototype.Browser.WebKit){ Element.Methods.setOpacity=function(element,value){ element=$(element); element.style.opacity=(value==1||value==='')?'': (value<0.00001)?0:value; if(value==1) if(element.tagName.toUpperCase()=='IMG'&&element.width){ element.width++;element.width--; }else try{ var n=document.createTextNode(' '); element.appendChild(n); element.removeChild(n); }catch(e){} return element; }; Element.Methods.cumulativeOffset=function(element){ var valueT=0,valueL=0; do{ valueT+=element.offsetTop||0; valueL+=element.offsetLeft||0; if(element.offsetParent==document.body) if(Element.getStyle(element,'position')=='absolute')break; element=element.offsetParent; }while(element); return Element._returnOffset(valueL,valueT); }; } if(Prototype.Browser.IE||Prototype.Browser.Opera){ Element.Methods.update=function(element,content){ element=$(element); if(content&&content.toElement)content=content.toElement(); if(Object.isElement(content))return element.update().insert(content); content=Object.toHTML(content); var tagName=element.tagName.toUpperCase(); if(tagName in Element._insertionTranslations.tags){ $A(element.childNodes).each(function(node){element.removeChild(node)}); Element._getContentFromAnonymousElement(tagName,content.stripScripts()) .each(function(node){element.appendChild(node)}); } else element.innerHTML=content.stripScripts(); content.evalScripts.bind(content).defer(); return element; }; } if('outerHTML'in document.createElement('div')){ Element.Methods.replace=function(element,content){ element=$(element); if(content&&content.toElement)content=content.toElement(); if(Object.isElement(content)){ element.parentNode.replaceChild(content,element); return element; } content=Object.toHTML(content); var parent=element.parentNode,tagName=parent.tagName.toUpperCase(); if(Element._insertionTranslations.tags[tagName]){ var nextSibling=element.next(); var fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts()); parent.removeChild(element); if(nextSibling) fragments.each(function(node){parent.insertBefore(node,nextSibling)}); else fragments.each(function(node){parent.appendChild(node)}); } else element.outerHTML=content.stripScripts(); content.evalScripts.bind(content).defer(); return element; }; } Element._returnOffset=function(l,t){ var result=[l,t]; result.left=l; result.top=t; return result; }; Element._getContentFromAnonymousElement=function(tagName,html){ var div=new Element('div'),t=Element._insertionTranslations.tags[tagName]; if(t){ div.innerHTML=t[0]+html+t[1]; t[2].times(function(){div=div.firstChild}); }else div.innerHTML=html; return $A(div.childNodes); }; Element._insertionTranslations={ before:function(element,node){ element.parentNode.insertBefore(node,element); }, top:function(element,node){ element.insertBefore(node,element.firstChild); }, bottom:function(element,node){ element.appendChild(node); }, after:function(element,node){ element.parentNode.insertBefore(node,element.nextSibling); }, tags:{ TABLE:['','
',1], TBODY:['','
',2], TR:['','
',3], TD:['
','
',4], SELECT:['',1] } }; (function(){ Object.extend(this.tags,{ THEAD:this.tags.TBODY, TFOOT:this.tags.TBODY, TH:this.tags.TD }); }).call(Element._insertionTranslations); Element.Methods.Simulated={ hasAttribute:function(element,attribute){ attribute=Element._attributeTranslations.has[attribute]||attribute; var node=$(element).getAttributeNode(attribute); return!!(node&&node.specified); } }; Element.Methods.ByTag={}; Object.extend(Element,Element.Methods); if(!Prototype.BrowserFeatures.ElementExtensions&& document.createElement('div')['__proto__']){ window.HTMLElement={}; window.HTMLElement.prototype=document.createElement('div')['__proto__']; Prototype.BrowserFeatures.ElementExtensions=true; } Element.extend=(function(){ if(Prototype.BrowserFeatures.SpecificElementExtensions) return Prototype.K; var Methods={},ByTag=Element.Methods.ByTag; var extend=Object.extend(function(element){ if(!element||element._extendedByPrototype|| element.nodeType!=1||element==window)return element; var methods=Object.clone(Methods), tagName=element.tagName.toUpperCase(),property,value; if(ByTag[tagName])Object.extend(methods,ByTag[tagName]); for(property in methods){ value=methods[property]; if(Object.isFunction(value)&&!(property in element)) element[property]=value.methodize(); } element._extendedByPrototype=Prototype.emptyFunction; return element; },{ refresh:function(){ if(!Prototype.BrowserFeatures.ElementExtensions){ Object.extend(Methods,Element.Methods); Object.extend(Methods,Element.Methods.Simulated); } } }); extend.refresh(); return extend; })(); Element.hasAttribute=function(element,attribute){ if(element.hasAttribute)return element.hasAttribute(attribute); return Element.Methods.Simulated.hasAttribute(element,attribute); }; Element.addMethods=function(methods){ var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag; if(!methods){ Object.extend(Form,Form.Methods); Object.extend(Form.Element,Form.Element.Methods); Object.extend(Element.Methods.ByTag,{ "FORM":Object.clone(Form.Methods), "INPUT":Object.clone(Form.Element.Methods), "SELECT":Object.clone(Form.Element.Methods), "TEXTAREA":Object.clone(Form.Element.Methods) }); } if(arguments.length==2){ var tagName=methods; methods=arguments[1]; } if(!tagName)Object.extend(Element.Methods,methods||{}); else{ if(Object.isArray(tagName))tagName.each(extend); else extend(tagName); } function extend(tagName){ tagName=tagName.toUpperCase(); if(!Element.Methods.ByTag[tagName]) Element.Methods.ByTag[tagName]={}; Object.extend(Element.Methods.ByTag[tagName],methods); } function copy(methods,destination,onlyIfAbsent){ onlyIfAbsent=onlyIfAbsent||false; for(var property in methods){ var value=methods[property]; if(!Object.isFunction(value))continue; if(!onlyIfAbsent||!(property in destination)) destination[property]=value.methodize(); } } function findDOMClass(tagName){ var klass; var trans={ "OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph", "FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList", "DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading", "H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote", "INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION": "TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD": "TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR": "TableRow","TH":"TableCell","TD":"TableCell","FRAMESET": "FrameSet","IFRAME":"IFrame" }; if(trans[tagName])klass='HTML'+trans[tagName]+'Element'; if(window[klass])return window[klass]; klass='HTML'+tagName+'Element'; if(window[klass])return window[klass]; klass='HTML'+tagName.capitalize()+'Element'; if(window[klass])return window[klass]; window[klass]={}; window[klass].prototype=document.createElement(tagName)['__proto__']; return window[klass]; } if(F.ElementExtensions){ copy(Element.Methods,HTMLElement.prototype); copy(Element.Methods.Simulated,HTMLElement.prototype,true); } if(F.SpecificElementExtensions){ for(var tag in Element.Methods.ByTag){ var klass=findDOMClass(tag); if(Object.isUndefined(klass))continue; copy(T[tag],klass.prototype); } } Object.extend(Element,Element.Methods); delete Element.ByTag; if(Element.extend.refresh)Element.extend.refresh(); Element.cache={}; }; document.viewport={ getDimensions:function(){ var dimensions={},B=Prototype.Browser; $w('width height').each(function(d){ var D=d.capitalize(); if(B.WebKit&&!document.evaluate){ dimensions[d]=self['inner'+D]; }else if(B.Opera&&parseFloat(window.opera.version())<9.5){ dimensions[d]=document.body['client'+D] }else{ dimensions[d]=document.documentElement['client'+D]; } }); return dimensions; }, getWidth:function(){ return this.getDimensions().width; }, getHeight:function(){ return this.getDimensions().height; }, getScrollOffsets:function(){ return Element._returnOffset( window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft, window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop); } }; var Selector=Class.create({ initialize:function(expression){ this.expression=expression.strip(); if(this.shouldUseSelectorsAPI()){ this.mode='selectorsAPI'; }else if(this.shouldUseXPath()){ this.mode='xpath'; this.compileXPathMatcher(); }else{ this.mode="normal"; this.compileMatcher(); } }, shouldUseXPath:function(){ if(!Prototype.BrowserFeatures.XPath)return false; var e=this.expression; if(Prototype.Browser.WebKit&& (e.include("-of-type")||e.include(":empty"))) return false; if((/(\[[\w-]*?:|:checked)/).test(e)) return false; return true; }, shouldUseSelectorsAPI:function(){ if(!Prototype.BrowserFeatures.SelectorsAPI)return false; if(!Selector._div)Selector._div=new Element('div'); try{ Selector._div.querySelector(this.expression); }catch(e){ return false; } return true; }, compileMatcher:function(){ var e=this.expression,ps=Selector.patterns,h=Selector.handlers, c=Selector.criteria,le,p,m; if(Selector._cache[e]){ this.matcher=Selector._cache[e]; return; } this.matcher=["this.matcher = function(root) {", "var r = root, h = Selector.handlers, c = false, n;"]; while(e&&le!=e&&(/\S/).test(e)){ le=e; for(var i in ps){ p=ps[i]; if(m=e.match(p)){ this.matcher.push(Object.isFunction(c[i])?c[i](m): new Template(c[i]).evaluate(m)); e=e.replace(m[0],''); break; } } } this.matcher.push("return h.unique(n);\n}"); eval(this.matcher.join('\n')); Selector._cache[this.expression]=this.matcher; }, compileXPathMatcher:function(){ var e=this.expression,ps=Selector.patterns, x=Selector.xpath,le,m; if(Selector._cache[e]){ this.xpath=Selector._cache[e];return; } this.matcher=['.//*']; while(e&&le!=e&&(/\S/).test(e)){ le=e; for(var i in ps){ if(m=e.match(ps[i])){ this.matcher.push(Object.isFunction(x[i])?x[i](m): new Template(x[i]).evaluate(m)); e=e.replace(m[0],''); break; } } } this.xpath=this.matcher.join(''); Selector._cache[this.expression]=this.xpath; }, findElements:function(root){ root=root||document; var e=this.expression,results; switch(this.mode){ case'selectorsAPI': if(root!==document){ var oldId=root.id,id=$(root).identify(); e="#"+id+" "+e; } results=$A(root.querySelectorAll(e)).map(Element.extend); root.id=oldId; return results; case'xpath': return document._getElementsByXPath(this.xpath,root); default: return this.matcher(root); } }, match:function(element){ this.tokens=[]; var e=this.expression,ps=Selector.patterns,as=Selector.assertions; var le,p,m; while(e&&le!==e&&(/\S/).test(e)){ le=e; for(var i in ps){ p=ps[i]; if(m=e.match(p)){ if(as[i]){ this.tokens.push([i,Object.clone(m)]); e=e.replace(m[0],''); }else{ return this.findElements(document).include(element); } } } } var match=true,name,matches; for(var i=0,token;token=this.tokens[i];i++){ name=token[0],matches=token[1]; if(!Selector.assertions[name](element,matches)){ match=false;break; } } return match; }, toString:function(){ return this.expression; }, inspect:function(){ return"#"; } }); Object.extend(Selector,{ _cache:{}, xpath:{ descendant:"//*", child:"/*", adjacent:"/following-sibling::*[1]", laterSibling:'/following-sibling::*', tagName:function(m){ if(m[1]=='*')return''; return"[local-name()='"+m[1].toLowerCase()+ "' or local-name()='"+m[1].toUpperCase()+"']"; }, className:"[contains(concat(' ', @class, ' '), ' #{1} ')]", id:"[@id='#{1}']", attrPresence:function(m){ m[1]=m[1].toLowerCase(); return new Template("[@#{1}]").evaluate(m); }, attr:function(m){ m[1]=m[1].toLowerCase(); m[3]=m[5]||m[6]; return new Template(Selector.xpath.operators[m[2]]).evaluate(m); }, pseudo:function(m){ var h=Selector.xpath.pseudos[m[1]]; if(!h)return''; if(Object.isFunction(h))return h(m); return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); }, operators:{ '=':"[@#{1}='#{3}']", '!=':"[@#{1}!='#{3}']", '^=':"[starts-with(@#{1}, '#{3}')]", '$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", '*=':"[contains(@#{1}, '#{3}')]", '~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", '|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]" }, pseudos:{ 'first-child':'[not(preceding-sibling::*)]', 'last-child':'[not(following-sibling::*)]', 'only-child':'[not(preceding-sibling::* or following-sibling::*)]', 'empty':"[count(*) = 0 and (count(text()) = 0)]", 'checked':"[@checked]", 'disabled':"[(@disabled) and (@type!='hidden')]", 'enabled':"[not(@disabled) and (@type!='hidden')]", 'not':function(m){ var e=m[6],p=Selector.patterns, x=Selector.xpath,le,v; var exclusion=[]; while(e&&le!=e&&(/\S/).test(e)){ le=e; for(var i in p){ if(m=e.match(p[i])){ v=Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m); exclusion.push("("+v.substring(1,v.length-1)+")"); e=e.replace(m[0],''); break; } } } return"[not("+exclusion.join(" and ")+")]"; }, 'nth-child':function(m){ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m); }, 'nth-last-child':function(m){ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m); }, 'nth-of-type':function(m){ return Selector.xpath.pseudos.nth("position() ",m); }, 'nth-last-of-type':function(m){ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m); }, 'first-of-type':function(m){ m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m); }, 'last-of-type':function(m){ m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m); }, 'only-of-type':function(m){ var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m); }, nth:function(fragment,m){ var mm,formula=m[6],predicate; if(formula=='even')formula='2n+0'; if(formula=='odd')formula='2n+1'; if(mm=formula.match(/^(\d+)$/)) return'['+fragment+"= "+mm[1]+']'; if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){ if(mm[1]=="-")mm[1]=-1; var a=mm[1]?Number(mm[1]):1; var b=mm[2]?Number(mm[2]):0; predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+ "((#{fragment} - #{b}) div #{a} >= 0)]"; return new Template(predicate).evaluate({ fragment:fragment,a:a,b:b}); } } } }, criteria:{ tagName:'n = h.tagName(n, r, "#{1}", c); c = false;', className:'n = h.className(n, r, "#{1}", c); c = false;', id:'n = h.id(n, r, "#{1}", c); c = false;', attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;', attr:function(m){ m[3]=(m[5]||m[6]); return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); }, pseudo:function(m){ if(m[6])m[6]=m[6].replace(/"/g,'\\"'); return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); }, descendant:'c = "descendant";', child:'c = "child";', adjacent:'c = "adjacent";', laterSibling:'c = "laterSibling";' }, patterns:{ laterSibling:/^\s*~\s*/, child:/^\s*>\s*/, adjacent:/^\s*\+\s*/, descendant:/^\s/, tagName:/^\s*(\*|[\w\-]+)(\b|$)?/, id:/^#([\w\-\*]+)(\b|$)/, className:/^\.([\w\-\*]+)(\b|$)/, pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/, attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }, assertions:{ tagName:function(element,matches){ return matches[1].toUpperCase()==element.tagName.toUpperCase(); }, className:function(element,matches){ return Element.hasClassName(element,matches[1]); }, id:function(element,matches){ return element.id===matches[1]; }, attrPresence:function(element,matches){ return Element.hasAttribute(element,matches[1]); }, attr:function(element,matches){ var nodeValue=Element.readAttribute(element,matches[1]); return nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6]); } }, handlers:{ concat:function(a,b){ for(var i=0,node;node=b[i];i++) a.push(node); return a; }, mark:function(nodes){ var _true=Prototype.emptyFunction; for(var i=0,node;node=nodes[i];i++) node._countedByPrototype=_true; return nodes; }, unmark:function(nodes){ for(var i=0,node;node=nodes[i];i++) node._countedByPrototype=undefined; return nodes; }, index:function(parentNode,reverse,ofType){ parentNode._countedByPrototype=Prototype.emptyFunction; if(reverse){ for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){ var node=nodes[i]; if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++; } }else{ for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++) if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++; } }, unique:function(nodes){ if(nodes.length==0)return nodes; var results=[],n; for(var i=0,l=nodes.length;i0?[b]:[]; return $R(1,total).inject([],function(memo,i){ if(0==(i-b)%a&&(i-b)/a>=0)memo.push(i); return memo; }); }, nth:function(nodes,formula,root,reverse,ofType){ if(nodes.length==0)return[]; if(formula=='even')formula='2n+0'; if(formula=='odd')formula='2n+1'; var h=Selector.handlers,results=[],indexed=[],m; h.mark(nodes); for(var i=0,node;node=nodes[i];i++){ if(!node.parentNode._countedByPrototype){ h.index(node.parentNode,reverse,ofType); indexed.push(node.parentNode); } } if(formula.match(/^\d+$/)){ formula=Number(formula); for(var i=0,node;node=nodes[i];i++) if(node.nodeIndex==formula)results.push(node); }else if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){ if(m[1]=="-")m[1]=-1; var a=m[1]?Number(m[1]):1; var b=m[2]?Number(m[2]):0; var indices=Selector.pseudos.getIndices(a,b,nodes.length); for(var i=0,node,l=indices.length;node=nodes[i];i++){ for(var j=0;j+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){ expressions.push(m[1].strip()); }); return expressions; }, matchElements:function(elements,expression){ var matches=$$(expression),h=Selector.handlers; h.mark(matches); for(var i=0,results=[],element;element=elements[i];i++) if(element._countedByPrototype)results.push(element); h.unmark(matches); return results; }, findElement:function(elements,expression,index){ if(Object.isNumber(expression)){ index=expression;expression=false; } return Selector.matchElements(elements,expression||'*')[index||0]; }, findChildElements:function(element,expressions){ expressions=Selector.split(expressions.join(',')); var results=[],h=Selector.handlers; for(var i=0,l=expressions.length,selector;i1)?h.unique(results):results; } }); if(Prototype.Browser.IE){ Object.extend(Selector.handlers,{ concat:function(a,b){ for(var i=0,node;node=b[i];i++) if(node.tagName!=="!")a.push(node); return a; }, unmark:function(nodes){ for(var i=0,node;node=nodes[i];i++) node.removeAttribute('_countedByPrototype'); return nodes; } }); } function $$(){ return Selector.findChildElements(document,$A(arguments)); } var Form={ reset:function(form){ $(form).reset(); return form; }, serializeElements:function(elements,options){ if(typeof options!='object')options={hash:!!options}; else if(Object.isUndefined(options.hash))options.hash=true; var key,value,submitted=false,submit=options.submit; var data=elements.inject({},function(result,element){ if(!element.disabled&&element.name){ key=element.name;value=$(element).getValue(); if(value!=null&&element.type!='file'&&(element.type!='submit'||(!submitted&& submit!==false&&(!submit||key==submit)&&(submitted=true)))){ if(key in result){ if(!Object.isArray(result[key]))result[key]=[result[key]]; result[key].push(value); } else result[key]=value; } } return result; }); return options.hash?data:Object.toQueryString(data); } }; Form.Methods={ serialize:function(form,options){ return Form.serializeElements(Form.getElements(form),options); }, getElements:function(form){ return $A($(form).getElementsByTagName('*')).inject([], function(elements,child){ if(Form.Element.Serializers[child.tagName.toLowerCase()]) elements.push(Element.extend(child)); return elements; } ); }, getInputs:function(form,typeName,name){ form=$(form); var inputs=form.getElementsByTagName('input'); if(!typeName&&!name)return $A(inputs).map(Element.extend); for(var i=0,matchingInputs=[],length=inputs.length;i=0; }).sortBy(function(element){return element.tabIndex}).first(); return firstByIndex?firstByIndex:elements.find(function(element){ return['input','select','textarea'].include(element.tagName.toLowerCase()); }); }, focusFirstElement:function(form){ form=$(form); form.findFirstElement().activate(); return form; }, request:function(form,options){ form=$(form),options=Object.clone(options||{}); var params=options.parameters,action=form.readAttribute('action')||''; if(action.blank())action=window.location.href; options.parameters=form.serialize(true); if(params){ if(Object.isString(params))params=params.toQueryParams(); Object.extend(options.parameters,params); } if(form.hasAttribute('method')&&!options.method) options.method=form.method; return new Ajax.Request(action,options); } }; Form.Element={ focus:function(element){ $(element).focus(); return element; }, select:function(element){ $(element).select(); return element; } }; Form.Element.Methods={ serialize:function(element){ element=$(element); if(!element.disabled&&element.name){ var value=element.getValue(); if(value!=undefined){ var pair={}; pair[element.name]=value; return Object.toQueryString(pair); } } return''; }, getValue:function(element){ element=$(element); var method=element.tagName.toLowerCase(); return Form.Element.Serializers[method](element); }, setValue:function(element,value){ element=$(element); var method=element.tagName.toLowerCase(); Form.Element.Serializers[method](element,value); return element; }, clear:function(element){ $(element).value=''; return element; }, present:function(element){ return $(element).value!=''; }, activate:function(element){ element=$(element); try{ element.focus(); if(element.select&&(element.tagName.toLowerCase()!='input'|| !['button','reset','submit'].include(element.type))) element.select(); }catch(e){} return element; }, disable:function(element){ element=$(element); element.disabled=true; return element; }, enable:function(element){ element=$(element); element.disabled=false; return element; } }; var Field=Form.Element; var $F=Form.Element.Methods.getValue; Form.Element.Serializers={ input:function(element,value){ switch(element.type.toLowerCase()){ case'checkbox': case'radio': return Form.Element.Serializers.inputSelector(element,value); default: return Form.Element.Serializers.textarea(element,value); } }, inputSelector:function(element,value){ if(Object.isUndefined(value))return element.checked?element.value:null; else element.checked=!!value; }, textarea:function(element,value){ if(Object.isUndefined(value))return element.value; else element.value=value; }, select:function(element,value){ if(Object.isUndefined(value)) return this[element.type=='select-one'? 'selectOne':'selectMany'](element); else{ var opt,currentValue,single=!Object.isArray(value); for(var i=0,length=element.length;i=0?this.optionValue(element.options[index]):null; }, selectMany:function(element){ var values,length=element.length; if(!length)return null; for(var i=0,values=[];i<\/script>"); $("__onDOMContentLoaded").onreadystatechange=function(){ if(this.readyState=="complete"){ this.onreadystatechange=null; fireContentLoadedEvent(); } }; } })(); Hash.toQueryString=Object.toQueryString; var Toggle={display:Element.toggle}; Element.Methods.childOf=Element.Methods.descendantOf; var Insertion={ Before:function(element,content){ return Element.insert(element,{before:content}); }, Top:function(element,content){ return Element.insert(element,{top:content}); }, Bottom:function(element,content){ return Element.insert(element,{bottom:content}); }, After:function(element,content){ return Element.insert(element,{after:content}); } }; var $continue=new Error('"throw $continue" is deprecated, use "return" instead'); var Position={ includeScrollOffsets:false, prepare:function(){ this.deltaX=window.pageXOffset ||document.documentElement.scrollLeft ||document.body.scrollLeft ||0; this.deltaY=window.pageYOffset ||document.documentElement.scrollTop ||document.body.scrollTop ||0; }, within:function(element,x,y){ if(this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element,x,y); this.xcomp=x; this.ycomp=y; this.offset=Element.cumulativeOffset(element); return(y>=this.offset[1]&& y=this.offset[0]&& x=this.offset[1]&& this.ycomp=this.offset[0]&& this.xcomp0; })._each(iterator); }, set:function(className){ this.element.className=className; }, add:function(classNameToAdd){ if(this.include(classNameToAdd))return; this.set($A(this).concat(classNameToAdd).join(' ')); }, remove:function(classNameToRemove){ if(!this.include(classNameToRemove))return; this.set($A(this).without(classNameToRemove).join(' ')); }, toString:function(){ return $A(this).join(' '); } }; Object.extend(Element.ClassNames.prototype,Enumerable); Element.addMethods(); var Validator=Class.create(); Validator.prototype={ initialize:function(className,error,test,options){ if(typeof test=='function'){ this.options=$H(options); this._test=test; }else{ this.options=$H(test); this._test=function(){return true}; } this.error=error||'Validation failed.'; this.className=className; }, test:function(v,elm){ return(this._test(v,elm)&&this.options.all(function(p){ return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true; })); } } Validator.methods={ pattern:function(v,elm,opt){return Validation.get('IsEmpty').test(v)||opt.test(v)}, minLength:function(v,elm,opt){return v.length>=opt}, maxLength:function(v,elm,opt){return v.length<=opt}, min:function(v,elm,opt){return v>=parseFloat(opt)}, max:function(v,elm,opt){return v<=parseFloat(opt)}, notOneOf:function(v,elm,opt){return $A(opt).all(function(value){ return v!=value; })}, oneOf:function(v,elm,opt){return $A(opt).any(function(value){ return v==value; })}, is:function(v,elm,opt){return v==opt}, isNot:function(v,elm,opt){return v!=opt}, equalToField:function(v,elm,opt){return v==$F(opt)}, notEqualToField:function(v,elm,opt){return v!=$F(opt)}, include:function(v,elm,opt){return $A(opt).all(function(value){ return Validation.get(value).test(v,elm); })} } var Validation=Class.create(); Validation.defaultOptions={ onSubmit:true, stopOnFirst:false, immediate:false, focusOnError:true, useTitles:false, addClassNameToContainer:false, containerClassName:'.input-box', onFormValidate:function(result,form){}, onElementValidate:function(result,elm){} }; Validation.prototype={ initialize:function(form,options){ this.form=$(form); if(!this.form){ return; } this.options=Object.extend({ onSubmit:Validation.defaultOptions.onSubmit, stopOnFirst:Validation.defaultOptions.stopOnFirst, immediate:Validation.defaultOptions.immediate, focusOnError:Validation.defaultOptions.focusOnError, useTitles:Validation.defaultOptions.useTitles, onFormValidate:Validation.defaultOptions.onFormValidate, onElementValidate:Validation.defaultOptions.onElementValidate },options||{}); if(this.options.onSubmit)Event.observe(this.form,'submit',this.onSubmit.bind(this),false); if(this.options.immediate){ Form.getElements(this.form).each(function(input){ if(input.tagName.toLowerCase()=='select'){ Event.observe(input,'blur',this.onChange.bindAsEventListener(this)); } if(input.type.toLowerCase()=='radio'||input.type.toLowerCase()=='checkbox'){ Event.observe(input,'click',this.onChange.bindAsEventListener(this)); }else{ Event.observe(input,'change',this.onChange.bindAsEventListener(this)); } },this); } }, onChange:function(ev){ Validation.isOnChange=true; Validation.validate(Event.element(ev),{ useTitle:this.options.useTitles, onElementValidate:this.options.onElementValidate }); Validation.isOnChange=false; }, onSubmit:function(ev){ if(!this.validate())Event.stop(ev); }, validate:function(){ var result=false; var useTitles=this.options.useTitles; var callback=this.options.onElementValidate; try{ if(this.options.stopOnFirst){ result=Form.getElements(this.form).all(function(elm){ if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){ return true; } return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback}); },this); }else{ result=Form.getElements(this.form).collect(function(elm){ if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){ return true; } return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback}); },this).all(); } }catch(e){ } if(!result&&this.options.focusOnError){ try{ Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus() } catch(e){ } } this.options.onFormValidate(result,this.form); return result; }, reset:function(){ Form.getElements(this.form).each(Validation.reset); }, isElementInForm:function(elm,form){ var domForm=elm.up('form'); if(domForm==form){ return true; } return false; } } Object.extend(Validation,{ validate:function(elm,options){ options=Object.extend({ useTitle:false, onElementValidate:function(result,elm){} },options||{}); elm=$(elm); var cn=$w(elm.className); return result=cn.all(function(value){ var test=Validation.test(value,elm,options.useTitle); options.onElementValidate(test,elm); return test; }); }, insertAdvice:function(elm,advice){ var container=$(elm).up('.field-row'); if(container){ Element.insert(container,{after:advice}); }else if(elm.up('td.value')){ elm.up('td.value').insert({bottom:advice}); }else if(elm.advaiceContainer&&$(elm.advaiceContainer)){ $(elm.advaiceContainer).update(advice); } else{ switch(elm.type.toLowerCase()){ case'checkbox': case'radio': var p=elm.parentNode; if(p){ Element.insert(p,{'bottom':advice}); }else{ Element.insert(elm,{'after':advice}); } break; default: Element.insert(elm,{'after':advice}); } } }, showAdvice:function(elm,advice,adviceName){ if(!elm.advices){ elm.advices=new Hash(); } else{ elm.advices.each(function(pair){ this.hideAdvice(elm,pair.value); }.bind(this)); } elm.advices.set(adviceName,advice); if(typeof Effect=='undefined'){ advice.style.display='block'; }else{ if(!advice._adviceAbsolutize){ new Effect.Appear(advice,{duration:1}); }else{ Position.absolutize(advice); advice.show(); advice.setStyle({ 'top':advice._adviceTop, 'left':advice._adviceLeft, 'width':advice._adviceWidth, 'z-index':1000 }); advice.addClassName('advice-absolute'); } } }, hideAdvice:function(elm,advice){ if(advice!=null)advice.hide(); }, updateCallback:function(elm,status){ if(typeof elm.callbackFunction!='undefined'){ eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')'); } }, ajaxError:function(elm,errorMsg){ var name='validate-ajax'; var advice=Validation.getAdvice(name,elm); if(advice==null){ advice=this.createAdvice(name,elm,false,errorMsg); } this.showAdvice(elm,advice,'validate-ajax'); this.updateCallback(elm,'failed'); elm.addClassName('validation-failed'); elm.addClassName('validate-ajax'); if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){ var container=elm.up(Validation.defaultOptions.containerClassName); if(container&&this.allowContainerClassName(elm)){ container.removeClassName('validation-passed'); container.addClassName('validation-error'); } } }, allowContainerClassName:function(elm){ if(elm.type=='radio'||elm.type=='checkbox'){ return elm.hasClassName('change-container-classname'); } return true; }, test:function(name,elm,useTitle){ var v=Validation.get(name); var prop='__advice'+name.camelize(); try{ if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){ var advice=Validation.getAdvice(name,elm); if(advice==null){ advice=this.createAdvice(name,elm,useTitle); } this.showAdvice(elm,advice,name); this.updateCallback(elm,'failed'); elm[prop]=1; if(!elm.advaiceContainer){ elm.removeClassName('validation-passed'); elm.addClassName('validation-failed'); } if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){ var container=elm.up(Validation.defaultOptions.containerClassName); if(container&&this.allowContainerClassName(elm)){ container.removeClassName('validation-passed'); container.addClassName('validation-error'); } } return false; }else{ var advice=Validation.getAdvice(name,elm); this.hideAdvice(elm,advice); this.updateCallback(elm,'passed'); elm[prop]=''; elm.removeClassName('validation-failed'); elm.addClassName('validation-passed'); if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){ var container=elm.up(Validation.defaultOptions.containerClassName); if(container&&!container.down('.validation-failed')&&this.allowContainerClassName(elm)){ if(!Validation.get('IsEmpty').test(elm.value)||!this.isVisible(elm)){ container.addClassName('validation-passed'); }else{ container.removeClassName('validation-passed'); } container.removeClassName('validation-error'); } } return true; } }catch(e){ throw(e) } }, isVisible:function(elm){ while(elm.tagName!='BODY'){ if(!$(elm).visible())return false; elm=elm.parentNode; } return true; }, getAdvice:function(name,elm){ return $('advice-'+name+'-'+Validation.getElmID(elm))||$('advice-'+Validation.getElmID(elm)); }, createAdvice:function(name,elm,useTitle,customError){ var v=Validation.get(name); var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error; if(customError){ errorMsg=customError; } try{ if(Translator){ errorMsg=Translator.translate(errorMsg); } } catch(e){} advice='' Validation.insertAdvice(elm,advice); advice=Validation.getAdvice(name,elm); if($(elm).hasClassName('absolute-advice')){ var dimensions=$(elm).getDimensions(); var originalPosition=Position.cumulativeOffset(elm); advice._adviceTop=(originalPosition[1]+dimensions.height)+'px'; advice._adviceLeft=(originalPosition[0])+'px'; advice._adviceWidth=(dimensions.width)+'px'; advice._adviceAbsolutize=true; } return advice; }, getElmID:function(elm){ return elm.id?elm.id:elm.name; }, reset:function(elm){ elm=$(elm); var cn=$w(elm.className); cn.each(function(value){ var prop='__advice'+value.camelize(); if(elm[prop]){ var advice=Validation.getAdvice(value,elm); if(advice){ advice.hide(); } elm[prop]=''; } elm.removeClassName('validation-failed'); elm.removeClassName('validation-passed'); if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){ var container=elm.up(Validation.defaultOptions.containerClassName); if(container){ container.removeClassName('validation-passed'); container.removeClassName('validation-error'); } } }); }, add:function(className,error,test,options){ var nv={}; nv[className]=new Validator(className,error,test,options); Object.extend(Validation.methods,nv); }, addAllThese:function(validators){ var nv={}; $A(validators).each(function(value){ nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{})); }); Object.extend(Validation.methods,nv); }, get:function(name){ return Validation.methods[name]?Validation.methods[name]:Validation.methods['_LikeNoIDIEverSaw_']; }, methods:{ '_LikeNoIDIEverSaw_':new Validator('_LikeNoIDIEverSaw_','',{}) } }); Validation.add('IsEmpty','',function(v){ return(v==''||(v==null)||(v.length==0)||/^\s+$/.test(v)); }); Validation.addAllThese([ ['validate-select','Please select an option.',function(v){ return((v!="none")&&(v!=null)&&(v.length!=0)); }], ['required-entry','This is a required field.',function(v){ return!Validation.get('IsEmpty').test(v); }], ['validate-number','Please enter a valid number in this field.',function(v){ return Validation.get('IsEmpty').test(v)||(!isNaN(parseNumber(v))&&!/^\s+$/.test(parseNumber(v))); }], ['validate-digits','Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.',function(v){ return Validation.get('IsEmpty').test(v)||!/[^\d]/.test(v); }], ['validate-digits-range','The value is not within the specified range.',function(v,elm){ var result=Validation.get('IsEmpty').test(v)||!/[^\d]/.test(v); var reRange=new RegExp(/^digits-range-[0-9]+-[0-9]+$/); $w(elm.className).each(function(name,index){ if(name.match(reRange)&&result){ var min=parseInt(name.split('-')[2],10); var max=parseInt(name.split('-')[3],10); var val=parseInt(v,10); result=(v>=min)&&(v<=max); } }); return result; }], ['validate-alpha','Please use letters only (a-z or A-Z) in this field.',function(v){ return Validation.get('IsEmpty').test(v)||/^[a-zA-Z]+$/.test(v) }], ['validate-code','Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){ return Validation.get('IsEmpty').test(v)||/^[a-z]+[a-z0-9_]+$/.test(v) }], ['validate-alphanum','Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',function(v){ return Validation.get('IsEmpty').test(v)||/^[a-zA-Z0-9]+$/.test(v)/*!/\W/.test(v)*/ }], ['validate-street','Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.',function(v){ return Validation.get('IsEmpty').test(v)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v) }], ['validate-phoneStrict','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){ return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v); }], ['validate-phoneLax','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){ return Validation.get('IsEmpty').test(v)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v); }], ['validate-fax','Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.',function(v){ return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v); }], ['validate-date','Please enter a valid date.',function(v){ var test=new Date(v); return Validation.get('IsEmpty').test(v)||!isNaN(test); }], ['validate-email','Please enter a valid email address. For example johndoe@domain.com.',function(v){ return Validation.get('IsEmpty').test(v)||/^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v) }], ['validate-emailSender','Please use only visible characters and spaces.',function(v){ return Validation.get('IsEmpty').test(v)||/^[\S ]+$/.test(v) }], ['validate-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){ var pass=v.strip(); return!(pass.length>0&&pass.length<6); }], ['validate-admin-password','Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.',function(v){ var pass=v.strip(); if(0==pass.length){ return true; } if(!(/[a-z]/i.test(v))||!(/[0-9]/.test(v))){ return false; } return!(pass.length<7); }], ['validate-cpassword','Please make sure your passwords match.',function(v){ var conf=$('confirmation')?$('confirmation'):$$('.validate-cpassword')[0]; var pass=false; if($('password')){ pass=$('password'); } var passwordElements=$$('.validate-password'); for(var i=0;i=0); }], ['validate-state','Please select State/Province.',function(v){ return(v!=0||v==''); }], ['validate-new-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){ if(!Validation.get('validate-password').test(v))return false; if(Validation.get('IsEmpty').test(v)&&v!='')return false; return true; }], ['validate-greater-than-zero','Please enter a number greater than 0 in this field.',function(v){ if(v.length) return parseFloat(v)>0; else return true; }], ['validate-zero-or-greater','Please enter a number 0 or greater in this field.',function(v){ if(v.length) return parseFloat(v)>=0; else return true; }], ['validate-cc-number','Please enter a valid credit card number.',function(v,elm){ var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type'); if(ccTypeContainer&&typeof Validation.creditCartTypes.get(ccTypeContainer.value)!='undefined' &&Validation.creditCartTypes.get(ccTypeContainer.value)[2]==false){ if(!Validation.get('IsEmpty').test(v)&&Validation.get('validate-digits').test(v)){ return true; }else{ return false; } } return validateCreditCard(v); }], ['validate-cc-type','Credit card number does not match credit card type.',function(v,elm){ elm.value=removeDelimiters(elm.value); v=removeDelimiters(v); var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type'); if(!ccTypeContainer){ return true; } var ccType=ccTypeContainer.value; if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){ return false; } if(Validation.creditCartTypes.get(ccType)[0]==false){ return true; } var ccMatchedType=''; Validation.creditCartTypes.each(function(pair){ if(pair.value[0]&&v.match(pair.value[0])){ ccMatchedType=pair.key; throw $break; } }); if(ccMatchedType!=ccType){ return false; } if(ccTypeContainer.hasClassName('validation-failed')&&Validation.isOnChange){ Validation.validate(ccTypeContainer); } return true; }], ['validate-cc-type-select','Card type does not match credit card number.',function(v,elm){ var ccNumberContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_type'))+'_cc_number'); if(Validation.isOnChange&&Validation.get('IsEmpty').test(ccNumberContainer.value)){ return true; } if(Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer)){ Validation.validate(ccNumberContainer); } return Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer); }], ['validate-cc-exp','Incorrect credit card expiration date.',function(v,elm){ var ccExpMonth=v; var ccExpYear=$(elm.id.substr(0,elm.id.indexOf('_expiration'))+'_expiration_yr').value; var currentTime=new Date(); var currentMonth=currentTime.getMonth()+1; var currentYear=currentTime.getFullYear(); if(ccExpMonth=length); } }); return result; }], ['validate-percents','Please enter a number lower than 100.',{max:100}], ['required-file','Please select a file',function(v,elm){ var result=!Validation.get('IsEmpty').test(v); if(result===false){ ovId=elm.id+'_value'; if($(ovId)){ result=!Validation.get('IsEmpty').test($(ovId).value); } } return result; }], ['validate-cc-ukss','Please enter issue number or start date for switch/solo card type.',function(v,elm){ var endposition; if(elm.id.match(/(.)+_cc_issue$/)){ endposition=elm.id.indexOf('_cc_issue'); }else if(elm.id.match(/(.)+_start_month$/)){ endposition=elm.id.indexOf('_start_month'); }else{ endposition=elm.id.indexOf('_start_year'); } var prefix=elm.id.substr(0,endposition); var ccTypeContainer=$(prefix+'_cc_type'); if(!ccTypeContainer){ return true; } var ccType=ccTypeContainer.value; if(['SS','SM','SO'].indexOf(ccType)==-1){ return true; } $(prefix+'_cc_issue').advaiceContainer =$(prefix+'_start_month').advaiceContainer =$(prefix+'_start_year').advaiceContainer =$(prefix+'_cc_type_ss_div').down('ul li.adv-container'); var ccIssue=$(prefix+'_cc_issue').value; var ccSMonth=$(prefix+'_start_month').value; var ccSYear=$(prefix+'_start_year').value; var ccStartDatePresent=(ccSMonth&&ccSYear)?true:false; if(!ccStartDatePresent&&!ccIssue){ return false; } return true; }] ]); function removeDelimiters(v){ v=v.replace(/\s/g,''); v=v.replace(/\-/g,''); return v; } function parseNumber(v) { if(typeof v!='string'){ return parseFloat(v); } var isDot=v.indexOf('.'); var isComa=v.indexOf(','); if(isDot!=-1&&isComa!=-1){ if(isComa>isDot){ v=v.replace('.','').replace(',','.'); } else{ v=v.replace(',',''); } } else if(isComa!=-1){ v=v.replace(',','.'); } return parseFloat(v); } Validation.creditCartTypes=$H({ 'SO':[new RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$'),new RegExp('^([0-9]{3}|[0-9]{4})?$'),true], 'SM':[new RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))'),new RegExp('^([0-9]{3}|[0-9]{4})?$'),true], 'VI':[new RegExp('^4[0-9]{12}([0-9]{3})?$'),new RegExp('^[0-9]{3}$'),true], 'MC':[new RegExp('^5[1-5][0-9]{14}$'),new RegExp('^[0-9]{3}$'),true], 'AE':[new RegExp('^3[47][0-9]{13}$'),new RegExp('^[0-9]{4}$'),true], 'DI':[new RegExp('^6011[0-9]{12}$'),new RegExp('^[0-9]{3}$'),true], 'JCB':[new RegExp('^(3[0-9]{15}|(2131|1800)[0-9]{11})$'),new RegExp('^[0-9]{4}$'),true], 'OT':[false,new RegExp('^([0-9]{3}|[0-9]{4})?$'),false] }); var Builder={ NODEMAP:{ AREA:'map', CAPTION:'table', COL:'table', COLGROUP:'table', LEGEND:'fieldset', OPTGROUP:'select', OPTION:'select', PARAM:'object', TBODY:'table', TD:'table', TFOOT:'table', TH:'table', THEAD:'table', TR:'table' }, node:function(elementName){ elementName=elementName.toUpperCase(); var parentTag=this.NODEMAP[elementName]||'div'; var parentElement=document.createElement(parentTag); try{ parentElement.innerHTML="<"+elementName+">"; }catch(e){} var element=parentElement.firstChild||null; if(element&&(element.tagName.toUpperCase()!=elementName)) element=element.getElementsByTagName(elementName)[0]; if(!element)element=document.createElement(elementName); if(!element)return; if(arguments[1]) if(this._isStringOrNumber(arguments[1])|| (arguments[1]instanceof Array)|| arguments[1].tagName){ this._children(element,arguments[1]); }else{ var attrs=this._attributes(arguments[1]); if(attrs.length){ try{ parentElement.innerHTML="<"+elementName+" "+ attrs+">"; }catch(e){} element=parentElement.firstChild||null; if(!element){ element=document.createElement(elementName); for(attr in arguments[1]) element[attr=='class'?'className':attr]=arguments[1][attr]; } if(element.tagName.toUpperCase()!=elementName) element=parentElement.getElementsByTagName(elementName)[0]; } } if(arguments[2]) this._children(element,arguments[2]); return $(element); }, _text:function(text){ return document.createTextNode(text); }, ATTR_MAP:{ 'className':'class', 'htmlFor':'for' }, _attributes:function(attributes){ var attrs=[]; for(attribute in attributes) attrs.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+ '="'+attributes[attribute].toString().escapeHTML().gsub(/"/,'"')+'"'); return attrs.join(" "); }, _children:function(element,children){ if(children.tagName){ element.appendChild(children); return; } if(typeof children=='object'){ children.flatten().each(function(e){ if(typeof e=='object') element.appendChild(e); else if(Builder._isStringOrNumber(e)) element.appendChild(Builder._text(e)); }); }else if(Builder._isStringOrNumber(children)) element.appendChild(Builder._text(children)); }, _isStringOrNumber:function(param){ return(typeof param=='string'||typeof param=='number'); }, build:function(html){ var element=this.node('div'); $(element).update(html.strip()); return element.down(); }, dump:function(scope){ if(typeof scope!='object'&&typeof scope!='function')scope=window; var tags=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY "+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET "+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/); tags.each(function(tag){ scope[tag]=function(){ return Builder.node.apply(Builder,[tag].concat($A(arguments))); }; }); } }; String.prototype.parseColor=function(){ var color='#'; if(this.slice(0,4)=='rgb('){ var cols=this.slice(4,this.length-1).split(','); var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3); }else{ if(this.slice(0,1)=='#'){ if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase(); if(this.length==7)color=this.toLowerCase(); } } return(color.length==7?color:(arguments[0]||this)); }; Element.collectTextNodes=function(element){ return $A($(element).childNodes).collect(function(node){ return(node.nodeType==3?node.nodeValue: (node.hasChildNodes()?Element.collectTextNodes(node):'')); }).flatten().join(''); }; Element.collectTextNodesIgnoreClass=function(element,className){ return $A($(element).childNodes).collect(function(node){ return(node.nodeType==3?node.nodeValue: ((node.hasChildNodes()&&!Element.hasClassName(node,className))? Element.collectTextNodesIgnoreClass(node,className):'')); }).flatten().join(''); }; Element.setContentZoom=function(element,percent){ element=$(element); element.setStyle({fontSize:(percent/100)+'em'}); if(Prototype.Browser.WebKit)window.scrollBy(0,0); return element; }; Element.getInlineOpacity=function(element){ return $(element).style.opacity||''; }; Element.forceRerendering=function(element){ try{ element=$(element); var n=document.createTextNode(' '); element.appendChild(n); element.removeChild(n); }catch(e){} }; var Effect={ _elementDoesNotExistError:{ name:'ElementDoesNotExistError', message:'The specified DOM element does not exist, but is required for this effect to operate' }, Transitions:{ linear:Prototype.K, sinoidal:function(pos){ return(-Math.cos(pos*Math.PI)/2)+.5; }, reverse:function(pos){ return 1-pos; }, flicker:function(pos){ var pos=((-Math.cos(pos*Math.PI)/4)+.75)+Math.random()/4; return pos>1?1:pos; }, wobble:function(pos){ return(-Math.cos(pos*Math.PI*(9*pos))/2)+.5; }, pulse:function(pos,pulses){ return(-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2)+.5; }, spring:function(pos){ return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6)); }, none:function(pos){ return 0; }, full:function(pos){ return 1; } }, DefaultOptions:{ duration:1.0, fps:100, sync:false, from:0.0, to:1.0, delay:0.0, queue:'parallel' }, tagifyText:function(element){ var tagifyStyle='position:relative'; if(Prototype.Browser.IE)tagifyStyle+=';zoom:1'; element=$(element); $A(element.childNodes).each(function(child){ if(child.nodeType==3){ child.nodeValue.toArray().each(function(character){ element.insertBefore( new Element('span',{style:tagifyStyle}).update( character==' '?String.fromCharCode(160):character), child); }); Element.remove(child); } }); }, multiple:function(element,effect){ var elements; if(((typeof element=='object')|| Object.isFunction(element))&& (element.length)) elements=element; else elements=$(element).childNodes; var options=Object.extend({ speed:0.1, delay:0.0 },arguments[2]||{}); var masterDelay=options.delay; $A(elements).each(function(element,index){ new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay})); }); }, PAIRS:{ 'slide':['SlideDown','SlideUp'], 'blind':['BlindDown','BlindUp'], 'appear':['Appear','Fade'] }, toggle:function(element,effect){ element=$(element); effect=(effect||'appear').toLowerCase(); var options=Object.extend({ queue:{position:'end',scope:(element.id||'global'),limit:1} },arguments[2]||{}); Effect[element.visible()? Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options); } }; Effect.DefaultOptions.transition=Effect.Transitions.sinoidal; Effect.ScopedQueue=Class.create(Enumerable,{ initialize:function(){ this.effects=[]; this.interval=null; }, _each:function(iterator){ this.effects._each(iterator); }, add:function(effect){ var timestamp=new Date().getTime(); var position=Object.isString(effect.options.queue)? effect.options.queue:effect.options.queue.position; switch(position){ case'front': this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){ e.startOn+=effect.finishOn; e.finishOn+=effect.finishOn; }); break; case'with-last': timestamp=this.effects.pluck('startOn').max()||timestamp; break; case'end': timestamp=this.effects.pluck('finishOn').max()||timestamp; break; } effect.startOn+=timestamp; effect.finishOn+=timestamp; if(!effect.options.queue.limit||(this.effects.length=this.startOn){ if(timePos>=this.finishOn){ this.render(1.0); this.cancel(); this.event('beforeFinish'); if(this.finish)this.finish(); this.event('afterFinish'); return; } var pos=(timePos-this.startOn)/this.totalTime, frame=(pos*this.totalFrames).round(); if(frame>this.currentFrame){ this.render(pos); this.currentFrame=frame; } } }, cancel:function(){ if(!this.options.sync) Effect.Queues.get(Object.isString(this.options.queue)? 'global':this.options.queue.scope).remove(this); this.state='finished'; }, event:function(eventName){ if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this); if(this.options[eventName])this.options[eventName](this); }, inspect:function(){ var data=$H(); for(property in this) if(!Object.isFunction(this[property]))data.set(property,this[property]); return'#'; } }); Effect.Parallel=Class.create(Effect.Base,{ initialize:function(effects){ this.effects=effects||[]; this.start(arguments[1]); }, update:function(position){ this.effects.invoke('render',position); }, finish:function(position){ this.effects.each(function(effect){ effect.render(1.0); effect.cancel(); effect.event('beforeFinish'); if(effect.finish)effect.finish(position); effect.event('afterFinish'); }); } }); Effect.Tween=Class.create(Effect.Base,{ initialize:function(object,from,to){ object=Object.isString(object)?$(object):object; var args=$A(arguments),method=args.last(), options=args.length==5?args[3]:null; this.method=Object.isFunction(method)?method.bind(object): Object.isFunction(object[method])?object[method].bind(object): function(value){object[method]=value}; this.start(Object.extend({from:from,to:to},options||{})); }, update:function(position){ this.method(position); } }); Effect.Event=Class.create(Effect.Base,{ initialize:function(){ this.start(Object.extend({duration:0},arguments[0]||{})); }, update:Prototype.emptyFunction }); Effect.Opacity=Class.create(Effect.Base,{ initialize:function(element){ this.element=$(element); if(!this.element)throw(Effect._elementDoesNotExistError); if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom:1}); var options=Object.extend({ from:this.element.getOpacity()||0.0, to:1.0 },arguments[1]||{}); this.start(options); }, update:function(position){ this.element.setOpacity(position); } }); Effect.Move=Class.create(Effect.Base,{ initialize:function(element){ this.element=$(element); if(!this.element)throw(Effect._elementDoesNotExistError); var options=Object.extend({ x:0, y:0, mode:'relative' },arguments[1]||{}); this.start(options); }, setup:function(){ this.element.makePositioned(); this.originalLeft=parseFloat(this.element.getStyle('left')||'0'); this.originalTop=parseFloat(this.element.getStyle('top')||'0'); if(this.options.mode=='absolute'){ this.options.x=this.options.x-this.originalLeft; this.options.y=this.options.y-this.originalTop; } }, update:function(position){ this.element.setStyle({ left:(this.options.x*position+this.originalLeft).round()+'px', top:(this.options.y*position+this.originalTop).round()+'px' }); } }); Effect.MoveBy=function(element,toTop,toLeft){ return new Effect.Move(element, Object.extend({x:toLeft,y:toTop},arguments[3]||{})); }; Effect.Scale=Class.create(Effect.Base,{ initialize:function(element,percent){ this.element=$(element); if(!this.element)throw(Effect._elementDoesNotExistError); var options=Object.extend({ scaleX:true, scaleY:true, scaleContent:true, scaleFromCenter:false, scaleMode:'box', scaleFrom:100.0, scaleTo:percent },arguments[2]||{}); this.start(options); }, setup:function(){ this.restoreAfterFinish=this.options.restoreAfterFinish||false; this.elementPositioning=this.element.getStyle('position'); this.originalStyle={}; ['top','left','width','height','fontSize'].each(function(k){ this.originalStyle[k]=this.element.style[k]; }.bind(this)); this.originalTop=this.element.offsetTop; this.originalLeft=this.element.offsetLeft; var fontSize=this.element.getStyle('font-size')||'100%'; ['em','px','%','pt'].each(function(fontSizeType){ if(fontSize.indexOf(fontSizeType)>0){ this.fontSize=parseFloat(fontSize); this.fontSizeType=fontSizeType; } }.bind(this)); this.factor=(this.options.scaleTo-this.options.scaleFrom)/100; this.dims=null; if(this.options.scaleMode=='box') this.dims=[this.element.offsetHeight,this.element.offsetWidth]; if(/^content/.test(this.options.scaleMode)) this.dims=[this.element.scrollHeight,this.element.scrollWidth]; if(!this.dims) this.dims=[this.options.scaleMode.originalHeight, this.options.scaleMode.originalWidth]; }, update:function(position){ var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position); if(this.options.scaleContent&&this.fontSize) this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType}); this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale); }, finish:function(position){ if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle); }, setDimensions:function(height,width){ var d={}; if(this.options.scaleX)d.width=width.round()+'px'; if(this.options.scaleY)d.height=height.round()+'px'; if(this.options.scaleFromCenter){ var topd=(height-this.dims[0])/2; var leftd=(width-this.dims[1])/2; if(this.elementPositioning=='absolute'){ if(this.options.scaleY)d.top=this.originalTop-topd+'px'; if(this.options.scaleX)d.left=this.originalLeft-leftd+'px'; }else{ if(this.options.scaleY)d.top=-topd+'px'; if(this.options.scaleX)d.left=-leftd+'px'; } } this.element.setStyle(d); } }); Effect.Highlight=Class.create(Effect.Base,{ initialize:function(element){ this.element=$(element); if(!this.element)throw(Effect._elementDoesNotExistError); var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{}); this.start(options); }, setup:function(){ if(this.element.getStyle('display')=='none'){this.cancel();return;} this.oldStyle={}; if(!this.options.keepBackgroundImage){ this.oldStyle.backgroundImage=this.element.getStyle('background-image'); this.element.setStyle({backgroundImage:'none'}); } if(!this.options.endcolor) this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff'); if(!this.options.restorecolor) this.options.restorecolor=this.element.getStyle('background-color'); this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this)); this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this)); }, update:function(position){ this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart());}.bind(this))}); }, finish:function(){ this.element.setStyle(Object.extend(this.oldStyle,{ backgroundColor:this.options.restorecolor })); } }); Effect.ScrollTo=function(element){ var options=arguments[1]||{}, scrollOffsets=document.viewport.getScrollOffsets(), elementOffsets=$(element).cumulativeOffset(); if(options.offset)elementOffsets[1]+=options.offset; return new Effect.Tween(null, scrollOffsets.top, elementOffsets[1], options, function(p){scrollTo(scrollOffsets.left,p.round());} ); }; Effect.Fade=function(element){ element=$(element); var oldOpacity=element.getInlineOpacity(); var options=Object.extend({ from:element.getOpacity()||1.0, to:0.0, afterFinishInternal:function(effect){ if(effect.options.to!=0)return; effect.element.hide().setStyle({opacity:oldOpacity}); } },arguments[1]||{}); return new Effect.Opacity(element,options); }; Effect.Appear=function(element){ element=$(element); var options=Object.extend({ from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0), to:1.0, afterFinishInternal:function(effect){ effect.element.forceRerendering(); }, beforeSetup:function(effect){ effect.element.setOpacity(effect.options.from).show(); }},arguments[1]||{}); return new Effect.Opacity(element,options); }; Effect.Puff=function(element){ element=$(element); var oldStyle={ opacity:element.getInlineOpacity(), position:element.getStyle('position'), top:element.style.top, left:element.style.left, width:element.style.width, height:element.style.height }; return new Effect.Parallel( [new Effect.Scale(element,200, {sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}), new Effect.Opacity(element,{sync:true,to:0.0})], Object.extend({duration:1.0, beforeSetupInternal:function(effect){ Position.absolutize(effect.effects[0].element); }, afterFinishInternal:function(effect){ effect.effects[0].element.hide().setStyle(oldStyle);} },arguments[1]||{}) ); }; Effect.BlindUp=function(element){ element=$(element); element.makeClipping(); return new Effect.Scale(element,0, Object.extend({scaleContent:false, scaleX:false, restoreAfterFinish:true, afterFinishInternal:function(effect){ effect.element.hide().undoClipping(); } },arguments[1]||{}) ); }; Effect.BlindDown=function(element){ element=$(element); var elementDimensions=element.getDimensions(); return new Effect.Scale(element,100,Object.extend({ scaleContent:false, scaleX:false, scaleFrom:0, scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width}, restoreAfterFinish:true, afterSetup:function(effect){ effect.element.makeClipping().setStyle({height:'0px'}).show(); }, afterFinishInternal:function(effect){ effect.element.undoClipping(); } },arguments[1]||{})); }; Effect.SwitchOff=function(element){ element=$(element); var oldOpacity=element.getInlineOpacity(); return new Effect.Appear(element,Object.extend({ duration:0.4, from:0, transition:Effect.Transitions.flicker, afterFinishInternal:function(effect){ new Effect.Scale(effect.element,1,{ duration:0.3,scaleFromCenter:true, scaleX:false,scaleContent:false,restoreAfterFinish:true, beforeSetup:function(effect){ effect.element.makePositioned().makeClipping(); }, afterFinishInternal:function(effect){ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity}); } }); } },arguments[1]||{})); }; Effect.DropOut=function(element){ element=$(element); var oldStyle={ top:element.getStyle('top'), left:element.getStyle('left'), opacity:element.getInlineOpacity()}; return new Effect.Parallel( [new Effect.Move(element,{x:0,y:100,sync:true}), new Effect.Opacity(element,{sync:true,to:0.0})], Object.extend( {duration:0.5, beforeSetup:function(effect){ effect.effects[0].element.makePositioned(); }, afterFinishInternal:function(effect){ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); } },arguments[1]||{})); }; Effect.Shake=function(element){ element=$(element); var options=Object.extend({ distance:20, duration:0.5 },arguments[1]||{}); var distance=parseFloat(options.distance); var split=parseFloat(options.duration)/10.0; var oldStyle={ top:element.getStyle('top'), left:element.getStyle('left')}; return new Effect.Move(element, {x:distance,y:0,duration:split,afterFinishInternal:function(effect){ new Effect.Move(effect.element, {x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){ new Effect.Move(effect.element, {x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){ new Effect.Move(effect.element, {x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){ new Effect.Move(effect.element, {x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){ new Effect.Move(effect.element, {x:-distance,y:0,duration:split,afterFinishInternal:function(effect){ effect.element.undoPositioned().setStyle(oldStyle); }});}});}});}});}});}}); }; Effect.SlideDown=function(element){ element=$(element).cleanWhitespace(); var oldInnerBottom=element.down().getStyle('bottom'); var elementDimensions=element.getDimensions(); return new Effect.Scale(element,100,Object.extend({ scaleContent:false, scaleX:false, scaleFrom:window.opera?0:1, scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width}, restoreAfterFinish:true, afterSetup:function(effect){ effect.element.makePositioned(); effect.element.down().makePositioned(); if(window.opera)effect.element.setStyle({top:''}); effect.element.makeClipping().setStyle({height:'0px'}).show(); }, afterUpdateInternal:function(effect){ effect.element.down().setStyle({bottom: (effect.dims[0]-effect.element.clientHeight)+'px'}); }, afterFinishInternal:function(effect){ effect.element.undoClipping().undoPositioned(); effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});} },arguments[1]||{}) ); }; Effect.SlideUp=function(element){ element=$(element).cleanWhitespace(); var oldInnerBottom=element.down().getStyle('bottom'); var elementDimensions=element.getDimensions(); return new Effect.Scale(element,window.opera?0:1, Object.extend({scaleContent:false, scaleX:false, scaleMode:'box', scaleFrom:100, scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width}, restoreAfterFinish:true, afterSetup:function(effect){ effect.element.makePositioned(); effect.element.down().makePositioned(); if(window.opera)effect.element.setStyle({top:''}); effect.element.makeClipping().show(); }, afterUpdateInternal:function(effect){ effect.element.down().setStyle({bottom: (effect.dims[0]-effect.element.clientHeight)+'px'}); }, afterFinishInternal:function(effect){ effect.element.hide().undoClipping().undoPositioned(); effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom}); } },arguments[1]||{}) ); }; Effect.Squish=function(element){ return new Effect.Scale(element,window.opera?1:0,{ restoreAfterFinish:true, beforeSetup:function(effect){ effect.element.makeClipping(); }, afterFinishInternal:function(effect){ effect.element.hide().undoClipping(); } }); }; Effect.Grow=function(element){ element=$(element); var options=Object.extend({ direction:'center', moveTransition:Effect.Transitions.sinoidal, scaleTransition:Effect.Transitions.sinoidal, opacityTransition:Effect.Transitions.full },arguments[1]||{}); var oldStyle={ top:element.style.top, left:element.style.left, height:element.style.height, width:element.style.width, opacity:element.getInlineOpacity()}; var dims=element.getDimensions(); var initialMoveX,initialMoveY; var moveX,moveY; switch(options.direction){ case'top-left': initialMoveX=initialMoveY=moveX=moveY=0; break; case'top-right': initialMoveX=dims.width; initialMoveY=moveY=0; moveX=-dims.width; break; case'bottom-left': initialMoveX=moveX=0; initialMoveY=dims.height; moveY=-dims.height; break; case'bottom-right': initialMoveX=dims.width; initialMoveY=dims.height; moveX=-dims.width; moveY=-dims.height; break; case'center': initialMoveX=dims.width/2; initialMoveY=dims.height/2; moveX=-dims.width/2; moveY=-dims.height/2; break; } return new Effect.Move(element,{ x:initialMoveX, y:initialMoveY, duration:0.01, beforeSetup:function(effect){ effect.element.hide().makeClipping().makePositioned(); }, afterFinishInternal:function(effect){ new Effect.Parallel( [new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}), new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}), new Effect.Scale(effect.element,100,{ scaleMode:{originalHeight:dims.height,originalWidth:dims.width}, sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true}) ],Object.extend({ beforeSetup:function(effect){ effect.effects[0].element.setStyle({height:'0px'}).show(); }, afterFinishInternal:function(effect){ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); } },options) ); } }); }; Effect.Shrink=function(element){ element=$(element); var options=Object.extend({ direction:'center', moveTransition:Effect.Transitions.sinoidal, scaleTransition:Effect.Transitions.sinoidal, opacityTransition:Effect.Transitions.none },arguments[1]||{}); var oldStyle={ top:element.style.top, left:element.style.left, height:element.style.height, width:element.style.width, opacity:element.getInlineOpacity()}; var dims=element.getDimensions(); var moveX,moveY; switch(options.direction){ case'top-left': moveX=moveY=0; break; case'top-right': moveX=dims.width; moveY=0; break; case'bottom-left': moveX=0; moveY=dims.height; break; case'bottom-right': moveX=dims.width; moveY=dims.height; break; case'center': moveX=dims.width/2; moveY=dims.height/2; break; } return new Effect.Parallel( [new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}), new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}), new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}) ],Object.extend({ beforeStartInternal:function(effect){ effect.effects[0].element.makePositioned().makeClipping(); }, afterFinishInternal:function(effect){ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);} },options) ); }; Effect.Pulsate=function(element){ element=$(element); var options=arguments[1]||{}, oldOpacity=element.getInlineOpacity(), transition=options.transition||Effect.Transitions.linear, reverser=function(pos){ return 1-transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2)+.5); }; return new Effect.Opacity(element, Object.extend(Object.extend({duration:2.0,from:0, afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});} },options),{transition:reverser})); }; Effect.Fold=function(element){ element=$(element); var oldStyle={ top:element.style.top, left:element.style.left, width:element.style.width, height:element.style.height}; element.makeClipping(); return new Effect.Scale(element,5,Object.extend({ scaleContent:false, scaleX:false, afterFinishInternal:function(effect){ new Effect.Scale(element,1,{ scaleContent:false, scaleY:false, afterFinishInternal:function(effect){ effect.element.hide().undoClipping().setStyle(oldStyle); }}); }},arguments[1]||{})); }; Effect.Morph=Class.create(Effect.Base,{ initialize:function(element){ this.element=$(element); if(!this.element)throw(Effect._elementDoesNotExistError); var options=Object.extend({ style:{} },arguments[1]||{}); if(!Object.isString(options.style))this.style=$H(options.style); else{ if(options.style.include(':')) this.style=options.style.parseStyle(); else{ this.element.addClassName(options.style); this.style=$H(this.element.getStyles()); this.element.removeClassName(options.style); var css=this.element.getStyles(); this.style=this.style.reject(function(style){ return style.value==css[style.key]; }); options.afterFinishInternal=function(effect){ effect.element.addClassName(effect.options.style); effect.transforms.each(function(transform){ effect.element.style[transform.style]=''; }); }; } } this.start(options); }, setup:function(){ function parseColor(color){ if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff'; color=color.parseColor(); return $R(0,2).map(function(i){ return parseInt(color.slice(i*2+1,i*2+3),16); }); } this.transforms=this.style.map(function(pair){ var property=pair[0],value=pair[1],unit=null; if(value.parseColor('#zzzzzz')!='#zzzzzz'){ value=value.parseColor(); unit='color'; }else if(property=='opacity'){ value=parseFloat(value); if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom:1}); }else if(Element.CSS_LENGTH.test(value)){ var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/); value=parseFloat(components[1]); unit=(components.length==3)?components[2]:null; } var originalValue=this.element.getStyle(property); return{ style:property.camelize(), originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0), targetValue:unit=='color'?parseColor(value):value, unit:unit }; }.bind(this)).reject(function(transform){ return( (transform.originalValue==transform.targetValue)|| ( transform.unit!='color'&& (isNaN(transform.originalValue)||isNaN(transform.targetValue)) ) ); }); }, update:function(position){ var style={},transform,i=this.transforms.length; while(i--) style[(transform=this.transforms[i]).style]= transform.unit=='color'?'#'+ (Math.round(transform.originalValue[0]+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+ (Math.round(transform.originalValue[1]+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+ (Math.round(transform.originalValue[2]+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart(): (transform.originalValue+ (transform.targetValue-transform.originalValue)*position).toFixed(3)+ (transform.unit===null?'':transform.unit); this.element.setStyle(style,true); } }); Effect.Transform=Class.create({ initialize:function(tracks){ this.tracks=[]; this.options=arguments[1]||{}; this.addTracks(tracks); }, addTracks:function(tracks){ tracks.each(function(track){ track=$H(track); var data=track.values().first(); this.tracks.push($H({ ids:track.keys().first(), effect:Effect.Morph, options:{style:data} })); }.bind(this)); return this; }, play:function(){ return new Effect.Parallel( this.tracks.map(function(track){ var ids=track.get('ids'),effect=track.get('effect'),options=track.get('options'); var elements=[$(ids)||$$(ids)].flatten(); return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))}); }).flatten(), this.options ); } }); Element.CSS_PROPERTIES=$w( 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing '+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color '+ 'fontSize fontWeight height left letterSpacing lineHeight '+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+ 'right textIndent top width wordSpacing zIndex'); Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; String.__parseStyleElement=document.createElement('div'); String.prototype.parseStyle=function(){ var style,styleRules=$H(); if(Prototype.Browser.WebKit) style=new Element('div',{style:this}).style; else{ String.__parseStyleElement.innerHTML='
'; style=String.__parseStyleElement.childNodes[0].style; } Element.CSS_PROPERTIES.each(function(property){ if(style[property])styleRules.set(property,style[property]); }); if(Prototype.Browser.IE&&this.include('opacity')) styleRules.set('opacity',this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]); return styleRules; }; if(document.defaultView&&document.defaultView.getComputedStyle){ Element.getStyles=function(element){ var css=document.defaultView.getComputedStyle($(element),null); return Element.CSS_PROPERTIES.inject({},function(styles,property){ styles[property]=css[property]; return styles; }); }; }else{ Element.getStyles=function(element){ element=$(element); var css=element.currentStyle,styles; styles=Element.CSS_PROPERTIES.inject({},function(results,property){ results[property]=css[property]; return results; }); if(!styles.opacity)styles.opacity=element.getOpacity(); return styles; }; } Effect.Methods={ morph:function(element,style){ element=$(element); new Effect.Morph(element,Object.extend({style:style},arguments[2]||{})); return element; }, visualEffect:function(element,effect,options){ element=$(element); var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1); new Effect[klass](element,options); return element; }, highlight:function(element,options){ element=$(element); new Effect.Highlight(element,options); return element; } }; $w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+ 'pulsate shake puff squish switchOff dropOut').each( function(effect){ Effect.Methods[effect]=function(element,options){ element=$(element); Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options); return element; }; } ); $w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( function(f){Effect.Methods[f]=Element[f];} ); Element.addMethods(Effect.Methods); if(Object.isUndefined(Effect)) throw("dragdrop.js requires including script.aculo.us' effects.js library"); var Droppables={ drops:[], remove:function(element){ this.drops=this.drops.reject(function(d){return d.element==$(element)}); }, add:function(element){ element=$(element); var options=Object.extend({ greedy:true, hoverclass:null, tree:false },arguments[1]||{}); if(options.containment){ options._containers=[]; var containment=options.containment; if(Object.isArray(containment)){ containment.each(function(c){options._containers.push($(c))}); }else{ options._containers.push($(containment)); } } if(options.accept)options.accept=[options.accept].flatten(); Element.makePositioned(element); options.element=element; this.drops.push(options); }, findDeepestChild:function(drops){ deepest=drops[0]; for(i=1;i0) drop=Droppables.findDeepestChild(affected); if(this.last_active&&this.last_active!=drop)this.deactivate(this.last_active); if(drop){ Position.within(drop.element,point[0],point[1]); if(drop.onHover) drop.onHover(element,drop.element,Position.overlap(drop.overlap,drop.element)); if(drop!=this.last_active)Droppables.activate(drop); } }, fire:function(event,element){ if(!this.last_active)return; Position.prepare(); if(this.isAffected([Event.pointerX(event),Event.pointerY(event)],element,this.last_active)) if(this.last_active.onDrop){ this.last_active.onDrop(element,this.last_active.element,event); return true; } }, reset:function(){ if(this.last_active) this.deactivate(this.last_active); } }; var Draggables={ drags:[], observers:[], register:function(draggable){ if(this.drags.length==0){ this.eventMouseUp=this.endDrag.bindAsEventListener(this); this.eventMouseMove=this.updateDrag.bindAsEventListener(this); this.eventKeypress=this.keyPress.bindAsEventListener(this); Event.observe(document,"mouseup",this.eventMouseUp); Event.observe(draggable.element,"mousemove",this.eventMouseMove); Event.observe(document,"keypress",this.eventKeypress); } this.drags.push(draggable); }, unregister:function(draggable){ this.drags=this.drags.reject(function(d){return d==draggable}); if(this.drags.length==0){ Event.stopObserving(document,"mouseup",this.eventMouseUp); Event.stopObserving(draggable.element,"mousemove",this.eventMouseMove); Event.stopObserving(document,"keypress",this.eventKeypress); } }, activate:function(draggable){ if(draggable.options.delay){ this._timeout=setTimeout(function(){ Draggables._timeout=null; window.focus(); Draggables.activeDraggable=draggable; }.bind(this),draggable.options.delay); }else{ window.focus(); this.activeDraggable=draggable; } }, deactivate:function(){ this.activeDraggable=null; }, updateDrag:function(event){ if(!this.activeDraggable)return; var pointer=[Event.pointerX(event),Event.pointerY(event)]; if(this._lastPointer&&(this._lastPointer.inspect()==pointer.inspect()))return; this._lastPointer=pointer; this.activeDraggable.updateDrag(event,pointer); }, endDrag:function(event){ if(this._timeout){ clearTimeout(this._timeout); this._timeout=null; } if(!this.activeDraggable)return; this._lastPointer=null; this.activeDraggable.endDrag(event); this.activeDraggable=null; }, keyPress:function(event){ if(this.activeDraggable) this.activeDraggable.keyPress(event); }, addObserver:function(observer){ this.observers.push(observer); this._cacheObserverCallbacks(); }, removeObserver:function(element){ this.observers=this.observers.reject(function(o){return o.element==element}); this._cacheObserverCallbacks(); }, notify:function(eventName,draggable,event){ if(this[eventName+'Count']>0) this.observers.each(function(o){ if(o[eventName])o[eventName](eventName,draggable,event); }); if(draggable.options[eventName])draggable.options[eventName](draggable,event); }, _cacheObserverCallbacks:function(){ ['onStart','onEnd','onDrag'].each(function(eventName){ Draggables[eventName+'Count']=Draggables.observers.select( function(o){return o[eventName];} ).length; }); } }; var Draggable=Class.create({ initialize:function(element){ var defaults={ handle:false, reverteffect:function(element,top_offset,left_offset){ var dur=Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; new Effect.Move(element,{x:-left_offset,y:-top_offset,duration:dur, queue:{scope:'_draggable',position:'end'} }); }, endeffect:function(element){ var toOpacity=Object.isNumber(element._opacity)?element._opacity:1.0; new Effect.Opacity(element,{duration:0.2,from:0.7,to:toOpacity, queue:{scope:'_draggable',position:'end'}, afterFinish:function(){ Draggable._dragging[element]=false } }); }, zindex:1000, revert:false, quiet:false, scroll:false, scrollSensitivity:20, scrollSpeed:15, snap:false, delay:0 }; if(!arguments[1]||Object.isUndefined(arguments[1].endeffect)) Object.extend(defaults,{ starteffect:function(element){ element._opacity=Element.getOpacity(element); Draggable._dragging[element]=true; new Effect.Opacity(element,{duration:0.2,from:element._opacity,to:0.7}); } }); var options=Object.extend(defaults,arguments[1]||{}); this.element=$(element); if(options.handle&&Object.isString(options.handle)) this.handle=this.element.down('.'+options.handle,0); if(!this.handle)this.handle=$(options.handle); if(!this.handle)this.handle=this.element; if(options.scroll&&!options.scroll.scrollTo&&!options.scroll.outerHTML){ options.scroll=$(options.scroll); this._isScrollChild=Element.childOf(this.element,options.scroll); } Element.makePositioned(this.element); this.options=options; this.dragging=false; this.eventMouseDown=this.initDrag.bindAsEventListener(this); Event.observe(this.handle,"mousedown",this.eventMouseDown); Draggables.register(this); }, destroy:function(){ Event.stopObserving(this.handle,"mousedown",this.eventMouseDown); Draggables.unregister(this); }, currentDelta:function(){ return([ parseInt(Element.getStyle(this.element,'left')||'0'), parseInt(Element.getStyle(this.element,'top')||'0')]); }, initDrag:function(event){ if(!Object.isUndefined(Draggable._dragging[this.element])&& Draggable._dragging[this.element])return; if(Event.isLeftClick(event)){ var src=Event.element(event); if((tag_name=src.tagName.toUpperCase())&&( tag_name=='INPUT'|| tag_name=='SELECT'|| tag_name=='OPTION'|| tag_name=='BUTTON'|| tag_name=='TEXTAREA'))return; var pointer=[Event.pointerX(event),Event.pointerY(event)]; var pos=Position.cumulativeOffset(this.element); this.offset=[0,1].map(function(i){return(pointer[i]-pos[i])}); Draggables.activate(this); Event.stop(event); } }, startDrag:function(event){ this.dragging=true; if(!this.delta) this.delta=this.currentDelta(); if(this.options.zindex){ this.originalZ=parseInt(Element.getStyle(this.element,'z-index')||0); this.element.style.zIndex=this.options.zindex; } if(this.options.ghosting){ this._clone=this.element.cloneNode(true); this._originallyAbsolute=(this.element.getStyle('position')=='absolute'); if(!this._originallyAbsolute) Position.absolutize(this.element); this.element.parentNode.insertBefore(this._clone,this.element); } if(this.options.scroll){ if(this.options.scroll==window){ var where=this._getWindowScroll(this.options.scroll); this.originalScrollLeft=where.left; this.originalScrollTop=where.top; }else{ this.originalScrollLeft=this.options.scroll.scrollLeft; this.originalScrollTop=this.options.scroll.scrollTop; } } Draggables.notify('onStart',this,event); if(this.options.starteffect)this.options.starteffect(this.element); }, updateDrag:function(event,pointer){ if(!this.dragging)this.startDrag(event); if(!this.options.quiet){ Position.prepare(); Droppables.show(pointer,this.element); } Draggables.notify('onDrag',this,event); this.draw(pointer); if(this.options.change)this.options.change(this); if(this.options.scroll){ this.stopScrolling(); var p; if(this.options.scroll==window){ with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height];} }else{ p=Position.page(this.options.scroll); p[0]+=this.options.scroll.scrollLeft+Position.deltaX; p[1]+=this.options.scroll.scrollTop+Position.deltaY; p.push(p[0]+this.options.scroll.offsetWidth); p.push(p[1]+this.options.scroll.offsetHeight); } var speed=[0,0]; if(pointer[0]<(p[0]+this.options.scrollSensitivity))speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity); if(pointer[1]<(p[1]+this.options.scrollSensitivity))speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity); if(pointer[0]>(p[2]-this.options.scrollSensitivity))speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity); if(pointer[1]>(p[3]-this.options.scrollSensitivity))speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity); this.startScrolling(speed); } if(Prototype.Browser.WebKit)window.scrollBy(0,0); Event.stop(event); }, finishDrag:function(event,success){ this.dragging=false; if(this.options.quiet){ Position.prepare(); var pointer=[Event.pointerX(event),Event.pointerY(event)]; Droppables.show(pointer,this.element); } if(this.options.ghosting){ if(!this._originallyAbsolute) Position.relativize(this.element); delete this._originallyAbsolute; Element.remove(this._clone); this._clone=null; } var dropped=false; if(success){ dropped=Droppables.fire(event,this.element); if(!dropped)dropped=false; } if(dropped&&this.options.onDropped)this.options.onDropped(this.element); Draggables.notify('onEnd',this,event); var revert=this.options.revert; if(revert&&Object.isFunction(revert))revert=revert(this.element); var d=this.currentDelta(); if(revert&&this.options.reverteffect){ if(dropped==0||revert!='failure') this.options.reverteffect(this.element, d[1]-this.delta[1],d[0]-this.delta[0]); }else{ this.delta=d; } if(this.options.zindex) this.element.style.zIndex=this.originalZ; if(this.options.endeffect) this.options.endeffect(this.element); Draggables.deactivate(this); Droppables.reset(); }, keyPress:function(event){ if(event.keyCode!=Event.KEY_ESC)return; this.finishDrag(event,false); Event.stop(event); }, endDrag:function(event){ if(!this.dragging)return; this.stopScrolling(); this.finishDrag(event,true); Event.stop(event); }, draw:function(point){ var pos=Position.cumulativeOffset(this.element); if(this.options.ghosting){ var r=Position.realOffset(this.element); pos[0]+=r[0]-Position.deltaX;pos[1]+=r[1]-Position.deltaY; } var d=this.currentDelta(); pos[0]-=d[0];pos[1]-=d[1]; if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){ pos[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft; pos[1]-=this.options.scroll.scrollTop-this.originalScrollTop; } var p=[0,1].map(function(i){ return(point[i]-pos[i]-this.offset[i]) }.bind(this)); if(this.options.snap){ if(Object.isFunction(this.options.snap)){ p=this.options.snap(p[0],p[1],this); }else{ if(Object.isArray(this.options.snap)){ p=p.map(function(v,i){ return(v/this.options.snap[i]).round()*this.options.snap[i]}.bind(this)); }else{ p=p.map(function(v){ return(v/this.options.snap).round()*this.options.snap}.bind(this)); } }} var style=this.element.style; if((!this.options.constraint)||(this.options.constraint=='horizontal')) style.left=p[0]+"px"; if((!this.options.constraint)||(this.options.constraint=='vertical')) style.top=p[1]+"px"; if(style.visibility=="hidden")style.visibility=""; }, stopScrolling:function(){ if(this.scrollInterval){ clearInterval(this.scrollInterval); this.scrollInterval=null; Draggables._lastScrollPointer=null; } }, startScrolling:function(speed){ if(!(speed[0]||speed[1]))return; this.scrollSpeed=[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; this.lastScrolled=new Date(); this.scrollInterval=setInterval(this.scroll.bind(this),10); }, scroll:function(){ var current=new Date(); var delta=current-this.lastScrolled; this.lastScrolled=current; if(this.options.scroll==window){ with(this._getWindowScroll(this.options.scroll)){ if(this.scrollSpeed[0]||this.scrollSpeed[1]){ var d=delta/1000; this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1]); } } }else{ this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000; this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000; } Position.prepare(); Droppables.show(Draggables._lastPointer,this.element); Draggables.notify('onDrag',this); if(this._isScrollChild){ Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer); Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000; Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000; if(Draggables._lastScrollPointer[0]<0) Draggables._lastScrollPointer[0]=0; if(Draggables._lastScrollPointer[1]<0) Draggables._lastScrollPointer[1]=0; this.draw(Draggables._lastScrollPointer); } if(this.options.change)this.options.change(this); }, _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}; } }); Draggable._dragging={}; var SortableObserver=Class.create({ initialize:function(element,observer){ this.element=$(element); this.observer=observer; this.lastValue=Sortable.serialize(this.element); }, onStart:function(){ this.lastValue=Sortable.serialize(this.element); }, onEnd:function(){ Sortable.unmark(); if(this.lastValue!=Sortable.serialize(this.element)) this.observer(this.element) } }); var Sortable={ SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, sortables:{}, _findRootElement:function(element){ while(element.tagName.toUpperCase()!="BODY"){ if(element.id&&Sortable.sortables[element.id])return element; element=element.parentNode; } }, options:function(element){ element=Sortable._findRootElement($(element)); if(!element)return; return Sortable.sortables[element.id]; }, destroy:function(element){ element=$(element); var s=Sortable.sortables[element.id]; if(s){ Draggables.removeObserver(s.element); s.droppables.each(function(d){Droppables.remove(d)}); s.draggables.invoke('destroy'); delete Sortable.sortables[s.element.id]; } }, create:function(element){ element=$(element); var options=Object.extend({ element:element, tag:'li', dropOnEmpty:false, tree:false, treeTag:'ul', overlap:'vertical', constraint:'vertical', containment:element, handle:false, only:false, delay:0, hoverclass:null, ghosting:false, quiet:false, scroll:false, scrollSensitivity:20, scrollSpeed:15, format:this.SERIALIZE_RULE, elements:false, handles:false, onChange:Prototype.emptyFunction, onUpdate:Prototype.emptyFunction },arguments[1]||{}); this.destroy(element); var options_for_draggable={ revert:true, quiet:options.quiet, scroll:options.scroll, scrollSpeed:options.scrollSpeed, scrollSensitivity:options.scrollSensitivity, delay:options.delay, ghosting:options.ghosting, constraint:options.constraint, handle:options.handle}; if(options.starteffect) options_for_draggable.starteffect=options.starteffect; if(options.reverteffect) options_for_draggable.reverteffect=options.reverteffect; else if(options.ghosting)options_for_draggable.reverteffect=function(element){ element.style.top=0; element.style.left=0; }; if(options.endeffect) options_for_draggable.endeffect=options.endeffect; if(options.zindex) options_for_draggable.zindex=options.zindex; var options_for_droppable={ overlap:options.overlap, containment:options.containment, tree:options.tree, hoverclass:options.hoverclass, onHover:Sortable.onHover }; var options_for_tree={ onHover:Sortable.onEmptyHover, overlap:options.overlap, containment:options.containment, hoverclass:options.hoverclass }; Element.cleanWhitespace(element); options.draggables=[]; options.droppables=[]; if(options.dropOnEmpty||options.tree){ Droppables.add(element,options_for_tree); options.droppables.push(element); } (options.elements||this.findElements(element,options)||[]).each(function(e,i){ var handle=options.handles?$(options.handles[i]): (options.handle?$(e).select('.'+options.handle)[0]:e); options.draggables.push( new Draggable(e,Object.extend(options_for_draggable,{handle:handle}))); Droppables.add(e,options_for_droppable); if(options.tree)e.treeNode=element; options.droppables.push(e); }); if(options.tree){ (Sortable.findTreeElements(element,options)||[]).each(function(e){ Droppables.add(e,options_for_tree); e.treeNode=element; options.droppables.push(e); }); } this.sortables[element.id]=options; Draggables.addObserver(new SortableObserver(element,options.onUpdate)); }, findElements:function(element,options){ return Element.findChildren( element,options.only,options.tree?true:false,options.tag); }, findTreeElements:function(element,options){ return Element.findChildren( element,options.only,options.tree?true:false,options.treeTag); }, onHover:function(element,dropon,overlap){ if(Element.isParent(dropon,element))return; if(overlap>.33&&overlap<.66&&Sortable.options(dropon).tree){ return; }else if(overlap>0.5){ Sortable.mark(dropon,'before'); if(dropon.previousSibling!=element){ var oldParentNode=element.parentNode; element.style.visibility="hidden"; dropon.parentNode.insertBefore(element,dropon); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } }else{ Sortable.mark(dropon,'after'); var nextElement=dropon.nextSibling||null; if(nextElement!=element){ var oldParentNode=element.parentNode; element.style.visibility="hidden"; dropon.parentNode.insertBefore(element,nextElement); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } }, onEmptyHover:function(element,dropon,overlap){ var oldParentNode=element.parentNode; var droponOptions=Sortable.options(dropon); if(!Element.isParent(dropon,element)){ var index; var children=Sortable.findElements(dropon,{tag:droponOptions.tag,only:droponOptions.only}); var child=null; if(children){ var offset=Element.offsetSize(dropon,droponOptions.overlap)*(1.0-overlap); for(index=0;index=0){ offset-=Element.offsetSize(children[index],droponOptions.overlap); }else if(offset-(Element.offsetSize(children[index],droponOptions.overlap)/2)>=0){ child=index+1'); this.iefix=$(this.update.id+'_iefix'); } if(this.iefix)setTimeout(this.fixIEOverlapping.bind(this),50); }, fixIEOverlapping:function(){ Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)}); this.iefix.style.zIndex=1; this.update.style.zIndex=2; Element.show(this.iefix); }, hide:function(){ this.stopIndicator(); if(Element.getStyle(this.update,'display')!='none')this.options.onHide(this.element,this.update); if(this.iefix)Element.hide(this.iefix); }, startIndicator:function(){ if(this.options.indicator)Element.show(this.options.indicator); }, stopIndicator:function(){ if(this.options.indicator)Element.hide(this.options.indicator); }, onKeyPress:function(event){ if(this.active) switch(event.keyCode){ case Event.KEY_TAB: case Event.KEY_RETURN: this.selectEntry(); Event.stop(event); case Event.KEY_ESC: this.hide(); this.active=false; Event.stop(event); return; case Event.KEY_LEFT: case Event.KEY_RIGHT: return; case Event.KEY_UP: this.markPrevious(); this.render(); Event.stop(event); return; case Event.KEY_DOWN: this.markNext(); this.render(); Event.stop(event); return; } else if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN|| (Prototype.Browser.WebKit>0&&event.keyCode==0))return; this.changed=true; this.hasFocus=true; if(this.observer)clearTimeout(this.observer); this.observer= setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000); }, activate:function(){ this.changed=false; this.hasFocus=true; this.getUpdatedChoices(); }, onHover:function(event){ var element=Event.findElement(event,'LI'); if(this.index!=element.autocompleteIndex) { this.index=element.autocompleteIndex; this.render(); } Event.stop(event); }, onClick:function(event){ var element=Event.findElement(event,'LI'); this.index=element.autocompleteIndex; this.selectEntry(); this.hide(); }, onBlur:function(event){ setTimeout(this.hide.bind(this),250); this.hasFocus=false; this.active=false; }, render:function(){ if(this.entryCount>0){ for(var i=0;i0)this.index--; else this.index=this.entryCount-1; }, markNext:function(){ if(this.index0)value=Element.collectTextNodes(nodes[0],this.options.select); }else value=Element.collectTextNodesIgnoreClass(selectedElement,'informal'); var bounds=this.getTokenBounds(); if(bounds[0]!=-1){ var newValue=this.element.value.substr(0,bounds[0]); var whitespace=this.element.value.substr(bounds[0]).match(/^\s+/); if(whitespace) newValue+=whitespace[0]; this.element.value=newValue+value+this.element.value.substr(bounds[1]); }else{ this.element.value=value; } this.oldElementValue=this.element.value; this.element.focus(); if(this.options.afterUpdateElement) this.options.afterUpdateElement(this.element,selectedElement); }, updateChoices:function(choices){ if(!this.changed&&this.hasFocus){ this.update.innerHTML=choices; Element.cleanWhitespace(this.update); Element.cleanWhitespace(this.update.down()); if(this.update.firstChild&&this.update.down().childNodes){ this.entryCount= this.update.down().childNodes.length; for(var i=0;i=this.options.minChars){ this.getUpdatedChoices(); }else{ this.active=false; this.hide(); } this.oldElementValue=this.element.value; }, getToken:function(){ var bounds=this.getTokenBounds(); return this.element.value.substring(bounds[0],bounds[1]).strip(); }, getTokenBounds:function(){ if(null!=this.tokenBounds)return this.tokenBounds; var value=this.element.value; if(value.strip().empty())return[-1,0]; var diff=arguments.callee.getFirstDifferencePos(value,this.oldElementValue); var offset=(diff==this.oldElementValue.length?1:0); var prevTokenPos=-1,nextTokenPos=value.length; var tp; for(var index=0,l=this.options.tokens.length;indexprevTokenPos)prevTokenPos=tp; tp=value.indexOf(this.options.tokens[index],diff+offset); if(-1!=tp&&tp"+elem.substr(0,entry.length)+""+ elem.substr(entry.length)+""); break; }else if(entry.length>=instance.options.partialChars&& instance.options.partialSearch&&foundPos!=-1){ if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){ partial.push("
  • "+elem.substr(0,foundPos)+""+ elem.substr(foundPos,entry.length)+""+elem.substr( foundPos+entry.length)+"
  • "); break; } } foundPos=instance.options.ignoreCase? elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1): elem.indexOf(entry,foundPos+1); } } if(partial.length) ret=ret.concat(partial.slice(0,instance.options.choices-ret.length)); return"
      "+ret.join('')+"
    "; } },options||{}); } }); Field.scrollFreeActivate=function(field){ setTimeout(function(){ Field.activate(field); },1); }; Ajax.InPlaceEditor=Class.create({ initialize:function(element,url,options){ this.url=url; this.element=element=$(element); this.prepareOptions(); this._controls={}; arguments.callee.dealWithDeprecatedOptions(options); Object.extend(this.options,options||{}); if(!this.options.formId&&this.element.id){ this.options.formId=this.element.id+'-inplaceeditor'; if($(this.options.formId)) this.options.formId=''; } if(this.options.externalControl) this.options.externalControl=$(this.options.externalControl); if(!this.options.externalControl) this.options.externalControlOnly=false; this._originalBackground=this.element.getStyle('background-color')||'transparent'; this.element.title=this.options.clickToEditText; this._boundCancelHandler=this.handleFormCancellation.bind(this); this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this); this._boundFailureHandler=this.handleAJAXFailure.bind(this); this._boundSubmitHandler=this.handleFormSubmission.bind(this); this._boundWrapperHandler=this.wrapUp.bind(this); this.registerListeners(); }, checkForEscapeOrReturn:function(e){ if(!this._editing||e.ctrlKey||e.altKey||e.shiftKey)return; if(Event.KEY_ESC==e.keyCode) this.handleFormCancellation(e); else if(Event.KEY_RETURN==e.keyCode) this.handleFormSubmission(e); }, createControl:function(mode,handler,extraClasses){ var control=this.options[mode+'Control']; var text=this.options[mode+'Text']; if('button'==control){ var btn=document.createElement('input'); btn.type='submit'; btn.value=text; btn.className='editor_'+mode+'_button'; if('cancel'==mode) btn.onclick=this._boundCancelHandler; this._form.appendChild(btn); this._controls[mode]=btn; }else if('link'==control){ var link=document.createElement('a'); link.href='#'; link.appendChild(document.createTextNode(text)); link.onclick='cancel'==mode?this._boundCancelHandler:this._boundSubmitHandler; link.className='editor_'+mode+'_link'; if(extraClasses) link.className+=' '+extraClasses; this._form.appendChild(link); this._controls[mode]=link; } }, createEditField:function(){ var text=(this.options.loadTextURL?this.options.loadingText:this.getText()); var fld; if(1>=this.options.rows&&!/\r|\n/.test(this.getText())){ fld=document.createElement('input'); fld.type='text'; var size=this.options.size||this.options.cols||0; if(0=this.options.rows?this.options.autoRows:this.options.rows); fld.cols=this.options.cols||40; } fld.name=this.options.paramName; fld.value=text; fld.className='editor_field'; if(this.options.submitOnBlur) fld.onblur=this._boundSubmitHandler; this._controls.editor=fld; if(this.options.loadTextURL) this.loadExternalText(); this._form.appendChild(this._controls.editor); }, createForm:function(){ var ipe=this; function addText(mode,condition){ var text=ipe.options['text'+mode+'Controls']; if(!text||condition===false)return; ipe._form.appendChild(document.createTextNode(text)); }; this._form=$(document.createElement('form')); this._form.id=this.options.formId; this._form.addClassName(this.options.formClassName); this._form.onsubmit=this._boundSubmitHandler; this.createEditField(); if('textarea'==this._controls.editor.tagName.toLowerCase()) this._form.appendChild(document.createElement('br')); if(this.options.onFormCustomization) this.options.onFormCustomization(this,this._form); addText('Before',this.options.okControl||this.options.cancelControl); this.createControl('ok',this._boundSubmitHandler); addText('Between',this.options.okControl&&this.options.cancelControl); this.createControl('cancel',this._boundCancelHandler,'editor_cancel'); addText('After',this.options.okControl||this.options.cancelControl); }, destroy:function(){ if(this._oldInnerHTML) this.element.innerHTML=this._oldInnerHTML; this.leaveEditMode(); this.unregisterListeners(); }, enterEditMode:function(e){ if(this._saving||this._editing)return; this._editing=true; this.triggerCallback('onEnterEditMode'); if(this.options.externalControl) this.options.externalControl.hide(); this.element.hide(); this.createForm(); this.element.parentNode.insertBefore(this._form,this.element); if(!this.options.loadTextURL) this.postProcessEditField(); if(e)Event.stop(e); }, enterHover:function(e){ if(this.options.hoverClassName) this.element.addClassName(this.options.hoverClassName); if(this._saving)return; this.triggerCallback('onEnterHover'); }, getText:function(){ return this.element.innerHTML.unescapeHTML(); }, handleAJAXFailure:function(transport){ this.triggerCallback('onFailure',transport); if(this._oldInnerHTML){ this.element.innerHTML=this._oldInnerHTML; this._oldInnerHTML=null; } }, handleFormCancellation:function(e){ this.wrapUp(); if(e)Event.stop(e); }, handleFormSubmission:function(e){ var form=this._form; var value=$F(this._controls.editor); this.prepareSubmission(); var params=this.options.callback(form,value)||''; if(Object.isString(params)) params=params.toQueryParams(); params.editorId=this.element.id; if(this.options.htmlResponse){ var options=Object.extend({evalScripts:true},this.options.ajaxOptions); Object.extend(options,{ parameters:params, onComplete:this._boundWrapperHandler, onFailure:this._boundFailureHandler }); new Ajax.Updater({success:this.element},this.url,options); }else{ var options=Object.extend({method:'get'},this.options.ajaxOptions); Object.extend(options,{ parameters:params, onComplete:this._boundWrapperHandler, onFailure:this._boundFailureHandler }); new Ajax.Request(this.url,options); } if(e)Event.stop(e); }, leaveEditMode:function(){ this.element.removeClassName(this.options.savingClassName); this.removeForm(); this.leaveHover(); this.element.style.backgroundColor=this._originalBackground; this.element.show(); if(this.options.externalControl) this.options.externalControl.show(); this._saving=false; this._editing=false; this._oldInnerHTML=null; this.triggerCallback('onLeaveEditMode'); }, leaveHover:function(e){ if(this.options.hoverClassName) this.element.removeClassName(this.options.hoverClassName); if(this._saving)return; this.triggerCallback('onLeaveHover'); }, loadExternalText:function(){ this._form.addClassName(this.options.loadingClassName); this._controls.editor.disabled=true; var options=Object.extend({method:'get'},this.options.ajaxOptions); Object.extend(options,{ parameters:'editorId='+encodeURIComponent(this.element.id), onComplete:Prototype.emptyFunction, onSuccess:function(transport){ this._form.removeClassName(this.options.loadingClassName); var text=transport.responseText; if(this.options.stripLoadedTextTags) text=text.stripTags(); this._controls.editor.value=text; this._controls.editor.disabled=false; this.postProcessEditField(); }.bind(this), onFailure:this._boundFailureHandler }); new Ajax.Request(this.options.loadTextURL,options); }, postProcessEditField:function(){ var fpc=this.options.fieldPostCreation; if(fpc) $(this._controls.editor)['focus'==fpc?'focus':'activate'](); }, prepareOptions:function(){ this.options=Object.clone(Ajax.InPlaceEditor.DefaultOptions); Object.extend(this.options,Ajax.InPlaceEditor.DefaultCallbacks); [this._extraDefaultOptions].flatten().compact().each(function(defs){ Object.extend(this.options,defs); }.bind(this)); }, prepareSubmission:function(){ this._saving=true; this.removeForm(); this.leaveHover(); this.showSaving(); }, registerListeners:function(){ this._listeners={}; var listener; $H(Ajax.InPlaceEditor.Listeners).each(function(pair){ listener=this[pair.value].bind(this); this._listeners[pair.key]=listener; if(!this.options.externalControlOnly) this.element.observe(pair.key,listener); if(this.options.externalControl) this.options.externalControl.observe(pair.key,listener); }.bind(this)); }, removeForm:function(){ if(!this._form)return; this._form.remove(); this._form=null; this._controls={}; }, showSaving:function(){ this._oldInnerHTML=this.element.innerHTML; this.element.innerHTML=this.options.savingText; this.element.addClassName(this.options.savingClassName); this.element.style.backgroundColor=this._originalBackground; this.element.show(); }, triggerCallback:function(cbName,arg){ if('function'==typeof this.options[cbName]){ this.options[cbName](this,arg); } }, unregisterListeners:function(){ $H(this._listeners).each(function(pair){ if(!this.options.externalControlOnly) this.element.stopObserving(pair.key,pair.value); if(this.options.externalControl) this.options.externalControl.stopObserving(pair.key,pair.value); }.bind(this)); }, wrapUp:function(transport){ this.leaveEditMode(); this._boundComplete(transport,this.element); } }); Object.extend(Ajax.InPlaceEditor.prototype,{ dispose:Ajax.InPlaceEditor.prototype.destroy }); Ajax.InPlaceCollectionEditor=Class.create(Ajax.InPlaceEditor,{ initialize:function($super,element,url,options){ this._extraDefaultOptions=Ajax.InPlaceCollectionEditor.DefaultOptions; $super(element,url,options); }, createEditField:function(){ var list=document.createElement('select'); list.name=this.options.paramName; list.size=1; this._controls.editor=list; this._collection=this.options.collection||[]; if(this.options.loadCollectionURL) this.loadCollection(); else this.checkForExternalText(); this._form.appendChild(this._controls.editor); }, loadCollection:function(){ this._form.addClassName(this.options.loadingClassName); this.showLoadingText(this.options.loadingCollectionText); var options=Object.extend({method:'get'},this.options.ajaxOptions); Object.extend(options,{ parameters:'editorId='+encodeURIComponent(this.element.id), onComplete:Prototype.emptyFunction, onSuccess:function(transport){ var js=transport.responseText.strip(); if(!/^\[.*\]$/.test(js)) throw('Server returned an invalid collection representation.'); this._collection=eval(js); this.checkForExternalText(); }.bind(this), onFailure:this.onFailure }); new Ajax.Request(this.options.loadCollectionURL,options); }, showLoadingText:function(text){ this._controls.editor.disabled=true; var tempOption=this._controls.editor.firstChild; if(!tempOption){ tempOption=document.createElement('option'); tempOption.value=''; this._controls.editor.appendChild(tempOption); tempOption.selected=true; } tempOption.update((text||'').stripScripts().stripTags()); }, checkForExternalText:function(){ this._text=this.getText(); if(this.options.loadTextURL) this.loadExternalText(); else this.buildOptionList(); }, loadExternalText:function(){ this.showLoadingText(this.options.loadingText); var options=Object.extend({method:'get'},this.options.ajaxOptions); Object.extend(options,{ parameters:'editorId='+encodeURIComponent(this.element.id), onComplete:Prototype.emptyFunction, onSuccess:function(transport){ this._text=transport.responseText.strip(); this.buildOptionList(); }.bind(this), onFailure:this.onFailure }); new Ajax.Request(this.options.loadTextURL,options); }, buildOptionList:function(){ this._form.removeClassName(this.options.loadingClassName); this._collection=this._collection.map(function(entry){ return 2===entry.length?entry:[entry,entry].flatten(); }); var marker=('value'in this.options)?this.options.value:this._text; var textFound=this._collection.any(function(entry){ return entry[0]==marker; }.bind(this)); this._controls.editor.update(''); var option; this._collection.each(function(entry,index){ option=document.createElement('option'); option.value=entry[0]; option.selected=textFound?entry[0]==marker:0==index; option.appendChild(document.createTextNode(entry[1])); this._controls.editor.appendChild(option); }.bind(this)); this._controls.editor.disabled=false; Field.scrollFreeActivate(this._controls.editor); } }); Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions=function(options){ if(!options)return; function fallback(name,expr){ if(name in options||expr===undefined)return; options[name]=expr; }; fallback('cancelControl',(options.cancelLink?'link':(options.cancelButton?'button': options.cancelLink==options.cancelButton==false?false:undefined))); fallback('okControl',(options.okLink?'link':(options.okButton?'button': options.okLink==options.okButton==false?false:undefined))); fallback('highlightColor',options.highlightcolor); fallback('highlightEndColor',options.highlightendcolor); }; Object.extend(Ajax.InPlaceEditor,{ DefaultOptions:{ ajaxOptions:{}, autoRows:3, cancelControl:'link', cancelText:'cancel', clickToEditText:'Click to edit', externalControl:null, externalControlOnly:false, fieldPostCreation:'activate', formClassName:'inplaceeditor-form', formId:null, highlightColor:'#ffff99', highlightEndColor:'#ffffff', hoverClassName:'', htmlResponse:true, loadingClassName:'inplaceeditor-loading', loadingText:'Loading...', okControl:'button', okText:'ok', paramName:'value', rows:1, savingClassName:'inplaceeditor-saving', savingText:'Saving...', size:0, stripLoadedTextTags:false, submitOnBlur:false, textAfterControls:'', textBeforeControls:'', textBetweenControls:'' }, DefaultCallbacks:{ callback:function(form){ return Form.serialize(form); }, onComplete:function(transport,element){ new Effect.Highlight(element,{ startcolor:this.options.highlightColor,keepBackgroundImage:true}); }, onEnterEditMode:null, onEnterHover:function(ipe){ ipe.element.style.backgroundColor=ipe.options.highlightColor; if(ipe._effect) ipe._effect.cancel(); }, onFailure:function(transport,ipe){ alert('Error communication with the server: '+transport.responseText.stripTags()); }, onFormCustomization:null, onLeaveEditMode:null, onLeaveHover:function(ipe){ ipe._effect=new Effect.Highlight(ipe.element,{ startcolor:ipe.options.highlightColor,endcolor:ipe.options.highlightEndColor, restorecolor:ipe._originalBackground,keepBackgroundImage:true }); } }, Listeners:{ click:'enterEditMode', keydown:'checkForEscapeOrReturn', mouseover:'enterHover', mouseout:'leaveHover' } }); Ajax.InPlaceCollectionEditor.DefaultOptions={ loadingCollectionText:'Loading options...' }; Form.Element.DelayedObserver=Class.create({ initialize:function(element,delay,callback){ this.delay=delay||0.5; this.element=$(element); this.callback=callback; this.timer=null; this.lastValue=$F(this.element); Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); }, delayedListener:function(event){ if(this.lastValue==$F(this.element))return; if(this.timer)clearTimeout(this.timer); this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000); this.lastValue=$F(this.element); }, onTimerEvent:function(){ this.timer=null; this.callback(this.element,$F(this.element)); } }); if(!Control)var Control={}; Control.Slider=Class.create({ initialize:function(handle,track,options){ var slider=this; if(Object.isArray(handle)){ this.handles=handle.collect(function(e){return $(e)}); }else{ this.handles=[$(handle)]; } this.track=$(track); this.options=options||{}; this.axis=this.options.axis||'horizontal'; this.increment=this.options.increment||1; this.step=parseInt(this.options.step||'1'); this.range=this.options.range||$R(0,1); this.value=0; this.values=this.handles.map(function(){return 0}); this.spans=this.options.spans?this.options.spans.map(function(s){return $(s)}):false; this.options.startSpan=$(this.options.startSpan||null); this.options.endSpan=$(this.options.endSpan||null); this.restricted=this.options.restricted||false; this.maximum=this.options.maximum||this.range.end; this.minimum=this.options.minimum||this.range.start; this.alignX=parseInt(this.options.alignX||'0'); this.alignY=parseInt(this.options.alignY||'0'); this.trackLength=this.maximumOffset()-this.minimumOffset(); this.handleLength=this.isVertical()? (this.handles[0].offsetHeight!=0? this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")): (this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth: this.handles[0].style.width.replace(/px$/,"")); this.active=false; this.dragging=false; this.disabled=false; if(this.options.disabled)this.setDisabled(); this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false; if(this.allowedValues){ this.minimum=this.allowedValues.min(); this.maximum=this.allowedValues.max(); } this.eventMouseDown=this.startDrag.bindAsEventListener(this); this.eventMouseUp=this.endDrag.bindAsEventListener(this); this.eventMouseMove=this.update.bindAsEventListener(this); this.handles.each(function(h,i){ i=slider.handles.length-1-i; slider.setValue(parseFloat( (Object.isArray(slider.options.sliderValue)? slider.options.sliderValue[i]:slider.options.sliderValue)|| slider.range.start),i); h.makePositioned().observe("mousedown",slider.eventMouseDown); }); this.track.observe("mousedown",this.eventMouseDown); document.observe("mouseup",this.eventMouseUp); $(this.track.parentNode.parentNode).observe("mousemove",this.eventMouseMove); this.initialized=true; }, dispose:function(){ var slider=this; Event.stopObserving(this.track,"mousedown",this.eventMouseDown); Event.stopObserving(document,"mouseup",this.eventMouseUp); Event.stopObserving(this.track.parentNode.parentNode,"mousemove",this.eventMouseMove); this.handles.each(function(h){ Event.stopObserving(h,"mousedown",slider.eventMouseDown); }); }, setDisabled:function(){ this.disabled=true; this.track.parentNode.className=this.track.parentNode.className+' disabled'; }, setEnabled:function(){ this.disabled=false; }, getNearestValue:function(value){ if(this.allowedValues){ if(value>=this.allowedValues.max())return(this.allowedValues.max()); if(value<=this.allowedValues.min())return(this.allowedValues.min()); var offset=Math.abs(this.allowedValues[0]-value); var newValue=this.allowedValues[0]; this.allowedValues.each(function(v){ var currentOffset=Math.abs(v-value); if(currentOffset<=offset){ newValue=v; offset=currentOffset; } }); return newValue; } if(value>this.range.end)return this.range.end; if(value0)&&(sliderValuethis.values[handleIdx+1])) sliderValue=this.values[handleIdx+1]; } sliderValue=this.getNearestValue(sliderValue); this.values[handleIdx]=sliderValue; this.value=this.values[0]; this.handles[handleIdx].style[this.isVertical()?'top':'left']= this.translateToPx(sliderValue); this.drawSpans(); if(!this.dragging||!this.event)this.updateFinished(); }, setValueBy:function(delta,handleIdx){ this.setValue(this.values[handleIdx||this.activeHandleIdx||0]+delta, handleIdx||this.activeHandleIdx||0); }, translateToPx:function(value){ return Math.round( ((this.trackLength-this.handleLength)/(this.range.end-this.range.start))* (value-this.range.start))+"px"; }, translateToValue:function(offset){ return((offset/(this.trackLength-this.handleLength)* (this.range.end-this.range.start))+this.range.start); }, getRange:function(range){ var v=this.values.sortBy(Prototype.K); range=range||0; return $R(v[range],v[range+1]); }, minimumOffset:function(){ return(this.isVertical()?this.alignY:this.alignX); }, maximumOffset:function(){ return(this.isVertical()? (this.track.offsetHeight!=0?this.track.offsetHeight: this.track.style.height.replace(/px$/,""))-this.alignY: (this.track.offsetWidth!=0?this.track.offsetWidth: this.track.style.width.replace(/px$/,""))-this.alignX); }, isVertical:function(){ return(this.axis=='vertical'); }, drawSpans:function(){ var slider=this; if(this.spans) $R(0,this.spans.length-1).each(function(r){slider.setSpan(slider.spans[r],slider.getRange(r))}); if(this.options.startSpan) this.setSpan(this.options.startSpan, $R(0,this.values.length>1?this.getRange(0).min():this.value)); if(this.options.endSpan) this.setSpan(this.options.endSpan, $R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum)); }, setSpan:function(span,range){ if(this.isVertical()){ span.style.top=this.translateToPx(range.start); span.style.height=this.translateToPx(range.end-range.start+this.range.start); }else{ span.style.left=this.translateToPx(range.start); span.style.width=this.translateToPx(range.end-range.start+this.range.start); } }, updateStyles:function(){ this.handles.each(function(h){Element.removeClassName(h,'selected')}); Element.addClassName(this.activeHandle,'selected'); }, startDrag:function(event){ if(Event.isLeftClick(event)){ if(!this.disabled){ this.active=true; var handle=Event.element(event); var pointer=[Event.pointerX(event),Event.pointerY(event)]; var track=handle; if(track==this.track){ var offsets=Position.cumulativeOffset(this.track); this.event=event; this.setValue(this.translateToValue( (this.isVertical()?pointer[1]-offsets[1]:pointer[0]-offsets[0])-(this.handleLength/2) )); var offsets=Position.cumulativeOffset(this.activeHandle); this.offsetX=(pointer[0]-offsets[0]); this.offsetY=(pointer[1]-offsets[1]); }else{ while((this.handles.indexOf(handle)==-1)&&handle.parentNode) handle=handle.parentNode; if(this.handles.indexOf(handle)!=-1){ this.activeHandle=handle; this.activeHandleIdx=this.handles.indexOf(this.activeHandle); this.updateStyles(); var offsets=Position.cumulativeOffset(this.activeHandle); this.offsetX=(pointer[0]-offsets[0]); this.offsetY=(pointer[1]-offsets[1]); } } } Event.stop(event); } }, update:function(event){ if(this.active){ if(!this.dragging)this.dragging=true; this.draw(event); if(Prototype.Browser.WebKit)window.scrollBy(0,0); Event.stop(event); } }, draw:function(event){ var pointer=[Event.pointerX(event),Event.pointerY(event)]; var offsets=Position.cumulativeOffset(this.track); pointer[0]-=this.offsetX+offsets[0]; pointer[1]-=this.offsetY+offsets[1]; this.event=event; this.setValue(this.translateToValue(this.isVertical()?pointer[1]:pointer[0])); if(this.initialized&&this.options.onSlide) this.options.onSlide(this.values.length>1?this.values:this.value,this); }, endDrag:function(event){ if(this.active&&this.dragging){ this.finishDrag(event,true); Event.stop(event); } this.active=false; this.dragging=false; }, finishDrag:function(event,success){ this.active=false; this.dragging=false; this.updateFinished(); }, updateFinished:function(){ if(this.initialized&&this.options.onChange) this.options.onChange(this.values.length>1?this.values:this.value,this); this.event=null; } }); /*! * jQuery JavaScript Library v1.4.4 * http://jquery.com/ * * Copyright 2010, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Thu Nov 11 19:04:53 2010 -0500 */ (function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h= h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;kd)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La, "`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this, e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a, "margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+ a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/, C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j, s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this, j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length}, toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j=== -1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false; if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload", b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&& !F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&& l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H
    a";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"), k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false, scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent= false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom= 1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="
    ";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="
    t
    ";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display= "none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h= c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando); else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one"; if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true}, attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&& b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0}; c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem, arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid= d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+ c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== 8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k=== "click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+ d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired= B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type=== "file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]=== 0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); (function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3]; break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr, q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h= l;g.sort(w);if(h)for(var i=1;i0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n, m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]- 0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]]; if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m, g);else if(typeof g.length==="number")for(var p=g.length;n";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g); n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&& function(){var g=k,i=t.createElement("div");i.innerHTML="

    ";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F|| p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g= t.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition? function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h= h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context): c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a, 2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a, b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&& e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1, ""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null; else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append", prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument|| b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===""&&!x?r.childNodes:[];for(o=k.length- 1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script")))); d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i, jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true, zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b), h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b); if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f= d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left; e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/)<[^<]*)*<\/script>/gi, ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b=== "object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("
    ").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& !this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| !T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache= false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset; A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type", b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]= encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess", [b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"), e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}}); if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show", 3),a,b,d);else{d=0;for(var e=this.length;d=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)} var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= c.timers,b=0;b-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a, e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&& c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+ b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window); jQuery.noConflict(); /* * tools.tabs 1.0.4 - Tabs done right. * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/tabs.html * * Dual licensed under MIT and GPL 2+ licenses * http://www.opensource.org/licenses * * Launch : November 2008 * Date: ${date} * Revision: ${revision} */ (function(d){d.tools=d.tools||{};d.tools.tabs={version:"1.0.4",conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",api:false,rotate:false},addEffect:function(e,f){c[e]=f}};var c={"default":function(f,e){this.getPanes().hide().eq(f).show();e.call()},fade:function(g,e){var f=this.getConf(),j=f.fadeOutSpeed,h=this.getPanes();if(j){h.fadeOut(j)}else{h.hide()}h.eq(g).fadeIn(f.fadeInSpeed,e)},slide:function(f,e){this.getPanes().slideUp(200);this.getPanes().eq(f).slideDown(400,e)},ajax:function(f,e){this.getPanes().eq(0).load(this.getTabs().eq(f).attr("href"),e)}};var b;d.tools.tabs.addEffect("horizontal",function(f,e){if(!b){b=this.getPanes().eq(0).width()}this.getCurrentPane().animate({width:0},function(){d(this).hide()});this.getPanes().eq(f).animate({width:b},function(){d(this).show();e.call()})});function a(g,h,f){var e=this,j=d(this),i;d.each(f,function(k,l){if(d.isFunction(l)){j.bind(k,l)}});d.extend(this,{click:function(k,n){var o=e.getCurrentPane();var l=g.eq(k);if(typeof k=="string"&&k.replace("#","")){l=g.filter("[href*="+k.replace("#","")+"]");k=Math.max(g.index(l),0)}if(f.rotate){var m=g.length-1;if(k<0){return e.click(m,n)}if(k>m){return e.click(0,n)}}if(!l.length){if(i>=0){return e}k=f.initialIndex;l=g.eq(k)}if(k===i){return e}n=n||d.Event();n.type="onBeforeClick";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}c[f.effect].call(e,k,function(){n.type="onClick";j.trigger(n,[k])});n.type="onStart";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}i=k;g.removeClass(f.current);l.addClass(f.current);return e},getConf:function(){return f},getTabs:function(){return g},getPanes:function(){return h},getCurrentPane:function(){return h.eq(i)},getCurrentTab:function(){return g.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)},bind:function(k,l){j.bind(k,l);return e},onBeforeClick:function(k){return this.bind("onBeforeClick",k)},onClick:function(k){return this.bind("onClick",k)},unbind:function(k){j.unbind(k);return e}});g.each(function(k){d(this).bind(f.event,function(l){e.click(k,l);return false})});if(location.hash){e.click(location.hash)}else{if(f.initialIndex===0||f.initialIndex>0){e.click(f.initialIndex)}}h.find("a[href^=#]").click(function(k){e.click(d(this).attr("href"),k)})}d.fn.tabs=function(i,f){var g=this.eq(typeof f=="number"?f:0).data("tabs");if(g){return g}if(d.isFunction(f)){f={onBeforeClick:f}}var h=d.extend({},d.tools.tabs.conf),e=this.length;f=d.extend(h,f);this.each(function(l){var j=d(this);var k=j.find(f.tabs);if(!k.length){k=j.children()}var m=i.jquery?i:j.children(i);if(!m.length){m=e==1?d(i):j.parent().find(i)}g=new a(k,m,f);j.data("tabs",g)});return f.api?g:this}})(jQuery); /* * tools.overlay 1.1.2 - Overlay HTML with eye candy. * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/overlay.html * * Dual licensed under MIT and GPL 2+ licenses * http://www.opensource.org/licenses * * Launch : March 2008 * Date: ${date} * Revision: ${revision} */ (function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('
    ');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery); /* * Overlay Gallery plugin, version: 1.0.0 * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/overlay.html#gallery * * Dual licensed under MIT and GPL 2+ licenses * http://www.opensource.org/licenses * * Since : July 2009 * Date: ${date} * Revision: ${revision} */ (function(b){var a=b.tools.overlay;a.plugins=a.plugins||{};a.plugins.gallery={version:"1.0.0",conf:{imgId:"img",next:".next",prev:".prev",info:".info",progress:".progress",disabledClass:"disabled",activeClass:"active",opacity:0.8,speed:"slow",template:"${title} Image ${index} of ${total}",autohide:true,preload:true,api:false}};b.fn.gallery=function(d){var o=b.extend({},a.plugins.gallery.conf),m;b.extend(o,d);m=this.overlay();var r=this,j=m.getOverlay(),k=j.find(o.next),g=j.find(o.prev),e=j.find(o.info),c=j.find(o.progress),h=g.add(k).add(e).css({opacity:o.opacity}),s=m.getClosers(),l;function p(u){c.fadeIn();h.hide();s.hide();var t=u.attr("href");var v=new Image();v.onload=function(){c.fadeOut();var y=b("#"+o.imgId,j);if(!y.length){y=b("").attr("id",o.imgId).css("visibility","hidden");j.prepend(y)}y.attr("src",t).css("visibility","hidden");var z=v.width;var A=(b(window).width()-z)/2;l=r.index(r.filter("[href="+t+"]"));r.removeClass(o.activeClass).eq(l).addClass(o.activeClass);var w=o.disabledClass;h.removeClass(w);if(l===0){g.addClass(w)}if(l==r.length-1){k.addClass(w)}var B=o.template.replace("${title}",u.attr("title")||u.data("title")).replace("${index}",l+1).replace("${total}",r.length);var x=parseInt(e.css("paddingLeft"),10)+parseInt(e.css("paddingRight"),10);e.html(B).css({width:z-x});j.animate({width:z,height:v.height,left:A},o.speed,function(){y.hide().css("visibility","visible").fadeIn(function(){if(!o.autohide){h.fadeIn();s.show()}})})};v.onerror=function(){j.fadeIn().html("Cannot find image "+t)};v.src=t;if(o.preload){r.filter(":eq("+(l-1)+"), :eq("+(l+1)+")").each(function(){var w=new Image();w.src=b(this).attr("href")})}}function f(t,u){t.click(function(){if(t.hasClass(o.disabledClass)){return}var v=r.eq(i=l+(u?1:-1));if(v.length){p(v)}})}f(k,true);f(g);b(document).keydown(function(t){if(!j.is(":visible")||t.altKey||t.ctrlKey){return}if(t.keyCode==37||t.keyCode==39){var u=t.keyCode==37?g:k;u.click();return t.preventDefault()}return true});function q(){if(!j.is(":animated")){h.show();s.show()}}if(o.autohide){j.hover(q,function(){h.fadeOut();s.hide()}).mousemove(q)}var n;this.each(function(){var v=b(this),u=b(this).overlay(),t=u;u.onBeforeLoad(function(){p(v)});u.onClose(function(){r.removeClass(o.activeClass)})});return o.api?n:this}})(jQuery); /* * tools.overlay "Apple Effect" 1.0.1 * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/overlay.html#apple * * Dual licensed under MIT and GPL 2+ licenses * http://www.opensource.org/licenses * * Since : July 2009 * Date: ${date} * Revision: ${revision} */ (function(d){var b=d.tools.overlay;b.effects=b.effects||{};b.effects.apple={version:"1.0.1"};d.extend(b.conf,{start:{absolute:true,top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function c(f){var g=f.offset();return[g.top+f.height()/2,g.left+f.width()/2]}var e=function(n){var k=this.getOverlay(),f=this.getConf(),i=this.getTrigger(),q=this,r=k.outerWidth({margin:true}),m=k.data("img");if(!m){var l=k.css("backgroundImage");if(!l){throw"background-image CSS property not set for overlay"}l=l.substring(l.indexOf("(")+1,l.indexOf(")")).replace(/\"/g,"");k.css("backgroundImage","none");m=d('');m.css({border:0,position:"absolute",display:"none"}).width(r);d("body").append(m);k.data("img",m)}var o=d(window),j=f.start.top||Math.round(o.height()/2),h=f.start.left||Math.round(o.width()/2);if(i){var g=c(i);j=g[0];h=g[1]}if(!f.start.absolute){j+=o.scrollTop();h+=o.scrollLeft()}m.css({top:j,left:h,width:0,zIndex:f.zIndex}).show();m.animate({top:k.css("top"),left:k.css("left"),width:r},f.speed,function(){k.css("zIndex",f.zIndex+1).fadeIn(f.fadeInSpeed,function(){if(q.isOpened()&&!d(this).index(k)){n.call()}else{k.hide()}})})};var a=function(f){var h=this.getOverlay(),i=this.getConf(),g=this.getTrigger(),l=i.start.top,k=i.start.left;h.hide();if(g){var j=c(g);l=j[0];k=j[1]}h.data("img").animate({top:l,left:k,width:0},i.closeSpeed,f)};b.addEffect("apple",e,a)})(jQuery);