2009-11-25 10:03:04 +00:00
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.
2008-09-27 19:55:56 +00:00
2009-11-25 10:03:04 +00:00
MooTools . More = { version : "1.2.4.2" , build : "bd5a93c0913cce25917c48cbdacde568e15e02ef" } ; Class . refactor = function ( b , a ) { $each ( a , function ( e , d ) { var c = b . prototype [ d ] ;
if ( c && ( c = c . _origin ) && typeof e == "function" ) { b . implement ( d , function ( ) { var f = this . previous ; this . previous = c ; var g = e . apply ( this , arguments ) ; this . previous = f ; return g ;
} ) ; } else { b . implement ( d , e ) ; } } ) ; return b ; } ; Class . Mutators . Binds = function ( a ) { return a ; } ; Class . Mutators . initialize = function ( a ) { return function ( ) { $splat ( this . Binds ) . each ( function ( b ) { var c = this [ b ] ;
if ( c ) { this [ b ] = c . bind ( this ) ; } } , this ) ; return a . apply ( this , arguments ) ; } ; } ; Class . Occlude = new Class ( { occlude : function ( c , b ) { b = document . id ( b || this . element ) ; var a = b . retrieve ( c || this . property ) ;
if ( a && ! $defined ( this . occluded ) ) { return this . occluded = a ; } this . occluded = false ; b . store ( c || this . property , this ) ; return this . occluded ; } } ) ; ( function ( ) { var a = { wait : function ( b ) { return this . chain ( function ( ) { this . callChain . delay ( $pick ( b , 500 ) , this ) ;
} . bind ( this ) ) ; } } ; Chain . implement ( a ) ; if ( window . Fx ) { Fx . implement ( a ) ; [ "Css" , "Tween" , "Elements" ] . each ( function ( b ) { if ( Fx [ b ] ) { Fx [ b ] . implement ( a ) ; } } ) ; } Element . implement ( { chains : function ( b ) { $splat ( $pick ( b , [ "tween" , "morph" , "reveal" ] ) ) . each ( function ( c ) { c = this . get ( c ) ;
if ( ! c ) { return ; } c . setOptions ( { link : "chain" } ) ; } , this ) ; return this ; } , pauseFx : function ( c , b ) { this . chains ( b ) . get ( $pick ( b , "tween" ) ) . wait ( c ) ; return this ; } } ) ; } ) ( ) ;
String . implement ( { parseQueryString : function ( ) { var b = this . split ( /[&;]/ ) , a = { } ; if ( b . length ) { b . each ( function ( g ) { var c = g . indexOf ( "=" ) , d = c < 0 ? [ "" ] : g . substr ( 0 , c ) . match ( /[^\]\[]+/g ) , e = decodeURIComponent ( g . substr ( c + 1 ) ) , f = a ;
d . each ( function ( j , h ) { var k = f [ j ] ; if ( h < d . length - 1 ) { f = f [ j ] = k || { } ; } else { if ( $type ( k ) == "array" ) { k . push ( e ) ; } else { f [ j ] = $defined ( k ) ? [ k , e ] : e ; } } } ) ; } ) ; } return a ; } , cleanQueryString : function ( a ) { return this . split ( "&" ) . filter ( function ( e ) { var b = e . indexOf ( "=" ) , c = b < 0 ? "" : e . substr ( 0 , b ) , d = e . substr ( b + 1 ) ;
return a ? a . run ( [ c , d ] ) : $chk ( d ) ; } ) . join ( "&" ) ; } } ) ; var URI = new Class ( { Implements : Options , options : { } , regex : /^(?:(\w+):)?(?:\/\/(?:(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/ , parts : [ "scheme" , "user" , "password" , "host" , "port" , "directory" , "file" , "query" , "fragment" ] , schemes : { http : 80 , https : 443 , ftp : 21 , rtsp : 554 , mms : 1755 , file : 0 } , initialize : function ( b , a ) { this . setOptions ( a ) ;
var c = this . options . base || URI . base ; if ( ! b ) { b = c ; } if ( b && b . parsed ) { this . parsed = $unlink ( b . parsed ) ; } else { this . set ( "value" , b . href || b . toString ( ) , c ? new URI ( c ) : false ) ;
} } , parse : function ( c , b ) { var a = c . match ( this . regex ) ; if ( ! a ) { return false ; } a . shift ( ) ; return this . merge ( a . associate ( this . parts ) , b ) ; } , merge : function ( b , a ) { if ( ( ! b || ! b . scheme ) && ( ! a || ! a . scheme ) ) { return false ;
} if ( a ) { this . parts . every ( function ( c ) { if ( b [ c ] ) { return false ; } b [ c ] = a [ c ] || "" ; return true ; } ) ; } b . port = b . port || this . schemes [ b . scheme . toLowerCase ( ) ] ; b . directory = b . directory ? this . parseDirectory ( b . directory , a ? a . directory : "" ) : "/" ;
return b ; } , parseDirectory : function ( b , c ) { b = ( b . substr ( 0 , 1 ) == "/" ? "" : ( c || "/" ) ) + b ; if ( ! b . test ( URI . regs . directoryDot ) ) { return b ; } var a = [ ] ; b . replace ( URI . regs . endSlash , "" ) . split ( "/" ) . each ( function ( d ) { if ( d == ".." && a . length > 0 ) { a . pop ( ) ;
} else { if ( d != "." ) { a . push ( d ) ; } } } ) ; return a . join ( "/" ) + "/" ; } , combine : function ( a ) { return a . value || a . scheme + "://" + ( a . user ? a . user + ( a . password ? ":" + a . password : "" ) + "@" : "" ) + ( a . host || "" ) + ( a . port && a . port != this . schemes [ a . scheme ] ? ":" + a . port : "" ) + ( a . directory || "/" ) + ( a . file || "" ) + ( a . query ? "?" + a . query : "" ) + ( a . fragment ? "#" + a . fragment : "" ) ;
} , set : function ( b , d , c ) { if ( b == "value" ) { var a = d . match ( URI . regs . scheme ) ; if ( a ) { a = a [ 1 ] ; } if ( a && ! $defined ( this . schemes [ a . toLowerCase ( ) ] ) ) { this . parsed = { scheme : a , value : d } ;
} else { this . parsed = this . parse ( d , ( c || this ) . parsed ) || ( a ? { scheme : a , value : d } : { value : d } ) ; } } else { if ( b == "data" ) { this . setData ( d ) ; } else { this . parsed [ b ] = d ; } } return this ;
} , get : function ( a , b ) { switch ( a ) { case "value" : return this . combine ( this . parsed , b ? b . parsed : false ) ; case "data" : return this . getData ( ) ; } return this . parsed [ a ] || "" ;
} , go : function ( ) { document . location . href = this . toString ( ) ; } , toURI : function ( ) { return this ; } , getData : function ( c , b ) { var a = this . get ( b || "query" ) ; if ( ! $chk ( a ) ) { return c ? null : { } ;
} var d = a . parseQueryString ( ) ; return c ? d [ c ] : d ; } , setData : function ( a , c , b ) { if ( typeof a == "string" ) { a = this . getData ( ) ; a [ arguments [ 0 ] ] = arguments [ 1 ] ; } else { if ( c ) { a = $merge ( this . getData ( ) , a ) ;
} } return this . set ( b || "query" , Hash . toQueryString ( a ) ) ; } , clearData : function ( a ) { return this . set ( a || "query" , "" ) ; } } ) ; URI . prototype . toString = URI . prototype . valueOf = function ( ) { return this . get ( "value" ) ;
} ; URI . regs = { endSlash : /\/$/ , scheme : /^(\w+):/ , directoryDot : /\.\/|\.$/ } ; URI . base = new URI ( document . getElements ( "base[href]" , true ) . getLast ( ) , { base : document . location } ) ;
String . implement ( { toURI : function ( a ) { return new URI ( this , a ) ; } } ) ; Element . implement ( { measure : function ( e ) { var g = function ( h ) { return ! ! ( ! h || h . offsetHeight || h . offsetWidth ) ;
} ; if ( g ( this ) ) { return e . apply ( this ) ; } var d = this . getParent ( ) , f = [ ] , b = [ ] ; while ( ! g ( d ) && d != document . body ) { b . push ( d . expose ( ) ) ; d = d . getParent ( ) ; } var c = this . expose ( ) ;
var a = e . apply ( this ) ; c ( ) ; b . each ( function ( h ) { h ( ) ; } ) ; return a ; } , expose : function ( ) { if ( this . getStyle ( "display" ) != "none" ) { return $empty ; } var a = this . style . cssText ;
this . setStyles ( { display : "block" , position : "absolute" , visibility : "hidden" } ) ; return function ( ) { this . style . cssText = a ; } . bind ( this ) ; } , getDimensions : function ( a ) { a = $merge ( { computeSize : false } , a ) ;
var f = { } ; var d = function ( g , e ) { return ( e . computeSize ) ? g . getComputedSize ( e ) : g . getSize ( ) ; } ; var b = this . getParent ( "body" ) ; if ( b && this . getStyle ( "display" ) == "none" ) { f = this . measure ( function ( ) { return d ( this , a ) ;
} ) ; } else { if ( b ) { try { f = d ( this , a ) ; } catch ( c ) { } } else { f = { x : 0 , y : 0 } ; } } return $chk ( f . x ) ? $extend ( f , { width : f . x , height : f . y } ) : $extend ( f , { x : f . width , y : f . height } ) ; } , getComputedSize : function ( a ) { a = $merge ( { styles : [ "padding" , "border" ] , plains : { height : [ "top" , "bottom" ] , width : [ "left" , "right" ] } , mode : "both" } , a ) ;
var c = { width : 0 , height : 0 } ; switch ( a . mode ) { case "vertical" : delete c . width ; delete a . plains . width ; break ; case "horizontal" : delete c . height ; delete a . plains . height ;
break ; } var b = [ ] ; $each ( a . plains , function ( g , f ) { g . each ( function ( h ) { a . styles . each ( function ( i ) { b . push ( ( i == "border" ) ? i + "-" + h + "-width" : i + "-" + h ) ; } ) ; } ) ; } ) ; var e = { } ;
b . each ( function ( f ) { e [ f ] = this . getComputedStyle ( f ) ; } , this ) ; var d = [ ] ; $each ( a . plains , function ( g , f ) { var h = f . capitalize ( ) ; c [ "total" + h ] = c [ "computed" + h ] = 0 ; g . each ( function ( i ) { c [ "computed" + i . capitalize ( ) ] = 0 ;
b . each ( function ( k , j ) { if ( k . test ( i ) ) { e [ k ] = e [ k ] . toInt ( ) || 0 ; c [ "total" + h ] = c [ "total" + h ] + e [ k ] ; c [ "computed" + i . capitalize ( ) ] = c [ "computed" + i . capitalize ( ) ] + e [ k ] ; } if ( k . test ( i ) && f != k && ( k . test ( "border" ) || k . test ( "padding" ) ) && ! d . contains ( k ) ) { d . push ( k ) ;
c [ "computed" + h ] = c [ "computed" + h ] - e [ k ] ; } } ) ; } ) ; } ) ; [ "Width" , "Height" ] . each ( function ( g ) { var f = g . toLowerCase ( ) ; if ( ! $chk ( c [ f ] ) ) { return ; } c [ f ] = c [ f ] + this [ "offset" + g ] + c [ "computed" + g ] ;
c [ "total" + g ] = c [ f ] + c [ "total" + g ] ; delete c [ "computed" + g ] ; } , this ) ; return $extend ( e , c ) ; } } ) ; ( function ( ) { var a = Element . prototype . position ; Element . implement ( { position : function ( h ) { if ( h && ( $defined ( h . x ) || $defined ( h . y ) ) ) { return a ? a . apply ( this , arguments ) : this ;
} $each ( h || { } , function ( w , u ) { if ( ! $defined ( w ) ) { delete h [ u ] ; } } ) ; h = $merge ( { relativeTo : document . body , position : { x : "center" , y : "center" } , edge : false , offset : { x : 0 , y : 0 } , returnPos : false , relFixedPosition : false , ignoreMargins : false , ignoreScroll : false , allowNegative : false } , h ) ;
var s = { x : 0 , y : 0 } , f = false ; var c = this . measure ( function ( ) { return document . id ( this . getOffsetParent ( ) ) ; } ) ; if ( c && c != this . getDocument ( ) . body ) { s = c . measure ( function ( ) { return this . getPosition ( ) ;
} ) ; f = c != document . id ( h . relativeTo ) ; h . offset . x = h . offset . x - s . x ; h . offset . y = h . offset . y - s . y ; } var t = function ( u ) { if ( $type ( u ) != "string" ) { return u ; } u = u . toLowerCase ( ) ;
var v = { } ; if ( u . test ( "left" ) ) { v . x = "left" ; } else { if ( u . test ( "right" ) ) { v . x = "right" ; } else { v . x = "center" ; } } if ( u . test ( "upper" ) || u . test ( "top" ) ) { v . y = "top" ; } else { if ( u . test ( "bottom" ) ) { v . y = "bottom" ;
} else { v . y = "center" ; } } return v ; } ; h . edge = t ( h . edge ) ; h . position = t ( h . position ) ; if ( ! h . edge ) { if ( h . position . x == "center" && h . position . y == "center" ) { h . edge = { x : "center" , y : "center" } ;
} else { h . edge = { x : "left" , y : "top" } ; } } this . setStyle ( "position" , "absolute" ) ; var g = document . id ( h . relativeTo ) || document . body , d = g == document . body ? window . getScroll ( ) : g . getPosition ( ) , n = d . y , i = d . x ;
var e = g . getScrolls ( ) ; n += e . y ; i += e . x ; var o = this . getDimensions ( { computeSize : true , styles : [ "padding" , "border" , "margin" ] } ) ; var k = { } , p = h . offset . y , r = h . offset . x , l = window . getSize ( ) ;
switch ( h . position . x ) { case "left" : k . x = i + r ; break ; case "right" : k . x = i + r + g . offsetWidth ; break ; default : k . x = i + ( ( g == document . body ? l . x : g . offsetWidth ) / 2 ) + r ; break ; } switch ( h . position . y ) { case "top" : k . y = n + p ;
break ; case "bottom" : k . y = n + p + g . offsetHeight ; break ; default : k . y = n + ( ( g == document . body ? l . y : g . offsetHeight ) / 2 ) + p ; break ; } if ( h . edge ) { var b = { } ; switch ( h . edge . x ) { case "left" : b . x = 0 ;
break ; case "right" : b . x = - o . x - o . computedRight - o . computedLeft ; break ; default : b . x = - ( o . totalWidth / 2 ) ; break ; } switch ( h . edge . y ) { case "top" : b . y = 0 ; break ; case "bottom" : b . y = - o . y - o . computedTop - o . computedBottom ;
break ; default : b . y = - ( o . totalHeight / 2 ) ; break ; } k . x += b . x ; k . y += b . y ; } k = { left : ( ( k . x >= 0 || f || h . allowNegative ) ? k . x : 0 ) . toInt ( ) , top : ( ( k . y >= 0 || f || h . allowNegative ) ? k . y : 0 ) . toInt ( ) } ;
var j = { left : "x" , top : "y" } ; [ "minimum" , "maximum" ] . each ( function ( u ) { [ "left" , "top" ] . each ( function ( v ) { var w = h [ u ] ? h [ u ] [ j [ v ] ] : null ; if ( w != null && k [ v ] < w ) { k [ v ] = w ; } } ) ;
} ) ; if ( g . getStyle ( "position" ) == "fixed" || h . relFixedPosition ) { var m = window . getScroll ( ) ; k . top += m . y ; k . left += m . x ; } if ( h . ignoreScroll ) { var q = g . getScroll ( ) ; k . top -= q . y ;
k . left -= q . x ; } if ( h . ignoreMargins ) { k . left += ( h . edge . x == "right" ? o [ "margin-right" ] : h . edge . x == "center" ? - o [ "margin-left" ] + ( ( o [ "margin-right" ] + o [ "margin-left" ] ) / 2 ) : - o [ "margin-left" ] ) ;
k . top += ( h . edge . y == "bottom" ? o [ "margin-bottom" ] : h . edge . y == "center" ? - o [ "margin-top" ] + ( ( o [ "margin-bottom" ] + o [ "margin-top" ] ) / 2 ) : - o [ "margin-top" ] ) ; } k . left = Math . ceil ( k . left ) ;
k . top = Math . ceil ( k . top ) ; if ( h . returnPos ) { return k ; } else { this . setStyles ( k ) ; } return this ; } } ) ; } ) ( ) ; if ( ! window . Form ) { window . Form = { } ; } ( function ( ) { Form . Request = new Class ( { Binds : [ "onSubmit" , "onFormValidate" ] , Implements : [ Options , Events , Class . Occlude ] , options : { requestOptions : { evalScripts : true , useSpinner : true , emulation : false , link : "ignore" } , extraData : { } , resetForm : true } , property : "form.request" , initialize : function ( b , c , a ) { this . element = document . id ( b ) ;
if ( this . occlude ( ) ) { return this . occluded ; } this . update = document . id ( c ) ; this . setOptions ( a ) ; this . makeRequest ( ) ; if ( this . options . resetForm ) { this . request . addEvent ( "success" , function ( ) { $try ( function ( ) { this . element . reset ( ) ;
} . bind ( this ) ) ; if ( window . OverText ) { OverText . update ( ) ; } } . bind ( this ) ) ; } this . attach ( ) ; } , toElement : function ( ) { return this . element ; } , makeRequest : function ( ) { this . request = new Request . HTML ( $merge ( { url : this . element . get ( "action" ) , update : this . update , emulation : false , spinnerTarget : this . element , method : this . element . get ( "method" ) || "post" } , this . options . requestOptions ) ) . addEvents ( { success : function ( b , a ) { [ "success" , "complete" ] . each ( function ( c ) { this . fireEvent ( c , [ this . update , b , a ] ) ;
} , this ) ; } . bind ( this ) , failure : function ( a ) { this . fireEvent ( "failure" , a ) ; } . bind ( this ) , exception : function ( ) { this . fireEvent ( "failure" , xhr ) ; } . bind ( this ) } ) ; } , attach : function ( a ) { a = $pick ( a , true ) ;
method = a ? "addEvent" : "removeEvent" ; var b = this . element . retrieve ( "validator" ) ; if ( b ) { b [ method ] ( "onFormValidate" , this . onFormValidate ) ; } if ( ! b || ! a ) { this . element [ method ] ( "submit" , this . onSubmit ) ;
} } , detach : function ( ) { this . attach ( false ) ; } , enable : function ( ) { this . attach ( ) ; } , disable : function ( ) { this . detach ( ) ; } , onFormValidate : function ( b , a , c ) { if ( b || ! fv . options . stopOnFailure ) { if ( c && c . stop ) { c . stop ( ) ;
} this . send ( ) ; } } , onSubmit : function ( a ) { if ( this . element . retrieve ( "validator" ) ) { this . detach ( ) ; this . addFormEvent ( ) ; return ; } a . stop ( ) ; this . send ( ) ; } , send : function ( ) { var b = this . element . toQueryString ( ) . trim ( ) ;
var a = $H ( this . options . extraData ) . toQueryString ( ) ; if ( b ) { b += "&" + a ; } else { b = a ; } this . fireEvent ( "send" , [ this . element , b ] ) ; this . request . send ( { data : b } ) ; return this ;
} } ) ; Element . Properties . formRequest = { set : function ( ) { var a = Array . link ( arguments , { options : Object . type , update : Element . type , updateId : String . type } ) ; var c = a . update || a . updateId ;
var b = this . retrieve ( "form.request" ) ; if ( c ) { if ( b ) { b . update = document . id ( c ) ; } this . store ( "form.request:update" , c ) ; } if ( a . options ) { if ( b ) { b . setOptions ( a . options ) ;
} this . store ( "form.request:options" , a . options ) ; } return this ; } , get : function ( ) { var a = Array . link ( arguments , { options : Object . type , update : Element . type , updateId : String . type } ) ;
var b = a . update || a . updateId ; if ( a . options || b || ! this . retrieve ( "form.request" ) ) { if ( a . options || ! this . retrieve ( "form.request:options" ) ) { this . set ( "form.request" , a . options ) ;
} if ( b ) { this . set ( "form.request" , b ) ; } this . store ( "form.request" , new Form . Request ( this , this . retrieve ( "form.request:update" ) , this . retrieve ( "form.request:options" ) ) ) ;
} return this . retrieve ( "form.request" ) ; } } ; Element . implement ( { formUpdate : function ( b , a ) { this . get ( "form.request" , b , a ) . send ( ) ; return this ; } } ) ; } ) ( ) ; Fx . Elements = new Class ( { Extends : Fx . CSS , initialize : function ( b , a ) { this . elements = this . subject = $$ ( b ) ;
this . parent ( a ) ; } , compute : function ( g , h , j ) { var c = { } ; for ( var d in g ) { var a = g [ d ] , e = h [ d ] , f = c [ d ] = { } ; for ( var b in a ) { f [ b ] = this . parent ( a [ b ] , e [ b ] , j ) ; } } return c ;
} , set : function ( b ) { for ( var c in b ) { var a = b [ c ] ; for ( var d in a ) { this . render ( this . elements [ c ] , d , a [ d ] , this . options . unit ) ; } } return this ; } , start : function ( c ) { if ( ! this . check ( c ) ) { return this ;
} var h = { } , j = { } ; for ( var d in c ) { var f = c [ d ] , a = h [ d ] = { } , g = j [ d ] = { } ; for ( var b in f ) { var e = this . prepare ( this . elements [ d ] , b , f [ b ] ) ; a [ b ] = e . from ; g [ b ] = e . to ; } } return this . parent ( h , j ) ;
} } ) ; var Accordion = Fx . Accordion = new Class ( { Extends : Fx . Elements , options : { display : 0 , show : false , height : true , width : false , opacity : true , alwaysHide : false , trigger : "click" , initialDisplayFx : true , returnHeightToAuto : true } , initialize : function ( ) { var c = Array . link ( arguments , { container : Element . type , options : Object . type , togglers : $defined , elements : $defined } ) ;
this . parent ( c . elements , c . options ) ; this . togglers = $$ ( c . togglers ) ; this . container = document . id ( c . container ) ; this . previous = - 1 ; this . internalChain = new Chain ( ) ;
if ( this . options . alwaysHide ) { this . options . wait = true ; } if ( $chk ( this . options . show ) ) { this . options . display = false ; this . previous = this . options . show ; } if ( this . options . start ) { this . options . display = false ;
this . options . show = false ; } this . effects = { } ; if ( this . options . opacity ) { this . effects . opacity = "fullOpacity" ; } if ( this . options . width ) { this . effects . width = this . options . fixedWidth ? "fullWidth" : "offsetWidth" ;
} if ( this . options . height ) { this . effects . height = this . options . fixedHeight ? "fullHeight" : "scrollHeight" ; } for ( var b = 0 , a = this . togglers . length ; b < a ; b ++ ) { this . addSection ( this . togglers [ b ] , this . elements [ b ] ) ;
} this . elements . each ( function ( e , d ) { if ( this . options . show === d ) { this . fireEvent ( "active" , [ this . togglers [ d ] , e ] ) ; } else { for ( var f in this . effects ) { e . setStyle ( f , 0 ) ;
} } } , this ) ; if ( $chk ( this . options . display ) ) { this . display ( this . options . display , this . options . initialDisplayFx ) ; } this . addEvent ( "complete" , this . internalChain . callChain . bind ( this . internalChain ) ) ;
} , addSection : function ( e , c ) { e = document . id ( e ) ; c = document . id ( c ) ; var f = this . togglers . contains ( e ) ; this . togglers . include ( e ) ; this . elements . include ( c ) ; var a = this . togglers . indexOf ( e ) ;
var b = this . display . bind ( this , a ) ; e . store ( "accordion:display" , b ) ; e . addEvent ( this . options . trigger , b ) ; if ( this . options . height ) { c . setStyles ( { "padding-top" : 0 , "border-top" : "none" , "padding-bottom" : 0 , "border-bottom" : "none" } ) ;
} if ( this . options . width ) { c . setStyles ( { "padding-left" : 0 , "border-left" : "none" , "padding-right" : 0 , "border-right" : "none" } ) ; } c . fullOpacity = 1 ; if ( this . options . fixedWidth ) { c . fullWidth = this . options . fixedWidth ;
} if ( this . options . fixedHeight ) { c . fullHeight = this . options . fixedHeight ; } c . setStyle ( "overflow" , "hidden" ) ; if ( ! f ) { for ( var d in this . effects ) { c . setStyle ( d , 0 ) ;
} } return this ; } , detach : function ( ) { this . togglers . each ( function ( a ) { a . removeEvent ( this . options . trigger , a . retrieve ( "accordion:display" ) ) ; } , this ) ; } , display : function ( a , b ) { if ( ! this . check ( a , b ) ) { return this ;
} b = $pick ( b , true ) ; if ( this . options . returnHeightToAuto ) { var d = this . elements [ this . previous ] ; if ( d && ! this . selfHidden ) { for ( var c in this . effects ) { d . setStyle ( c , d [ this . effects [ c ] ] ) ;
} } } a = ( $type ( a ) == "element" ) ? this . elements . indexOf ( a ) : a ; if ( ( this . timer && this . options . wait ) || ( a === this . previous && ! this . options . alwaysHide ) ) { return this ; } this . previous = a ;
var e = { } ; this . elements . each ( function ( h , g ) { e [ g ] = { } ; var f ; if ( g != a ) { f = true ; } else { if ( this . options . alwaysHide && ( ( h . offsetHeight > 0 && this . options . height ) || h . offsetWidth > 0 && this . options . width ) ) { f = true ;
this . selfHidden = true ; } } this . fireEvent ( f ? "background" : "active" , [ this . togglers [ g ] , h ] ) ; for ( var j in this . effects ) { e [ g ] [ j ] = f ? 0 : h [ this . effects [ j ] ] ; } } , this ) ;
this . internalChain . chain ( function ( ) { if ( this . options . returnHeightToAuto && ! this . selfHidden ) { var f = this . elements [ a ] ; if ( f ) { f . setStyle ( "height" , "auto" ) ; } } } . bind ( this ) ) ;
return b ? this . start ( e ) : this . set ( e ) ; } } ) ; Fx . Move = new Class ( { Extends : Fx . Morph , options : { relativeTo : document . body , position : "center" , edge : false , offset : { x : 0 , y : 0 } } , start : function ( a ) { return this . parent ( this . element . position ( $merge ( this . options , a , { returnPos : true } ) ) ) ;
} } ) ; Element . Properties . move = { set : function ( a ) { var b = this . retrieve ( "move" ) ; if ( b ) { b . cancel ( ) ; } return this . eliminate ( "move" ) . store ( "move:options" , $extend ( { link : "cancel" } , a ) ) ;
} , get : function ( a ) { if ( a || ! this . retrieve ( "move" ) ) { if ( a || ! this . retrieve ( "move:options" ) ) { this . set ( "move" , a ) ; } this . store ( "move" , new Fx . Move ( this , this . retrieve ( "move:options" ) ) ) ;
} return this . retrieve ( "move" ) ; } } ; Element . implement ( { move : function ( a ) { this . get ( "move" ) . start ( a ) ; return this ; } } ) ; Fx . Scroll = new Class ( { Extends : Fx , options : { offset : { x : 0 , y : 0 } , wheelStops : true } , initialize : function ( b , a ) { this . element = this . subject = document . id ( b ) ;
this . parent ( a ) ; var d = this . cancel . bind ( this , false ) ; if ( $type ( this . element ) != "element" ) { this . element = document . id ( this . element . getDocument ( ) . body ) ; } var c = this . element ;
if ( this . options . wheelStops ) { this . addEvent ( "start" , function ( ) { c . addEvent ( "mousewheel" , d ) ; } , true ) ; this . addEvent ( "complete" , function ( ) { c . removeEvent ( "mousewheel" , d ) ;
} , true ) ; } } , set : function ( ) { var a = Array . flatten ( arguments ) ; if ( Browser . Engine . gecko ) { a = [ Math . round ( a [ 0 ] ) , Math . round ( a [ 1 ] ) ] ; } this . element . scrollTo ( a [ 0 ] , a [ 1 ] ) ;
} , compute : function ( c , b , a ) { return [ 0 , 1 ] . map ( function ( d ) { return Fx . compute ( c [ d ] , b [ d ] , a ) ; } ) ; } , start : function ( c , g ) { if ( ! this . check ( c , g ) ) { return this ; } var e = this . element . getScrollSize ( ) , b = this . element . getScroll ( ) , d = { x : c , y : g } ;
for ( var f in d ) { var a = e [ f ] ; if ( $chk ( d [ f ] ) ) { d [ f ] = ( $type ( d [ f ] ) == "number" ) ? d [ f ] : a ; } else { d [ f ] = b [ f ] ; } d [ f ] += this . options . offset [ f ] ; } return this . parent ( [ b . x , b . y ] , [ d . x , d . y ] ) ;
2008-09-27 19:55:56 +00:00
} , toTop : function ( ) { return this . start ( false , 0 ) ; } , toLeft : function ( ) { return this . start ( 0 , false ) ; } , toRight : function ( ) { return this . start ( "right" , false ) ; } , toBottom : function ( ) { return this . start ( false , "bottom" ) ;
2009-11-25 10:03:04 +00:00
} , toElement : function ( b ) { var a = document . id ( b ) . getPosition ( this . element ) ; return this . start ( a . x , a . y ) ; } , scrollIntoView : function ( c , e , d ) { e = e ? $splat ( e ) : [ "x" , "y" ] ;
var h = { } ; c = document . id ( c ) ; var f = c . getPosition ( this . element ) ; var i = c . getSize ( ) ; var g = this . element . getScroll ( ) ; var a = this . element . getSize ( ) ; var b = { x : f . x + i . x , y : f . y + i . y } ;
[ "x" , "y" ] . each ( function ( j ) { if ( e . contains ( j ) ) { if ( b [ j ] > g [ j ] + a [ j ] ) { h [ j ] = b [ j ] - a [ j ] ; } if ( f [ j ] < g [ j ] ) { h [ j ] = f [ j ] ; } } if ( h [ j ] == null ) { h [ j ] = g [ j ] ; } if ( d && d [ j ] ) { h [ j ] = h [ j ] + d [ j ] ;
} } , this ) ; if ( h . x != g . x || h . y != g . y ) { this . start ( h . x , h . y ) ; } return this ; } , scrollToCenter : function ( c , e , d ) { e = e ? $splat ( e ) : [ "x" , "y" ] ; c = $ ( c ) ; var h = { } , f = c . getPosition ( this . element ) , i = c . getSize ( ) , g = this . element . getScroll ( ) , a = this . element . getSize ( ) , b = { x : f . x + i . x , y : f . y + i . y } ;
[ "x" , "y" ] . each ( function ( j ) { if ( e . contains ( j ) ) { h [ j ] = f [ j ] - ( a [ j ] - i [ j ] ) / 2 ; } if ( h [ j ] == null ) { h [ j ] = g [ j ] ; } if ( d && d [ j ] ) { h [ j ] = h [ j ] + d [ j ] ; } } , this ) ; if ( h . x != g . x || h . y != g . y ) { this . start ( h . x , h . y ) ;
} return this ; } } ) ; Fx . Slide = new Class ( { Extends : Fx , options : { mode : "vertical" , hideOverflow : true } , initialize : function ( b , a ) { this . addEvent ( "complete" , function ( ) { this . open = ( this . wrapper [ "offset" + this . layout . capitalize ( ) ] != 0 ) ;
if ( this . open && Browser . Engine . webkit419 ) { this . element . dispose ( ) . inject ( this . wrapper ) ; } } , true ) ; this . element = this . subject = document . id ( b ) ; this . parent ( a ) ; var d = this . element . retrieve ( "wrapper" ) ;
var c = this . element . getStyles ( "margin" , "position" , "overflow" ) ; if ( this . options . hideOverflow ) { c = $extend ( c , { overflow : "hidden" } ) ; } this . wrapper = d || new Element ( "div" , { styles : c } ) . wraps ( this . element ) ;
this . element . store ( "wrapper" , this . wrapper ) . setStyle ( "margin" , 0 ) ; this . now = [ ] ; this . open = true ; } , vertical : function ( ) { this . margin = "margin-top" ; this . layout = "height" ;
this . offset = this . element . offsetHeight ; } , horizontal : function ( ) { this . margin = "margin-left" ; this . layout = "width" ; this . offset = this . element . offsetWidth ; } , set : function ( a ) { this . element . setStyle ( this . margin , a [ 0 ] ) ;
this . wrapper . setStyle ( this . layout , a [ 1 ] ) ; return this ; } , compute : function ( c , b , a ) { return [ 0 , 1 ] . map ( function ( d ) { return Fx . compute ( c [ d ] , b [ d ] , a ) ; } ) ; } , start : function ( b , e ) { if ( ! this . check ( b , e ) ) { return this ;
} this [ e || this . options . mode ] ( ) ; var d = this . element . getStyle ( this . margin ) . toInt ( ) ; var c = this . wrapper . getStyle ( this . layout ) . toInt ( ) ; var a = [ [ d , c ] , [ 0 , this . offset ] ] ;
var g = [ [ d , c ] , [ - this . offset , 0 ] ] ; var f ; switch ( b ) { case "in" : f = a ; break ; case "out" : f = g ; break ; case "toggle" : f = ( c == 0 ) ? a : g ; } return this . parent ( f [ 0 ] , f [ 1 ] ) ; } , slideIn : function ( a ) { return this . start ( "in" , a ) ;
} , slideOut : function ( a ) { return this . start ( "out" , a ) ; } , hide : function ( a ) { this [ a || this . options . mode ] ( ) ; this . open = false ; return this . set ( [ - this . offset , 0 ] ) ; } , show : function ( a ) { this [ a || this . options . mode ] ( ) ;
this . open = true ; return this . set ( [ 0 , this . offset ] ) ; } , toggle : function ( a ) { return this . start ( "toggle" , a ) ; } } ) ; Element . Properties . slide = { set : function ( b ) { var a = this . retrieve ( "slide" ) ;
if ( a ) { a . cancel ( ) ; } return this . eliminate ( "slide" ) . store ( "slide:options" , $extend ( { link : "cancel" } , b ) ) ; } , get : function ( a ) { if ( a || ! this . retrieve ( "slide" ) ) { if ( a || ! this . retrieve ( "slide:options" ) ) { this . set ( "slide" , a ) ;
} this . store ( "slide" , new Fx . Slide ( this , this . retrieve ( "slide:options" ) ) ) ; } return this . retrieve ( "slide" ) ; } } ; Element . implement ( { slide : function ( d , e ) { d = d || "toggle" ;
var b = this . get ( "slide" ) , a ; switch ( d ) { case "hide" : b . hide ( e ) ; break ; case "show" : b . show ( e ) ; break ; case "toggle" : var c = this . retrieve ( "slide:flag" , b . open ) ; b [ c ? "slideOut" : "slideIn" ] ( e ) ;
this . store ( "slide:flag" , ! c ) ; a = true ; break ; default : b . start ( d , e ) ; } if ( ! a ) { this . eliminate ( "slide:flag" ) ; } return this ; } } ) ; var SmoothScroll = Fx . SmoothScroll = new Class ( { Extends : Fx . Scroll , initialize : function ( b , c ) { c = c || document ;
this . doc = c . getDocument ( ) ; var d = c . getWindow ( ) ; this . parent ( this . doc , b ) ; this . links = $$ ( this . options . links || this . doc . links ) ; var a = d . location . href . match ( /^[^#]*/ ) [ 0 ] + "#" ;
this . links . each ( function ( f ) { if ( f . href . indexOf ( a ) != 0 ) { return ; } var e = f . href . substr ( a . length ) ; if ( e ) { this . useLink ( f , e ) ; } } , this ) ; if ( ! Browser . Engine . webkit419 ) { this . addEvent ( "complete" , function ( ) { d . location . hash = this . anchor ;
} , true ) ; } } , useLink : function ( c , a ) { var b ; c . addEvent ( "click" , function ( d ) { if ( b !== false && ! b ) { b = document . id ( a ) || this . doc . getElement ( "a[name=" + a + "]" ) ; } if ( b ) { d . preventDefault ( ) ;
this . anchor = a ; this . toElement ( b ) . chain ( function ( ) { this . fireEvent ( "scrolledTo" , [ c , b ] ) ; } . bind ( this ) ) ; c . blur ( ) ; } } . bind ( this ) ) ; } } ) ; Fx . Sort = new Class ( { Extends : Fx . Elements , options : { mode : "vertical" } , initialize : function ( b , a ) { this . parent ( b , a ) ;
this . elements . each ( function ( c ) { if ( c . getStyle ( "position" ) == "static" ) { c . setStyle ( "position" , "relative" ) ; } } ) ; this . setDefaultOrder ( ) ; } , setDefaultOrder : function ( ) { this . currentOrder = this . elements . map ( function ( b , a ) { return a ;
} ) ; } , sort : function ( e ) { if ( $type ( e ) != "array" ) { return false ; } var i = 0 , a = 0 , c = { } , h = { } , d = this . options . mode == "vertical" ; var f = this . elements . map ( function ( m , j ) { var l = m . getComputedSize ( { styles : [ "border" , "padding" , "margin" ] } ) ;
var n ; if ( d ) { n = { top : i , margin : l [ "margin-top" ] , height : l . totalHeight } ; i += n . height - l [ "margin-top" ] ; } else { n = { left : a , margin : l [ "margin-left" ] , width : l . totalWidth } ;
a += n . width ; } var k = d ? "top" : "left" ; h [ j ] = { } ; var o = m . getStyle ( k ) . toInt ( ) ; h [ j ] [ k ] = o || 0 ; return n ; } , this ) ; this . set ( h ) ; e = e . map ( function ( j ) { return j . toInt ( ) ; } ) ;
if ( e . length != this . elements . length ) { this . currentOrder . each ( function ( j ) { if ( ! e . contains ( j ) ) { e . push ( j ) ; } } ) ; if ( e . length > this . elements . length ) { e . splice ( this . elements . length - 1 , e . length - this . elements . length ) ;
} } var b = i = a = 0 ; e . each ( function ( l , j ) { var k = { } ; if ( d ) { k . top = i - f [ l ] . top - b ; i += f [ l ] . height ; } else { k . left = a - f [ l ] . left ; a += f [ l ] . width ; } b = b + f [ l ] . margin ; c [ l ] = k ; } , this ) ;
var g = { } ; $A ( e ) . sort ( ) . each ( function ( j ) { g [ j ] = c [ j ] ; } ) ; this . start ( g ) ; this . currentOrder = e ; return this ; } , rearrangeDOM : function ( a ) { a = a || this . currentOrder ; var b = this . elements [ 0 ] . getParent ( ) ;
var c = [ ] ; this . elements . setStyle ( "opacity" , 0 ) ; a . each ( function ( d ) { c . push ( this . elements [ d ] . inject ( b ) . setStyles ( { top : 0 , left : 0 } ) ) ; } , this ) ; this . elements . setStyle ( "opacity" , 1 ) ;
this . elements = $$ ( c ) ; this . setDefaultOrder ( ) ; return this ; } , getDefaultOrder : function ( ) { return this . elements . map ( function ( b , a ) { return a ; } ) ; } , 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 ( a ) { return this . sort ( a . map ( function ( b ) { return this . elements . indexOf ( b ) ;
} , this ) ) ; } , swap : function ( c , b ) { if ( $type ( c ) == "element" ) { c = this . elements . indexOf ( c ) ; } if ( $type ( b ) == "element" ) { b = this . elements . indexOf ( b ) ; } var a = $A ( this . currentOrder ) ;
a [ this . currentOrder . indexOf ( c ) ] = b ; a [ this . currentOrder . indexOf ( b ) ] = c ; return this . sort ( a ) ; } } ) ; var Drag = new Class ( { Implements : [ Events , Options ] , options : { snap : 6 , unit : "px" , grid : false , style : true , limit : false , handle : false , invert : false , preventDefault : false , stopPropagation : false , modifiers : { x : "left" , y : "top" } } , initialize : function ( ) { var b = Array . link ( arguments , { options : Object . type , element : $defined } ) ;
this . element = document . id ( b . element ) ; this . document = this . element . getDocument ( ) ; this . setOptions ( b . options || { } ) ; var a = $type ( this . options . handle ) ; this . handles = ( ( a == "array" || a == "collection" ) ? $$ ( this . options . handle ) : document . id ( this . options . handle ) ) || this . element ;
2008-09-27 19:55:56 +00:00
this . mouse = { now : { } , pos : { } } ; this . value = { start : { } , now : { } } ; this . selection = ( Browser . Engine . trident ) ? "selectstart" : "mousedown" ; this . bound = { start : this . start . bind ( this ) , check : this . check . bind ( this ) , drag : this . drag . bind ( this ) , stop : this . stop . bind ( this ) , cancel : this . cancel . bind ( this ) , eventStop : $lambda ( false ) } ;
this . attach ( ) ; } , attach : function ( ) { this . handles . addEvent ( "mousedown" , this . bound . start ) ; return this ; } , detach : function ( ) { this . handles . removeEvent ( "mousedown" , this . bound . start ) ;
2009-11-25 10:03:04 +00:00
return this ; } , start : function ( c ) { if ( c . rightClick ) { return ; } if ( this . options . preventDefault ) { c . preventDefault ( ) ; } if ( this . options . stopPropagation ) { c . stopPropagation ( ) ;
} this . mouse . start = c . page ; this . fireEvent ( "beforeStart" , this . element ) ; var a = this . options . limit ; this . limit = { x : [ ] , y : [ ] } ; for ( var d in this . options . modifiers ) { if ( ! this . options . modifiers [ d ] ) { continue ;
} if ( this . options . style ) { this . value . now [ d ] = this . element . getStyle ( this . options . modifiers [ d ] ) . toInt ( ) ; } else { this . value . now [ d ] = this . element [ this . options . modifiers [ d ] ] ;
} if ( this . options . invert ) { this . value . now [ d ] *= - 1 ; } this . mouse . pos [ d ] = c . page [ d ] - this . value . now [ d ] ; if ( a && a [ d ] ) { for ( var b = 2 ; b -- ; b ) { if ( $chk ( a [ d ] [ b ] ) ) { this . limit [ d ] [ b ] = $lambda ( a [ d ] [ b ] ) ( ) ;
} } } } if ( $type ( this . options . grid ) == "number" ) { this . options . grid = { x : this . options . grid , y : this . options . grid } ; } this . document . addEvents ( { mousemove : this . bound . check , mouseup : this . bound . cancel } ) ;
this . document . addEvent ( this . selection , this . bound . eventStop ) ; } , check : function ( a ) { if ( this . options . preventDefault ) { a . preventDefault ( ) ; } var b = Math . round ( Math . sqrt ( Math . pow ( a . page . x - this . mouse . start . x , 2 ) + Math . pow ( a . page . y - this . mouse . start . y , 2 ) ) ) ;
if ( b > this . options . snap ) { this . cancel ( ) ; this . document . addEvents ( { mousemove : this . bound . drag , mouseup : this . bound . stop } ) ; this . fireEvent ( "start" , [ this . element , a ] ) . fireEvent ( "snap" , this . element ) ;
} } , drag : function ( a ) { if ( this . options . preventDefault ) { a . preventDefault ( ) ; } this . mouse . now = a . page ; for ( var b in this . options . modifiers ) { if ( ! this . options . modifiers [ b ] ) { continue ;
} this . value . now [ b ] = this . mouse . now [ b ] - this . mouse . pos [ b ] ; if ( this . options . invert ) { this . value . now [ b ] *= - 1 ; } if ( this . options . limit && this . limit [ b ] ) { if ( $chk ( this . limit [ b ] [ 1 ] ) && ( this . value . now [ b ] > this . limit [ b ] [ 1 ] ) ) { this . value . now [ b ] = this . limit [ b ] [ 1 ] ;
} else { if ( $chk ( this . limit [ b ] [ 0 ] ) && ( this . value . now [ b ] < this . limit [ b ] [ 0 ] ) ) { this . value . now [ b ] = this . limit [ b ] [ 0 ] ; } } } if ( this . options . grid [ b ] ) { this . value . now [ b ] -= ( ( this . value . now [ b ] - ( this . limit [ b ] [ 0 ] || 0 ) ) % this . options . grid [ b ] ) ;
} if ( this . options . style ) { this . element . setStyle ( this . options . modifiers [ b ] , this . value . now [ b ] + this . options . unit ) ; } else { this . element [ this . options . modifiers [ b ] ] = this . value . now [ b ] ;
} } this . fireEvent ( "drag" , [ this . element , a ] ) ; } , cancel : function ( a ) { this . document . removeEvent ( "mousemove" , this . bound . check ) ; this . document . removeEvent ( "mouseup" , this . bound . cancel ) ;
if ( a ) { this . document . removeEvent ( this . selection , this . bound . eventStop ) ; this . fireEvent ( "cancel" , this . element ) ; } } , stop : function ( a ) { this . document . removeEvent ( this . selection , this . bound . eventStop ) ;
this . document . removeEvent ( "mousemove" , this . bound . drag ) ; this . document . removeEvent ( "mouseup" , this . bound . stop ) ; if ( a ) { this . fireEvent ( "complete" , [ this . element , a ] ) ;
} } } ) ; Element . implement ( { makeResizable : function ( a ) { var b = new Drag ( this , $merge ( { modifiers : { x : "width" , y : "height" } } , a ) ) ; this . store ( "resizer" , b ) ; return b . addEvent ( "drag" , function ( ) { this . fireEvent ( "resize" , b ) ;
} . bind ( this ) ) ; } } ) ; Drag . Move = new Class ( { Extends : Drag , options : { droppables : [ ] , container : false , precalculate : false , includeMargins : true , checkDroppables : true } , initialize : function ( b , a ) { this . parent ( b , a ) ;
b = this . element ; this . droppables = $$ ( this . options . droppables ) ; this . container = document . id ( this . options . container ) ; if ( this . container && $type ( this . container ) != "element" ) { this . container = document . id ( this . container . getDocument ( ) . body ) ;
} var c = b . getStyles ( "left" , "right" , "position" ) ; if ( c . left == "auto" || c . top == "auto" ) { b . setPosition ( b . getPosition ( b . getOffsetParent ( ) ) ) ; } if ( c . position == "static" ) { b . setStyle ( "position" , "absolute" ) ;
} this . addEvent ( "start" , this . checkDroppables , true ) ; this . overed = null ; } , start : function ( a ) { if ( this . container ) { this . options . limit = this . calculateLimit ( ) ; } if ( this . options . precalculate ) { this . positions = this . droppables . map ( function ( b ) { return b . getCoordinates ( ) ;
} ) ; } this . parent ( a ) ; } , calculateLimit : function ( ) { var d = this . element . getOffsetParent ( ) , g = this . container . getCoordinates ( d ) , f = { } , c = { } , b = { } , i = { } , k = { } ; [ "top" , "right" , "bottom" , "left" ] . each ( function ( o ) { f [ o ] = this . container . getStyle ( "border-" + o ) . toInt ( ) ;
b [ o ] = this . element . getStyle ( "border-" + o ) . toInt ( ) ; c [ o ] = this . element . getStyle ( "margin-" + o ) . toInt ( ) ; i [ o ] = this . container . getStyle ( "margin-" + o ) . toInt ( ) ; k [ o ] = d . getStyle ( "padding-" + o ) . toInt ( ) ;
} , this ) ; var e = this . element . offsetWidth + c . left + c . right , n = this . element . offsetHeight + c . top + c . bottom , h = 0 , j = 0 , m = g . right - f . right - e , a = g . bottom - f . bottom - n ; if ( this . options . includeMargins ) { h += c . left ;
j += c . top ; } else { m += c . right ; a += c . bottom ; } if ( this . element . getStyle ( "position" ) == "relative" ) { var l = this . element . getCoordinates ( d ) ; l . left -= this . element . getStyle ( "left" ) . toInt ( ) ;
l . top -= this . element . getStyle ( "top" ) . toInt ( ) ; h += f . left - l . left ; j += f . top - l . top ; m += c . left - l . left ; a += c . top - l . top ; if ( this . container != d ) { h += i . left + k . left ; j += ( Browser . Engine . trident4 ? 0 : i . top ) + k . top ;
} } else { h -= c . left ; j -= c . top ; if ( this . container == d ) { m -= f . left ; a -= f . top ; } else { h += g . left + f . left ; j += g . top + f . top ; } } return { x : [ h , m ] , y : [ j , a ] } ; } , checkAgainst : function ( c , b ) { c = ( this . positions ) ? this . positions [ b ] : c . getCoordinates ( ) ;
var a = this . mouse . now ; return ( a . x > c . left && a . x < c . right && a . y < c . bottom && a . y > c . top ) ; } , checkDroppables : function ( ) { var a = this . droppables . filter ( this . checkAgainst , this ) . getLast ( ) ;
if ( this . overed != a ) { if ( this . overed ) { this . fireEvent ( "leave" , [ this . element , this . overed ] ) ; } if ( a ) { this . fireEvent ( "enter" , [ this . element , a ] ) ; } this . overed = a ; } } , drag : function ( a ) { this . parent ( a ) ;
if ( this . options . checkDroppables && this . droppables . length ) { this . checkDroppables ( ) ; } } , stop : function ( a ) { this . checkDroppables ( ) ; this . fireEvent ( "drop" , [ this . element , this . overed , a ] ) ;
this . overed = null ; return this . parent ( a ) ; } } ) ; Element . implement ( { makeDraggable : function ( a ) { var b = new Drag . Move ( this , a ) ; this . store ( "dragger" , b ) ; return b ; } } ) ;
var Slider = new Class ( { Implements : [ Events , Options ] , Binds : [ "clickedElement" , "draggedKnob" , "scrolledElement" ] , options : { onTick : function ( a ) { if ( this . options . snap ) { a = this . toPosition ( this . step ) ;
} this . knob . setStyle ( this . property , a ) ; } , initialStep : 0 , snap : false , offset : 0 , range : false , wheel : false , steps : 100 , mode : "horizontal" } , initialize : function ( f , a , e ) { this . setOptions ( e ) ;
this . element = document . id ( f ) ; this . knob = document . id ( a ) ; this . previousChange = this . previousEnd = this . step = - 1 ; var g , b = { } , d = { x : false , y : false } ; switch ( this . options . mode ) { case "vertical" : this . axis = "y" ;
this . property = "top" ; g = "offsetHeight" ; break ; case "horizontal" : this . axis = "x" ; this . property = "left" ; g = "offsetWidth" ; } this . full = this . element . measure ( function ( ) { this . half = this . knob [ g ] / 2 ;
return this . element [ g ] - this . knob [ g ] + ( this . options . offset * 2 ) ; } . bind ( this ) ) ; this . min = $chk ( this . options . range [ 0 ] ) ? this . options . range [ 0 ] : 0 ; this . max = $chk ( this . options . range [ 1 ] ) ? this . options . range [ 1 ] : this . options . steps ;
this . range = this . max - this . min ; this . steps = this . options . steps || this . full ; this . stepSize = Math . abs ( this . range ) / this . steps ; this . stepWidth = this . stepSize * this . full / Math . abs ( this . range ) ;
this . knob . setStyle ( "position" , "relative" ) . setStyle ( this . property , this . options . initialStep ? this . toPosition ( this . options . initialStep ) : - this . options . offset ) ;
d [ this . axis ] = this . property ; b [ this . axis ] = [ - this . options . offset , this . full - this . options . offset ] ; var c = { snap : 0 , limit : b , modifiers : d , onDrag : this . draggedKnob , onStart : this . draggedKnob , onBeforeStart : ( function ( ) { this . isDragging = true ;
} ) . bind ( this ) , onCancel : function ( ) { this . isDragging = false ; } . bind ( this ) , onComplete : function ( ) { this . isDragging = false ; this . draggedKnob ( ) ; this . end ( ) ; } . bind ( this ) } ;
if ( this . options . snap ) { c . grid = Math . ceil ( this . stepWidth ) ; c . limit [ this . axis ] [ 1 ] = this . full ; } this . drag = new Drag ( this . knob , c ) ; this . attach ( ) ; } , attach : function ( ) { this . element . addEvent ( "mousedown" , this . clickedElement ) ;
if ( this . options . wheel ) { this . element . addEvent ( "mousewheel" , this . scrolledElement ) ; } this . drag . attach ( ) ; return this ; } , detach : function ( ) { this . element . removeEvent ( "mousedown" , this . clickedElement ) ;
this . element . removeEvent ( "mousewheel" , this . scrolledElement ) ; this . drag . detach ( ) ; return this ; } , set : function ( a ) { if ( ! ( ( this . range > 0 ) ^ ( a < this . min ) ) ) { a = this . min ;
} if ( ! ( ( this . range > 0 ) ^ ( a > this . max ) ) ) { a = this . max ; } this . step = Math . round ( a ) ; this . checkStep ( ) ; this . fireEvent ( "tick" , this . toPosition ( this . step ) ) ; this . end ( ) ; return this ;
} , clickedElement : function ( c ) { if ( this . isDragging || c . target == this . knob ) { return ; } var b = this . range < 0 ? - 1 : 1 ; var a = c . page [ this . axis ] - this . element . getPosition ( ) [ this . axis ] - this . half ;
a = a . limit ( - this . options . offset , this . full - this . options . offset ) ; this . step = Math . round ( this . min + b * this . toStep ( a ) ) ; this . checkStep ( ) ; this . fireEvent ( "tick" , a ) ;
this . end ( ) ; } , scrolledElement : function ( a ) { var b = ( this . options . mode == "horizontal" ) ? ( a . wheel < 0 ) : ( a . wheel > 0 ) ; this . set ( b ? this . step - this . stepSize : this . step + this . stepSize ) ;
a . stop ( ) ; } , draggedKnob : function ( ) { var b = this . range < 0 ? - 1 : 1 ; var a = this . drag . value . now [ this . axis ] ; a = a . limit ( - this . options . offset , this . full - this . options . offset ) ;
this . step = Math . round ( this . min + b * this . toStep ( a ) ) ; this . checkStep ( ) ; } , checkStep : function ( ) { if ( this . previousChange != this . step ) { this . previousChange = this . step ;
2008-09-27 19:55:56 +00:00
this . fireEvent ( "change" , this . step ) ; } } , end : function ( ) { if ( this . previousEnd !== this . step ) { this . previousEnd = this . step ; this . fireEvent ( "complete" , this . step + "" ) ;
2009-11-25 10:03:04 +00:00
} } , toStep : function ( a ) { var b = ( a + this . options . offset ) * this . stepSize / this . full * this . steps ; return this . options . steps ? Math . round ( b -= b % this . stepSize ) : b ; } , toPosition : function ( a ) { return ( this . full * Math . abs ( this . min - a ) ) / ( this . steps * this . stepSize ) - this . options . offset ;
} } ) ; var Sortables = new Class ( { Implements : [ Events , Options ] , options : { snap : 4 , opacity : 1 , clone : false , revert : false , handle : false , constrain : false } , initialize : function ( a , b ) { this . setOptions ( b ) ;
this . elements = [ ] ; this . lists = [ ] ; this . idle = true ; this . addLists ( $$ ( document . id ( a ) || a ) ) ; if ( ! this . options . clone ) { this . options . revert = false ; } if ( this . options . revert ) { this . effect = new Fx . Morph ( null , $merge ( { duration : 250 , link : "cancel" } , this . options . revert ) ) ;
} } , attach : function ( ) { this . addLists ( this . lists ) ; return this ; } , detach : function ( ) { this . lists = this . removeLists ( this . lists ) ; return this ; } , addItems : function ( ) { Array . flatten ( arguments ) . each ( function ( a ) { this . elements . push ( a ) ;
var b = a . retrieve ( "sortables:start" , this . start . bindWithEvent ( this , a ) ) ; ( this . options . handle ? a . getElement ( this . options . handle ) || a : a ) . addEvent ( "mousedown" , b ) ;
} , this ) ; return this ; } , addLists : function ( ) { Array . flatten ( arguments ) . each ( function ( a ) { this . lists . push ( a ) ; this . addItems ( a . getChildren ( ) ) ; } , this ) ; return this ;
} , removeItems : function ( ) { return $$ ( Array . flatten ( arguments ) . map ( function ( a ) { this . elements . erase ( a ) ; var b = a . retrieve ( "sortables:start" ) ; ( this . options . handle ? a . getElement ( this . options . handle ) || a : a ) . removeEvent ( "mousedown" , b ) ;
return a ; } , this ) ) ; } , removeLists : function ( ) { return $$ ( Array . flatten ( arguments ) . map ( function ( a ) { this . lists . erase ( a ) ; this . removeItems ( a . getChildren ( ) ) ; return a ;
} , this ) ) ; } , getClone : function ( b , a ) { if ( ! this . options . clone ) { return new Element ( "div" ) . inject ( document . body ) ; } if ( $type ( this . options . clone ) == "function" ) { return this . options . clone . call ( this , b , a , this . list ) ;
} return a . clone ( true ) . setStyles ( { margin : "0px" , position : "absolute" , visibility : "hidden" , width : a . getStyle ( "width" ) } ) . inject ( this . list ) . setPosition ( a . getPosition ( a . getOffsetParent ( ) ) ) ;
} , getDroppables : function ( ) { var a = this . list . getChildren ( ) ; if ( ! this . options . constrain ) { a = this . lists . concat ( a ) . erase ( this . list ) ; } return a . erase ( this . clone ) . erase ( this . element ) ;
} , insert : function ( c , b ) { var a = "inside" ; if ( this . lists . contains ( b ) ) { this . list = b ; this . drag . droppables = this . getDroppables ( ) ; } else { a = this . element . getAllPrevious ( ) . contains ( b ) ? "before" : "after" ;
} this . element . inject ( b , a ) ; this . fireEvent ( "sort" , [ this . element , this . clone ] ) ; } , start : function ( b , a ) { if ( ! this . idle ) { return ; } this . idle = false ; this . element = a ;
this . opacity = a . get ( "opacity" ) ; this . list = a . getParent ( ) ; this . clone = this . getClone ( b , a ) ; this . drag = new Drag . Move ( this . clone , { snap : this . options . snap , container : this . options . constrain && this . element . getParent ( ) , droppables : this . getDroppables ( ) , onSnap : function ( ) { b . stop ( ) ;
this . clone . setStyle ( "visibility" , "visible" ) ; this . element . set ( "opacity" , this . options . opacity || 0 ) ; this . fireEvent ( "start" , [ this . element , this . clone ] ) ; } . bind ( this ) , onEnter : this . insert . bind ( this ) , onCancel : this . reset . bind ( this ) , onComplete : this . end . bind ( this ) } ) ;
this . clone . inject ( this . element , "before" ) ; this . drag . start ( b ) ; } , end : function ( ) { this . drag . detach ( ) ; this . element . set ( "opacity" , this . opacity ) ; if ( this . effect ) { var a = this . element . getStyles ( "width" , "height" ) ;
var b = this . clone . computePosition ( this . element . getPosition ( this . clone . offsetParent ) ) ; this . effect . element = this . clone ; this . effect . start ( { top : b . top , left : b . left , width : a . width , height : a . height , opacity : 0.25 } ) . chain ( this . reset . bind ( this ) ) ;
} else { this . reset ( ) ; } } , reset : function ( ) { this . idle = true ; this . clone . destroy ( ) ; this . fireEvent ( "complete" , this . element ) ; } , serialize : function ( ) { var c = Array . link ( arguments , { modifier : Function . type , index : $defined } ) ;
var b = this . lists . map ( function ( d ) { return d . getChildren ( ) . map ( c . modifier || function ( e ) { return e . get ( "id" ) ; } , this ) ; } , this ) ; var a = c . index ; if ( this . lists . length == 1 ) { a = 0 ;
} return $chk ( a ) && a >= 0 && a < this . lists . length ? b [ a ] : b ; } } ) ; var Asset = { javascript : function ( f , d ) { d = $extend ( { onload : $empty , document : document , check : $lambda ( true ) } , d ) ;
var b = new Element ( "script" , { src : f , type : "text/javascript" } ) ; var e = d . onload . bind ( b ) , a = d . check , g = d . document ; delete d . onload ; delete d . check ; delete d . document ;
b . addEvents ( { load : e , readystatechange : function ( ) { if ( [ "loaded" , "complete" ] . contains ( this . readyState ) ) { e ( ) ; } } } ) . set ( d ) ; if ( Browser . Engine . webkit419 ) { var c = ( function ( ) { if ( ! $try ( a ) ) { return ;
} $clear ( c ) ; e ( ) ; } ) . periodical ( 50 ) ; } return b . inject ( g . head ) ; } , css : function ( b , a ) { return new Element ( "link" , $merge ( { rel : "stylesheet" , media : "screen" , type : "text/css" , href : b } , a ) ) . inject ( document . head ) ;
} , image : function ( c , b ) { b = $merge ( { onload : $empty , onabort : $empty , onerror : $empty } , b ) ; var d = new Image ( ) ; var a = document . id ( d ) || new Element ( "img" ) ; [ "load" , "abort" , "error" ] . each ( function ( e ) { var f = "on" + e ;
var g = b [ f ] ; delete b [ f ] ; d [ f ] = function ( ) { if ( ! d ) { return ; } if ( ! a . parentNode ) { a . width = d . width ; a . height = d . height ; } d = d . onload = d . onabort = d . onerror = null ; g . delay ( 1 , a , a ) ;
a . fireEvent ( e , a , 1 ) ; } ; } ) ; d . src = a . src = c ; if ( d && d . complete ) { d . onload . delay ( 1 ) ; } return a . set ( b ) ; } , images : function ( d , c ) { c = $merge ( { onComplete : $empty , onProgress : $empty , onError : $empty , properties : { } } , c ) ;
d = $splat ( d ) ; var a = [ ] ; var b = 0 ; return new Elements ( d . map ( function ( e ) { return Asset . image ( e , $extend ( c . properties , { onload : function ( ) { c . onProgress . call ( this , b , d . indexOf ( e ) ) ;
b ++ ; if ( b == d . length ) { c . onComplete ( ) ; } } , onerror : function ( ) { c . onError . call ( this , b , d . indexOf ( e ) ) ; b ++ ; if ( b == d . length ) { c . onComplete ( ) ; } } } ) ) ; } ) ) ; } } ; var Group = new Class ( { initialize : function ( ) { this . instances = Array . flatten ( arguments ) ;
this . events = { } ; this . checker = { } ; } , addEvent : function ( b , a ) { this . checker [ b ] = this . checker [ b ] || { } ; this . events [ b ] = this . events [ b ] || [ ] ; if ( this . events [ b ] . contains ( a ) ) { return false ;
} else { this . events [ b ] . push ( a ) ; } this . instances . each ( function ( c , d ) { c . addEvent ( b , this . check . bind ( this , [ b , c , d ] ) ) ; } , this ) ; return this ; } , check : function ( c , a , b ) { this . checker [ c ] [ b ] = true ;
var d = this . instances . every ( function ( f , e ) { return this . checker [ c ] [ e ] || false ; } , this ) ; if ( ! d ) { return ; } this . checker [ c ] = { } ; this . events [ c ] . each ( function ( e ) { e . call ( this , this . instances , a ) ;
} , this ) ; } } ) ; Hash . Cookie = new Class ( { Extends : Cookie , options : { autoSave : true } , initialize : function ( b , a ) { this . parent ( b , a ) ; this . load ( ) ; } , save : function ( ) { var a = JSON . encode ( this . hash ) ;
if ( ! a || a . length > 4096 ) { return false ; } if ( a == "{}" ) { this . dispose ( ) ; } else { this . write ( a ) ; } return true ; } , load : function ( ) { this . hash = new Hash ( JSON . decode ( this . read ( ) , true ) ) ;
return this ; } } ) ; Hash . each ( Hash . prototype , function ( b , a ) { if ( typeof b == "function" ) { Hash . Cookie . implement ( a , function ( ) { var c = b . apply ( this . hash , arguments ) ; if ( this . options . autoSave ) { this . save ( ) ;
} return c ; } ) ; } } ) ; var IframeShim = new Class ( { Implements : [ Options , Events , Class . Occlude ] , options : { className : "iframeShim" , src : 'javascript:false;document.write("");' , display : false , zIndex : null , margin : 0 , offset : { x : 0 , y : 0 } , browsers : ( Browser . Engine . trident4 || ( Browser . Engine . gecko && ! Browser . Engine . gecko19 && Browser . Platform . mac ) ) } , property : "IframeShim" , initialize : function ( b , a ) { this . element = document . id ( b ) ;
if ( this . occlude ( ) ) { return this . occluded ; } this . setOptions ( a ) ; this . makeShim ( ) ; return this ; } , makeShim : function ( ) { if ( this . options . browsers ) { var c = this . element . getStyle ( "zIndex" ) . toInt ( ) ;
if ( ! c ) { c = 1 ; var b = this . element . getStyle ( "position" ) ; if ( b == "static" || ! b ) { this . element . setStyle ( "position" , "relative" ) ; } this . element . setStyle ( "zIndex" , c ) ;
} c = ( $chk ( this . options . zIndex ) && c > this . options . zIndex ) ? this . options . zIndex : c - 1 ; if ( c < 0 ) { c = 1 ; } this . shim = new Element ( "iframe" , { src : this . options . src , scrolling : "no" , frameborder : 0 , styles : { zIndex : c , position : "absolute" , border : "none" , filter : "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)" } , "class" : this . options . className } ) . store ( "IframeShim" , this ) ;
var a = ( function ( ) { this . shim . inject ( this . element , "after" ) ; this [ this . options . display ? "show" : "hide" ] ( ) ; this . fireEvent ( "inject" ) ; } ) . bind ( this ) ; if ( IframeShim . ready ) { window . addEvent ( "load" , a ) ;
} else { a ( ) ; } } else { this . position = this . hide = this . show = this . dispose = $lambda ( this ) ; } } , position : function ( ) { if ( ! IframeShim . ready || ! this . shim ) { return this ; } var a = this . element . measure ( function ( ) { return this . getSize ( ) ;
} ) ; if ( this . options . margin != undefined ) { a . x = a . x - ( this . options . margin * 2 ) ; a . y = a . y - ( this . options . margin * 2 ) ; this . options . offset . x += this . options . margin ; this . options . offset . y += this . options . margin ;
} this . shim . set ( { width : a . x , height : a . y } ) . position ( { relativeTo : this . element , offset : this . options . offset } ) ; return this ; } , hide : function ( ) { if ( this . shim ) { this . shim . setStyle ( "display" , "none" ) ;
} return this ; } , show : function ( ) { if ( this . shim ) { this . shim . setStyle ( "display" , "block" ) ; } return this . position ( ) ; } , dispose : function ( ) { if ( this . shim ) { this . shim . dispose ( ) ;
} return this ; } , destroy : function ( ) { if ( this . shim ) { this . shim . destroy ( ) ; } return this ; } } ) ; window . addEvent ( "load" , function ( ) { IframeShim . ready = true ; } ) ; var Mask = new Class ( { Implements : [ Options , Events ] , Binds : [ "resize" ] , options : { style : { } , "class" : "mask" , maskMargins : false , useIframeShim : true } , initialize : function ( b , a ) { this . target = document . id ( b ) || document . body ;
this . target . store ( "mask" , this ) ; this . setOptions ( a ) ; this . render ( ) ; this . inject ( ) ; } , render : function ( ) { this . element = new Element ( "div" , { "class" : this . options [ "class" ] , id : this . options . id || "mask-" + $time ( ) , styles : $merge ( this . options . style , { display : "none" } ) , events : { click : function ( ) { this . fireEvent ( "click" ) ;
if ( this . options . hideOnClick ) { this . hide ( ) ; } } . bind ( this ) } } ) ; this . hidden = true ; } , toElement : function ( ) { return this . element ; } , inject : function ( b , a ) { a = a || this . options . inject ? this . options . inject . where : "" || this . target == document . body ? "inside" : "after" ;
b = b || this . options . inject ? this . options . inject . target : "" || this . target ; this . element . inject ( b , a ) ; if ( this . options . useIframeShim ) { this . shim = new IframeShim ( this . element ) ;
this . addEvents ( { show : this . shim . show . bind ( this . shim ) , hide : this . shim . hide . bind ( this . shim ) , destroy : this . shim . destroy . bind ( this . shim ) } ) ; } } , position : function ( ) { this . resize ( this . options . width , this . options . height ) ;
this . element . position ( { relativeTo : this . target , position : "topLeft" , ignoreMargins : ! this . options . maskMargins , ignoreScroll : this . target == document . body } ) ; return this ;
} , resize : function ( a , e ) { var b = { styles : [ "padding" , "border" ] } ; if ( this . options . maskMargins ) { b . styles . push ( "margin" ) ; } var d = this . target . getComputedSize ( b ) ; if ( this . target == document . body ) { var c = window . getSize ( ) ;
if ( d . totalHeight < c . y ) { d . totalHeight = c . y ; } if ( d . totalWidth < c . x ) { d . totalWidth = c . x ; } } this . element . setStyles ( { width : $pick ( a , d . totalWidth , d . x ) , height : $pick ( e , d . totalHeight , d . y ) } ) ;
return this ; } , show : function ( ) { if ( ! this . hidden ) { return this ; } this . target . addEvent ( "resize" , this . resize ) ; if ( this . target != document . body ) { document . id ( document . body ) . addEvent ( "resize" , this . resize ) ;
} this . position ( ) ; this . showMask . apply ( this , arguments ) ; return this ; } , showMask : function ( ) { this . element . setStyle ( "display" , "block" ) ; this . hidden = false ; this . fireEvent ( "show" ) ;
} , hide : function ( ) { if ( this . hidden ) { return this ; } this . target . removeEvent ( "resize" , this . resize ) ; this . hideMask . apply ( this , arguments ) ; if ( this . options . destroyOnHide ) { return this . destroy ( ) ;
} return this ; } , hideMask : function ( ) { this . element . setStyle ( "display" , "none" ) ; this . hidden = true ; this . fireEvent ( "hide" ) ; } , toggle : function ( ) { this [ this . hidden ? "show" : "hide" ] ( ) ;
} , destroy : function ( ) { this . hide ( ) ; this . element . destroy ( ) ; this . fireEvent ( "destroy" ) ; this . target . eliminate ( "mask" ) ; } } ) ; Element . Properties . mask = { set : function ( b ) { var a = this . retrieve ( "mask" ) ;
return this . eliminate ( "mask" ) . store ( "mask:options" , b ) ; } , get : function ( a ) { if ( a || ! this . retrieve ( "mask" ) ) { if ( this . retrieve ( "mask" ) ) { this . retrieve ( "mask" ) . destroy ( ) ;
} if ( a || ! this . retrieve ( "mask:options" ) ) { this . set ( "mask" , a ) ; } this . store ( "mask" , new Mask ( this , this . retrieve ( "mask:options" ) ) ) ; } return this . retrieve ( "mask" ) ;
} } ; Element . implement ( { mask : function ( a ) { this . get ( "mask" , a ) . show ( ) ; return this ; } , unmask : function ( ) { this . get ( "mask" ) . hide ( ) ; return this ; } } ) ; var Scroller = new Class ( { Implements : [ Events , Options ] , options : { area : 20 , velocity : 1 , onChange : function ( a , b ) { this . element . scrollTo ( a , b ) ;
} , fps : 50 } , initialize : function ( b , a ) { this . setOptions ( a ) ; this . element = document . id ( b ) ; this . listener = ( $type ( this . element ) != "element" ) ? document . id ( this . element . getDocument ( ) . body ) : this . element ;
this . timer = null ; this . bound = { attach : this . attach . bind ( this ) , detach : this . detach . bind ( this ) , getCoords : this . getCoords . bind ( this ) } ; } , start : function ( ) { this . listener . addEvents ( { mouseover : this . bound . attach , mouseout : this . bound . detach } ) ;
} , stop : function ( ) { this . listener . removeEvents ( { mouseover : this . bound . attach , mouseout : this . bound . detach } ) ; this . detach ( ) ; this . timer = $clear ( this . timer ) ; } , attach : function ( ) { this . listener . addEvent ( "mousemove" , this . bound . getCoords ) ;
} , detach : function ( ) { this . listener . removeEvent ( "mousemove" , this . bound . getCoords ) ; this . timer = $clear ( this . timer ) ; } , getCoords : function ( a ) { this . page = ( this . listener . get ( "tag" ) == "body" ) ? a . client : a . page ;
if ( ! this . timer ) { this . timer = this . scroll . periodical ( Math . round ( 1000 / this . options . fps ) , this ) ; } } , scroll : function ( ) { var b = this . element . getSize ( ) , a = this . element . getScroll ( ) , f = this . element . getOffsets ( ) , c = this . element . getScrollSize ( ) , e = { x : 0 , y : 0 } ;
for ( var d in this . page ) { if ( this . page [ d ] < ( this . options . area + f [ d ] ) && a [ d ] != 0 ) { e [ d ] = ( this . page [ d ] - this . options . area - f [ d ] ) * this . options . velocity ; } else { if ( this . page [ d ] + this . options . area > ( b [ d ] + f [ d ] ) && a [ d ] + b [ d ] != c [ d ] ) { e [ d ] = ( this . page [ d ] - b [ d ] + this . options . area - f [ d ] ) * this . options . velocity ;
} } } if ( e . y || e . x ) { this . fireEvent ( "change" , [ a . x + e . x , a . y + e . y ] ) ; } } } ) ; ( function ( ) { var a = function ( c , b ) { return ( c ) ? ( $type ( c ) == "function" ? c ( b ) : b . get ( c ) ) : "" ; } ; this . Tips = new Class ( { Implements : [ Events , Options ] , options : { onShow : function ( ) { this . tip . setStyle ( "display" , "block" ) ;
} , onHide : function ( ) { this . tip . setStyle ( "display" , "none" ) ; } , title : "title" , text : function ( b ) { return b . get ( "rel" ) || b . get ( "href" ) ; } , showDelay : 100 , hideDelay : 100 , className : "tip-wrap" , offset : { x : 16 , y : 16 } , fixed : false } , initialize : function ( ) { var b = Array . link ( arguments , { options : Object . type , elements : $defined } ) ;
this . setOptions ( b . options ) ; document . id ( this ) ; if ( b . elements ) { this . attach ( b . elements ) ; } } , toElement : function ( ) { if ( this . tip ) { return this . tip ; } this . container = new Element ( "div" , { "class" : "tip" } ) ;
return this . tip = new Element ( "div" , { "class" : this . options . className , styles : { position : "absolute" , top : 0 , left : 0 } } ) . adopt ( new Element ( "div" , { "class" : "tip-top" } ) , this . container , new Element ( "div" , { "class" : "tip-bottom" } ) ) . inject ( document . body ) ;
} , attach : function ( b ) { $$ ( b ) . each ( function ( d ) { var f = a ( this . options . title , d ) , e = a ( this . options . text , d ) ; d . erase ( "title" ) . store ( "tip:native" , f ) . retrieve ( "tip:title" , f ) ;
d . retrieve ( "tip:text" , e ) ; this . fireEvent ( "attach" , [ d ] ) ; var c = [ "enter" , "leave" ] ; if ( ! this . options . fixed ) { c . push ( "move" ) ; } c . each ( function ( h ) { var g = d . retrieve ( "tip:" + h ) ;
if ( ! g ) { g = this [ "element" + h . capitalize ( ) ] . bindWithEvent ( this , d ) ; } d . store ( "tip:" + h , g ) . addEvent ( "mouse" + h , g ) ; } , this ) ; } , this ) ; return this ; } , detach : function ( b ) { $$ ( b ) . each ( function ( d ) { [ "enter" , "leave" , "move" ] . each ( function ( e ) { d . removeEvent ( "mouse" + e , d . retrieve ( "tip:" + e ) ) . eliminate ( "tip:" + e ) ;
} ) ; this . fireEvent ( "detach" , [ d ] ) ; if ( this . options . title == "title" ) { var c = d . retrieve ( "tip:native" ) ; if ( c ) { d . set ( "title" , c ) ; } } } , this ) ; return this ; } , elementEnter : function ( c , b ) { this . container . empty ( ) ;
[ "title" , "text" ] . each ( function ( e ) { var d = b . retrieve ( "tip:" + e ) ; if ( d ) { this . fill ( new Element ( "div" , { "class" : "tip-" + e } ) . inject ( this . container ) , d ) ; } } , this ) ; $clear ( this . timer ) ;
this . timer = this . show . delay ( this . options . showDelay , this , b ) ; this . position ( ( this . options . fixed ) ? { page : b . getPosition ( ) } : c ) ; } , elementLeave : function ( c , b ) { $clear ( this . timer ) ;
this . timer = this . hide . delay ( this . options . hideDelay , this , b ) ; this . fireForParent ( c , b ) ; } , fireForParent : function ( c , b ) { if ( ! b ) { return ; } parentNode = b . getParent ( ) ;
if ( parentNode == document . body ) { return ; } if ( parentNode . retrieve ( "tip:enter" ) ) { parentNode . fireEvent ( "mouseenter" , c ) ; } else { this . fireForParent ( parentNode , c ) ;
} } , elementMove : function ( c , b ) { this . position ( c ) ; } , position : function ( e ) { var c = window . getSize ( ) , b = window . getScroll ( ) , f = { x : this . tip . offsetWidth , y : this . tip . offsetHeight } , d = { x : "left" , y : "top" } , g = { } ;
for ( var h in d ) { g [ d [ h ] ] = e . page [ h ] + this . options . offset [ h ] ; if ( ( g [ d [ h ] ] + f [ h ] - b [ h ] ) > c [ h ] ) { g [ d [ h ] ] = e . page [ h ] - this . options . offset [ h ] - f [ h ] ; } } this . tip . setStyles ( g ) ;
} , fill : function ( b , c ) { if ( typeof c == "string" ) { b . set ( "html" , c ) ; } else { b . adopt ( c ) ; } } , show : function ( b ) { this . fireEvent ( "show" , [ this . tip , b ] ) ; } , hide : function ( b ) { this . fireEvent ( "hide" , [ this . tip , b ] ) ;
} } ) ; } ) ( ) ; var Spinner = new Class ( { Extends : Mask , options : { "class" : "spinner" , containerPosition : { } , content : { "class" : "spinner-content" } , messageContainer : { "class" : "spinner-msg" } , img : { "class" : "spinner-img" } , fxOptions : { link : "chain" } } , initialize : function ( ) { this . parent . apply ( this , arguments ) ;
this . target . store ( "spinner" , this ) ; var a = function ( ) { this . active = false ; } . bind ( this ) ; this . addEvents ( { hide : a , show : a } ) ; } , render : function ( ) { this . parent ( ) ; this . element . set ( "id" , this . options . id || "spinner-" + $time ( ) ) ;
this . content = document . id ( this . options . content ) || new Element ( "div" , this . options . content ) ; this . content . inject ( this . element ) ; if ( this . options . message ) { this . msg = document . id ( this . options . message ) || new Element ( "p" , this . options . messageContainer ) . appendText ( this . options . message ) ;
this . msg . inject ( this . content ) ; } if ( this . options . img ) { this . img = document . id ( this . options . img ) || new Element ( "div" , this . options . img ) ; this . img . inject ( this . content ) ;
} this . element . set ( "tween" , this . options . fxOptions ) ; } , show : function ( a ) { if ( this . active ) { return this . chain ( this . show . bind ( this ) ) ; } if ( ! this . hidden ) { this . callChain . delay ( 20 , this ) ;
return this ; } this . active = true ; return this . parent ( a ) ; } , showMask : function ( a ) { var b = function ( ) { this . content . position ( $merge ( { relativeTo : this . element } , this . options . containerPosition ) ) ;
} . bind ( this ) ; if ( a ) { this . parent ( ) ; b ( ) ; } else { this . element . setStyles ( { display : "block" , opacity : 0 } ) . tween ( "opacity" , this . options . style . opacity || 0.9 ) ; b ( ) ; this . hidden = false ;
this . fireEvent ( "show" ) ; this . callChain ( ) ; } } , hide : function ( a ) { if ( this . active ) { return this . chain ( this . hide . bind ( this ) ) ; } if ( this . hidden ) { this . callChain . delay ( 20 , this ) ;
return this ; } this . active = true ; return this . parent ( a ) ; } , hideMask : function ( a ) { if ( a ) { return this . parent ( ) ; } this . element . tween ( "opacity" , 0 ) . get ( "tween" ) . chain ( function ( ) { this . element . setStyle ( "display" , "none" ) ;
this . hidden = true ; this . fireEvent ( "hide" ) ; this . callChain ( ) ; } . bind ( this ) ) ; } , destroy : function ( ) { this . content . destroy ( ) ; this . parent ( ) ; this . target . eliminate ( "spinner" ) ;
} } ) ; Spinner . implement ( new Chain ) ; if ( window . Request ) { Request = Class . refactor ( Request , { options : { useSpinner : false , spinnerOptions : { } , spinnerTarget : false } , initialize : function ( a ) { this . _send = this . send ;
this . send = function ( c ) { if ( this . spinner ) { this . spinner . chain ( this . _send . bind ( this , c ) ) . show ( ) ; } else { this . _send ( c ) ; } return this ; } ; this . previous ( a ) ; var b = document . id ( this . options . spinnerTarget ) || document . id ( this . options . update ) ;
if ( this . options . useSpinner && b ) { this . spinner = b . get ( "spinner" , this . options . spinnerOptions ) ; [ "onComplete" , "onException" , "onCancel" ] . each ( function ( c ) { this . addEvent ( c , this . spinner . hide . bind ( this . spinner ) ) ;
} , this ) ; } } , getSpinner : function ( ) { return this . spinner ; } } ) ; } Element . Properties . spinner = { set : function ( a ) { var b = this . retrieve ( "spinner" ) ; return this . eliminate ( "spinner" ) . store ( "spinner:options" , a ) ;
} , get : function ( a ) { if ( a || ! this . retrieve ( "spinner" ) ) { if ( this . retrieve ( "spinner" ) ) { this . retrieve ( "spinner" ) . destroy ( ) ; } if ( a || ! this . retrieve ( "spinner:options" ) ) { this . set ( "spinner" , a ) ;
} new Spinner ( this , this . retrieve ( "spinner:options" ) ) ; } return this . retrieve ( "spinner" ) ; } } ; Element . implement ( { spin : function ( a ) { this . get ( "spinner" , a ) . show ( ) ;
return this ; } , unspin : function ( ) { var a = Array . link ( arguments , { options : Object . type , callback : Function . type } ) ; this . get ( "spinner" , a . options ) . hide ( a . callback ) ;
return this ; } } ) ;