2014-02-25 17:05:53 +00:00
( function ( e , undefined ) { var t , n , r = typeof undefined , i = e . location , o = e . document , s = o . documentElement , a = e . jQuery , u = e . $ , l = { } , c = [ ] , p = "2.0.3" , f = c . concat , h = c . push , d = c . slice , g = c . indexOf , m = l . toString , y = l . hasOwnProperty , v = p . trim , x = function ( e , n ) { return new x . fn . init ( e , n , t ) } , b = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ . source , w = /\S+/g , T = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/ , C = /^<(\w+)\s*\/?>(?:<\/\1>|)$/ , k = /^-ms-/ , N = /-([\da-z])/gi , E = function ( e , t ) { return t . toUpperCase ( ) } , S = function ( ) { o . removeEventListener ( "DOMContentLoaded" , S , ! 1 ) , e . removeEventListener ( "load" , S , ! 1 ) , x . ready ( ) } ; x . fn = x . prototype = { jquery : p , constructor : x , init : function ( e , t , n ) { var r , i ; if ( ! e ) return this ; if ( "string" == typeof e ) { if ( r = "<" === e . charAt ( 0 ) && ">" === e . charAt ( e . length - 1 ) && e . length >= 3 ? [ null , e , null ] : T . exec ( e ) , ! r || ! r [ 1 ] && t ) return ! t || t . jquery ? ( t || n ) . find ( e ) : this . constructor ( t ) . find ( e ) ; if ( r [ 1 ] ) { if ( t = t instanceof x ? t [ 0 ] : t , x . merge ( this , x . parseHTML ( r [ 1 ] , t && t . nodeType ? t . ownerDocument || t : o , ! 0 ) ) , C . test ( r [ 1 ] ) && x . isPlainObject ( t ) ) for ( r in t ) x . isFunction ( this [ r ] ) ? this [ r ] ( t [ r ] ) : this . attr ( r , t [ r ] ) ; return this } return i = o . getElementById ( r [ 2 ] ) , i && i . parentNode && ( this . length = 1 , this [ 0 ] = i ) , this . context = o , this . selector = e , this } return e . nodeType ? ( this . context = this [ 0 ] = e , this . length = 1 , this ) : x . isFunction ( e ) ? n . ready ( e ) : ( e . selector !== undefined && ( this . selector = e . selector , this . context = e . context ) , x . makeArray ( e , this ) ) } , selector : "" , length : 0 , toArray : function ( ) { return d . call ( this ) } , get : function ( e ) { return null == e ? this . toArray ( ) : 0 > e ? this [ this . length + e ] : this [ e ] } , pushStack : function ( e ) { var t = x . merge ( this . constructor ( ) , e ) ; return t . prevObject = this , t . context = this . context , t } , each : function ( e , t ) { return x . each ( this , e , t ) } , ready : function ( e ) { return x . ready . promise ( ) . done ( e ) , this } , slice : function ( ) { return this . pushStack ( d . apply ( this , arguments ) ) } , first : function ( ) { return this . eq ( 0 ) } , last : function ( ) { return this . eq ( - 1 ) } , eq : function ( e ) { var t = this . length , n = + e + ( 0 > e ? t : 0 ) ; return this . pushStack ( n >= 0 && t > n ? [ this [ n ] ] : [ ] ) } , map : function ( e ) { return this . pushStack ( x . map ( this , function ( t , n ) { return e . call ( t , n , t ) } ) ) } , end : function ( ) { return this . prevObject || this . constructor ( null ) } , push : h , sort : [ ] . sort , splice : [ ] . splice } , x . fn . init . prototype = x . fn , x . extend = x . fn . extend = function ( ) { var e , t , n , r , i , o , s = arguments [ 0 ] || { } , a = 1 , u = arguments . length , l = ! 1 ; for ( "boolean" == typeof s && ( l = s , s = arguments [ 1 ] || { } , a = 2 ) , "object" == typeof s || x . isFunction ( s ) || ( s = { } ) , u === a && ( s = this , -- a ) ; u > a ; a ++ ) if ( null != ( e = arguments [ a ] ) ) for ( t in e ) n = s [ t ] , r = e [ t ] , s !== r && ( l && r && ( x . isPlainObject ( r ) || ( i = x . isArray ( r ) ) ) ? ( i ? ( i = ! 1 , o = n && x . isArray ( n ) ? n : [ ] ) : o = n && x . isPlainObject ( n ) ? n : { } , s [ t ] = x . extend ( l , o , r ) ) : r !== undefined && ( s [ t ] = r ) ) ; return s } , x . extend ( { expando : "jQuery" + ( p + Math . random ( ) ) . replace ( /\D/g , "" ) , noConflict : function ( t ) { return e . $ === x && ( e . $ = u ) , t && e . jQuery === x && ( e . jQuery = a ) , x } , isReady : ! 1 , readyWait : 1 , holdReady : function ( e ) { e ? x . readyWait ++ : x . ready ( ! 0 ) } , ready : function ( e ) { ( e === ! 0 ? -- x . readyWait : x . isReady ) || ( x . isReady = ! 0 , e !== ! 0 && -- x . readyWait > 0 || ( n . resolveWith ( o , [ x ] ) , x . fn . trigger && x ( o ) . trigger ( "ready" ) . off ( "ready" ) ) ) } , isFunction : function ( e ) { return "function" === x . type ( e ) } , isArray : Array . isArray , isWindow : function ( e ) { return null != e && e === e . window } , isNumeric : function ( e ) { return ! isNaN ( parseFloat ( e ) ) && isFinite ( e ) } , type : function ( e ) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? l [ m . call ( e ) ] || "object" : typeof e } , isPlainObject : function ( e ) { if ( "object" !== x . type ( e ) || e . nodeType || x . isWindow ( e ) ) return ! 1 ; try { if ( e . constructor && ! y . call ( e . constructor . prototype , "isPrototypeOf" ) ) return ! 1 } catch ( t ) { return ! 1 } return ! 0 } , isEmptyObject : function ( e ) { var t ; for ( t in e ) return ! 1 ; return ! 0 } , error : function ( e ) { throw Error ( e ) } , parseHTML : function ( e , t , n ) { if ( ! e || "string" != typeof e ) return null ; "boolean" == typeof t && ( n = t , t = ! 1 ) , t = t || o ; var r = C . exec ( e ) , i = ! n && [ ] ; return r ? [ t . createElement ( r [ 1 ] ) ] : ( r = x . buildFragment ( [ e ] , t , i ) , i && x ( i ) . remove ( ) , x . merge ( [ ] , r . childNodes ) ) } , parseJSON : JSON . parse , parseXML : function ( e ) { var t , n ; if ( ! e || "string" != typeof e ) return null ; try { n = new DOMParser , t = n . parseFromString ( e , "text/xml" ) } catch ( r ) { t = undefined } return ( ! t || t . getElementsByTagName ( "parsererror" ) . length ) && x . error ( "Invalid XML: " + e ) , t } , noop : function ( ) { } , globalEval : function ( e ) { var t , n = e
} ; "inprogress" === i && ( i = n . shift ( ) , r -- ) , i && ( "fx" === t && n . unshift ( "inprogress" ) , delete o . stop , i . call ( e , s , o ) ) , ! r && o && o . empty . fire ( ) } , _queueHooks : function ( e , t ) { var n = t + "queueHooks" ; return q . get ( e , n ) || q . access ( e , n , { empty : x . Callbacks ( "once memory" ) . add ( function ( ) { q . remove ( e , [ t + "queue" , n ] ) } ) } ) } } ) , x . fn . extend ( { queue : function ( e , t ) { var n = 2 ; return "string" != typeof e && ( t = e , e = "fx" , n -- ) , n > arguments . length ? x . queue ( this [ 0 ] , e ) : t === undefined ? this : this . each ( function ( ) { var n = x . queue ( this , e , t ) ; x . _queueHooks ( this , e ) , "fx" === e && "inprogress" !== n [ 0 ] && x . dequeue ( this , e ) } ) } , dequeue : function ( e ) { return this . each ( function ( ) { x . dequeue ( this , e ) } ) } , delay : function ( e , t ) { return e = x . fx ? x . fx . speeds [ e ] || e : e , t = t || "fx" , this . queue ( t , function ( t , n ) { var r = setTimeout ( t , e ) ; n . stop = function ( ) { clearTimeout ( r ) } } ) } , clearQueue : function ( e ) { return this . queue ( e || "fx" , [ ] ) } , promise : function ( e , t ) { var n , r = 1 , i = x . Deferred ( ) , o = this , s = this . length , a = function ( ) { -- r || i . resolveWith ( o , [ o ] ) } ; "string" != typeof e && ( t = e , e = undefined ) , e = e || "fx" ; while ( s -- ) n = q . get ( o [ s ] , e + "queueHooks" ) , n && n . empty && ( r ++ , n . empty . add ( a ) ) ; return a ( ) , i . promise ( t ) } } ) ; var R , M , W = /[\t\r\n\f]/g , $ = /\r/g , B = /^(?:input|select|textarea|button)$/i ; x . fn . extend ( { attr : function ( e , t ) { return x . access ( this , x . attr , e , t , arguments . length > 1 ) } , removeAttr : function ( e ) { return this . each ( function ( ) { x . removeAttr ( this , e ) } ) } , prop : function ( e , t ) { return x . access ( this , x . prop , e , t , arguments . length > 1 ) } , removeProp : function ( e ) { return this . each ( function ( ) { delete this [ x . propFix [ e ] || e ] } ) } , addClass : function ( e ) { var t , n , r , i , o , s = 0 , a = this . length , u = "string" == typeof e && e ; if ( x . isFunction ( e ) ) return this . each ( function ( t ) { x ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( u ) for ( t = ( e || "" ) . match ( w ) || [ ] ; a > s ; s ++ ) if ( n = this [ s ] , r = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( W , " " ) : " " ) ) { o = 0 ; while ( i = t [ o ++ ] ) 0 > r . indexOf ( " " + i + " " ) && ( r += i + " " ) ; n . className = x . trim ( r ) } return this } , removeClass : function ( e ) { var t , n , r , i , o , s = 0 , a = this . length , u = 0 === arguments . length || "string" == typeof e && e ; if ( x . isFunction ( e ) ) return this . each ( function ( t ) { x ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( u ) for ( t = ( e || "" ) . match ( w ) || [ ] ; a > s ; s ++ ) if ( n = this [ s ] , r = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( W , " " ) : "" ) ) { o = 0 ; while ( i = t [ o ++ ] ) while ( r . indexOf ( " " + i + " " ) >= 0 ) r = r . replace ( " " + i + " " , " " ) ; n . className = e ? x . trim ( r ) : "" } return this } , toggleClass : function ( e , t ) { var n = typeof e ; return "boolean" == typeof t && "string" === n ? t ? this . addClass ( e ) : this . removeClass ( e ) : x . isFunction ( e ) ? this . each ( function ( n ) { x ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } ) : this . each ( function ( ) { if ( "string" === n ) { var t , i = 0 , o = x ( this ) , s = e . match ( w ) || [ ] ; while ( t = s [ i ++ ] ) o . hasClass ( t ) ? o . removeClass ( t ) : o . addClass ( t ) } else ( n === r || "boolean" === n ) && ( this . className && q . set ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : q . get ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { var t = " " + e + " " , n = 0 , r = this . length ; for ( ; r > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( W , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } , val : function ( e ) { var t , n , r , i = this [ 0 ] ; { if ( arguments . length ) return r = x . isFunction ( e ) , this . each ( function ( n ) { var i ; 1 === this . nodeType && ( i = r ? e . call ( this , n , x ( this ) . val ( ) ) : e , null == i ? i = "" : "number" == typeof i ? i += "" : x . isArray ( i ) && ( i = x . map ( i , function ( e ) { return null == e ? "" : e + "" } ) ) , t = x . valHooks [ this . type ] || x . valHooks [ this . nodeName . toLowerCase ( ) ] , t && "set" in t && t . set ( this , i , "value" ) !== undefined || ( this . value = i ) ) } ) ; if ( i ) return t = x . valHooks [ i . type ] || x . valHooks [ i . nodeName . toLowerCase ( ) ] , t && "get" in t && ( n = t . get ( i , "value" ) ) !== undefined ? n : ( n = i . value , "string" == typeof n ? n . replace ( $ , "" ) : null == n ? "" : n ) } } } ) , x . extend ( { valHooks : { option : { get : function ( e ) { var t = e . attributes . value ; return ! t || t . specified ? e . value : e . text } } , select : { get : function ( e ) { var t , n , r = e . options , i = e . selectedIndex , o = "select-one" === e . type || 0 > i , s = o ? null : [ ] , a = o ? i + 1 : r . length , u = 0 > i ? a : o ? i : 0 ; for ( ; a > u ; u ++ ) if ( n = r [ u ] , ! ( ! n . selected && u !== i || ( x . support . optDisabled ? n . disabled : null !== n . getAttribute ( "disabled" ) ) || n . parentNode . disabled && x . nodeName ( n . parentNode , "optgroup" ) ) ) { if ( t = x ( n ) . val ( ) , o ) return t ; s . push ( t ) } return s } , set : function ( e , t ) { var n , r , i = e . options , o = x . makeArray ( t ) , s = i . leng
} , delegate : function ( e , t , n , r ) { return this . on ( t , e , n , r ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var Xt , Ut , Yt = x . now ( ) , Vt = /\?/ , Gt = /#.*$/ , Jt = /([?&])_=[^&]*/ , Qt = /^(.*?):[ \t]*([^\r\n]*)$/gm , Kt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ , Zt = /^(?:GET|HEAD)$/ , en = /^\/\// , tn = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ , nn = x . fn . load , rn = { } , on = { } , sn = "*/" . concat ( "*" ) ; try { Ut = i . href } catch ( an ) { Ut = o . createElement ( "a" ) , Ut . href = "" , Ut = Ut . href } Xt = tn . exec ( Ut . toLowerCase ( ) ) || [ ] ; function un ( e ) { return function ( t , n ) { "string" != typeof t && ( n = t , t = "*" ) ; var r , i = 0 , o = t . toLowerCase ( ) . match ( w ) || [ ] ; if ( x . isFunction ( n ) ) while ( r = o [ i ++ ] ) "+" === r [ 0 ] ? ( r = r . slice ( 1 ) || "*" , ( e [ r ] = e [ r ] || [ ] ) . unshift ( n ) ) : ( e [ r ] = e [ r ] || [ ] ) . push ( n ) } } function ln ( e , t , n , r ) { var i = { } , o = e === on ; function s ( a ) { var u ; return i [ a ] = ! 0 , x . each ( e [ a ] || [ ] , function ( e , a ) { var l = a ( t , n , r ) ; return "string" != typeof l || o || i [ l ] ? o ? ! ( u = l ) : undefined : ( t . dataTypes . unshift ( l ) , s ( l ) , ! 1 ) } ) , u } return s ( t . dataTypes [ 0 ] ) || ! i [ "*" ] && s ( "*" ) } function cn ( e , t ) { var n , r , i = x . ajaxSettings . flatOptions || { } ; for ( n in t ) t [ n ] !== undefined && ( ( i [ n ] ? e : r || ( r = { } ) ) [ n ] = t [ n ] ) ; return r && x . extend ( ! 0 , e , r ) , e } x . fn . load = function ( e , t , n ) { if ( "string" != typeof e && nn ) return nn . apply ( this , arguments ) ; var r , i , o , s = this , a = e . indexOf ( " " ) ; return a >= 0 && ( r = e . slice ( a ) , e = e . slice ( 0 , a ) ) , x . isFunction ( t ) ? ( n = t , t = undefined ) : t && "object" == typeof t && ( i = "POST" ) , s . length > 0 && x . ajax ( { url : e , type : i , dataType : "html" , data : t } ) . done ( function ( e ) { o = arguments , s . html ( r ? x ( "<div>" ) . append ( x . parseHTML ( e ) ) . find ( r ) : e ) } ) . complete ( n && function ( e , t ) { s . each ( n , o || [ e . responseText , t , e ] ) } ) , this } , x . each ( [ "ajaxStart" , "ajaxStop" , "ajaxComplete" , "ajaxError" , "ajaxSuccess" , "ajaxSend" ] , function ( e , t ) { x . fn [ t ] = function ( e ) { return this . on ( t , e ) } } ) , x . extend ( { active : 0 , lastModified : { } , etag : { } , ajaxSettings : { url : Ut , type : "GET" , isLocal : Kt . test ( Xt [ 1 ] ) , global : ! 0 , processData : ! 0 , async : ! 0 , contentType : "application/x-www-form-urlencoded; charset=UTF-8" , accepts : { "*" : sn , text : "text/plain" , html : "text/html" , xml : "application/xml, text/xml" , json : "application/json, text/javascript" } , contents : { xml : /xml/ , html : /html/ , json : /json/ } , responseFields : { xml : "responseXML" , text : "responseText" , json : "responseJSON" } , converters : { "* text" : String , "text html" : ! 0 , "text json" : x . parseJSON , "text xml" : x . parseXML } , flatOptions : { url : ! 0 , context : ! 0 } } , ajaxSetup : function ( e , t ) { return t ? cn ( cn ( e , x . ajaxSettings ) , t ) : cn ( x . ajaxSettings , e ) } , ajaxPrefilter : un ( rn ) , ajaxTransport : un ( on ) , ajax : function ( e , t ) { "object" == typeof e && ( t = e , e = undefined ) , t = t || { } ; var n , r , i , o , s , a , u , l , c = x . ajaxSetup ( { } , t ) , p = c . context || c , f = c . context && ( p . nodeType || p . jquery ) ? x ( p ) : x . event , h = x . Deferred ( ) , d = x . Callbacks ( "once memory" ) , g = c . statusCode || { } , m = { } , y = { } , v = 0 , b = "canceled" , T = { readyState : 0 , getResponseHeader : function ( e ) { var t ; if ( 2 === v ) { if ( ! o ) { o = { } ; while ( t = Qt . exec ( i ) ) o [ t [ 1 ] . toLowerCase ( ) ] = t [ 2 ] } t = o [ e . toLowerCase ( ) ] } return null == t ? null : t } , getAllResponseHeaders : function ( ) { return 2 === v ? i : null } , setRequestHeader : function ( e , t ) { var n = e . toLowerCase ( ) ; return v || ( e = y [ n ] = y [ n ] || e , m [ e ] = t ) , this } , overrideMimeType : function ( e ) { return v || ( c . mimeType = e ) , this } , statusCode : function ( e ) { var t ; if ( e ) if ( 2 > v ) for ( t in e ) g [ t ] = [ g [ t ] , e [ t ] ] ; else T . always ( e [ T . status ] ) ; return this } , abort : function ( e ) { var t = e || b ; return n && n . abort ( t ) , k ( 0 , t ) , this } } ; if ( h . promise ( T ) . complete = d . add , T . success = T . done , T . error = T . fail , c . url = ( ( e || c . url || Ut ) + "" ) . replace ( Gt , "" ) . replace ( en , Xt [ 1 ] + "//" ) , c . type = t . method || t . type || c . method || c . type , c . dataTypes = x . trim ( c . dataType || "*" ) . toLowerCase ( ) . match ( w ) || [ "" ] , null == c . crossDomain && ( a = tn . exec ( c . url . toLowerCase ( ) ) , c . crossDomain = ! ( ! a || a [ 1 ] === Xt [ 1 ] && a [ 2 ] === Xt [ 2 ] && ( a [ 3 ] || ( "http:" === a [ 1 ] ? "80" : "443" ) ) === ( Xt [ 3 ] || ( "http:" === Xt [ 1 ] ? "80" : "443" ) ) ) ) , c . data && c . processData && "string" != typeof c . data && ( c . data = x . param ( c . data , c . traditional ) ) , ln ( rn , c , t , T ) , 2 === v ) return T ; u = c . global , u && 0 === x . active ++ && x . event . trigger ( "ajaxStart" ) , c . type = c . type . toUpperCase ( ) , c . hasContent = ! Zt . test ( c . type ) , r = c . url , c . hasContent || ( c . data && ( r = c . url += ( Vt . test ( r ) ? "&" : "?" ) + c . data , delete c . data ) , c . cache === ! 1 && ( c . url = Jt . test ( r ) ? r . replace ( Jt , "$1_=" + Yt ++ ) : r + ( Vt . test ( r ) ? "&" : "?" ) + "_=" + Yt ++ ) ) , c . ifModified && ( x . lastModified [ r ] && T . setRequestHe
2014-02-25 22:37:05 +00:00
m = md5 _ii ( m , l , o , n , p [ g + 6 ] , 15 , - 1560198380 ) ; n = md5 _ii ( n , m , l , o , p [ g + 13 ] , 21 , 1309151649 ) ; o = md5 _ii ( o , n , m , l , p [ g + 4 ] , 6 , - 145523070 ) ; l = md5 _ii ( l , o , n , m , p [ g + 11 ] , 10 , - 1120210379 ) ; m = md5 _ii ( m , l , o , n , p [ g + 2 ] , 15 , 718787259 ) ; n = md5 _ii ( n , m , l , o , p [ g + 9 ] , 21 , - 343485551 ) ; o = safe _add ( o , j ) ; n = safe _add ( n , h ) ; m = safe _add ( m , f ) ; l = safe _add ( l , e ) } return Array ( o , n , m , l ) } function md5 _cmn ( h , e , d , c , g , f ) { return safe _add ( bit _rol ( safe _add ( safe _add ( e , h ) , safe _add ( c , f ) ) , g ) , d ) } function md5 _ff ( g , f , k , j , e , i , h ) { return md5 _cmn ( f & k | ~ f & j , g , f , e , i , h ) } function md5 _gg ( g , f , k , j , e , i , h ) { return md5 _cmn ( f & j | k & ~ j , g , f , e , i , h ) } function md5 _hh ( g , f , k , j , e , i , h ) { return md5 _cmn ( f ^ k ^ j , g , f , e , i , h ) } function md5 _ii ( g , f , k , j , e , i , h ) { return md5 _cmn ( k ^ ( f | ~ j ) , g , f , e , i , h ) } function safe _add ( a , d ) { var c = ( a & 65535 ) + ( d & 65535 ) ; var b = ( a >> 16 ) + ( d >> 16 ) + ( c >> 16 ) ; return b << 16 | c & 65535 } function bit _rol ( a , b ) { return a << b | a >>> 32 - b } ( function ( ) { function s ( a , c , b ) { a . addEventListener ? a . addEventListener ( c , b , ! 1 ) : a . attachEvent ( "on" + c , b ) } function y ( a ) { return "keypress" == a . type ? String . fromCharCode ( a . which ) : h [ a . which ] ? h [ a . which ] : z [ a . which ] ? z [ a . which ] : String . fromCharCode ( a . which ) . toLowerCase ( ) } function t ( a , c ) { a = a || { } ; var b = ! 1 , d ; for ( d in m ) a [ d ] && m [ d ] > c ? b = ! 0 : m [ d ] = 0 ; b || ( p = ! 1 ) } function A ( a , c , b , d , g ) { var f , e , h = [ ] , j = b . type ; if ( ! l [ a ] ) return [ ] ; "keyup" == j && u ( a ) && ( c = [ a ] ) ; for ( f = 0 ; f < l [ a ] . length ; ++ f ) if ( e = l [ a ] [ f ] , ! ( e . seq && m [ e . seq ] != e . level ) && j == e . action && ( "keypress" == j && ! b . metaKey && ! b . ctrlKey || c . sort ( ) . join ( "," ) === e . modifiers . sort ( ) . join ( "," ) ) ) d && e . combo == g && l [ a ] . splice ( f , 1 ) , h . push ( e ) ; return h } function v ( a , c , b ) { if ( ! k . stopCallback ( c , c . target || c . srcElement , b ) && ! 1 === a ( c , b ) ) c . preventDefault && c . preventDefault ( ) , c . stopPropagation && c . stopPropagation ( ) , c . returnValue = ! 1 , c . cancelBubble = ! 0 } function w ( a ) { "number" !== typeof a . which && ( a . which = a . keyCode ) ; var c = y ( a ) ; if ( c ) if ( "keyup" == a . type && x == c ) x = ! 1 ; else { var b = [ ] ; a . shiftKey && b . push ( "shift" ) ; a . altKey && b . push ( "alt" ) ; a . ctrlKey && b . push ( "ctrl" ) ; a . metaKey && b . push ( "meta" ) ; var b = A ( c , b , a ) , d , g = { } , f = 0 , e = ! 1 ; for ( d = 0 ; d < b . length ; ++ d ) b [ d ] . seq ? ( e = ! 0 , f = Math . max ( f , b [ d ] . level ) , g [ b [ d ] . seq ] = 1 , v ( b [ d ] . callback , a , b [ d ] . combo ) ) : ! e && ! p && v ( b [ d ] . callback , a , b [ d ] . combo ) ; a . type == p && ! u ( c ) && t ( g , f ) } } function u ( a ) { return "shift" == a || "ctrl" == a || "alt" == a || "meta" == a } function B ( a , c , b ) { if ( ! b ) { if ( ! q ) { q = { } ; for ( var d in h ) 95 < d && 112 > d || h . hasOwnProperty ( d ) && ( q [ h [ d ] ] = d ) } b = q [ a ] ? "keydown" : "keypress" } "keypress" == b && c . length && ( b = "keydown" ) ; return b } function C ( a , c , b , d , g ) { r [ a + ":" + b ] = c ; a = a . replace ( /\s+/g , " " ) ; var f = a . split ( " " ) , e , h , j = [ ] ; if ( 1 < f . length ) { var k = a , n = b ; m [ k ] = 0 ; n || ( n = B ( f [ 0 ] , [ ] ) ) ; a = function ( ) { p = n ; ++ m [ k ] ; clearTimeout ( D ) ; D = setTimeout ( t , 1e3 ) } ; b = function ( a ) { v ( c , a , k ) ; "keyup" !== n && ( x = y ( a ) ) ; setTimeout ( t , 10 ) } ; for ( d = 0 ; d < f . length ; ++ d ) C ( f [ d ] , d < f . length - 1 ? a : b , n , k , d ) } else { h = "+" === a ? [ "+" ] : a . split ( "+" ) ; for ( f = 0 ; f < h . length ; ++ f ) e = h [ f ] , E [ e ] && ( e = E [ e ] ) , b && ( "keypress" != b && F [ e ] ) && ( e = F [ e ] , j . push ( "shift" ) ) , u ( e ) && j . push ( e ) ; b = B ( e , j , b ) ; l [ e ] || ( l [ e ] = [ ] ) ; A ( e , j , { type : b } , ! d , a ) ; l [ e ] [ d ? "unshift" : "push" ] ( { callback : c , modifiers : j , action : b , seq : d , level : g , combo : a } ) } } for ( var h = { 8 : "backspace" , 9 : "tab" , 13 : "enter" , 16 : "shift" , 17 : "ctrl" , 18 : "alt" , 20 : "capslock" , 27 : "esc" , 32 : "space" , 33 : "pageup" , 34 : "pagedown" , 35 : "end" , 36 : "home" , 37 : "left" , 38 : "up" , 39 : "right" , 40 : "down" , 45 : "ins" , 46 : "del" , 91 : "meta" , 93 : "meta" , 224 : "meta" } , z = { 106 : "*" , 107 : "+" , 109 : "-" , 110 : "." , 111 : "/" , 186 : ";" , 187 : "=" , 188 : "," , 189 : "-" , 190 : "." , 191 : "/" , 192 : "`" , 219 : "[" , 220 : "\\" , 221 : "]" , 222 : "'" } , F = { "~" : "`" , "!" : "1" , "@" : "2" , "#" : "3" , $ : "4" , "%" : "5" , "^" : "6" , "&" : "7" , "*" : "8" , "(" : "9" , ")" : "0" , _ : "-" , "+" : "=" , ":" : ";" , '"' : "'" , "<" : "," , ">" : "." , "?" : "/" , "|" : "\\" } , E = { option : "alt" , command : "meta" , "return" : "enter" , escape : "esc" } , q , l = { } , r = { } , m = { } , D , x = ! 1 , p = ! 1 , g = 1 ; 20 > g ; ++ g ) h [ 111 + g ] = "f" + g ; for ( g = 0 ; 9 >= g ; ++ g ) h [ g + 96 ] = g ; s ( document , "keypress" , w ) ; s ( document , "keydown" , w ) ; s ( document , "keyup" , w ) ; var k = { bind : function ( a , c , b ) { a = a instanceof Array ? a : [ a ] ; for ( var d = 0 ; d < a . length ; ++ d ) C ( a [ d ] , c , b ) ; return this } , unbind : function ( a , c ) { return k . bind ( a , function ( ) { } , c ) } , trigger : function ( a , c ) { if ( r [ a + ":" + c ] ) r [ a + ":" + c ] ( ) ; return this } , reset : function ( ) { l = { } ; r = { } ; return this } , stopCallback : function ( a , c ) { return - 1 < ( " " + c . className + " " ) . indexOf ( " mousetrap " ) ? ! 1 : "INPUT" == c . tagName || "SELECT" == c . tagName || "TEXTAREA" == c . tagName || c . contentEditable && "
2014-02-27 21:46:21 +00:00
} ) . on ( event _name , "#tags .tag span" , function ( ) { photo . deleteTag ( photo . getID ( ) , $ ( this ) . data ( "index" ) ) } ) ; Mousetrap . bind ( "u" , function ( ) { $ ( "#upload_files" ) . click ( ) } ) . bind ( "s" , function ( ) { if ( visible . photo ( ) ) $ ( "#button_star" ) . click ( ) } ) . bind ( "command+backspace" , function ( ) { if ( visible . photo ( ) && ! visible . message ( ) ) photo . delete ( [ photo . getID ( ) ] ) } ) . bind ( "left" , function ( ) { if ( visible . photo ( ) ) $ ( "#imageview a#previous" ) . click ( ) } ) . bind ( "right" , function ( ) { if ( visible . photo ( ) ) $ ( "#imageview a#next" ) . click ( ) } ) . bind ( "i" , function ( ) { if ( visible . infobox ( ) ) view . infobox . hide ( ) ; else if ( ! visible . albums ( ) ) view . infobox . show ( ) } ) ; Mousetrap . bindGlobal ( "enter" , function ( ) { if ( $ ( ".message .button.active" ) . length ) $ ( ".message .button.active" ) . addClass ( "pressed" ) . click ( ) } ) ; Mousetrap . bindGlobal ( [ "esc" , "command+up" ] , function ( e ) { e . preventDefault ( ) ; if ( visible . message ( ) && $ ( ".message .close" ) . length > 0 ) modal . close ( ) ; else if ( visible . contextMenu ( ) ) contextMenu . close ( ) ; else if ( visible . infobox ( ) ) view . infobox . hide ( ) ; else if ( visible . photo ( ) ) lychee . goto ( album . getID ( ) ) ; else if ( visible . album ( ) ) lychee . goto ( "" ) ; else if ( visible . albums ( ) && $ ( "#search" ) . val ( ) . length !== 0 ) search . reset ( ) } ) ; $ ( document ) . on ( "keyup" , "#password" , function ( ) { if ( $ ( this ) . val ( ) . length > 0 ) $ ( this ) . removeClass ( "error" ) } ) . on ( event _name , "#title.editable" , function ( ) { if ( visible . photo ( ) ) photo . setTitle ( [ photo . getID ( ) ] ) ; else album . setTitle ( [ album . getID ( ) ] ) } ) . on ( "click" , ".album" , function ( ) { lychee . goto ( $ ( this ) . attr ( "data-id" ) ) } ) . on ( "click" , ".photo" , function ( ) { lychee . goto ( album . getID ( ) + "/" + $ ( this ) . attr ( "data-id" ) ) } ) . on ( event _name , ".message .close" , modal . close ) . on ( event _name , ".message .button:first" , function ( ) { if ( modal . fns !== null ) modal . fns [ 0 ] ( ) ; if ( ! visible . signin ( ) ) modal . close ( ) } ) . on ( event _name , ".message .button:last" , function ( ) { if ( modal . fns !== null ) modal . fns [ 1 ] ( ) ; if ( ! visible . signin ( ) ) modal . close ( ) } ) . on ( event _name , ".button_add" , function ( e ) { contextMenu . add ( e ) } ) . on ( "change" , "#upload_files" , function ( ) { modal . close ( ) ; upload . start . local ( this . files ) } ) . on ( "contextmenu" , ".photo" , function ( e ) { contextMenu . photo ( photo . getID ( ) , e ) } ) . on ( "contextmenu" , ".album" , function ( e ) { contextMenu . album ( album . getID ( ) , e ) } ) . on ( event _name , ".contextmenu_bg" , contextMenu . close ) . on ( "contextmenu" , ".contextmenu_bg" , contextMenu . close ) . on ( event _name , "#infobox_overlay" , view . infobox . hide ) . on ( "dragover" , function ( e ) { e . preventDefault ( ) } , false ) . on ( "drop" , function ( e ) { e . stopPropagation ( ) ; e . preventDefault ( ) ; if ( e . originalEvent . dataTransfer . files . length > 0 ) upload . start . local ( e . originalEvent . dataTransfer . files ) ; else if ( e . originalEvent . dataTransfer . getData ( "Text" ) . length > 3 ) upload . start . url ( e . originalEvent . dataTransfer . getData ( "Text" ) ) ; return true } ) ; lychee . init ( ) } ) ; loadingBar = { status : null , show : function ( status , errorText ) { if ( status === "error" ) { loadingBar . status = "error" ; if ( ! errorText ) errorText = "Whoops, it looks like something went wrong. Please reload the site and try again!" ; lychee . loadingBar . removeClass ( "loading uploading error" ) . addClass ( status ) . html ( "<h1>Error: <span>" + errorText + "</span></h1>" ) . show ( ) . css ( "height" , "40px" ) ; if ( visible . controls ( ) ) lychee . header . addClass ( "error" ) ; clearTimeout ( lychee . loadingBar . data ( "timeout" ) ) ; lychee . loadingBar . data ( "timeout" , setTimeout ( function ( ) { loadingBar . hide ( true ) } , 3e3 ) ) } else if ( loadingBar . status === null ) { loadingBar . status = "loading" ; clearTimeout ( lychee . loadingBar . data ( "timeout" ) ) ; lychee . loadingBar . data ( "timeout" , setTimeout ( function ( ) { lychee . loadingBar . show ( ) . removeClass ( "loading uploading error" ) . addClass ( "loading" ) ; if ( visible . controls ( ) ) lychee . header . addClass ( "loading" ) } , 1e3 ) ) } } , hide : function ( force _hide ) { if ( loadingBar . status !== "error" && loadingBar . status !== null || force _hide ) { loadingBar . status = null ; clearTimeout ( lychee . loadingBar . data ( "timeout" ) ) ; lychee . loadingBar . html ( "" ) . css ( "height" , "3px" ) ; if ( visible . controls ( ) ) lychee . header . removeClass ( "error loading" ) ; setTimeout ( function ( ) { lychee . loadingBar . hide ( ) } , 300 ) } } } ; var lychee = { version : "2.1 r1" , api _path : "php/api.php" , update _path : "http://lychee.electerious.com/version/index.php" , updateURL : "https://github.com/electerious/Lychee" , website : "http://lychee.electerious.com" , upload _path _thumb : "uploads/thumb/" , upload _path _big
2014-02-25 22:37:05 +00:00
upload . close ( true ) ; $ ( "body" ) . append ( build . uploadModal ( icon , text ) ) } , setIcon : function ( icon ) { $ ( ".upload_message a" ) . remove ( ) ; $ ( ".upload_message" ) . prepend ( "<a class='icon-" + icon + "'></a>" ) } , setProgress : function ( progress ) { $ ( ".progressbar div" ) . css ( "width" , progress + "%" ) } , setText : function ( text ) { $ ( ".progressbar" ) . remove ( ) ; $ ( ".upload_message" ) . append ( "<p>" + text + "</p>" ) } , notify : function ( title ) { var popup ; if ( ! window . webkitNotifications ) return false ; if ( window . webkitNotifications . checkPermission ( ) !== 0 ) window . webkitNotifications . requestPermission ( ) ; if ( window . webkitNotifications . checkPermission ( ) === 0 && title ) { popup = window . webkitNotifications . createNotification ( "" , title , "You can now manage your new photo(s)." ) ; popup . show ( ) } } , start : { local : function ( files ) { var pre _progress = 0 , formData = new FormData , xhr = new XMLHttpRequest , albumID = album . getID ( ) , popup , progress ; if ( files . length <= 0 ) return false ; if ( albumID === false ) albumID = 0 ; formData . append ( "function" , "upload" ) ; formData . append ( "albumID" , albumID ) ; for ( var i = 0 ; i < files . length ; i ++ ) { if ( files [ i ] . type !== "image/jpeg" && files [ i ] . type !== "image/jpg" && files [ i ] . type !== "image/png" && files [ i ] . type !== "image/gif" && files [ i ] . type !== "image/webp" ) { loadingBar . show ( "error" , "The file format of " + files [ i ] . name + " is not supported." ) ; return false } else { formData . append ( i , files [ i ] ) } } upload . show ( ) ; window . onbeforeunload = function ( ) { return "Lychee is currently uploading!" } ; xhr . open ( "POST" , lychee . api _path ) ; xhr . onload = function ( ) { if ( xhr . status === 200 ) { upload . close ( ) ; upload . notify ( "Upload complete" ) ; window . onbeforeunload = null ; if ( album . getID ( ) === false ) lychee . goto ( "0" ) ; else album . load ( albumID ) } } ; xhr . upload . onprogress = function ( e ) { if ( e . lengthComputable ) { progress = e . loaded / e . total * 100 | 0 ; if ( progress > pre _progress ) { upload . setProgress ( progress ) ; pre _progress = progress } if ( progress >= 100 ) { upload . setIcon ( "cog" ) ; upload . setText ( "Processing photos" ) } } } ; $ ( "#upload_files" ) . val ( "" ) ; xhr . send ( formData ) } , url : function ( ) { var albumID = album . getID ( ) , params , extension , buttons ; if ( albumID === false ) albumID = 0 ; buttons = [ [ "Import" , function ( ) { link = $ ( ".message input.text" ) . val ( ) ; if ( link && link . length > 3 ) { extension = link . split ( "." ) . pop ( ) ; if ( extension !== "jpeg" && extension !== "jpg" && extension !== "png" && extension !== "gif" && extension !== "webp" ) { loadingBar . show ( "error" , "The file format of this link is not supported." ) ; return false } modal . close ( ) ; upload . show ( "cog" , "Importing from URL" ) ; params = "importUrl&url=" + escape ( encodeURI ( link ) ) + "&albumID=" + albumID ; lychee . api ( params , function ( data ) { upload . close ( ) ; upload . notify ( "Import complete" ) ; if ( album . getID ( ) === false ) lychee . goto ( "0" ) ; else album . load ( albumID ) ; if ( data !== true ) lychee . error ( null , params , data ) } ) } else loadingBar . show ( "error" , "Link to short or too long. Please try another one!" ) } ] , [ "Cancel" , function ( ) { } ] ] ; modal . show ( "Import from Link" , "Please enter the direct link to a photo to import it: <input class='text' type='text' placeholder='http://' value='http://'>" , buttons ) } , server : function ( ) { var albumID = album . getID ( ) , params , buttons ; if ( albumID === false ) albumID = 0 ; buttons = [ [ "Import" , function ( ) { modal . close ( ) ; upload . show ( "cog" , "Importing photos" ) ; params = "importServer&albumID=" + albumID ; lychee . api ( params , function ( data ) { upload . close ( ) ; upload . notify ( "Import complete" ) ; if ( data === "Notice: Import only contains albums!" ) { if ( visible . albums ( ) ) lychee . load ( ) ; else lychee . goto ( "" ) } else if ( album . getID ( ) === false ) lychee . goto ( "0" ) ; else album . load ( albumID ) ; if ( data === "Notice: Import only contains albums!" ) return true ; else if ( data === "Warning: Folder empty!" ) lychee . error ( "Folder empty. No photos imported!" , params , data ) ; else if ( data !== true ) lychee . error ( null , params , data ) } ) } ] , [ "Cancel" , function ( ) { } ] ] ; modal . show ( "Import from Server" , "This action will import all photos and albums which are located in <b>'uploads/import/'</b> of your Lychee installation." , buttons ) } , dropbox : function ( ) { var albumID = album . getID ( ) , params ; if ( albumID === false ) albumID = 0 ; lychee . loadDropbox ( function ( ) { Dropbox . choose ( { linkType : "direct" , multiselect : true , success : function ( files ) { if ( files . length > 1 ) { for ( var i = 0 ; i < files . length ; i ++ ) files [ i ] = files [ i ] . link } else files = files [ 0 ] . link ; upload . show ( "cog" , "Importing photos" ) ; params = " im