String.extend({stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(/<script[^>]*?>.*?<\/script>/img,'');},evalScripts:function(){var scripts=this.match(/<script[^>]*?>.*?<\/script>/g);if(scripts)scripts.each(function(script){eval(script.replace(/^<script[^>]*?>/,'').replace(/<\/script>$/,''));});},replaceAll:function(searchValue,replaceValue,regExOptions){return this.replace(new RegExp(searchValue,$pick(regExOptions,'gi')),replaceValue);},urlEncode:function(){return(this.test('%'))?this:escape(this);},parseQuery:function(){var vars=this.split(/[&;]/);var rs={};if(vars.length)vars.each(function(val){var keys=val.split('=');if(keys.length&&keys.length==2)rs[encodeURIComponent(keys[0])]=encodeURIComponent(keys[1]);});return rs;},tidy:function(){var txt=this.toString();$each({"[\xa0\u2002\u2003\u2009]":" ","\xb7":"*","[\u2018\u2019]":"'","[\u201c\u201d]":'"',"\u2026":"...","\u2013":"-","\u2014":"--"},function(value,key){txt=txt.replace(new RegExp(key,'g'),value);});return txt;}});$native(Date);Date.extend({clone:function(){return new Date(this.getTime());},increment:function(interval,times){return this.multiply(interval,times);},decrement:function(interval,times){return this.multiply(interval,times,false);},multiply:function(interval,times,increment){interval=interval||'day';times=$pick(times,1);increment=$pick(increment,true);var multiplier=increment?1:-1 ;var month=this.format("%m").toInt()-1;var year=this.format("%Y").toInt();var time=this.getTime();var offset=0;switch(interval){case'year':times.times(function(val){if(Date.isLeapYear(year+val)&&month>1&&multiplier>0)val++;if(Date.isLeapYear(year+val)&&month<=1&&multiplier<0)val--;offset+=Date.$units.year(year+val);});break;case'month':times.times(function(val){var mo=month+(val*multiplier);var yr=year;if(mo<0){yr--;mo=12+mo;}if(mo>11||mo<0){yr+=(mo/12).toInt()*multiplier;mo=mo%12;}offset+=Date.$units.month(mo,yr);});break ;default:offset=Date.$units[interval]()*times;break;}this.setTime(time+(offset*multiplier));return this;},isLeapYear:function(){return Date.isLeapYear(this.getYear());},clearTime:function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;},diff:function(d,resolution){resolution=resolution||'day';if($type(d)=='string')d=Date.parse(d);switch(resolution){case'year':return d.format("%Y").toInt()-this.format("%Y").toInt();break;case'month':var months=(d.format("%Y").toInt()-this.format("%Y").toInt())*12;return months+d.format("%m").toInt()-this.format("%m").toInt();break;default:var diff=d.getTime()-this.getTime();if(diff<0&&Date.$units[resolution]()>(-1*(diff)))return 0;else if(diff>=0&&diff<Date.$units[resolution]())return 0;return((d.getTime()-this.getTime())/Date.$units[resolution]()).round();}},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,'$1').replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,'$1$2$3');},getGMTOffset:function(){var off=this.getTimezoneOffset();return((off>0)?'-':'+')+Math.floor(Math.abs(off)/60).zeroise(2)+(off%60).zeroise(2);},parse:function(str){this.setTime(Date.parse(str));return this;},format:function(f){f=f||"%x %X";if(!this.valueOf())return'invalid date';if(Date.$formats[f.toLowerCase()])f=Date.$formats[f.toLowerCase()];var d=this;return f.replace(/\%([aAbBcdHIjmMpSUWwxXyYTZ])/g,function($1,$2){switch($2){case'a':return Date.$days[d.getDay()].substr(0,3);case'A':return Date.$days[d.getDay()];case'b':return Date.$months[d.getMonth()].substr(0,3);case'B':return Date.$months[d.getMonth()];case'c':return d.toString();case'd':return d.getDate().zeroise(2);case'H':return d.getHours().zeroise(2);case'I':return((d.getHours()%12)||12).zeroise(2);case'j':return d.getDayOfYear().zeroise(3);case'm':return(d.getMonth()+1).zeroise(2);case'M':return d.getMinutes().zeroise(2);case'p':return d.getHours()<12?'AM':'PM';case'S':return d.getSeconds().zeroise(2);case'U':return d.getWeek().zeroise(2);case'W':throw new Error('%W is not supported yet');case'w':return d.getDay();case'x':return d.format('%m/%d/%Y');case'X':return d.format('%I:%M%p');case'y':return d.getFullYear().toString().substr(2);case'Y':return d.getFullYear();case'T':return d.getGMTOffset();case'Z':return d.getTimezone();case'%':return'%';}return $2;});},setAMPM:function(ampm){ampm=ampm.toUpperCase();if(this.format("%H").toInt()>11&&ampm=="AM")return this.decrement('hour',12);else if(this.format("%H").toInt()<12&&ampm=="PM")return this.increment('hour',12);return this;}});Date.prototype.compare=Date.prototype.diff;Date.prototype.strftime=Date.prototype.format;Date.$nativeParse=Date.parse;$extend(Date,{$months:['January','February','March','April','May','June','July','August','September','October','November','December'],$days:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],$daysInMonth:function(monthIndex,year){if(Date.isLeapYear(year.toInt())&&monthIndex===1)return 29;return[31,28,31,30,31,30,31,31,30,31,30,31][monthIndex];},$epoch:-1,$era:-2,$units:{ms:function(){return 1},second:function(){return 1000},minute:function(){return 60000},hour:function(){return 3600000},day:function(){return 86400000},week:function(){return 608400000},month:function(monthIndex,year){var d=new Date();return Date.$daysInMonth($pick(monthIndex,d.format("%m").toInt()),$pick(year,d.format("%Y").toInt()))*86400000;},year:function(year){year=year||new Date().format("%Y").toInt();return Date.isLeapYear(year.toInt())?31622400000:31536000000;}},$formats:{db:'%Y-%m-%d %H:%M:%S',iso8601:'%Y-%m-%dT%H:%M:%S%T',rfc822:'%a, %d %b %Y %H:%M:%S %Z','short':'%d %b %H:%M','long':'%B %d, %Y %H:%M'},isLeapYear:function(year){return(((year%4)===0)&&((year%1000)!==0)||((year%4000)===0));},parseUTC:function(value){var localDate=new Date(value);var utcSeconds=Date.UTC(localDate.getFullYear(),localDate.getMonth(),localDate.getDate(),localDate.getHours(),localDate.getMinutes(),localDate.getSeconds());return new Date(utcSeconds);},parse:function(from){var type=$type(from);if(type=='number')return new Date(str);if(type!='string')return from;if(!from.length)return null;for(var i=0,j=Date.$parsePatterns.length;i<j;i++){var r=Date.$parsePatterns[i].re.exec(from);if(r){try{return Date.$parsePatterns[i].handler(r);}catch(e){dbug.log('date parse error: ',e);return null;}}}return new Date(Date.$nativeParse(from));},parseMonth:function(month,num){var ret=-1;switch($type(month)){case'object':ret=Date.$months[month.getMonth()];break;case'number':ret=Date.$months[month-1]||false;if(!ret)throw new Error('Invalid month index value must be between 1 and 12:'+index);break;case'string':var match=Date.$months.filter(function(name){return this.test(name);},new RegExp('^'+month,'i'));if(!match.length)throw new Error('Invalid month string');if(match.length>1)throw new Error('Ambiguous month');ret=match[0];}return(num)?Date.$months.indexOf(ret):ret;},parseDay:function(day,num){var ret=-1;switch($type(day)){case'number':ret=Date.$days[day-1]||false;if(!ret)throw new Error('Invalid day index value must be between 1 and 7');break;case'string':var match=Date.$days.filter(function(name){return this.test(name);},new RegExp('^'+day,'i'));if(!match.length)throw new Error('Invalid day string');if(match.length>1)throw new Error('Ambiguous day');ret=match[0];}return(num)?Date.$days.indexOf(ret):ret;},fixY2K:function(d){if(!isNaN(d)){var newDate=new Date(d);if(newDate.getFullYear()<2000&&d.toString().indexOf(newDate.getFullYear())<0){newDate.increment('year',100);}return newDate;}else return d;},$parsePatterns:[{re:/^(\d{1,2})[\.\-\/](\d{1,2})[\.\-\/](\d{2,4})$/,handler:function(bits){var d=new Date();d.setYear(bits[3]);d.setMonth(bits[1].toInt()-1,bits[2].toInt());return Date.fixY2K(d);}},{re:/^(\d{1,2})[\.\-\/](\d{1,2})[\.\-\/](\d{2,4})\s(\d{1,2}):(\d{1,2})(\w{2})$/,handler:function(bits){var d=new Date();d.setYear(bits[3]);d.setMonth(bits[1]-1);d.setDate(bits[2]);d.setHours(bits[4]);d.setMinutes(bits[5]);d.setAMPM(bits[6]);return Date.fixY2K(d);}}]});Number.extend({zeroise:function(length){return String(this).zeroise(length);}});String.extend({repeat:function(times){var ret=[];for(var i=0;i<times;i++)ret.push(this);return ret.join('');},zeroise:function(length){return'0'.repeat(length-this.length)+this;}});Date.extend({timeAgoInWords:function(){var relative_to=(arguments.length>0)?arguments[1]:new Date();return Date.distanceOfTimeInWords(this,relative_to,arguments[2]);},getOrdinal:function(){var str=this.toString();var test=str.substr(-(Math.min(str.length,2)));return(test>3&&test<21)?'th':['th','st','nd','rd','th'][Math.min(this%10,4)];},getDayOfYear:function(){return((Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+1,0,0,0)-Date.UTC(this.getFullYear(),0,1,0,0,0))/Date.$units.day());},getLastDayOfMonth:function(){var ret=this.clone();ret.setMonth(ret.getMonth()+1,0);return ret.getDate();},getWeek:function(){var day=(new Date(this.getFullYear(),0,1)).getDate();return Math.round((this.getDayOfYear()+(day>3?day-4:day+3))/7);}});$extend(Date,{distanceOfTimeInWords:function(fromTime,toTime,includeTime){var delta=parseInt((toTime.getTime()-fromTime.getTime())/1000);if(delta<60){return'less than a minute ago';}else if(delta<120){return'about a minute ago';}else if(delta<(45*60)){return(parseInt(delta/60)).toString()+' minutes ago';}else if(delta<(90*60)){return'about an hour ago';}else if(delta<(24*60*60)){return'about '+(parseInt(delta/3600)).toString()+' hours ago';}else if(delta<(48*60*60)){return'1 day ago';}else{var days=(parseInt(delta/86400)).toString();if(days>30){var fmt='%B %d';if(toTime.getYear()!=fromTime.getYear()){fmt+=', %Y';}if(includeTime)fmt+=' %I:%M %p';return fromTime.strftime(fmt);}else{return days+" days ago";}}}});Date.$parsePatterns.extend([{re:/^(\d{4})(?:-?(\d{2})(?:-?(\d{2})(?:[T ](\d{2})(?::?(\d{2})(?::?(\d{2})(?:\.(\d+))?)?)?(?:Z|(?:([-+])(\d{2})(?::?(\d{2}))?)?)?)?)?)?$/,handler:function(bits){var offset=0;var d=new Date(bits[1],0,1);if(bits[2])d.setMonth(bits[2]-1);if(bits[3])d.setDate(bits[3]);if(bits[4])d.setHours(bits[4]);if(bits[5])d.setMinutes(bits[5]);if(bits[6])d.setSeconds(bits[6]);if(bits[7])d.setMilliseconds(('0.'+bits[7]).toInt()*1000);if(bits[9]){offset=(bits[9].toInt()*60)+bits[10].toInt();offset*=((bits[8]=='-')?1:-1);}offset-=d.getTimezoneOffset();d.setTime((d*1)+(offset*60*1000).toInt());return d;}},{re:/^tod/i,handler:function(){return new Date();}},{re:/^tom/i,handler:function(){return new Date().increment();}},{re:/^yes/i,handler:function(){return new Date().decrement();}},{re:/^(\d{1,2})(st|nd|rd|th)?$/i,handler:function(bits){var d=new Date();d.setDate(bits[1].toInt());return d;}},{re:/^(\d{1,2})(?:st|nd|rd|th)? (\w+)$/i,handler:function(bits){var d=new Date();d.setMonth(Date.parseMonth(bits[2],true),bits[1].toInt());return d;}},{re:/^(\d{1,2})(?:st|nd|rd|th)? (\w+),? (\d{4})$/i,handler:function(bits){var d=new Date();d.setMonth(Date.parseMonth(bits[2],true),bits[1].toInt());d.setYear(bits[3]);return d;}},{re:/^(\w+) (\d{1,2})(?:st|nd|rd|th)?,? (\d{4})$/i,handler:function(bits){var d=new Date();d.setMonth(Date.parseMonth(bits[1],true),bits[2].toInt());d.setYear(bits[3]);return d;}},{re:/^next (\w+)$/i,handler:function(bits){var d=new Date();var day=d.getDay();var newDay=Date.parseDay(bits[1],true);var addDays=newDay-day;if(newDay<=day){addDays+=7;}d.setDate(d.getDate()+addDays);return d;}},{re:/^last (\w+)$/i,handler:function(bits){throw new Error('Not yet implemented');}}]);window.extend({isLoaded:window.loaded,getHost:function(url){url=$pick(url,window.location.href);var host=url;if(url.test('http://')){url=url.substring(url.indexOf('http://')+7,url.length);if(url.test(':'))url=url.substring(0,url.indexOf(":"));if(url.test('/'))return url.substring(0,url.indexOf('/'));return url;}return false;},getQueryStringValue:function(key,url){try{return window.getQueryStringValues(url)[key];}catch(e){return null;}},getQueryStringValues:function(url){var qs=$pick(url,$pick(window.location.search,'')).split('?')[1];if(qs)return qs.parseQuery();return{};},getPort:function(url){url=$pick(url,window.location.href);var re=new RegExp(':([0-9]{4})');var m=re.exec(url);if(m==null)return false;else{var port=false;m.each(function(val){if($chk(parseInt(val)))port=val;});}return port;},qs:{}});window.qs=window.getQueryStringValues();window.popup=new Class({options:{width:500,height:300,x:50,y:50,toolbar:0,location:0,directories:0,status:0,scrollbars:'auto',resizable:1,name:'popup',onBlock:Class.empty},initialize:function(url,options){this.url=url||false;this.setOptions(options);if(this.url)this.openWin();return this;},openWin:function(url){url=url||this.url;var options='toolbar='+this.options.toolbar+',location='+this.options.location+',directories='+this.options.directories+',status='+this.options.status+',scrollbars='+this.options.scrollbars+',resizable='+this.options.resizable+',width='+this.options.width+',height='+this.options.height+',top='+this.options.y+',left='+this.options.x;this.popupWindow=window.open(url,this.options.name,options);this.focus.delay(100,this);return this.popupWindow;},focus:function(){if(this.popupWindow)this.popupWindow.focus();else if(this.focusTries<10)this.focus.delay(100,this);else{this.blocked=true;this.fireEvent('onBlock');}return this;},focusTries:0,blocked:null,close:function(){this.popupWindow.close();}});window.popup.implement(new Options);window.popup.implement(new Events);var legacyPopup=window.popup.extend({setOptions:function(){this.parent();this.options=Object.extend({width:516,height:350},this.options);}});function openPop(url){return new legacyPopup(url);}var GetValue=window.getQueryStringValue;Element.extend({isVisible:function(){return this.getStyle('display')!='none';},toggle:function(){return this[this.isVisible()?'hide':'show']();},hide:function(){this.originalDisplay=this.getStyle('display');this.setStyle('display','none');return this;},show:function(display){this.originalDisplay=(this.originalDisplay=="none")?'block':this.originalDisplay;this.setStyle('display',(display||this.originalDisplay||'block'));return this;},tidy:function(){try{if(this.getValue().tidy())this.value=this.getValue().tidy();}catch(e){dbug.log('element.tidy error: %o',e);}},findParent:function(collection){return $$(collection).filter(function(el){return el.hasChild(this);},this)[0];},fxOpacityOk:function(){if(!window.ie6)return true;var isColor=false;try{if(new Color(this.getStyle('backgroundColor')))isColor=true;}catch(e){}return isColor;}});Element.visible=Element.isVisible;if(!Element.empty){Element.extend({empty:function(){return this.setHTML('');}});}var $S=$$;Element.extend({getDimensions:function(options){options=$merge({computeSize:false},options);var dim={};function getSize(el,options){if(options.computeSize)dim=el.getComputedSize(options);else{dim.width=el.getSize().size.x;dim.height=el.getSize().size.y;}return dim;}try{dim=getSize(this,options);}catch(e){}if(this.getStyle('display')=='none'){var before={};['visibility','display','position'].each(function(style){before[style]=this.style[style]||'';},this);this.setStyles({visibility:'hidden',display:'block',position:'absolute'});dim=getSize(this,options);this.setStyles(before);}return $merge(dim,{x:dim.width,y:dim.height});},getComputedSize:function(options){options=$merge({styles:['padding','border'],plains:{height:['top','bottom'],width:['left','right']},mode:'both'},options);var size={width:0,height:0};switch(options.mode){case'vertical':delete size.width;delete options.plains.width;break;case'horizontal':delete size.height;delete options.plains.height;break;}var getStyles=[];$each(options.plains,function(plain,key){plain.each(function(edge){options.styles.each(function(style){getStyles.push((style=="border")?style+'-'+edge+'-'+'width':style+'-'+edge);});});});var styles=this.getStyles.apply(this,getStyles);var subtracted=[];$each(options.plains,function(plain,key){size['total'+key.capitalize()]=0;size['computed'+key.capitalize()]=0;plain.each(function(edge){size['computed'+edge.capitalize()]=0;getStyles.each(function(style,i){if(style.test(edge)){styles[style]=styles[style].toInt();if(isNaN(styles[style]))styles[style]=0;size['total'+key.capitalize()]=size['total'+key.capitalize()]+styles[style];size['computed'+edge.capitalize()]=size['computed'+edge.capitalize()]+styles[style];}if(style.test(edge)&&key!=style&&(style.test('border')||style.test('padding'))&&!subtracted.test(style)){subtracted.push(style);size['computed'+key.capitalize()]=size['computed'+key.capitalize()]-styles[style];}});});});if($chk(size.width)){size.width=size.width+this.offsetWidth+size.computedWidth;size.totalWidth=size.width+size.totalWidth;delete size.computedWidth;}if($chk(size.height)){size.height=size.height+this.offsetHeight+size.computedHeight;size.totalHeight=size.height+size.totalHeight;delete size.computedHeight;}return $merge(styles,size);}});Element.extend({getTextInRange:function(start,end){return this.getValue().substring(start,end);},getSelectedText:function(){if(window.ie)return document.selection.createRange().text;return this.getValue().substring(this.getSelectionStart(),this.getSelectionEnd());},getSelectionStart:function(){if(window.ie){this.focus();var range=document.selection.createRange();if(range.compareEndPoints("StartToEnd",range)!=0)range.collapse(true);return range.getBookmark().charCodeAt(2)-2;}return this.selectionStart;},getSelectionEnd:function(){if(window.ie){var range=document.selection.createRange();if(range.compareEndPoints("StartToEnd",range)!=0)range.collapse(false);return range.getBookmark().charCodeAt(2)-2;}return this.selectionEnd;},getSelectedRange:function(){return{start:this.getSelectionStart(),end:this.getSelectionEnd()}},setCaretPosition:function(pos){if(pos=='end')pos=this.getValue().length;this.selectRange(pos,pos);return this;},getCaretPosition:function(){return this.getSelectedRange().start;},selectRange:function(start,end){this.focus();if(window.ie){var range=this.createTextRange();range.collapse(true);range.moveStart('character',start);range.moveEnd('character',end-start);range.select();return this;}this.setSelectionRange(start,end);return this;},insertAtCursor:function(value,select){var start=this.getSelectionStart();var end=this.getSelectionEnd();this.value=this.getValue().substring(0,start)+value+this.getValue().substring(end,this.getValue().length);if($pick(select,true))this.selectRange(start,start+value.length);else this.setCaretPosition(start+value.length);return this;},insertAroundCursor:function(options,select){options=$merge({before:'',defaultMiddle:'SOMETHING HERE',after:''},options);value=this.getSelectedText()||options.defaultMiddle;var start=this.getSelectionStart();var end=this.getSelectionEnd();if(start==end){var text=this.getValue();this.value=text.substring(0,start)+options.before+value+options.after+text.substring(end,text.length);this.selectRange(start+options.before.length,end+options.before.length+value.length);text=null;}else{text=this.getValue().substring(start,end);this.value=this.getValue().substring(0,start)+options.before+text+options.after+this.getValue().substring(end,this.getValue().length);var selStart=start+options.before.length;if($pick(select,true))this.selectRange(selStart,selStart+text.length);else this.setCaretPosition(selStart+text.length);}return this;}});window.extend({supportsPositionFixed:function(){if(!window.loaded)return null;var test=new Element('div').setStyles({position:'fixed',top:'0px',right:'0px'}).injectInside(document.body);var supported=(test.offsetTop===0);test.remove();return supported;}});Element.extend({pin:function(enable){var p=this.getPosition();if(enable!==false){if(!this.pinned){var pos={top:(p.y-window.getScrollTop())+'px',left:(p.x-window.getScrollLeft())+'px'};if(window.supportsPositionFixed()){this.setStyle('position','fixed').setStyles(pos);}else{this.setStyles({position:'absolute',top:p.y+'px',left:p.x+'px'});window.addEvent('scroll',function(){if(this.pinned){var to={top:(pos.top.toInt()+window.getScrollTop())+'px',left:(pos.left.toInt()+window.getScrollLeft())+'px'};this.setStyles(to);}}.bind(this));}this.pinned=true;}}else{this.pinned=false;var reposition=(window.supportsPositionFixed())?{top:(p.y+window.getScrollTop())+'px',left:(p.x+window.getScrollLeft())+'px'}:{top:(p.y)+'px',left:(p.x)+'px'};this.setStyles($merge(reposition,{position:'absolute'}));}return this;},unpin:function(){return this.pin(false);},togglepin:function(){this.pin(!this.pinned);}});Element.extend({setPosition:function(options){options=$merge({relativeTo:document.body,position:{x:'center',y:'center'},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,overflown:[]},options);var parentOffset={x:0,y:0};var parentPositioned=false;if(this.getParent()!=document.body){var parent=this.getParent();while(parent!=document.body&&parent.getStyle('position')=="static"){parent=parent.getParent();}if(parent!=document.body){parentOffset=parent.getPosition();parentPositioned=true;}options.offset.x=options.offset.x-parentOffset.x;options.offset.y=options.offset.y-parentOffset.y;}function fixValue(option){if($type(option)!="string")return option;option=option.toLowerCase();var val={};if(option.test('left'))val.x='left';else if(option.test('right'))val.x='right';else val.x='center';if(option.test('upper')||option.test('top'))val.y='top';else if(option.test('bottom'))val.y='bottom';else val.y='center';return val;};options.edge=fixValue(options.edge);options.position=fixValue(options.position);if(!options.edge){if(options.position.x=='center'&&options.position.y=='center')options.edge={x:'center',y:'center'};else options.edge={x:'left',y:'top'};}this.setStyle('position','absolute');var rel=$(options.relativeTo)||document.body;if(window.opera){var top=(rel==document.body)?window.getScrollTop():rel.getTop();var left=(rel==document.body)?window.getScrollLeft():rel.getLeft();}else{var top=(rel==document.body)?window.getScrollTop():rel.getTop(options.overflown);var left=(rel==document.body)?window.getScrollLeft():rel.getLeft(options.overflown);}if(top<0)top=0;if(left<0)left=0;var dim=this.getDimensions({computeSize:true,styles:['padding','border','margin']});if(options.ignoreMargins){options.offset.x+=((options.edge&&options.edge.x=="right")?dim['margin-right']:-dim['margin-left']);options.offset.y+=((options.edge&&options.edge.y=="bottom")?dim['margin-bottom']:-dim['margin-top']);}var pos={};var prefY=options.offset.y.toInt();var prefX=options.offset.x.toInt();switch(options.position.x){case'left':pos.x=left+prefX;break;case'right':pos.x=left+prefX+rel.offsetWidth;break;default:pos.x=left+(((rel==document.body)?window.getWidth():rel.offsetWidth)/2)+prefX;break;};switch(options.position.y){case'top':pos.y=top+prefY;break;case'bottom':pos.y=top+prefY+rel.offsetHeight;break;default:pos.y=top+(((rel==document.body)?window.getHeight():rel.offsetHeight)/2)+prefY;break;};if(options.edge){var edgeOffset={};switch(options.edge.x){case'left':edgeOffset.x=0;break;case'right':edgeOffset.x=-dim.x-dim.computedRight-dim.computedLeft;break;default:edgeOffset.x=-(dim.x/2);break;};switch(options.edge.y){case'top':edgeOffset.y=0;break;case'bottom':edgeOffset.y=-dim.y-dim.computedTop-dim.computedBottom;break;default:edgeOffset.y=-(dim.y/2);break;};pos.x=pos.x+edgeOffset.x;pos.y=pos.y+edgeOffset.y;}pos={left:((pos.x>=0||parentPositioned)?pos.x:0).toInt()+'px',top:((pos.y>=0||parentPositioned)?pos.y:0).toInt()+'px'};if(rel.getStyle('position')=="fixed"||options.relFixedPosition){pos.top=pos.top.toInt()+window.getScrollTop()+'px';pos.left=pos.left.toInt()+window.getScrollLeft()+'px';}if(options.returnPos)return pos;if(options.smoothMove)new Fx.SmoothMove(this,options).start();else this.setStyles(pos);return this;}});Fx.Marquee=Fx.Styles.extend({options:{mode:'horizontal',message:'',revert:true,delay:5000,cssClass:'msg',showEffect:{opacity:1},hideEffect:{opacity:0},revertEffect:{opacity:[0,1]},currentMessage:null,onRevert:Class.empty,onMessage:Class.empty},initialize:function(container,options){container=$(container);var msg=this.options.currentMessage||(container.getChildren().length==1)?container.getFirst():'';var wrapper=new Element('div',{styles:{position:'relative'},'class':'fxMarqueeWrapper'}).injectInside(container);this.parent(wrapper,options);this.current=this.wrapMessage(msg);},wrapMessage:function(msg){if($(msg)&&$(msg).hasClass('fxMarquee')){var wrapper=$(msg);}else{var wrapper=new Element('span',{'class':'fxMarquee',styles:{position:'relative'}});if($(msg))wrapper.adopt($(msg));else if($type(msg)=="string")wrapper.setHTML(msg);}return wrapper.injectInside(this.element);},announce:function(options){this.setOptions(options).showMessage();return this;},showMessage:function(reverting){(function(){var chain=this.chains?this.chains.copy():[];this.clearChain();this.element=$(this.element);this.current=$(this.current);this.message=$(this.message);this.start(this.options.hideEffect).chain(function(){if(reverting){this.message.hide();if(this.current)this.current.show();}else{if(this.message)this.message.remove();this.message=this.wrapMessage(this.options.message);if(this.current)this.current.hide();}this.start((reverting)?this.options.revertEffect:this.options.showEffect).chain(function(){this.chains.merge(chain);this.fireEvent((reverting)?'onRevert':'onMessage');if(!reverting&&this.options.revert)this.showMessage(true);else this.callChain.delay(this.options.delay,this);}.bind(this));}.bind(this));}).delay((reverting)?this.options.delay:10,this);return this;}});Fx.SmoothShow=Fx.Styles.extend({options:{styles:['padding','border','margin'],transitionOpacity:true,mode:'vertical',heightOverride:null,widthOverride:null},fixStyle:function(style,name){if(!$type(style)=="number")return style;var fix=['margin','padding','width','height'].some(function(st){return name.test(st,'i')});return(fix)?style+'px':style;},hide:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle('display')!='none'){this.hiding=true;this.showing=false;this.hidden=true;var startStyles=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});if(this.element.fxOpacityOk()&&this.options.transitionOpacity)startStyles.opacity=1;var zero={};$each(startStyles,function(style,name){zero[name]=this.fixStyle(0,name);},this);this.chain(function(){if(this.hidden){this.hiding=false;$each(startStyles,function(style,name){startStyles[name]=this.fixStyle(style,name);},this);this.element.setStyles(startStyles).setStyle('display','none');}this.callChain();}.bind(this));this.start(zero);}else{this.callChain.delay(10,this);this.fireEvent('onComplete',this.element);}}}catch(e){this.element.hide();this.callChain.delay(10,this);this.fireEvent('onComplete',this.element);}return this;},show:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle('display')=="none"||this.element.getStyle('visiblity')=="hidden"||this.element.getStyle('opacity')==0){this.showing=true;this.hiding=false;this.hidden=false;var before=this.element.getStyles('visibility','display','position');this.element.setStyles({visibility:'hidden',display:'block',position:'absolute'});if(this.element.fxOpacityOk()&&this.options.transitionOpacity)this.element.setStyle('opacity',0);var startStyles=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});this.element.setStyles(before);$each(startStyles,function(style,name){startStyles[name]=this.fixStyle(style,name);},this);if($chk(this.options.heightOverride))startStyles['height']=this.options.heightOverride.toInt()+'px';if($chk(this.options.widthOverride))startStyles['width']=this.options.widthOverride.toInt()+'px';if(this.element.fxOpacityOk()&&this.options.transitionOpacity)startStyles.opacity=1;var zero={height:'0px',display:'block'};$each(startStyles,function(style,name){zero[name]=this.fixStyle(0,name);},this);this.element.setStyles(zero);this.start(startStyles);this.chain(function(){if(!this.hidden)this.showing=false;this.callChain();}.bind(this));}else{this.callChain();this.fireEvent('onComplete',this.element);}}}catch(e){this.element.setStyles({display:'block',visiblity:'visible',opacity:1});this.callChain.delay(10,this);this.fireEvent('onComplete',this.element);}return this;},toggle:function(){try{if(this.element.getStyle('display')=="none"||this.element.getStyle('visiblity')=="hidden"||this.element.getStyle('opacity')==0){this.show();}else{this.hide();}}catch(e){this.show();}return this;}});Fx.SmoothShow.implement(new Options);Fx.SmoothShow.implement(new Events);Element.extend({smoothShow:function(options){if(arguments[1]){options.heightOverride=arguments[1];}return new Fx.SmoothShow(this,options).show();},smoothHide:function(options){if(arguments[1]){options.heightOverride=arguments[1];}return new Fx.SmoothShow(this,options).hide();}});Fx.SmoothMove=Fx.Styles.extend({options:{relativeTo:document.body,position:'center',edge:false,offset:{x:0,y:0}},start:function(destination){return this.parent(this.element.setPosition($merge(this.options,destination,{returnPos:true})));}});Element.extend({smoothMove:function(options){return new Fx.SmoothMove(this,options).start();}});Fx.Sort=Fx.Elements.extend({options:{mode:'vertical'},initialize:function(elements,options){this.parent(elements,options);this.elements.each(function(el){if(el.getStyle('position')=='static')el.setStyle('position','relative');});this.setDefaultOrder();},setDefaultOrder:function(){this.currentOrder=this.elements.map(function(el,index){return index;});},sort:function(newOrder){if($type(newOrder)!='array')return false;var top=0;var left=0;var zero={};var vert=this.options.mode=="vertical";var current=this.elements.map(function(el,index){var size=el.getComputedSize({styles:['border','padding','margin']});var val;if(vert){val={top:top,margin:size['margin-top'],height:size.totalHeight};top+=val.height-size['margin-top'];}else{val={left:left,margin:size['margin-left'],width:size.totalWidth};left+=val.width;}var plain=vert?'top':'left';zero[index]={};var start=el.getStyle(plain).toInt();zero[index][plain]=($chk(start))?start:0;return val;},this);this.set(zero);newOrder=newOrder.map(function(i){return i.toInt()});if(newOrder.length!=this.elements.length){this.currentOrder.each(function(index){if(!newOrder.contains(index))newOrder.push(index);});if(newOrder.length>this.elements.length){newOrder.splice(this.elements.length-1,newOrder.length-this.elements.length);}}var top=0;var left=0;var margin=0;var next={};newOrder.each(function(item,index){var newPos={};if(vert){newPos.top=top-current[item].top-margin;top+=current[item].height;}else{newPos.left=left-current[item].left;left+=current[item].width;}margin=margin+current[item].margin;next[item]=newPos;},this);var mapped={};newOrder.copy().sort().each(function(index){mapped[index]=next[index];});this.start(mapped);this.currentOrder=newOrder;return this;},rearrangeDOM:function(newOrder){newOrder=newOrder||this.currentOrder;var parent=this.elements[0].getParent();var rearranged=[];this.elements.setStyle('opacity',0);newOrder.each(function(index){rearranged.push(this.elements[index].injectInside(parent).setStyles({top:0,left:0}));},this);this.elements.setStyle('opacity',1);this.elements=$$(rearranged);this.setDefaultOrder();return this;},getDefaultOrder:function(){return this.elements.map(function(el,index){return index;})},forward:function(){return this.sort(this.getDefaultOrder());},backward:function(){return this.sort(this.getDefaultOrder().reverse());},reverse:function(){return this.sort(this.currentOrder.reverse());},sortByElements:function(elements){return this.sort(elements.map(function(el){return this.elements.indexOf(el);}));},swap:function(one,two){if($type(one)=='element'){one=this.elements.indexOf(one);two=this.elements.indexOf(two);}var indexOne=this.currentOrder.indexOf(one);var indexTwo=this.currentOrder.indexOf(two);var newOrder=this.currentOrder.copy();newOrder[indexOne]=two;newOrder[indexTwo]=one;this.sort(newOrder);}});