2012-06-23 19:40:40 +00:00
( function ( a ) { function n ( f ) { if ( typeof f . data === "string" ) { var c = f . handler , m = f . data . toLowerCase ( ) . split ( " " ) ; f . handler = function ( p ) { if ( ! ( this !== p . target && ( /textarea|select/i . test ( p . target . nodeName ) || p . target . type === "text" ) ) ) { var b = p . type !== "keypress" && a . hotkeys . specialKeys [ p . which ] , d = String . fromCharCode ( p . which ) . toLowerCase ( ) , e = "" , l = { } ; if ( p . altKey && b !== "alt" ) e += "alt+" ; if ( p . ctrlKey && b !== "ctrl" ) e += "ctrl+" ; if ( p . metaKey && ! p . ctrlKey && b !== "meta" ) e += "meta+" ; if ( p . shiftKey && b !== "shift" ) e += "shift+" ; if ( b ) l [ e + b ] =
true ; else { l [ e + d ] = true ; l [ e + a . hotkeys . shiftNums [ d ] ] = true ; if ( e === "shift+" ) l [ a . hotkeys . shiftNums [ d ] ] = true } b = 0 ; for ( d = m . length ; b < d ; b ++ ) if ( l [ m [ b ] ] ) return c . apply ( this , arguments ) } } } } a . hotkeys = { version : "0.8" , specialKeys : { 8 : "backspace" , 9 : "tab" , 13 : "return" , 16 : "shift" , 17 : "ctrl" , 18 : "alt" , 19 : "pause" , 20 : "capslock" , 27 : "esc" , 32 : "space" , 33 : "pageup" , 34 : "pagedown" , 35 : "end" , 36 : "home" , 37 : "left" , 38 : "up" , 39 : "right" , 40 : "down" , 45 : "insert" , 46 : "del" , 96 : "0" , 97 : "1" , 98 : "2" , 99 : "3" , 100 : "4" , 101 : "5" , 102 : "6" , 103 : "7" , 104 : "8" , 105 : "9" ,
106 : "*" , 107 : "+" , 109 : "-" , 110 : "." , 111 : "/" , 112 : "f1" , 113 : "f2" , 114 : "f3" , 115 : "f4" , 116 : "f5" , 117 : "f6" , 118 : "f7" , 119 : "f8" , 120 : "f9" , 121 : "f10" , 122 : "f11" , 123 : "f12" , 144 : "numlock" , 145 : "scroll" , 191 : "/" , 224 : "meta" , 219 : "[" , 221 : "]" } , shiftNums : { "`" : "~" , "1" : "!" , "2" : "@" , "3" : "#" , "4" : "$" , "5" : "%" , "6" : "^" , "7" : "&" , "8" : "*" , "9" : "(" , "0" : ")" , "-" : "_" , "=" : "+" , ";" : ": " , "'" : '"' , "," : "<" , "." : ">" , "/" : "?" , "\\" : "|" } } ; a . each ( [ "keydown" , "keyup" , "keypress" ] , function ( ) { a . event . special [ this ] = { add : n } } ) } ) ( jQuery ) ; ( function ( a , n ) { function f ( ba ) { return typeof ba === "string" } function c ( ba ) { var S = e . call ( arguments , 1 ) ; return function ( ) { return ba . apply ( this , S . concat ( e . call ( arguments ) ) ) } } function m ( ba , S , U , ra , la ) { var ma ; if ( ra !== d ) { S = U . match ( ba ? /^([^#]*)\#?(.*)$/ : /^([^#?]*)\??([^#]*)(#?.*)/ ) ; U = S [ 3 ] || "" ; if ( la === 2 && f ( ra ) ) ra = ra . replace ( ba ? ea : ca , "" ) ; else { ma = o ( S [ 2 ] ) ; ra = f ( ra ) ? o [ ba ? fa : O ] ( ra ) : ra ; ra = la === 2 ? ra : la === 1 ? a . extend ( { } , ra , ma ) : a . extend ( { } , ma , ra ) ; ra = u ( ra ) ; if ( ba ) ra = ra . replace ( qa , l ) } ba = S [ 1 ] + ( ba ? "#" : ra || ! S [ 1 ] ? "?" : "" ) + ra + U } else ba =
S ( U !== d ? U : n [ sa ] [ ja ] ) ; return ba } function p ( ba , S , U ) { if ( S === d || typeof S === "boolean" ) { U = S ; S = u [ ba ? fa : O ] ( ) } else S = f ( S ) ? S . replace ( ba ? ea : ca , "" ) : S ; return o ( S , U ) } function b ( ba , S , U , ra ) { if ( ! f ( U ) && typeof U !== "object" ) { ra = U ; U = S ; S = d } return this . each ( function ( ) { var la = a ( this ) , ma = S || da ( ) [ ( this . nodeName || "" ) . toLowerCase ( ) ] || "" , Y = ma && la . attr ( ma ) || "" ; la . attr ( ma , u [ ba ] ( Y , U , ra ) ) } ) } var d , e = Array . prototype . slice , l = decodeURIComponent , u = a . param , z , o , L , T = a . bbq = a . bbq || { } , N , J , da , V = a . event . special , O = "querystring" , fa = "fragment" ,
sa = "location" , ja = "href" , ca = /^.*\?|#.*$/g , ea = /^.*\#/ , qa , pa = { } ; u [ O ] = c ( m , 0 , function ( ba ) { return ba . replace ( /(?:^[^?#]*\?([^#]*).*$)?.*/ , "$1" ) } ) ; u [ fa ] = z = c ( m , 1 , function ( ba ) { return ba . replace ( /^[^#]*#?(.*)$/ , "$1" ) } ) ; z . noEscape = function ( ba ) { ba = ba || "" ; ba = a . map ( ba . split ( "" ) , encodeURIComponent ) ; qa = RegExp ( ba . join ( "|" ) , "g" ) } ; z . noEscape ( ",/" ) ; a . deparam = o = function ( ba , S ) { var U = { } , ra = { "true" : true , "false" : false , "null" : null } ; a . each ( ba . replace ( /\+/g , " " ) . split ( "&" ) , function ( la , ma ) { var Y = ma . split ( "=" ) , za = l ( Y [ 0 ] ) , Ia = U ,
Qa = 0 , Ka = za . split ( "][" ) , Ua = Ka . length - 1 ; if ( /\[/ . test ( Ka [ 0 ] ) && /\]$/ . test ( Ka [ Ua ] ) ) { Ka [ Ua ] = Ka [ Ua ] . replace ( /\]$/ , "" ) ; Ka = Ka . shift ( ) . split ( "[" ) . concat ( Ka ) ; Ua = Ka . length - 1 } else Ua = 0 ; if ( Y . length === 2 ) { Y = l ( Y [ 1 ] ) ; if ( S ) Y = Y && ! isNaN ( Y ) ? + Y : Y === "undefined" ? d : ra [ Y ] !== d ? ra [ Y ] : Y ; if ( Ua ) for ( ; Qa <= Ua ; Qa ++ ) { za = Ka [ Qa ] === "" ? Ia . length : Ka [ Qa ] ; Ia = Ia [ za ] = Qa < Ua ? Ia [ za ] || ( Ka [ Qa + 1 ] && isNaN ( Ka [ Qa + 1 ] ) ? { } : [ ] ) : Y } else if ( a . isArray ( U [ za ] ) ) U [ za ] . push ( Y ) ; else U [ za ] = U [ za ] !== d ? [ U [ za ] , Y ] : Y } else if ( za ) U [ za ] = S ? d : "" } ) ; return U } ; o [ O ] = c ( p , 0 ) ; o [ fa ] = L =
c ( p , 1 ) ; a . elemUrlAttr || ( a . elemUrlAttr = function ( ba ) { return a . extend ( pa , ba ) } ) ( { a : ja , base : ja , iframe : "src" , img : "src" , input : "src" , form : "action" , link : ja , script : "src" } ) ; da = a . elemUrlAttr ; a . fn [ O ] = c ( b , O ) ; a . fn [ fa ] = c ( b , fa ) ; T . pushState = N = function ( ba , S ) { if ( f ( ba ) && /^#/ . test ( ba ) && S === d ) S = 2 ; var U = ba !== d ; U = z ( n [ sa ] [ ja ] , U ? ba : { } , U ? S : 2 ) ; n [ sa ] [ ja ] = U + ( /#/ . test ( U ) ? "" : "#" ) } ; T . getState = J = function ( ba , S ) { return ba === d || typeof ba === "boolean" ? L ( ba ) : L ( S ) [ ba ] } ; T . removeState = function ( ba ) { var S = { } ; if ( ba !== d ) { S = J ( ) ; a . each ( a . isArray ( ba ) ?
ba : arguments , function ( U , ra ) { delete S [ ra ] } ) } N ( S , 2 ) } ; V . hashchange = a . extend ( V . hashchange , { add : function ( ba ) { function S ( ra ) { var la = ra [ fa ] = z ( ) ; ra . getState = function ( ma , Y ) { return ma === d || typeof ma === "boolean" ? o ( la , ma ) : o ( la , Y ) [ ma ] } ; U . apply ( this , arguments ) } var U ; if ( a . isFunction ( ba ) ) { U = ba ; return S } else { U = ba . handler ; ba . handler = S } } } ) } ) ( jQuery , this ) ;
( function ( a , n , f ) { function c ( z ) { z = z || n [ b ] [ d ] ; return z . replace ( /^[^#]*#?(.*)$/ , "$1" ) } var m , p = a . event . special , b = "location" , d = "href" , e = document . documentMode , l = a . browser . msie && ( e === f || e < 8 ) , u = "onhashchange" in n && ! l ; a . hashchangeDelay = 100 ; p . hashchange = a . extend ( p . hashchange , { setup : function ( ) { if ( u ) return false ; a ( m . start ) } , teardown : function ( ) { if ( u ) return false ; a ( m . stop ) } } ) ; m = function ( ) { function z ( ) { N = J = function ( da ) { return da } ; if ( l ) { T = a ( '<iframe src="javascript:0"/>' ) . hide ( ) . insertAfter ( "body" ) [ 0 ] . contentWindow ;
J = function ( ) { return c ( T . document [ b ] [ d ] ) } ; N = function ( da , V ) { if ( da !== V ) { var O = T . document ; O . open ( ) . close ( ) ; O [ b ] . hash = "#" + da } } ; N ( c ( ) ) } } var o = { } , L , T , N , J ; o . start = function ( ) { if ( ! L ) { var da = c ( ) ; N || z ( ) ; ( function V ( ) { var O = c ( ) , fa = J ( da ) ; if ( O !== da ) { N ( da = O , fa ) ; a ( n ) . trigger ( "hashchange" ) } else if ( fa !== da ) n [ b ] [ d ] = n [ b ] [ d ] . replace ( /#.*/ , "" ) + "#" + fa ; L = setTimeout ( V , a . hashchangeDelay ) } ) ( ) } } ; o . stop = function ( ) { if ( ! T ) { L && clearTimeout ( L ) ; L = 0 } } ; return o } ( ) } ) ( jQuery , this ) ; ( function ( a ) { var n = { } , f ; a . svgIcons = function ( c , m ) { function p ( ba , S ) { if ( ba !== "ajax" ) { if ( da ) return ; var U = ( T = ja [ 0 ] . contentDocument ) && T . getElementById ( "svg_eof" ) ; if ( ! U && ! ( S && U ) ) { V ++ ; if ( V < 50 ) setTimeout ( p , 20 ) ; else { d ( ) ; da = true } return } da = true } L = a ( T . firstChild ) . children ( ) ; if ( m . no _img ) setTimeout ( function ( ) { J || b ( ) } , 500 ) ; else { U = sa + "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D" ; N = a ( new Image ) . attr ( { src : U , width : 0 , height : 0 } ) . appendTo ( "body" ) . load ( function ( ) { b ( true ) } ) . error ( function ( ) { b ( ) } ) } }
function b ( ba , S ) { if ( ! J ) { if ( m . no _img ) ba = false ; if ( ba ) { var U = a ( document . createElement ( "div" ) ) ; U . hide ( ) . appendTo ( "body" ) } if ( S ) { var ra = m . fallback _path ? m . fallback _path : "" ; a . each ( S , function ( Ua , Wa ) { a ( "#" + Ua ) ; var La = a ( new Image ) . attr ( { "class" : "svg_icon" , src : ra + Wa , width : z , height : o , alt : "icon" } ) ; pa ( La , Ua ) } ) } else for ( var la = L . length , ma = 0 ; ma < la ; ma ++ ) { var Y = L [ ma ] , za = Y . id ; if ( za === "svg_eof" ) break ; a ( "#" + za ) ; Y = Y . getElementsByTagNameNS ( l , "svg" ) [ 0 ] ; var Ia = document . createElementNS ( l , "svg" ) ; Ia . setAttributeNS ( l , "viewBox" ,
[ 0 , 0 , z , o ] . join ( " " ) ) ; var Qa = Y . getAttribute ( "width" ) , Ka = Y . getAttribute ( "height" ) ; Y . removeAttribute ( "width" ) ; Y . removeAttribute ( "height" ) ; Y . getAttribute ( "viewBox" ) || Y . setAttribute ( "viewBox" , [ 0 , 0 , Qa , Ka ] . join ( " " ) ) ; Ia . setAttribute ( "xmlns" , l ) ; Ia . setAttribute ( "width" , z ) ; Ia . setAttribute ( "height" , o ) ; Ia . setAttribute ( "xmlns:xlink" , u ) ; Ia . setAttribute ( "class" , "svg_icon" ) ; fa || ( Y = Y . cloneNode ( true ) ) ; Ia . appendChild ( Y ) ; if ( ba ) { fa || Ia . cloneNode ( true ) ; U . empty ( ) . append ( Ia ) ; Y = sa + e ( U . html ( ) ) ; Y = a ( new Image ) . attr ( { "class" : "svg_icon" ,
src : Y } ) } else Y = f ( a ( Ia ) , ma ) ; pa ( Y , za ) } m . placement && a . each ( m . placement , function ( Ua , Wa ) { n [ Wa ] && a ( Ua ) . each ( function ( La ) { var Ga = n [ Wa ] . clone ( ) ; if ( La > 0 && ! ba ) Ga = f ( Ga , La , true ) ; qa ( a ( this ) , Ga , Wa ) } ) } ) ; if ( ! S ) { ba && U . remove ( ) ; ja && ja . remove ( ) ; N && N . remove ( ) } m . resize && a . resizeSvgIcons ( m . resize ) ; J = true ; m . callback && m . callback ( n ) } } function d ( ) { if ( c . indexOf ( ".svgz" ) != - 1 ) { var ba = c . replace ( ".svgz" , ".svg" ) ; window . console && console . log ( ".svgz failed, trying with .svg" ) ; a . svgIcons ( ba , m ) } else m . fallback && b ( false , m . fallback ) } function e ( ba ) { if ( window . btoa ) return window . btoa ( ba ) ;
var S = Array ( Math . floor ( ( ba . length + 2 ) / 3 ) * 4 ) , U , ra , la , ma , Y , za , Ia = 0 , Qa = 0 ; do { U = ba . charCodeAt ( Ia ++ ) ; ra = ba . charCodeAt ( Ia ++ ) ; la = ba . charCodeAt ( Ia ++ ) ; ma = U >> 2 ; U = ( U & 3 ) << 4 | ra >> 4 ; Y = ( ra & 15 ) << 2 | la >> 6 ; za = la & 63 ; if ( isNaN ( ra ) ) Y = za = 64 ; else if ( isNaN ( la ) ) za = 64 ; S [ Qa ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( ma ) ; S [ Qa ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( U ) ; S [ Qa ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( Y ) ; S [ Qa ++ ] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( za ) } while ( Ia < ba . length ) ; return S . join ( "" ) } var l = "http://www.w3.org/2000/svg" , u = "http://www.w3.org/1999/xlink" , z = m . w ? m . w : 24 , o = m . h ? m . h : 24 , L , T , N , J = false , da = false , V = 0 , O = navigator . userAgent , fa = ! ! window . opera ; O . indexOf ( "Safari/" ) > - 1 && O . indexOf ( "Chrome/" ) ; var sa = "data:image/svg+xml;charset=utf-8;base64," ; if ( m . svgz ) { var ja = a ( '<object data="' + c + '" type=image/svg+xml>' ) . appendTo ( "body" ) . hide ( ) ; try { T = ja [ 0 ] . contentDocument ; ja . load ( p ) ;
p ( 0 , true ) } catch ( ca ) { d ( ) } } else { var ea = new DOMParser ; a . ajax ( { url : c , dataType : "string" , success : function ( ba ) { if ( ba ) { T = ea . parseFromString ( ba , "text/xml" ) ; a ( function ( ) { p ( "ajax" ) } ) } else a ( d ) } , error : function ( ba ) { if ( window . opera ) a ( function ( ) { d ( ) } ) ; else if ( ba . responseText ) { T = ea . parseFromString ( ba . responseText , "text/xml" ) ; T . childNodes . length || a ( d ) ; a ( function ( ) { p ( "ajax" ) } ) } else a ( d ) } } ) } var qa = function ( ba , S , U , ra ) { fa && S . css ( "visibility" , "hidden" ) ; if ( m . replace ) { ra && S . attr ( "id" , U ) ; ( U = ba . attr ( "class" ) ) && S . attr ( "class" ,
"svg_icon " + U ) ; ba . replaceWith ( S ) } else ba . append ( S ) ; fa && setTimeout ( function ( ) { S . removeAttr ( "style" ) } , 1 ) } , pa = function ( ba , S ) { if ( m . id _match === undefined || m . id _match !== false ) qa ( holder , ba , S , true ) ; n [ S ] = ba } ; f = function ( ba , S ) { var U = ba . find ( "defs" ) ; if ( ! U . length ) return ba ; U = fa ? U . find ( "*" ) . filter ( function ( ) { return ! ! this . id } ) : U . find ( "[id]" ) ; var ra = ba [ 0 ] . getElementsByTagName ( "*" ) , la = ra . length ; U . each ( function ( ma ) { var Y = this . id ; a ( T ) . find ( "#" + Y ) ; this . id = ma = "x" + Y + S + ma ; Y = "url(#" + Y + ")" ; var za = "url(#" + ma + ")" ; for ( ma = 0 ; ma <
la ; ma ++ ) { var Ia = ra [ ma ] ; Ia . getAttribute ( "fill" ) === Y && Ia . setAttribute ( "fill" , za ) ; Ia . getAttribute ( "stroke" ) === Y && Ia . setAttribute ( "stroke" , za ) ; Ia . getAttribute ( "filter" ) === Y && Ia . setAttribute ( "filter" , za ) } } ) ; return ba } } ; a . getSvgIcon = function ( c , m ) { var p = n [ c ] ; if ( m && p ) p = f ( p , 0 , true ) . clone ( true ) ; return p } ; a . resizeSvgIcons = function ( c ) { var m = ! a ( ".svg_icon:first" ) . length ; a . each ( c , function ( p , b ) { var d = a . isArray ( b ) , e = d ? b [ 0 ] : b , l = d ? b [ 1 ] : b ; if ( m ) p = p . replace ( /\.svg_icon/g , "svg" ) ; a ( p ) . each ( function ( ) { this . setAttribute ( "width" ,
e ) ; this . setAttribute ( "height" , l ) ; if ( window . opera && window . widget ) { this . parentNode . style . width = e + "px" ; this . parentNode . style . height = l + "px" } } ) } ) } } ) ( jQuery ) ; ( function ( ) { function a ( c , m , p ) { c = document . createElementNS ( n . svg , c ) ; if ( f ) for ( var b in m ) c . setAttribute ( b , m [ b ] ) ; else for ( b in m ) { var d = m [ b ] , e = c [ b ] ; if ( e && e . constructor === "SVGLength" ) e . baseVal . value = d ; else c . setAttribute ( b , d ) } p && p . appendChild ( c ) ; return c } var n = { svg : "http://www.w3.org/2000/svg" , xlink : "http://www.w3.org/1999/xlink" } ; if ( ! window . console ) window . console = new function ( ) { this . log = function ( ) { } ; this . dir = function ( ) { } } ; $ . jGraduate = { Paint : function ( c ) { c = c || { } ; this . alpha = isNaN ( c . alpha ) ? 100 : c . alpha ; if ( c . copy ) { this . type =
c . copy . type ; this . alpha = c . copy . alpha ; this . radialGradient = this . linearGradient = this . solidColor = null ; switch ( this . type ) { case "solidColor" : this . solidColor = c . copy . solidColor ; break ; case "linearGradient" : this . linearGradient = c . copy . linearGradient . cloneNode ( true ) ; break ; case "radialGradient" : this . radialGradient = c . copy . radialGradient . cloneNode ( true ) } } else if ( c . linearGradient ) { this . type = "linearGradient" ; this . radialGradient = this . solidColor = null ; this . linearGradient = c . linearGradient . cloneNode ( true ) } else if ( c . radialGradient ) { this . type =
"radialGradient" ; this . linearGradient = this . solidColor = null ; this . radialGradient = c . radialGradient . cloneNode ( true ) } else if ( c . solidColor ) { this . type = "solidColor" ; this . solidColor = c . solidColor } else { this . type = "none" ; this . radialGradient = this . linearGradient = this . solidColor = null } } } ; jQuery . fn . jGraduateDefaults = { paint : new $ . jGraduate . Paint , window : { pickerTitle : "Drag markers to pick a paint" } , images : { clientPath : "images/" } , newstop : "inverse" } ; var f = navigator . userAgent . indexOf ( "Gecko/" ) >= 0 ; jQuery . fn . jGraduate = function ( c ) { var m =
arguments ; return this . each ( function ( ) { function p ( na , Z , ta , M , I ) { var X = I || a ( "stop" , { "stop-color" : Z , "stop-opacity" : ta , offset : na } , ea ) ; if ( I ) { Z = I . getAttribute ( "stop-color" ) ; ta = I . getAttribute ( "stop-opacity" ) ; na = I . getAttribute ( "offset" ) } else ea . appendChild ( X ) ; if ( ta === null ) ta = 1 ; I = a ( "path" , { d : "M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z" , fill : "url(#jGraduate_trans)" , transform : "translate(" + ( 10 + na * fa ) + ", 26)" } , Gb ) ; var Ma =
a ( "path" , { d : "M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z" , fill : Z , "fill-opacity" : ta , transform : "translate(" + ( 10 + na * fa ) + ", 26)" , stroke : "#000" , "stroke-width" : 1.5 } , Gb ) ; $ ( Ma ) . mousedown ( function ( Xa ) { b ( this ) ; Sa = lb ; da . mousemove ( l ) . mouseup ( d ) ; Ea = Nb . offset ( ) ; Xa . preventDefault ( ) ; return false } ) . data ( "stop" , X ) . data ( "bg" , I ) . dblclick ( function ( ) { $ ( "div.jGraduate_LightBox" ) . show ( ) ; for ( var Xa = this , db = + X . getAttribute ( "stop-opacity" ) ||
1 , tb = X . getAttribute ( "stop-color" ) || 1 , xb = ( parseFloat ( db ) * 255 ) . toString ( 16 ) ; xb . length < 2 ; ) xb = "0" + xb ; Z = tb . substr ( 1 ) + xb ; $ ( "#" + o + "_jGraduate_stopPicker" ) . css ( { left : 100 , bottom : 15 } ) . jPicker ( { window : { title : "Pick the start color and opacity for the gradient" } , images : { clientPath : z . images . clientPath } , color : { active : Z , alphaSupport : true } } , function ( Hb ) { tb = Hb . val ( "hex" ) ? "#" + Hb . val ( "hex" ) : "none" ; db = Hb . val ( "a" ) !== null ? Hb . val ( "a" ) / 256 : 1 ; Xa . setAttribute ( "fill" , tb ) ; Xa . setAttribute ( "fill-opacity" , db ) ; X . setAttribute ( "stop-color" ,
tb ) ; X . setAttribute ( "stop-opacity" , db ) ; $ ( "div.jGraduate_LightBox" ) . hide ( ) ; $ ( "#" + o + "_jGraduate_stopPicker" ) . hide ( ) } , null , function ( ) { $ ( "div.jGraduate_LightBox" ) . hide ( ) ; $ ( "#" + o + "_jGraduate_stopPicker" ) . hide ( ) } ) } ) ; $ ( ea ) . find ( "stop" ) . each ( function ( ) { var Xa = $ ( this ) ; if ( + this . getAttribute ( "offset" ) > na ) { if ( ! Z ) { var db = this . getAttribute ( "stop-color" ) , tb = this . getAttribute ( "stop-opacity" ) ; X . setAttribute ( "stop-color" , db ) ; Ma . setAttribute ( "fill" , db ) ; X . setAttribute ( "stop-opacity" , tb === null ? 1 : tb ) ; Ma . setAttribute ( "fill-opacity" ,
tb === null ? 1 : tb ) } Xa . before ( X ) ; return false } } ) ; M && b ( Ma ) ; return X } function b ( na ) { lb && lb . setAttribute ( "stroke" , "#000" ) ; na . setAttribute ( "stroke" , "blue" ) ; lb = na ; lb . parentNode . appendChild ( lb ) } function d ( ) { da . unbind ( "mousemove" , l ) ; if ( Ja . getAttribute ( "display" ) !== "none" ) { Ja . setAttribute ( "display" , "none" ) ; var na = $ ( lb ) , Z = na . data ( "stop" ) ; na = na . data ( "bg" ) ; $ ( [ lb , Z , na ] ) . remove ( ) } Sa = null } function e ( ) { var na = $a ? "rotate(" + $a + "," + Na + "," + mb + ") " : "" ; Za === 1 && Ra === 1 ? ea . removeAttribute ( "gradientTransform" ) : ea . setAttribute ( "gradientTransform" ,
na + "translate(" + - Na * ( Za - 1 ) + "," + - mb * ( Ra - 1 ) + ") scale(" + Za + "," + Ra + ")" ) } function l ( na ) { var Z = na . pageX - Ea . left ; na = na . pageY - Ea . top ; Z = Z < 10 ? 10 : Z > fa + 10 ? fa + 10 : Z ; var ta = "translate(" + Z + ", 26)" ; if ( na < - 60 || na > 130 ) { Ja . setAttribute ( "display" , "block" ) ; Ja . setAttribute ( "transform" , ta ) } else Ja . setAttribute ( "display" , "none" ) ; Sa . setAttribute ( "transform" , ta ) ; $ . data ( Sa , "bg" ) . setAttribute ( "transform" , ta ) ; $ . data ( Sa , "stop" ) . setAttribute ( "offset" , ( Z - 10 ) / fa ) ; var M = 0 ; $ ( ea ) . find ( "stop" ) . each ( function ( ) { var I = this . getAttribute ( "offset" ) ,
X = $ ( this ) ; if ( I < M ) { X . prev ( ) . before ( X ) ; Fa = $ ( ea ) . find ( "stop" ) } M = I } ) } var u = $ ( this ) , z = $ . extend ( true , { } , jQuery . fn . jGraduateDefaults , c ) , o = u . attr ( "id" ) , L = "#" + u . attr ( "id" ) + " " ; if ( L ) { var T = function ( ) { switch ( u . paint . type ) { case "radialGradient" : u . paint . linearGradient = null ; break ; case "linearGradient" : u . paint . radialGradient = null ; break ; case "solidColor" : u . paint . radialGradient = u . paint . linearGradient = null } $ . isFunction ( u . okCallback ) && u . okCallback ( u . paint ) ; u . hide ( ) } , N = function ( ) { $ . isFunction ( u . cancelCallback ) && u . cancelCallback ( ) ;
u . hide ( ) } ; $ . extend ( true , u , { paint : new $ . jGraduate . Paint ( { copy : z . paint } ) , okCallback : $ . isFunction ( m [ 1 ] ) && m [ 1 ] || null , cancelCallback : $ . isFunction ( m [ 2 ] ) && m [ 2 ] || null } ) ; u . position ( ) ; var J = null , da = $ ( window ) ; if ( u . paint . type == "none" ) u . paint = $ . jGraduate . Paint ( { solidColor : "ffffff" } ) ; u . addClass ( "jGraduate_Picker" ) ; u . html ( '<ul class="jGraduate_tabs"><li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li><li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li><li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li></ul><div class="jGraduate_colPick"></div><div class="jGraduate_gradPick"></div><div class="jGraduate_LightBox"></div><div id="' +
o + '_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>' ) ; var V = $ ( L + "> .jGraduate_colPick" ) , O = $ ( L + "> .jGraduate_gradPick" ) ; O . html ( '<div id="' + o + '_jGraduate_Swatch" class="jGraduate_Swatch"><h2 class="jGraduate_Title">' + z . window . pickerTitle + '</h2><div id="' + o + '_jGraduate_GradContainer" class="jGraduate_GradContainer"></div><div id="' + o + '_jGraduate_StopSlider" class="jGraduate_StopSlider"></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_lg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Begin Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="' +
o + '_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="' + o + '_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">End Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="' + o + '_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="' +
o + '_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_rg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Center Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="' + o + '_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="' + o + '_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Focal Point</label><div class="jGraduate_Form_Section"><label>Match center: <input type="checkbox" checked="checked" id="' +
o + '_jGraduate_match_ctr"/></label><br/><label>x:</label><input type="text" id="' + o + '_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="' + o + '_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_StopSection jGraduate_SpreadMethod"><label class="jGraduate_Form_Heading">Spread method</label><div class="jGraduate_Form_Section"><select class="jGraduate_spreadMethod"><option value=pad selected>Pad</option><option value=reflect>Reflect</option><option value=repeat>Repeat</option></select></div></div><div class="jGraduate_Form"><div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field"><label class="prelabel">Radius:</label><div id="' +
o + '_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius"><img id="' + o + '_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="' + z . images . clientPath + 'rangearrows2.gif"></div><label><input type="text" id="' + o + '_jGraduate_RadiusInput" size="3" value="100"/>%</label></div><div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field"><label class="prelabel">Ellip:</label><div id="' + o + '_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip"><img id="' +
o + '_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="' + z . images . clientPath + 'rangearrows2.gif"></div><label><input type="text" id="' + o + '_jGraduate_EllipInput" size="3" value="0"/>%</label></div><div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field"><label class="prelabel">Angle:</label><div id="' + o + '_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle"><img id="' + o + '_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="' + z . images . clientPath +
'rangearrows2.gif"></div><label><input type="text" id="' + o + '_jGraduate_AngleInput" size="3" value="0"/>\u00ba </label></div><div class="jGraduate_Slider jGraduate_OpacField"><label class="prelabel">Opac:</label><div id="' + o + '_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac"><img id="' + o + '_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="' + z . images . clientPath + 'rangearrows2.gif"></div><label><input type="text" id="' + o + '_jGraduate_OpacInput" size="3" value="100"/>%</label></div></div><div class="jGraduate_OkCancel"><input type="button" id="' +
o + '_jGraduate_Ok" class="jGraduate_Ok" value="OK"/><input type="button" id="' + o + '_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/></div>' ) ; var fa = 256 , sa = fa - 0 , ja = fa - 0 , ca , ea , qa , pa = { } ; $ ( ".jGraduate_SliderBar" ) . width ( 145 ) ; var ba = $ ( "#" + o + "_jGraduate_GradContainer" ) [ 0 ] , S = a ( "svg" , { id : o + "_jgraduate_svg" , width : fa , height : fa , xmlns : n . svg } , ba ) ; ca = ca || u . paint . type ; var U = ea = u . paint [ ca ] , ra = u . paint . alpha , la = ca === "solidColor" ; switch ( ca ) { case "solidColor" : case "linearGradient" : if ( ! la ) { ea . id = o + "_lg_jgraduate_grad" ;
U = ea = S . appendChild ( ea ) } a ( "radialGradient" , { id : o + "_rg_jgraduate_grad" } , S ) ; if ( ca === "linearGradient" ) break ; case "radialGradient" : if ( ! la ) { ea . id = o + "_rg_jgraduate_grad" ; U = ea = S . appendChild ( ea ) } a ( "linearGradient" , { id : o + "_lg_jgraduate_grad" } , S ) } if ( la ) { U = ea = $ ( "#" + o + "_lg_jgraduate_grad" ) [ 0 ] ; J = u . paint [ ca ] ; p ( 0 , "#" + J , 1 ) ; var ma = typeof z . newstop ; if ( ma === "string" ) switch ( z . newstop ) { case "same" : p ( 1 , "#" + J , 1 ) ; break ; case "inverse" : ma = "" ; for ( var Y = 0 ; Y < 6 ; Y += 2 ) { J . substr ( Y , 2 ) ; var za = ( 255 - parseInt ( J . substr ( Y , 2 ) , 16 ) ) . toString ( 16 ) ;
if ( za . length < 2 ) za = 0 + za ; ma += za } p ( 1 , "#" + ma , 1 ) ; break ; case "white" : p ( 1 , "#ffffff" , 1 ) ; break ; case "black" : p ( 1 , "#000000" , 1 ) } else if ( ma === "object" ) p ( 1 , z . newstop . color || "#" + J , "opac" in z . newstop ? z . newstop . opac : 1 ) } J = parseFloat ( U . getAttribute ( "x1" ) || 0 ) ; ma = parseFloat ( U . getAttribute ( "y1" ) || 0 ) ; Y = parseFloat ( U . getAttribute ( "x2" ) || 1 ) ; za = parseFloat ( U . getAttribute ( "y2" ) || 0 ) ; var Ia = parseFloat ( U . getAttribute ( "cx" ) || 0.5 ) , Qa = parseFloat ( U . getAttribute ( "cy" ) || 0.5 ) , Ka = parseFloat ( U . getAttribute ( "fx" ) || Ia ) , Ua = parseFloat ( U . getAttribute ( "fy" ) ||
Qa ) ; qa = a ( "rect" , { id : o + "_jgraduate_rect" , x : 0 , y : 0 , width : sa , height : ja , fill : "url(#" + o + "_jgraduate_grad)" , "fill-opacity" : ra / 100 } , S ) ; var Wa = $ ( "<div/>" ) . attr ( { "class" : "grad_coord jGraduate_lg_field" , title : "Begin Stop" } ) . text ( 1 ) . css ( { top : ma * fa , left : J * fa } ) . data ( "coord" , "start" ) . appendTo ( ba ) , La = Wa . clone ( ) . text ( 2 ) . css ( { top : za * fa , left : Y * fa } ) . attr ( "title" , "End stop" ) . data ( "coord" , "end" ) . appendTo ( ba ) , Ga = $ ( "<div/>" ) . attr ( { "class" : "grad_coord jGraduate_rg_field" , title : "Center stop" } ) . text ( "C" ) . css ( { top : Qa * fa , left : Ia *
fa } ) . data ( "coord" , "center" ) . appendTo ( ba ) , Oa = Ga . clone ( ) . text ( "F" ) . css ( { top : Ua * fa , left : Ka * fa , display : "none" } ) . attr ( "title" , "Focus point" ) . data ( "coord" , "focus" ) . appendTo ( ba ) ; Oa [ 0 ] . id = o + "_jGraduate_focusCoord" ; $ ( L + " .grad_coord" ) ; $ . each ( [ "x1" , "y1" , "x2" , "y2" , "cx" , "cy" , "fx" , "fy" ] , function ( na , Z ) { var ta = ea . getAttribute ( Z ) , M = isNaN ( Z [ 1 ] ) ; ta || ( ta = M ? "0.5" : Z === "x2" ? "1.0" : "0.0" ) ; pa [ Z ] = $ ( "#" + o + "_jGraduate_" + Z ) . val ( ta ) . change ( function ( ) { if ( isNaN ( parseFloat ( this . value ) ) || this . value < 0 ) this . value = 0 ; else if ( this . value >
1 ) this . value = 1 ; if ( ! ( Z [ 0 ] === "f" && ! nb ) ) if ( M && ca === "radialGradient" || ! M && ca === "linearGradient" ) ea . setAttribute ( Z , this . value ) ; var I = M ? Z [ 0 ] === "c" ? Ga : Oa : Z [ 1 ] === "1" ? Wa : La , X = Z . indexOf ( "x" ) >= 0 ? "left" : "top" ; I . css ( X , this . value * fa ) } ) . change ( ) } ) ; var Fa , Gb , Nb = $ ( "#" + o + "_jGraduate_StopSlider" ) , lb , ab , Sa , Ja = a ( "path" , { d : "m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5" , fill : "none" , stroke : "#D00" , "stroke-width" : 5 , display : "none" } , ab ) , Ea , Za = 1 , Ra = 1 , $a = 0 , Na = Ia , mb = Qa ; ab = a ( "svg" , { width : "100%" , height : 45 } , Nb [ 0 ] ) ; ba = a ( "pattern" , { width : 16 ,
height : 16 , patternUnits : "userSpaceOnUse" , id : "jGraduate_trans" } , ab ) ; a ( "image" , { width : 16 , height : 16 } , ba ) . setAttributeNS ( n . xlink , "xlink:href" , z . images . clientPath + "map-opacity.png" ) ; $ ( ab ) . click ( function ( na ) { Ea = Nb . offset ( ) ; if ( na . target . tagName !== "path" ) { var Z = na . pageX - Ea . left - 8 ; Z = Z < 10 ? 10 : Z > fa + 10 ? fa + 10 : Z ; p ( Z / fa , 0 , 0 , true ) ; na . stopPropagation ( ) } } ) ; $ ( ab ) . mouseover ( function ( ) { ab . appendChild ( Ja ) } ) ; Gb = a ( "g" , { } , ab ) ; a ( "line" , { x1 : 10 , y1 : 15 , x2 : fa + 10 , y2 : 15 , "stroke-width" : 2 , stroke : "#000" } , ab ) ; var Ab = O . find ( ".jGraduate_spreadMethod" ) . change ( function ( ) { ea . setAttribute ( "spreadMethod" ,
$ ( this ) . val ( ) ) } ) , cb = null , jb = function ( na ) { var Z = na . pageX - wb . left , ta = na . pageY - wb . top ; Z = Z < 0 ? 0 : Z > fa ? fa : Z ; ta = ta < 0 ? 0 : ta > fa ? fa : ta ; cb . css ( "left" , Z ) . css ( "top" , ta ) ; Z /= sa ; ta /= ja ; var M = cb . data ( "coord" ) , I = ea ; switch ( M ) { case "start" : pa . x1 . val ( Z ) ; pa . y1 . val ( ta ) ; I . setAttribute ( "x1" , Z ) ; I . setAttribute ( "y1" , ta ) ; break ; case "end" : pa . x2 . val ( Z ) ; pa . y2 . val ( ta ) ; I . setAttribute ( "x2" , Z ) ; I . setAttribute ( "y2" , ta ) ; break ; case "center" : pa . cx . val ( Z ) ; pa . cy . val ( ta ) ; I . setAttribute ( "cx" , Z ) ; I . setAttribute ( "cy" , ta ) ; Na = Z ; mb = ta ; e ( ) ; break ; case "focus" : pa . fx . val ( Z ) ;
pa . fy . val ( ta ) ; I . setAttribute ( "fx" , Z ) ; I . setAttribute ( "fy" , ta ) ; e ( ) } na . preventDefault ( ) } , kb = function ( ) { cb = null ; da . unbind ( "mousemove" , jb ) . unbind ( "mouseup" , kb ) } ; Fa = ea . getElementsByTagNameNS ( n . svg , "stop" ) ; if ( Ca < 2 ) { for ( ; Ca < 2 ; ) { ea . appendChild ( document . createElementNS ( n . svg , "stop" ) ) ; ++ Ca } Fa = ea . getElementsByTagNameNS ( n . svg , "stop" ) } var Ca = Fa . length ; for ( Y = 0 ; Y < Ca ; Y ++ ) p ( 0 , 0 , 0 , 0 , Fa [ Y ] ) ; Ab . val ( ea . getAttribute ( "spreadMethod" ) || "pad" ) ; var wb , nb = false ; qa . setAttribute ( "fill-opacity" , ra / 100 ) ; $ ( "#" + o + " div.grad_coord" ) . mousedown ( function ( na ) { na . preventDefault ( ) ;
cb = $ ( this ) ; cb . offset ( ) ; wb = cb . parent ( ) . offset ( ) ; da . mousemove ( jb ) . mouseup ( kb ) } ) ; $ ( "#" + o + "_jGraduate_Ok" ) . bind ( "click" , function ( ) { u . paint . type = ca ; u . paint [ ca ] = ea . cloneNode ( true ) ; u . paint . solidColor = null ; T ( ) } ) ; $ ( "#" + o + "_jGraduate_Cancel" ) . bind ( "click" , function ( ) { N ( ) } ) ; if ( ca === "radialGradient" ) if ( nb ) Oa . show ( ) ; else { Oa . hide ( ) ; pa . fx . val ( "" ) ; pa . fy . val ( "" ) } $ ( "#" + o + "_jGraduate_match_ctr" ) [ 0 ] . checked = ! nb ; var yb , Bb ; $ ( "#" + o + "_jGraduate_match_ctr" ) . change ( function ( ) { nb = ! this . checked ; Oa . toggle ( nb ) ; pa . fx . val ( "" ) ; pa . fy . val ( "" ) ;
var na = ea ; if ( nb ) { var Z = yb || 0.5 , ta = Bb || 0.5 ; na . setAttribute ( "fx" , Z ) ; na . setAttribute ( "fy" , ta ) ; pa . fx . val ( Z ) ; pa . fy . val ( ta ) } else { yb = na . getAttribute ( "fx" ) ; Bb = na . getAttribute ( "fy" ) ; na . removeAttribute ( "fx" ) ; na . removeAttribute ( "fy" ) } } ) ; Fa = ea . getElementsByTagNameNS ( n . svg , "stop" ) ; Ca = Fa . length ; if ( Ca < 2 ) { for ( ; Ca < 2 ; ) { ea . appendChild ( document . createElementNS ( n . svg , "stop" ) ) ; ++ Ca } Fa = ea . getElementsByTagNameNS ( n . svg , "stop" ) } var ob ; ra = O = 0 ; if ( ca === "radialGradient" ) { S = ea . gradientTransform . baseVal ; if ( S . numberOfItems === 2 ) { Ca =
S . getItem ( 0 ) ; S = S . getItem ( 1 ) ; if ( Ca . type === 2 && S . type === 3 ) { Ca = S . matrix ; if ( Ca . a !== 1 ) O = Math . round ( - ( 1 - Ca . a ) * 100 ) ; else if ( Ca . d !== 1 ) O = Math . round ( ( 1 - Ca . d ) * 100 ) } } else if ( S . numberOfItems === 3 ) { ba = S . getItem ( 0 ) ; Ca = S . getItem ( 1 ) ; S = S . getItem ( 2 ) ; if ( ba . type === 4 && Ca . type === 2 && S . type === 3 ) { ra = Math . round ( ba . angle ) ; Ca = S . matrix ; if ( Ca . a !== 1 ) O = Math . round ( - ( 1 - Ca . a ) * 100 ) ; else if ( Ca . d !== 1 ) O = Math . round ( ( 1 - Ca . d ) * 100 ) } } } O = { radius : { handle : "#" + o + "_jGraduate_RadiusArrows" , input : "#" + o + "_jGraduate_RadiusInput" , val : ( ea . getAttribute ( "r" ) ||
0.5 ) * 100 } , opacity : { handle : "#" + o + "_jGraduate_OpacArrows" , input : "#" + o + "_jGraduate_OpacInput" , val : u . paint . alpha || 100 } , ellip : { handle : "#" + o + "_jGraduate_EllipArrows" , input : "#" + o + "_jGraduate_EllipInput" , val : O } , angle : { handle : "#" + o + "_jGraduate_AngleArrows" , input : "#" + o + "_jGraduate_AngleInput" , val : ra } } ; $ . each ( O , function ( na , Z ) { var ta = $ ( Z . handle ) ; ta . mousedown ( function ( M ) { var I = ta . parent ( ) ; ob = { type : na , elem : ta , input : $ ( Z . input ) , parent : I , offset : I . offset ( ) } ; da . mousemove ( Cb ) . mouseup ( Kb ) ; M . preventDefault ( ) } ) ; $ ( Z . input ) . val ( Z . val ) . change ( function ( ) { var M =
+ this . value , I = 0 , X = ca === "radialGradient" ; switch ( na ) { case "radius" : X && ea . setAttribute ( "r" , M / 100 ) ; I = Math . pow ( M / 100 , 0.4 ) / 2 * 145 ; break ; case "opacity" : u . paint . alpha = M ; qa . setAttribute ( "fill-opacity" , M / 100 ) ; I = M * 1.45 ; break ; case "ellip" : Za = Ra = 1 ; if ( M === 0 ) { I = 72.5 ; break } if ( M > 99.5 ) M = 99.5 ; if ( M > 0 ) Ra = 1 - M / 100 ; else Za = - ( M / 100 ) - 1 ; I = 145 * ( ( M + 100 ) / 2 ) / 100 ; X && e ( ) ; break ; case "angle" : $a = M ; I = $a / 180 ; I += 0.5 ; I *= 145 ; X && e ( ) } if ( I > 145 ) I = 145 ; else if ( I < 0 ) I = 0 ; ta . css ( { "margin-left" : I - 5 } ) } ) . change ( ) } ) ; var Cb = function ( na ) { var Z = na . pageX -
ob . offset . left - parseInt ( ob . parent . css ( "border-left-width" ) ) ; if ( Z > 145 ) Z = 145 ; if ( Z <= 0 ) Z = 0 ; var ta = Z - 5 ; Z /= 145 ; switch ( ob . type ) { case "radius" : Z = Math . pow ( Z * 2 , 2.5 ) ; if ( Z > 0.98 && Z < 1.02 ) Z = 1 ; if ( Z <= 0.01 ) Z = 0.01 ; ea . setAttribute ( "r" , Z ) ; break ; case "opacity" : u . paint . alpha = parseInt ( Z * 100 ) ; qa . setAttribute ( "fill-opacity" , Z ) ; break ; case "ellip" : Ra = Za = 1 ; if ( Z < 0.5 ) { Z /= 0.5 ; Za = Z <= 0 ? 0.01 : Z } else if ( Z > 0.5 ) { Z /= 0.5 ; Z = 2 - Z ; Ra = Z <= 0 ? 0.01 : Z } e ( ) ; Z -= 1 ; if ( Ra === Z + 1 ) Z = Math . abs ( Z ) ; break ; case "angle" : Z -= 0.5 ; $a = Z *= 180 ; e ( ) ; Z /= 100 } ob . elem . css ( { "margin-left" : ta } ) ;
Z = Math . round ( Z * 100 ) ; ob . input . val ( Z ) ; na . preventDefault ( ) } , Kb = function ( ) { da . unbind ( "mousemove" , Cb ) . unbind ( "mouseup" , Kb ) ; ob = null } ; for ( O = ( u . paint . alpha * 255 / 100 ) . toString ( 16 ) ; O . length < 2 ; ) O = "0" + O ; O = O . split ( "." ) [ 0 ] ; J = u . paint . solidColor == "none" ? "" : u . paint . solidColor + O ; la || ( J = Fa [ 0 ] . getAttribute ( "stop-color" ) ) ; $ . extend ( $ . fn . jPicker . defaults . window , { alphaSupport : true , effects : { type : "show" , speed : 0 } } ) ; V . jPicker ( { window : { title : z . window . pickerTitle } , images : { clientPath : z . images . clientPath } , color : { active : J , alphaSupport : true } } ,
function ( na ) { u . paint . type = "solidColor" ; u . paint . alpha = na . val ( "ahex" ) ? Math . round ( na . val ( "a" ) / 255 * 100 ) : 100 ; u . paint . solidColor = na . val ( "hex" ) ? na . val ( "hex" ) : "none" ; u . paint . radialGradient = null ; T ( ) } , null , function ( ) { N ( ) } ) ; var Ib = $ ( L + " .jGraduate_tabs li" ) ; Ib . click ( function ( ) { Ib . removeClass ( "jGraduate_tab_current" ) ; $ ( this ) . addClass ( "jGraduate_tab_current" ) ; $ ( L + " > div" ) . hide ( ) ; var na = $ ( this ) . attr ( "data-type" ) ; $ ( L + " .jGraduate_gradPick" ) . show ( ) ; if ( na === "rg" || na === "lg" ) { $ ( ".jGraduate_" + na + "_field" ) . show ( ) ; $ ( ".jGraduate_" +
( na === "lg" ? "rg" : "lg" ) + "_field" ) . hide ( ) ; $ ( "#" + o + "_jgraduate_rect" ) [ 0 ] . setAttribute ( "fill" , "url(#" + o + "_" + na + "_jgraduate_grad)" ) ; ca = na === "lg" ? "linearGradient" : "radialGradient" ; $ ( "#" + o + "_jGraduate_OpacInput" ) . val ( u . paint . alpha ) . change ( ) ; var Z = $ ( "#" + o + "_" + na + "_jgraduate_grad" ) [ 0 ] ; if ( ea !== Z ) { var ta = $ ( ea ) . find ( "stop" ) ; $ ( Z ) . empty ( ) . append ( ta ) ; ea = Z ; Z = Ab . val ( ) ; ea . setAttribute ( "spreadMethod" , Z ) } nb = na === "rg" && ea . getAttribute ( "fx" ) != null && ! ( Ia == Ka && Qa == Ua ) ; $ ( "#" + o + "_jGraduate_focusCoord" ) . toggle ( nb ) ; if ( nb ) $ ( "#" +
o + "_jGraduate_match_ctr" ) [ 0 ] . checked = false } else { $ ( L + " .jGraduate_gradPick" ) . hide ( ) ; $ ( L + " .jGraduate_colPick" ) . show ( ) } } ) ; $ ( L + " > div" ) . hide ( ) ; Ib . removeClass ( "jGraduate_tab_current" ) ; var Rb ; switch ( u . paint . type ) { case "linearGradient" : Rb = $ ( L + " .jGraduate_tab_lingrad" ) ; break ; case "radialGradient" : Rb = $ ( L + " .jGraduate_tab_radgrad" ) ; break ; default : Rb = $ ( L + " .jGraduate_tab_color" ) } u . show ( ) ; setTimeout ( function ( ) { Rb . addClass ( "jGraduate_tab_current" ) . click ( ) } , 10 ) } else alert ( "Container element must have an id attribute to maintain unique id strings for sub-elements." ) } ) } } ) ( ) ; $ . fn . SpinButton = function ( a ) { function n ( f , c ) { for ( var m = f [ c ] , p = document . body ; ( f = f . offsetParent ) && f != p ; ) if ( ! $ . browser . msie || f . currentStyle . position != "relative" ) m += f [ c ] ; return m } return this . each ( function ( ) { this . repeating = false ; this . spinCfg = { min : a && ! isNaN ( parseFloat ( a . min ) ) ? Number ( a . min ) : null , max : a && ! isNaN ( parseFloat ( a . max ) ) ? Number ( a . max ) : null , step : a && a . step ? Number ( a . step ) : 1 , stepfunc : a && a . stepfunc ? a . stepfunc : false , page : a && a . page ? Number ( a . page ) : 10 , upClass : a && a . upClass ? a . upClass : "up" , downClass : a && a . downClass ?
a . downClass : "down" , reset : a && a . reset ? a . reset : this . value , delay : a && a . delay ? Number ( a . delay ) : 500 , interval : a && a . interval ? Number ( a . interval ) : 100 , _btn _width : 20 , _direction : null , _delay : null , _repeat : null , callback : a && a . callback ? a . callback : null } ; this . spinCfg . smallStep = a && a . smallStep ? a . smallStep : this . spinCfg . step / 2 ; this . adjustValue = function ( f ) { f = isNaN ( this . value ) ? this . spinCfg . reset : $ . isFunction ( this . spinCfg . stepfunc ) ? this . spinCfg . stepfunc ( this , f ) : Number ( ( Number ( this . value ) + Number ( f ) ) . toFixed ( 5 ) ) ; if ( this . spinCfg . min !==
null ) f = Math . max ( f , this . spinCfg . min ) ; if ( this . spinCfg . max !== null ) f = Math . min ( f , this . spinCfg . max ) ; this . value = f ; $ . isFunction ( this . spinCfg . callback ) && this . spinCfg . callback ( this ) } ; $ ( this ) . addClass ( a && a . spinClass ? a . spinClass : "spin-button" ) . mousemove ( function ( f ) { var c = f . pageX || f . x , m = f . pageY || f . y ; f = f . target || f . srcElement ; var p = svgEditor . tool _scale || 1 , b = $ ( f ) . height ( ) / 2 ; c = c > n ( f , "offsetLeft" ) + f . offsetWidth * p - this . spinCfg . _btn _width ? m < n ( f , "offsetTop" ) + b * p ? 1 : - 1 : 0 ; if ( c !== this . spinCfg . _direction ) { switch ( c ) { case 1 : $ ( this ) . removeClass ( this . spinCfg . downClass ) . addClass ( this . spinCfg . upClass ) ;
break ; case - 1 : $ ( this ) . removeClass ( this . spinCfg . upClass ) . addClass ( this . spinCfg . downClass ) ; break ; default : $ ( this ) . removeClass ( this . spinCfg . upClass ) . removeClass ( this . spinCfg . downClass ) } this . spinCfg . _direction = c } } ) . mouseout ( function ( ) { $ ( this ) . removeClass ( this . spinCfg . upClass ) . removeClass ( this . spinCfg . downClass ) ; this . spinCfg . _direction = null ; window . clearInterval ( this . spinCfg . _repeat ) ; window . clearTimeout ( this . spinCfg . _delay ) } ) . mousedown ( function ( f ) { if ( f . button === 0 && this . spinCfg . _direction != 0 ) { var c = this ,
m = f . shiftKey ? c . spinCfg . smallStep : c . spinCfg . step , p = function ( ) { c . adjustValue ( c . spinCfg . _direction * m ) } ; p ( ) ; c . spinCfg . _delay = window . setTimeout ( function ( ) { p ( ) ; c . spinCfg . _repeat = window . setInterval ( p , c . spinCfg . interval ) } , c . spinCfg . delay ) } } ) . mouseup ( function ( ) { window . clearInterval ( this . spinCfg . _repeat ) ; window . clearTimeout ( this . spinCfg . _delay ) } ) . dblclick ( function ( ) { $ . browser . msie && this . adjustValue ( this . spinCfg . _direction * this . spinCfg . step ) } ) . keydown ( function ( f ) { switch ( f . keyCode ) { case 38 : this . adjustValue ( this . spinCfg . step ) ;
break ; case 40 : this . adjustValue ( - this . spinCfg . step ) ; break ; case 33 : this . adjustValue ( this . spinCfg . page ) ; break ; case 34 : this . adjustValue ( - this . spinCfg . page ) } } ) . keypress ( function ( f ) { if ( this . repeating ) switch ( f . keyCode ) { case 38 : this . adjustValue ( this . spinCfg . step ) ; break ; case 40 : this . adjustValue ( - this . spinCfg . step ) ; break ; case 33 : this . adjustValue ( this . spinCfg . page ) ; break ; case 34 : this . adjustValue ( - this . spinCfg . page ) } else this . repeating = true } ) . keyup ( function ( f ) { this . repeating = false ; switch ( f . keyCode ) { case 38 : case 40 : case 33 : case 34 : case 13 : this . adjustValue ( 0 ) } } ) . bind ( "mousewheel" ,
function ( f ) { if ( f . wheelDelta >= 120 ) this . adjustValue ( this . spinCfg . step ) ; else f . wheelDelta <= - 120 && this . adjustValue ( - this . spinCfg . step ) ; f . preventDefault ( ) } ) . change ( function ( ) { this . adjustValue ( 0 ) } ) ; this . addEventListener && this . addEventListener ( "DOMMouseScroll" , function ( f ) { if ( f . detail > 0 ) this . adjustValue ( - this . spinCfg . step ) ; else f . detail < 0 && this . adjustValue ( this . spinCfg . step ) ; f . preventDefault ( ) } , false ) } ) } ; function touchHandler ( a ) { var n = a . changedTouches , f = n [ 0 ] , c = "" ; switch ( a . type ) { case "touchstart" : c = "mousedown" ; break ; case "touchmove" : c = "mousemove" ; break ; case "touchend" : c = "mouseup" ; break ; default : return } var m = document . createEvent ( "MouseEvent" ) ; m . initMouseEvent ( c , true , true , window , 1 , f . screenX , f . screenY , f . clientX , f . clientY , false , false , false , false , 0 , null ) ; if ( n . length < 2 ) { f . target . dispatchEvent ( m ) ; a . preventDefault ( ) } } ; jQuery && function ( ) { var a = $ ( window ) , n = $ ( document ) ; $ . extend ( $ . fn , { contextMenu : function ( f , c ) { if ( f . menu == undefined ) return false ; if ( f . inSpeed == undefined ) f . inSpeed = 150 ; if ( f . outSpeed == undefined ) f . outSpeed = 75 ; if ( f . inSpeed == 0 ) f . inSpeed = - 1 ; if ( f . outSpeed == 0 ) f . outSpeed = - 1 ; $ ( this ) . each ( function ( ) { var m = $ ( this ) , p = $ ( m ) . offset ( ) , b = $ ( "#" + f . menu ) ; b . addClass ( "contextMenu" ) ; $ ( this ) . bind ( "mousedown" , function ( d ) { $ ( this ) . mouseup ( function ( e ) { var l = $ ( this ) ; l . unbind ( "mouseup" ) ; $ ( ".contextMenu" ) . hide ( ) ; if ( d . button === 2 || f . allowLeft ||
d . ctrlKey && svgedit . browser . isMac ( ) ) { e . stopPropagation ( ) ; if ( m . hasClass ( "disabled" ) ) return false ; var u = e . pageX , z = e . pageY ; e = a . width ( ) - b . width ( ) ; var o = a . height ( ) - b . height ( ) ; if ( u > e - 15 ) u = e - 15 ; if ( z > o - 30 ) z = o - 30 ; n . unbind ( "click" ) ; b . css ( { top : z , left : u } ) . fadeIn ( f . inSpeed ) ; b . find ( "A" ) . mouseover ( function ( ) { b . find ( "LI.hover" ) . removeClass ( "hover" ) ; $ ( this ) . parent ( ) . addClass ( "hover" ) } ) . mouseout ( function ( ) { b . find ( "LI.hover" ) . removeClass ( "hover" ) } ) ; n . keypress ( function ( L ) { switch ( L . keyCode ) { case 38 : if ( b . find ( "LI.hover" ) . length ) { b . find ( "LI.hover" ) . removeClass ( "hover" ) . prevAll ( "LI:not(.disabled)" ) . eq ( 0 ) . addClass ( "hover" ) ;
b . find ( "LI.hover" ) . length || b . find ( "LI:last" ) . addClass ( "hover" ) } else b . find ( "LI:last" ) . addClass ( "hover" ) ; break ; case 40 : if ( b . find ( "LI.hover" ) . length == 0 ) b . find ( "LI:first" ) . addClass ( "hover" ) ; else { b . find ( "LI.hover" ) . removeClass ( "hover" ) . nextAll ( "LI:not(.disabled)" ) . eq ( 0 ) . addClass ( "hover" ) ; b . find ( "LI.hover" ) . length || b . find ( "LI:first" ) . addClass ( "hover" ) } break ; case 13 : b . find ( "LI.hover A" ) . trigger ( "click" ) ; break ; case 27 : n . trigger ( "click" ) } } ) ; b . find ( "A" ) . unbind ( "mouseup" ) ; b . find ( "LI:not(.disabled) A" ) . mouseup ( function ( ) { n . unbind ( "click" ) . unbind ( "keypress" ) ;
$ ( ".contextMenu" ) . hide ( ) ; c && c ( $ ( this ) . attr ( "href" ) . substr ( 1 ) , $ ( l ) , { x : u - p . left , y : z - p . top , docX : u , docY : z } ) ; return false } ) ; setTimeout ( function ( ) { n . click ( function ( ) { n . unbind ( "click" ) . unbind ( "keypress" ) ; b . fadeOut ( f . outSpeed ) ; return false } ) } , 0 ) } } ) } ) ; if ( $ . browser . mozilla ) $ ( "#" + f . menu ) . each ( function ( ) { $ ( this ) . css ( { MozUserSelect : "none" } ) } ) ; else $ . browser . msie ? $ ( "#" + f . menu ) . each ( function ( ) { $ ( this ) . bind ( "selectstart.disableTextSelect" , function ( ) { return false } ) } ) : $ ( "#" + f . menu ) . each ( function ( ) { $ ( this ) . bind ( "mousedown.disableTextSelect" ,
function ( ) { return false } ) } ) ; $ ( m ) . add ( $ ( "UL.contextMenu" ) ) . bind ( "contextmenu" , function ( ) { return false } ) } ) ; return $ ( this ) } , disableContextMenuItems : function ( f ) { if ( f == undefined ) { $ ( this ) . find ( "LI" ) . addClass ( "disabled" ) ; return $ ( this ) } $ ( this ) . each ( function ( ) { if ( f != undefined ) for ( var c = f . split ( "," ) , m = 0 ; m < c . length ; m ++ ) $ ( this ) . find ( 'A[href="' + c [ m ] + '"]' ) . parent ( ) . addClass ( "disabled" ) } ) ; return $ ( this ) } , enableContextMenuItems : function ( f ) { if ( f == undefined ) { $ ( this ) . find ( "LI.disabled" ) . removeClass ( "disabled" ) ; return $ ( this ) } $ ( this ) . each ( function ( ) { if ( f !=
undefined ) for ( var c = f . split ( "," ) , m = 0 ; m < c . length ; m ++ ) $ ( this ) . find ( 'A[href="' + c [ m ] + '"]' ) . parent ( ) . removeClass ( "disabled" ) } ) ; return $ ( this ) } , disableContextMenu : function ( ) { $ ( this ) . each ( function ( ) { $ ( this ) . addClass ( "disabled" ) } ) ; return $ ( this ) } , enableContextMenu : function ( ) { $ ( this ) . each ( function ( ) { $ ( this ) . removeClass ( "disabled" ) } ) ; return $ ( this ) } , destroyContextMenu : function ( ) { $ ( this ) . each ( function ( ) { $ ( this ) . unbind ( "mousedown" ) . unbind ( "mouseup" ) } ) ; return $ ( this ) } } ) } ( jQuery ) ; var svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . browser ) svgedit . browser = { } ; var a = ! ! document . createElementNS && ! ! document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) . createSVGRect ; svgedit . browser . supportsSvg = function ( ) { return a } ; if ( svgedit . browser . supportsSvg ( ) ) { var n = navigator . userAgent , f = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) , c = ! ! window . opera , m = n . indexOf ( "AppleWebKit" ) >= 0 , p = n . indexOf ( "Gecko/" ) >= 0 , b = n . indexOf ( "MSIE" ) >= 0 , d = n . indexOf ( "Chrome/" ) >= 0 , e = n . indexOf ( "Windows" ) >= 0 , l = n . indexOf ( "Macintosh" ) >=
0 , u = "ontouchstart" in window , z = ! ! f . querySelector , o = ! ! document . evaluate , L = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "path" ) ; sa . setAttribute ( "d" , "M0,0 10,10" ) ; var ja = sa . pathSegList ; sa = sa . createSVGPathSegLinetoAbs ( 5 , 5 ) ; try { ja . replaceItem ( sa , 0 ) ; return true } catch ( ca ) { } return false } ( ) , T = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "path" ) ; sa . setAttribute ( "d" , "M0,0 10,10" ) ; var ja = sa . pathSegList ; sa = sa . createSVGPathSegLinetoAbs ( 5 , 5 ) ; try { ja . insertItemBefore ( sa ,
0 ) ; return true } catch ( ca ) { } return false } ( ) , N = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) , ja = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) ; document . documentElement . appendChild ( sa ) ; ja . setAttribute ( "x" , 5 ) ; sa . appendChild ( ja ) ; var ca = document . createElementNS ( "http://www.w3.org/2000/svg" , "text" ) ; ca . textContent = "a" ; ja . appendChild ( ca ) ; ja = ca . getStartPositionOfChar ( 0 ) . x ; document . documentElement . removeChild ( sa ) ; return ja === 0 } ( ) , J = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" ,
"svg" ) ; document . documentElement . appendChild ( sa ) ; var ja = document . createElementNS ( "http://www.w3.org/2000/svg" , "path" ) ; ja . setAttribute ( "d" , "M0,0 C0,0 10,10 10,0" ) ; sa . appendChild ( ja ) ; ja = ja . getBBox ( ) ; document . documentElement . removeChild ( sa ) ; return ja . height > 4 && ja . height < 5 } ( ) , da = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) ; document . documentElement . appendChild ( sa ) ; var ja = document . createElementNS ( "http://www.w3.org/2000/svg" , "path" ) ; ja . setAttribute ( "d" , "M0,0 10,0" ) ; var ca =
document . createElementNS ( "http://www.w3.org/2000/svg" , "path" ) ; ca . setAttribute ( "d" , "M5,0 15,0" ) ; var ea = document . createElementNS ( "http://www.w3.org/2000/svg" , "g" ) ; ea . appendChild ( ja ) ; ea . appendChild ( ca ) ; sa . appendChild ( ea ) ; ja = ea . getBBox ( ) ; document . documentElement . removeChild ( sa ) ; return ja . width == 15 } ( ) , V = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "rect" ) ; sa . setAttribute ( "x" , 0.1 ) ; ( sa = sa . cloneNode ( false ) . getAttribute ( "x" ) . indexOf ( "," ) == - 1 ) || $ . alert ( "NOTE: This version of Opera is known to contain bugs in SVG-edit.\n\t\tPlease upgrade to the <a href='http://opera.com'>latest version</a> in which the problems have been fixed." ) ;
return sa } ( ) , O = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "rect" ) ; sa . setAttribute ( "style" , "vector-effect:non-scaling-stroke" ) ; return sa . style . vectorEffect === "non-scaling-stroke" } ( ) , fa = function ( ) { var sa = document . createElementNS ( "http://www.w3.org/2000/svg" , "rect" ) . transform . baseVal , ja = f . createSVGTransform ( ) ; sa . appendItem ( ja ) ; return sa . getItem ( 0 ) == ja } ( ) ; svgedit . browser . isOpera = function ( ) { return c } ; svgedit . browser . isWebkit = function ( ) { return m } ; svgedit . browser . isGecko = function ( ) { return p } ;
svgedit . browser . isIE = function ( ) { return b } ; svgedit . browser . isChrome = function ( ) { return d } ; svgedit . browser . isWindows = function ( ) { return e } ; svgedit . browser . isMac = function ( ) { return l } ; svgedit . browser . isTouch = function ( ) { return u } ; svgedit . browser . supportsSelectors = function ( ) { return z } ; svgedit . browser . supportsXpath = function ( ) { return o } ; svgedit . browser . supportsPathReplaceItem = function ( ) { return L } ; svgedit . browser . supportsPathInsertItemBefore = function ( ) { return T } ; svgedit . browser . supportsPathBBox = function ( ) { return J } ;
svgedit . browser . supportsHVLineContainerBBox = function ( ) { return da } ; svgedit . browser . supportsGoodTextCharPos = function ( ) { return N } ; svgedit . browser . supportsEditableText = function ( ) { return c } ; svgedit . browser . supportsGoodDecimals = function ( ) { return V } ; svgedit . browser . supportsNonScalingStroke = function ( ) { return O } ; svgedit . browser . supportsNativeTransformLists = function ( ) { return fa } } else window . location = "browser-not-supported.html" } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . transformlist ) svgedit . transformlist = { } ; var a = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) , n = { } ; svgedit . transformlist . SVGTransformList = function ( f ) { this . _elem = f || null ; this . _xforms = [ ] ; this . _update = function ( ) { var c = "" ; a . createSVGMatrix ( ) ; for ( var m = 0 ; m < this . numberOfItems ; ++ m ) { var p = this . _list . getItem ( m ) ; c = c ; p = p ; var b = p . matrix , d = "" ; switch ( p . type ) { case 1 : d = "matrix(" + [ b . a , b . b , b . c , b . d , b . e , b . f ] . join ( "," ) + ")" ; break ; case 2 : d = "translate(" + b . e + "," + b . f + ")" ; break ; case 3 : d =
b . a == b . d ? "scale(" + b . a + ")" : "scale(" + b . a + "," + b . d + ")" ; break ; case 4 : var e = 0 ; d = 0 ; if ( p . angle != 0 ) { e = 1 - b . a ; d = ( e * b . f + b . b * b . e ) / ( e * e + b . b * b . b ) ; e = ( b . e - b . b * d ) / e } d = "rotate(" + p . angle + " " + e + "," + d + ")" } c = c + ( d + " " ) } this . _elem . setAttribute ( "transform" , c ) } ; this . _list = this ; this . _init = function ( ) { var c = this . _elem . getAttribute ( "transform" ) ; if ( c ) for ( var m = /\s*((scale|matrix|rotate|translate)\s*\(.*?\))\s*,?\s*/ , p = true ; p ; ) { p = c . match ( m ) ; c = c . replace ( m , "" ) ; if ( p && p [ 1 ] ) { var b = p [ 1 ] . split ( /\s*\(/ ) , d = b [ 0 ] ; b = b [ 1 ] . match ( /\s*(.*?)\s*\)/ ) ;
b [ 1 ] = b [ 1 ] . replace ( /(\d)-/g , "$1 -" ) ; var e = b [ 1 ] . split ( /[, ]+/ ) , l = "abcdef" . split ( "" ) , u = a . createSVGMatrix ( ) ; $ . each ( e , function ( L , T ) { e [ L ] = parseFloat ( T ) ; if ( d == "matrix" ) u [ l [ L ] ] = e [ L ] } ) ; b = a . createSVGTransform ( ) ; var z = "set" + d . charAt ( 0 ) . toUpperCase ( ) + d . slice ( 1 ) , o = d == "matrix" ? [ u ] : e ; if ( d == "scale" && o . length == 1 ) o . push ( o [ 0 ] ) ; else if ( d == "translate" && o . length == 1 ) o . push ( 0 ) ; else if ( d == "rotate" && o . length == 1 ) { o . push ( 0 ) ; o . push ( 0 ) } b [ z ] . apply ( b , o ) ; this . _list . appendItem ( b ) } } } ; this . _removeFromOtherLists = function ( c ) { if ( c ) { var m =
false , p ; for ( p in n ) { for ( var b = n [ p ] , d = 0 , e = b . _xforms . length ; d < e ; ++ d ) if ( b . _xforms [ d ] == c ) { m = true ; b . removeItem ( d ) ; break } if ( m ) break } } } ; this . numberOfItems = 0 ; this . clear = function ( ) { this . numberOfItems = 0 ; this . _xforms = [ ] } ; this . initialize = function ( c ) { this . numberOfItems = 1 ; this . _removeFromOtherLists ( c ) ; this . _xforms = [ c ] } ; this . getItem = function ( c ) { if ( c < this . numberOfItems && c >= 0 ) return this . _xforms [ c ] ; throw { code : 1 } ; } ; this . insertItemBefore = function ( c , m ) { var p = null ; if ( m >= 0 ) if ( m < this . numberOfItems ) { this . _removeFromOtherLists ( c ) ;
p = Array ( this . numberOfItems + 1 ) ; for ( var b = 0 ; b < m ; ++ b ) p [ b ] = this . _xforms [ b ] ; p [ b ] = c ; for ( var d = b + 1 ; b < this . numberOfItems ; ++ d , ++ b ) p [ d ] = this . _xforms [ b ] ; this . numberOfItems ++ ; this . _xforms = p ; p = c ; this . _list . _update ( ) } else p = this . _list . appendItem ( c ) ; return p } ; this . replaceItem = function ( c , m ) { var p = null ; if ( m < this . numberOfItems && m >= 0 ) { this . _removeFromOtherLists ( c ) ; p = this . _xforms [ m ] = c ; this . _list . _update ( ) } return p } ; this . removeItem = function ( c ) { if ( c < this . numberOfItems && c >= 0 ) { for ( var m = this . _xforms [ c ] , p = Array ( this . numberOfItems -
1 ) , b = 0 ; b < c ; ++ b ) p [ b ] = this . _xforms [ b ] ; for ( c = b ; c < this . numberOfItems - 1 ; ++ c , ++ b ) p [ c ] = this . _xforms [ b + 1 ] ; this . numberOfItems -- ; this . _xforms = p ; this . _list . _update ( ) ; return m } else throw { code : 1 } ; } ; this . appendItem = function ( c ) { this . _removeFromOtherLists ( c ) ; this . _xforms . push ( c ) ; this . numberOfItems ++ ; this . _list . _update ( ) ; return c } } ; svgedit . transformlist . resetListMap = function ( ) { n = { } } ; svgedit . transformlist . removeElementFromListMap = function ( f ) { f . id && n [ f . id ] && delete n [ f . id ] } ; svgedit . transformlist . getTransformList = function ( f ) { if ( svgedit . browser . supportsNativeTransformLists ( ) ) if ( f . transform ) return f . transform . baseVal ;
else if ( f . gradientTransform ) return f . gradientTransform . baseVal ; else { if ( f . patternTransform ) return f . patternTransform . baseVal } else { var c = f . id ; c || ( c = "temp" ) ; var m = n [ c ] ; if ( ! m || c == "temp" ) { n [ c ] = new svgedit . transformlist . SVGTransformList ( f ) ; n [ c ] . _init ( ) ; m = n [ c ] } return m } return null } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . math ) svgedit . math = { } ; var a = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) ; svgedit . math . transformPoint = function ( n , f , c ) { return { x : c . a * n + c . c * f + c . e , y : c . b * n + c . d * f + c . f } } ; svgedit . math . isIdentity = function ( n ) { return n . a === 1 && n . b === 0 && n . c === 0 && n . d === 1 && n . e === 0 && n . f === 0 } ; svgedit . math . matrixMultiply = function ( ) { for ( var n = arguments , f = n . length , c = n [ f - 1 ] ; f -- > 1 ; ) c = n [ f - 1 ] . multiply ( c ) ; if ( Math . abs ( c . a ) < 1.0 E - 14 ) c . a = 0 ; if ( Math . abs ( c . b ) < 1.0 E - 14 ) c . b = 0 ; if ( Math . abs ( c . c ) < 1.0 E - 14 ) c . c = 0 ; if ( Math . abs ( c . d ) <
1.0 E - 14 ) c . d = 0 ; if ( Math . abs ( c . e ) < 1.0 E - 14 ) c . e = 0 ; if ( Math . abs ( c . f ) < 1.0 E - 14 ) c . f = 0 ; return c } ; svgedit . math . hasMatrixTransform = function ( n ) { if ( ! n ) return false ; for ( var f = n . numberOfItems ; f -- ; ) { var c = n . getItem ( f ) ; if ( c . type == 1 && ! svgedit . math . isIdentity ( c . matrix ) ) return true } return false } ; svgedit . math . transformBox = function ( n , f , c , m , p ) { var b = { x : n , y : f } , d = { x : n + c , y : f } ; c = { x : n + c , y : f + m } ; n = { x : n , y : f + m } ; f = svgedit . math . transformPoint ; b = f ( b . x , b . y , p ) ; var e = m = b . x , l = b . y , u = b . y ; d = f ( d . x , d . y , p ) ; m = Math . min ( m , d . x ) ; e = Math . max ( e , d . x ) ;
l = Math . min ( l , d . y ) ; u = Math . max ( u , d . y ) ; n = f ( n . x , n . y , p ) ; m = Math . min ( m , n . x ) ; e = Math . max ( e , n . x ) ; l = Math . min ( l , n . y ) ; u = Math . max ( u , n . y ) ; c = f ( c . x , c . y , p ) ; m = Math . min ( m , c . x ) ; e = Math . max ( e , c . x ) ; l = Math . min ( l , c . y ) ; u = Math . max ( u , c . y ) ; return { tl : b , tr : d , bl : n , br : c , aabox : { x : m , y : l , width : e - m , height : u - l } } } ; svgedit . math . transformListToTransform = function ( n , f , c ) { if ( n == null ) return a . createSVGTransformFromMatrix ( a . createSVGMatrix ( ) ) ; f = f == undefined ? 0 : f ; c = c == undefined ? n . numberOfItems - 1 : c ; f = parseInt ( f ) ; c = parseInt ( c ) ; if ( f > c ) { var m = c ; c = f ;
f = m } m = a . createSVGMatrix ( ) ; for ( f = f ; f <= c ; ++ f ) { var p = f >= 0 && f < n . numberOfItems ? n . getItem ( f ) . matrix : a . createSVGMatrix ( ) ; m = svgedit . math . matrixMultiply ( m , p ) } return a . createSVGTransformFromMatrix ( m ) } ; svgedit . math . getMatrix = function ( n ) { n = svgedit . transformlist . getTransformList ( n ) ; return svgedit . math . transformListToTransform ( n ) . matrix } ; svgedit . math . snapToAngle = function ( n , f , c , m ) { var p = Math . PI / 4 ; c = c - n ; var b = m - f ; m = Math . sqrt ( c * c + b * b ) ; p = Math . round ( Math . atan2 ( b , c ) / p ) * p ; return { x : n + m * Math . cos ( p ) , y : f + m * Math . sin ( p ) , a : p } } ;
svgedit . math . rectsIntersect = function ( n , f ) { return f . x < n . x + n . width && f . x + f . width > n . x && f . y < n . y + n . height && f . y + f . height > n . y } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . units ) svgedit . units = { } ; var a = [ "x" , "x1" , "cx" , "rx" , "width" ] , n = [ "y" , "y1" , "cy" , "ry" , "height" ] , f = $ . merge ( [ "r" , "radius" ] , a ) ; $ . merge ( f , n ) ; var c , m = { px : 1 } ; svgedit . units . init = function ( b ) { c = b ; b = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) ; document . body . appendChild ( b ) ; var d = document . createElementNS ( "http://www.w3.org/2000/svg" , "rect" ) ; d . setAttribute ( "width" , "1em" ) ; d . setAttribute ( "height" , "1ex" ) ; d . setAttribute ( "x" , "1in" ) ; b . appendChild ( d ) ; d = d . getBBox ( ) ; document . body . removeChild ( b ) ;
b = d . x ; m . em = d . width ; m . ex = d . height ; m [ "in" ] = b ; m . cm = b / 2.54 ; m . mm = b / 25.4 ; m . pt = b / 72 ; m . pc = b / 6 ; m [ "%" ] = 0 } ; svgedit . units . getTypeMap = function ( ) { return m } ; svgedit . units . shortFloat = function ( b ) { var d = c . getRoundDigits ( ) ; if ( isNaN ( b ) ) { if ( $ . isArray ( b ) ) return svgedit . units . shortFloat ( b [ 0 ] ) + "," + svgedit . units . shortFloat ( b [ 1 ] ) } else return + ( + b ) . toFixed ( d ) ; return parseFloat ( b ) . toFixed ( d ) - 0 } ; svgedit . units . convertUnit = function ( b , d ) { d = d || c . getBaseUnit ( ) ; return svgedit . unit . shortFloat ( b / m [ d ] ) } ; svgedit . units . setUnitAttr = function ( b ,
d , e ) { isNaN ( e ) || b . getAttribute ( d ) ; b . setAttribute ( d , e ) } ; var p = { line : [ "x1" , "x2" , "y1" , "y2" ] , circle : [ "cx" , "cy" , "r" ] , ellipse : [ "cx" , "cy" , "rx" , "ry" ] , foreignObject : [ "x" , "y" , "width" , "height" ] , rect : [ "x" , "y" , "width" , "height" ] , image : [ "x" , "y" , "width" , "height" ] , use : [ "x" , "y" , "width" , "height" ] , text : [ "x" , "y" ] } ; svgedit . units . convertAttrs = function ( b ) { var d = b . tagName , e = c . getBaseUnit ( ) ; if ( d = p [ d ] ) for ( var l = d . length , u = 0 ; u < l ; u ++ ) { var z = d [ u ] , o = b . getAttribute ( z ) ; if ( o ) isNaN ( o ) || b . setAttribute ( z , o / m [ e ] + e ) } } ; svgedit . units . convertToNum =
function ( b , d ) { if ( ! isNaN ( d ) ) return d - 0 ; if ( d . substr ( - 1 ) === "%" ) { var e = d . substr ( 0 , d . length - 1 ) / 100 , l = c . getWidth ( ) , u = c . getHeight ( ) ; return a . indexOf ( b ) >= 0 ? e * l : n . indexOf ( b ) >= 0 ? e * u : e * Math . sqrt ( l * l + u * u ) / Math . sqrt ( 2 ) } else { l = d . substr ( - 2 ) ; e = d . substr ( 0 , d . length - 2 ) ; return e * m [ l ] } } ; svgedit . units . isValidUnit = function ( b , d , e ) { var l = false ; if ( f . indexOf ( b ) >= 0 ) if ( isNaN ( d ) ) { d = d . toLowerCase ( ) ; $ . each ( m , function ( o ) { if ( ! l ) if ( RegExp ( "^-?[\\d\\.]+" + o + "$" ) . test ( d ) ) l = true } ) } else l = true ; else if ( b == "id" ) { b = false ; try { var u = c . getElement ( d ) ;
b = u == null || u === e } catch ( z ) { } return b } else l = true ; return l } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { function a ( b ) { if ( svgedit . browser . supportsHVLineContainerBBox ( ) ) try { return b . getBBox ( ) } catch ( d ) { } var e = $ . data ( b , "ref" ) , l = null ; if ( e ) { var u = $ ( e ) . children ( ) . clone ( ) . attr ( "visibility" , "hidden" ) ; $ ( p ) . append ( u ) ; l = u . filter ( "line, path" ) } else l = $ ( b ) . find ( "line, path" ) ; var z = false ; if ( l . length ) { l . each ( function ( ) { var o = this . getBBox ( ) ; if ( ! o . width || ! o . height ) z = true } ) ; if ( z ) { b = e ? u : $ ( b ) . children ( ) ; ret = getStrokedBBox ( b ) } else ret = b . getBBox ( ) } else ret = b . getBBox ( ) ; e && u . remove ( ) ; return ret } if ( ! svgedit . utilities ) svgedit . utilities =
{ } ; var n = "a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use" . split ( "," ) , f = null , c = null , m = null , p = null ; svgedit . utilities . init = function ( b ) { f = b ; c = b . getDOMDocument ( ) ; m = b . getDOMContainer ( ) ; p = b . getSVGRoot ( ) } ; svgedit . utilities . toXml = function ( b ) { return $ ( "<p/>" ) . text ( b ) . html ( ) } ; svgedit . utilities . fromXml = function ( b ) { return $ ( "<p/>" ) . html ( b ) . text ( ) } ; svgedit . utilities . encode64 = function ( b ) { b = svgedit . utilities . convertToXMLReferences ( b ) ; if ( window . btoa ) return window . btoa ( b ) ;
var d = Array ( Math . floor ( ( b . length + 2 ) / 3 ) * 4 ) , e , l , u , z , o , L , T = 0 , N = 0 ; do { e = b . charCodeAt ( T ++ ) ; l = b . charCodeAt ( T ++ ) ; u = b . charCodeAt ( T ++ ) ; z = e >> 2 ; e = ( e & 3 ) << 4 | l >> 4 ; o = ( l & 15 ) << 2 | u >> 6 ; L = u & 63 ; if ( isNaN ( l ) ) o = L = 64 ; else if ( isNaN ( u ) ) L = 64 ; d [ N ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( z ) ; d [ N ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( e ) ; d [ N ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( o ) ; d [ N ++ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . charAt ( L ) } while ( T <
b . length ) ; return d . join ( "" ) } ; svgedit . utilities . decode64 = function ( b ) { if ( window . atob ) return window . atob ( b ) ; var d = "" , e , l , u = "" , z , o = "" , L = 0 ; b = b . replace ( /[^A-Za-z0-9\+\/\=]/g , "" ) ; do { e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . indexOf ( b . charAt ( L ++ ) ) ; l = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . indexOf ( b . charAt ( L ++ ) ) ; z = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . indexOf ( b . charAt ( L ++ ) ) ; o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" . indexOf ( b . charAt ( L ++ ) ) ;
e = e << 2 | l >> 4 ; l = ( l & 15 ) << 4 | z >> 2 ; u = ( z & 3 ) << 6 | o ; d += String . fromCharCode ( e ) ; if ( z != 64 ) d += String . fromCharCode ( l ) ; if ( o != 64 ) d += String . fromCharCode ( u ) } while ( L < b . length ) ; return unescape ( d ) } ; svgedit . utilities . convertToXMLReferences = function ( b ) { for ( var d = "" , e = 0 ; e < b . length ; e ++ ) { var l = b . charCodeAt ( e ) ; if ( l < 128 ) d += b [ e ] ; else if ( l > 127 ) d += "&#" + l + ";" } return d } ; svgedit . utilities . text2xml = function ( b ) { if ( b . indexOf ( "<svg:svg" ) >= 0 ) b = b . replace ( /<(\/?)svg:/g , "<$1" ) . replace ( "xmlns:svg" , "xmlns" ) ; var d ; try { var e = window . DOMParser ?
new DOMParser : new ActiveXObject ( "Microsoft.XMLDOM" ) ; e . async = false } catch ( l ) { throw Error ( "XML Parser could not be instantiated" ) ; } try { d = e . loadXML ? e . loadXML ( b ) ? e : false : e . parseFromString ( b , "text/xml" ) } catch ( u ) { throw Error ( "Error parsing XML string" ) ; } return d } ; svgedit . utilities . bboxToObj = function ( b ) { return { x : b . x , y : b . y , width : b . width , height : b . height } } ; svgedit . utilities . walkTree = function ( b , d ) { if ( b && b . nodeType == 1 ) { d ( b ) ; for ( var e = b . childNodes . length ; e -- ; ) svgedit . utilities . walkTree ( b . childNodes . item ( e ) , d ) } } ;
svgedit . utilities . walkTreePost = function ( b , d ) { if ( b && b . nodeType == 1 ) { for ( var e = b . childNodes . length ; e -- ; ) svgedit . utilities . walkTree ( b . childNodes . item ( e ) , d ) ; d ( b ) } } ; svgedit . utilities . getUrlFromAttr = function ( b ) { if ( b ) if ( b . indexOf ( 'url("' ) === 0 ) return b . substring ( 5 , b . indexOf ( '"' , 6 ) ) ; else if ( b . indexOf ( "url('" ) === 0 ) return b . substring ( 5 , b . indexOf ( "'" , 6 ) ) ; else if ( b . indexOf ( "url(" ) === 0 ) return b . substring ( 4 , b . indexOf ( ")" ) ) ; return null } ; svgedit . utilities . getHref = function ( b ) { return b . getAttributeNS ( "http://www.w3.org/1999/xlink" ,
"href" ) } ; svgedit . utilities . setHref = function ( b , d ) { b . setAttributeNS ( "http://www.w3.org/1999/xlink" , "xlink:href" , d ) } ; svgedit . utilities . findDefs = function ( b ) { b = f . getSVGContent ( ) . documentElement ; var d = b . getElementsByTagNameNS ( "http://www.w3.org/2000/svg" , "defs" ) ; return d = d . length > 0 ? d [ 0 ] : b . insertBefore ( b . ownerDocument . createElementNS ( "http://www.w3.org/2000/svg" , "defs" ) , b . firstChild . nextSibling ) } ; svgedit . utilities . getPathBBox = function ( b ) { var d = b . pathSegList , e = d . numberOfItems ; b = [ [ ] , [ ] ] ; var l = d . getItem ( 0 ) ,
u = [ l . x , l . y ] ; for ( l = 0 ; l < e ; l ++ ) { var z = d . getItem ( l ) ; if ( typeof z . x != "undefined" ) { b [ 0 ] . push ( u [ 0 ] ) ; b [ 1 ] . push ( u [ 1 ] ) ; if ( z . x1 ) { for ( var o = [ z . x1 , z . y1 ] , L = [ z . x2 , z . y2 ] , T = [ z . x , z . y ] , N = 0 ; N < 2 ; N ++ ) { z = function ( fa ) { return Math . pow ( 1 - fa , 3 ) * u [ N ] + 3 * Math . pow ( 1 - fa , 2 ) * fa * o [ N ] + 3 * ( 1 - fa ) * Math . pow ( fa , 2 ) * L [ N ] + Math . pow ( fa , 3 ) * T [ N ] } ; var J = 6 * u [ N ] - 12 * o [ N ] + 6 * L [ N ] , da = - 3 * u [ N ] + 9 * o [ N ] - 9 * L [ N ] + 3 * T [ N ] , V = 3 * o [ N ] - 3 * u [ N ] ; if ( da == 0 ) { if ( J != 0 ) { J = - V / J ; 0 < J && J < 1 && b [ N ] . push ( z ( J ) ) } } else { V = Math . pow ( J , 2 ) - 4 * V * da ; if ( ! ( V < 0 ) ) { var O = ( - J + Math . sqrt ( V ) ) / ( 2 * da ) ; 0 < O &&
O < 1 && b [ N ] . push ( z ( O ) ) ; J = ( - J - Math . sqrt ( V ) ) / ( 2 * da ) ; 0 < J && J < 1 && b [ N ] . push ( z ( J ) ) } } } u = T } else { b [ 0 ] . push ( z . x ) ; b [ 1 ] . push ( z . y ) } } } d = Math . min . apply ( null , b [ 0 ] ) ; e = Math . max . apply ( null , b [ 0 ] ) - d ; l = Math . min . apply ( null , b [ 1 ] ) ; b = Math . max . apply ( null , b [ 1 ] ) - l ; return { x : d , y : l , width : e , height : b } } ; svgedit . utilities . getBBox = function ( b ) { var d = b || f . geSelectedElements ( ) [ 0 ] ; if ( b . nodeType != 1 ) return null ; b = null ; var e = d . nodeName ; switch ( e ) { case "text" : if ( d . textContent === "" ) { d . textContent = "a" ; b = d . getBBox ( ) ; d . textContent = "" } else try { b = d . getBBox ( ) } catch ( l ) { } break ;
case "path" : if ( svgedit . browser . supportsPathBBox ( ) ) try { b = d . getBBox ( ) } catch ( u ) { } else b = svgedit . utilities . getPathBBox ( d ) ; break ; case "g" : case "a" : b = a ( d ) ; break ; default : if ( e === "use" ) b = a ( d , true ) ; if ( e === "use" ) { b || ( b = d . getBBox ( ) ) ; if ( ! svgedit . browser . isWebkit ( ) ) { e = { } ; e . width = b . width ; e . height = b . height ; e . x = b . x + parseFloat ( d . getAttribute ( "x" ) || 0 ) ; e . y = b . y + parseFloat ( d . getAttribute ( "y" ) || 0 ) ; b = e } } else if ( ~ n . indexOf ( e ) ) try { b = d . getBBox ( ) } catch ( z ) { d = $ ( d ) . closest ( "foreignObject" ) ; if ( d . length ) try { b = d [ 0 ] . getBBox ( ) } catch ( o ) { b =
null } else b = null } } if ( b ) b = svgedit . utilities . bboxToObj ( b ) ; return b } ; svgedit . utilities . getRotationAngle = function ( b , d ) { var e = b || f . getSelectedElements ( ) [ 0 ] ; e = svgedit . transformlist . getTransformList ( e ) ; if ( ! e ) return 0 ; for ( var l = e . numberOfItems , u = 0 ; u < l ; ++ u ) { var z = e . getItem ( u ) ; if ( z . type == 4 ) return d ? z . angle * Math . PI / 180 : z . angle } return 0 } ; svgedit . utilities . getElem = svgedit . browser . supportsSelectors ( ) ? function ( b ) { return p . querySelector ( "#" + b ) } : svgedit . browser . supportsXpath ( ) ? function ( b ) { return c . evaluate ( 'svg:svg[@id="svgroot"]//svg:*[@id="' +
b + '"]' , m , function ( ) { return "http://www.w3.org/2000/svg" } , 9 , null ) . singleNodeValue } : function ( b ) { return $ ( p ) . find ( "[id=" + b + "]" ) [ 0 ] } ; svgedit . utilities . assignAttributes = function ( b , d , e , l ) { e || ( e = 0 ) ; svgedit . browser . isOpera ( ) || p . suspendRedraw ( e ) ; for ( var u in d ) if ( e = u . substr ( 0 , 4 ) === "xml:" ? "http://www.w3.org/XML/1998/namespace" : u . substr ( 0 , 6 ) === "xlink:" ? "http://www.w3.org/1999/xlink" : null ) b . setAttributeNS ( e , u , d [ u ] ) ; else l ? svgedit . units . setUnitAttr ( b , u , d [ u ] ) : b . setAttribute ( u , d [ u ] ) ; svgedit . browser . isOpera ( ) || p . unsuspendRedraw ( null ) } ;
svgedit . utilities . cleanupElement = function ( b ) { var d = p . suspendRedraw ( 60 ) , e = { "fill-opacity" : 1 , "stop-opacity" : 1 , opacity : 1 , stroke : "none" , "stroke-dasharray" : "none" , "stroke-linejoin" : "miter" , "stroke-linecap" : "butt" , "stroke-opacity" : 1 , "stroke-width" : 1 , rx : 0 , ry : 0 } , l ; for ( l in e ) { var u = e [ l ] ; b . getAttribute ( l ) == u && b . removeAttribute ( l ) } p . unsuspendRedraw ( d ) } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . sanitize ) svgedit . sanitize = { } ; var a = { } ; a [ "http://www.w3.org/1999/xlink" ] = "xlink" ; a [ "http://www.w3.org/XML/1998/namespace" ] = "xml" ; a [ "http://www.w3.org/2000/xmlns/" ] = "xmlns" ; a [ "http://svg-edit.googlecode.com" ] = "se" ; a [ "http://www.w3.org/1999/xhtml" ] = "xhtml" ; a [ "http://www.w3.org/1998/Math/MathML" ] = "mathml" ; var n = { } ; $ . each ( a , function ( m , p ) { n [ p ] = m } ) ; var f = { a : [ "class" , "clip-path" , "clip-rule" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "id" , "mask" , "opacity" , "stroke" , "stroke-dasharray" ,
"stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" , "xlink:href" , "xlink:title" ] , circle : [ "class" , "clip-path" , "clip-rule" , "cx" , "cy" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "id" , "mask" , "opacity" , "r" , "requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" ] , clipPath : [ "class" ,
"clipPathUnits" , "id" ] , defs : [ ] , style : [ "type" ] , desc : [ ] , ellipse : [ "class" , "clip-path" , "clip-rule" , "cx" , "cy" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "id" , "mask" , "opacity" , "requiredFeatures" , "rx" , "ry" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" ] , feGaussianBlur : [ "class" , "color-interpolation-filters" , "id" , "requiredFeatures" , "stdDeviation" ] , filter : [ "class" , "color-interpolation-filters" ,
"filterRes" , "filterUnits" , "height" , "id" , "primitiveUnits" , "requiredFeatures" , "width" , "x" , "xlink:href" , "y" ] , foreignObject : [ "class" , "font-size" , "height" , "id" , "opacity" , "requiredFeatures" , "style" , "transform" , "width" , "x" , "y" ] , g : [ "class" , "clip-path" , "clip-rule" , "id" , "display" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "mask" , "opacity" , "requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" ,
"transform" , "font-family" , "font-size" , "font-style" , "font-weight" , "text-anchor" ] , image : [ "class" , "clip-path" , "clip-rule" , "filter" , "height" , "id" , "mask" , "opacity" , "requiredFeatures" , "style" , "systemLanguage" , "transform" , "width" , "x" , "xlink:href" , "xlink:title" , "y" ] , line : [ "class" , "clip-path" , "clip-rule" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "id" , "marker-end" , "marker-mid" , "marker-start" , "mask" , "opacity" , "requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" ,
"stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" , "x1" , "x2" , "y1" , "y2" ] , linearGradient : [ "class" , "id" , "gradientTransform" , "gradientUnits" , "requiredFeatures" , "spreadMethod" , "systemLanguage" , "x1" , "x2" , "xlink:href" , "y1" , "y2" ] , marker : [ "id" , "class" , "markerHeight" , "markerUnits" , "markerWidth" , "orient" , "preserveAspectRatio" , "refX" , "refY" , "systemLanguage" , "viewBox" ] , mask : [ "class" , "height" , "id" , "maskContentUnits" , "maskUnits" , "width" , "x" , "y" ] , metadata : [ "class" , "id" ] , path : [ "class" ,
"clip-path" , "clip-rule" , "d" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "id" , "marker-end" , "marker-mid" , "marker-start" , "mask" , "opacity" , "requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" ] , pattern : [ "class" , "height" , "id" , "patternContentUnits" , "patternTransform" , "patternUnits" , "requiredFeatures" , "style" , "systemLanguage" , "viewBox" , "width" , "x" , "xlink:href" , "y" ] , polygon : [ "class" ,
"clip-path" , "clip-rule" , "id" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "id" , "class" , "marker-end" , "marker-mid" , "marker-start" , "mask" , "opacity" , "points" , "requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" ] , polyline : [ "class" , "clip-path" , "clip-rule" , "id" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "marker-end" , "marker-mid" , "marker-start" , "mask" , "opacity" , "points" ,
"requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" ] , radialGradient : [ "class" , "cx" , "cy" , "fx" , "fy" , "gradientTransform" , "gradientUnits" , "id" , "r" , "requiredFeatures" , "spreadMethod" , "systemLanguage" , "xlink:href" ] , rect : [ "class" , "clip-path" , "clip-rule" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "height" , "id" , "mask" , "opacity" , "requiredFeatures" , "rx" , "ry" , "stroke" , "stroke-dasharray" ,
"stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" , "width" , "x" , "y" ] , stop : [ "class" , "id" , "offset" , "requiredFeatures" , "stop-color" , "stop-opacity" , "style" , "systemLanguage" ] , svg : [ "class" , "clip-path" , "clip-rule" , "filter" , "id" , "height" , "mask" , "preserveAspectRatio" , "requiredFeatures" , "style" , "systemLanguage" , "viewBox" , "width" , "x" , "xmlns" , "xmlns:se" , "xmlns:xlink" , "y" ] , "switch" : [ "class" , "id" , "requiredFeatures" , "systemLanguage" ] ,
symbol : [ "class" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "font-family" , "font-size" , "font-style" , "font-weight" , "id" , "opacity" , "preserveAspectRatio" , "requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "transform" , "viewBox" ] , text : [ "class" , "clip-path" , "clip-rule" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "font-family" , "font-size" , "font-style" , "font-weight" , "id" , "mask" , "opacity" ,
"requiredFeatures" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "text-anchor" , "transform" , "x" , "xml:space" , "y" ] , textPath : [ "class" , "id" , "method" , "requiredFeatures" , "spacing" , "startOffset" , "style" , "systemLanguage" , "transform" , "xlink:href" ] , title : [ ] , tspan : [ "class" , "clip-path" , "clip-rule" , "dx" , "dy" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "font-family" , "font-size" , "font-style" , "font-weight" ,
"id" , "mask" , "opacity" , "requiredFeatures" , "rotate" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" , "style" , "systemLanguage" , "text-anchor" , "textLength" , "transform" , "x" , "xml:space" , "y" ] , use : [ "class" , "clip-path" , "clip-rule" , "fill" , "fill-opacity" , "fill-rule" , "filter" , "height" , "id" , "mask" , "stroke" , "stroke-dasharray" , "stroke-dashoffset" , "stroke-linecap" , "stroke-linejoin" , "stroke-miterlimit" , "stroke-opacity" , "stroke-width" ,
"style" , "transform" , "width" , "x" , "xlink:href" , "y" ] , annotation : [ "encoding" ] , "annotation-xml" : [ "encoding" ] , maction : [ "actiontype" , "other" , "selection" ] , math : [ "class" , "id" , "display" , "xmlns" ] , menclose : [ "notation" ] , merror : [ ] , mfrac : [ "linethickness" ] , mi : [ "mathvariant" ] , mmultiscripts : [ ] , mn : [ ] , mo : [ "fence" , "lspace" , "maxsize" , "minsize" , "rspace" , "stretchy" ] , mover : [ ] , mpadded : [ "lspace" , "width" , "height" , "depth" , "voffset" ] , mphantom : [ ] , mprescripts : [ ] , mroot : [ ] , mrow : [ "xlink:href" , "xlink:type" , "xmlns:xlink" ] , mspace : [ "depth" ,
"height" , "width" ] , msqrt : [ ] , mstyle : [ "displaystyle" , "mathbackground" , "mathcolor" , "mathvariant" , "scriptlevel" ] , msub : [ ] , msubsup : [ ] , msup : [ ] , mtable : [ "align" , "columnalign" , "columnlines" , "columnspacing" , "displaystyle" , "equalcolumns" , "equalrows" , "frame" , "rowalign" , "rowlines" , "rowspacing" , "width" ] , mtd : [ "columnalign" , "columnspan" , "rowalign" , "rowspan" ] , mtext : [ ] , mtr : [ "columnalign" , "rowalign" ] , munder : [ ] , munderover : [ ] , none : [ ] , semantics : [ ] } , c = { } ; $ . each ( f , function ( m , p ) { var b = { } ; $ . each ( p , function ( d , e ) { if ( e . indexOf ( ":" ) >=
0 ) { var l = e . split ( ":" ) ; b [ l [ 1 ] ] = n [ l [ 0 ] ] } else b [ e ] = e == "xmlns" ? "http://www.w3.org/2000/xmlns/" : null } ) ; c [ m ] = b } ) ; svgedit . sanitize . getNSMap = function ( ) { return a } ; svgedit . sanitize . sanitizeSvg = function ( m ) { if ( m . nodeType == 3 ) { m . nodeValue = m . nodeValue . replace ( /^\s+|\s+$/g , "" ) ; m . nodeValue . length || m . parentNode . removeChild ( m ) } if ( m . nodeType == 1 ) { var p = m . parentNode ; if ( m . ownerDocument && p ) { var b = f [ m . nodeName ] , d = c [ m . nodeName ] ; if ( b != undefined ) { for ( var e = [ ] , l = m . attributes . length ; l -- ; ) { var u = m . attributes . item ( l ) , z = u . nodeName ,
o = u . localName , L = u . namespaceURI ; if ( ! ( d . hasOwnProperty ( o ) && L == d [ o ] && L != "http://www.w3.org/2000/xmlns/" ) && ! ( L == "http://www.w3.org/2000/xmlns/" && a [ u . nodeValue ] ) ) { z . indexOf ( "se:" ) == 0 && e . push ( [ z , u . nodeValue ] ) ; m . removeAttributeNS ( L , o ) } if ( svgedit . browser . isGecko ( ) ) switch ( z ) { case "transform" : case "gradientTransform" : case "patternTransform" : o = u . nodeValue . replace ( /(\d)-/g , "$1 -" ) ; m . setAttribute ( z , o ) } if ( z == "style" ) { u = u . nodeValue . split ( ";" ) ; for ( z = u . length ; z -- ; ) { o = u [ z ] . split ( ":" ) ; b . indexOf ( o [ 0 ] ) >= 0 && m . setAttribute ( o [ 0 ] ,
o [ 1 ] ) } m . removeAttribute ( "style" ) } } $ . each ( e , function ( T , N ) { m . setAttributeNS ( "http://svg-edit.googlecode.com" , N [ 0 ] , N [ 1 ] ) } ) ; if ( ( l = svgedit . utilities . getHref ( m ) ) && [ "filter" , "linearGradient" , "pattern" , "radialGradient" , "textPath" , "use" ] . indexOf ( m . nodeName ) >= 0 ) if ( l [ 0 ] != "#" ) { svgedit . utilities . setHref ( m , "" ) ; m . removeAttributeNS ( "http://www.w3.org/1999/xlink" , "href" ) } if ( m . nodeName == "use" && ! svgedit . utilities . getHref ( m ) ) p . removeChild ( m ) ; else { $ . each ( [ "clip-path" , "fill" , "filter" , "marker-end" , "marker-mid" , "marker-start" ,
"mask" , "stroke" ] , function ( T , N ) { var J = m . getAttribute ( N ) ; if ( J ) if ( ( J = svgedit . utilities . getUrlFromAttr ( J ) ) && J [ 0 ] !== "#" ) { m . setAttribute ( N , "" ) ; m . removeAttribute ( N ) } } ) ; for ( l = m . childNodes . length ; l -- ; ) svgedit . sanitize . sanitizeSvg ( m . childNodes . item ( l ) ) } } else { for ( b = [ ] ; m . hasChildNodes ( ) ; ) b . push ( p . insertBefore ( m . firstChild , m ) ) ; p . removeChild ( m ) ; for ( l = b . length ; l -- ; ) svgedit . sanitize . sanitizeSvg ( b [ l ] ) } } } } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . history ) svgedit . history = { } ; svgedit . history . HistoryEventTypes = { BEFORE _APPLY : "before_apply" , AFTER _APPLY : "after_apply" , BEFORE _UNAPPLY : "before_unapply" , AFTER _UNAPPLY : "after_unapply" } ; svgedit . history . MoveElementCommand = function ( a , n , f , c ) { this . elem = a ; this . text = c ? "Move " + a . tagName + " to " + c : "Move " + a . tagName ; this . oldNextSibling = n ; this . oldParent = f ; this . newNextSibling = a . nextSibling ; this . newParent = a . parentNode } ; svgedit . history . MoveElementCommand . type = function ( ) { return "svgedit.history.MoveElementCommand" } ; svgedit . history . MoveElementCommand . prototype . type =
svgedit . history . MoveElementCommand . type ; svgedit . history . MoveElementCommand . prototype . getText = function ( ) { return this . text } ; svgedit . history . MoveElementCommand . prototype . apply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _APPLY , this ) ; this . elem = this . newParent . insertBefore ( this . elem , this . newNextSibling ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _APPLY , this ) } ; svgedit . history . MoveElementCommand . prototype . unapply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _UNAPPLY ,
this ) ; this . elem = this . oldParent . insertBefore ( this . elem , this . oldNextSibling ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _UNAPPLY , this ) } ; svgedit . history . MoveElementCommand . prototype . elements = function ( ) { return [ this . elem ] } ; svgedit . history . InsertElementCommand = function ( a , n ) { this . elem = a ; this . text = n || "Create " + a . tagName ; this . parent = a . parentNode ; this . nextSibling = this . elem . nextSibling } ; svgedit . history . InsertElementCommand . type = function ( ) { return "svgedit.history.InsertElementCommand" } ; svgedit . history . InsertElementCommand . prototype . type =
svgedit . history . InsertElementCommand . type ; svgedit . history . InsertElementCommand . prototype . getText = function ( ) { return this . text } ; svgedit . history . InsertElementCommand . prototype . apply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _APPLY , this ) ; this . elem = this . parent . insertBefore ( this . elem , this . nextSibling ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _APPLY , this ) } ; svgedit . history . InsertElementCommand . prototype . unapply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _UNAPPLY ,
this ) ; this . parent = this . elem . parentNode ; this . elem = this . elem . parentNode . removeChild ( this . elem ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _UNAPPLY , this ) } ; svgedit . history . InsertElementCommand . prototype . elements = function ( ) { return [ this . elem ] } ; svgedit . history . RemoveElementCommand = function ( a , n , f , c ) { this . elem = a ; this . text = c || "Delete " + a . tagName ; this . nextSibling = n ; this . parent = f ; svgedit . transformlist . removeElementFromListMap ( a ) } ; svgedit . history . RemoveElementCommand . type = function ( ) { return "svgedit.history.RemoveElementCommand" } ;
svgedit . history . RemoveElementCommand . prototype . type = svgedit . history . RemoveElementCommand . type ; svgedit . history . RemoveElementCommand . prototype . getText = function ( ) { return this . text } ; svgedit . history . RemoveElementCommand . prototype . apply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _APPLY , this ) ; svgedit . transformlist . removeElementFromListMap ( this . elem ) ; this . parent = this . elem . parentNode ; this . elem = this . parent . removeChild ( this . elem ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _APPLY ,
this ) } ; svgedit . history . RemoveElementCommand . prototype . unapply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _UNAPPLY , this ) ; svgedit . transformlist . removeElementFromListMap ( this . elem ) ; this . nextSibling == null && window . console && console . log ( "Error: reference element was lost" ) ; this . parent . insertBefore ( this . elem , this . nextSibling ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _UNAPPLY , this ) } ; svgedit . history . RemoveElementCommand . prototype . elements = function ( ) { return [ this . elem ] } ;
svgedit . history . ChangeElementCommand = function ( a , n , f ) { this . elem = a ; this . text = f ? "Change " + a . tagName + " " + f : "Change " + a . tagName ; this . newValues = { } ; this . oldValues = n ; for ( var c in n ) this . newValues [ c ] = c == "#text" ? a . textContent : c == "#href" ? svgedit . utilities . getHref ( a ) : a . getAttribute ( c ) } ; svgedit . history . ChangeElementCommand . type = function ( ) { return "svgedit.history.ChangeElementCommand" } ; svgedit . history . ChangeElementCommand . prototype . type = svgedit . history . ChangeElementCommand . type ; svgedit . history . ChangeElementCommand . prototype . getText =
function ( ) { return this . text } ; svgedit . history . ChangeElementCommand . prototype . apply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _APPLY , this ) ; var n = false , f ; for ( f in this . newValues ) { if ( this . newValues [ f ] ) if ( f == "#text" ) this . elem . textContent = this . newValues [ f ] ; else f == "#href" ? svgedit . utilities . setHref ( this . elem , this . newValues [ f ] ) : this . elem . setAttribute ( f , this . newValues [ f ] ) ; else if ( f == "#text" ) this . elem . textContent = "" ; else { this . elem . setAttribute ( f , "" ) ; this . elem . removeAttribute ( f ) } if ( f ==
"transform" ) n = true } if ( ! n ) if ( n = svgedit . utilities . getRotationAngle ( this . elem ) ) { f = elem . getBBox ( ) ; n = [ "rotate(" , n , " " , f . x + f . width / 2 , "," , f . y + f . height / 2 , ")" ] . join ( "" ) ; n != elem . getAttribute ( "transform" ) && elem . setAttribute ( "transform" , n ) } a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _APPLY , this ) ; return true } ; svgedit . history . ChangeElementCommand . prototype . unapply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _UNAPPLY , this ) ; var n = false , f ; for ( f in this . oldValues ) { if ( this . oldValues [ f ] ) if ( f ==
"#text" ) this . elem . textContent = this . oldValues [ f ] ; else f == "#href" ? svgedit . utilities . setHref ( this . elem , this . oldValues [ f ] ) : this . elem . setAttribute ( f , this . oldValues [ f ] ) ; else if ( f == "#text" ) this . elem . textContent = "" ; else this . elem . removeAttribute ( f ) ; if ( f == "transform" ) n = true } if ( ! n ) if ( n = svgedit . utilities . getRotationAngle ( this . elem ) ) { f = elem . getBBox ( ) ; n = [ "rotate(" , n , " " , f . x + f . width / 2 , "," , f . y + f . height / 2 , ")" ] . join ( "" ) ; n != elem . getAttribute ( "transform" ) && elem . setAttribute ( "transform" , n ) } svgedit . transformlist . removeElementFromListMap ( this . elem ) ;
a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _UNAPPLY , this ) ; return true } ; svgedit . history . ChangeElementCommand . prototype . elements = function ( ) { return [ this . elem ] } ; svgedit . history . BatchCommand = function ( a ) { this . text = a || "Batch Command" ; this . stack = [ ] } ; svgedit . history . BatchCommand . type = function ( ) { return "svgedit.history.BatchCommand" } ; svgedit . history . BatchCommand . prototype . type = svgedit . history . BatchCommand . type ; svgedit . history . BatchCommand . prototype . getText = function ( ) { return this . text } ; svgedit . history . BatchCommand . prototype . apply =
function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _APPLY , this ) ; for ( var n = this . stack . length , f = 0 ; f < n ; ++ f ) this . stack [ f ] . apply ( a ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _APPLY , this ) } ; svgedit . history . BatchCommand . prototype . unapply = function ( a ) { a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . BEFORE _UNAPPLY , this ) ; for ( var n = this . stack . length - 1 ; n >= 0 ; n -- ) this . stack [ n ] . unapply ( a ) ; a && a . handleHistoryEvent ( svgedit . history . HistoryEventTypes . AFTER _UNAPPLY ,
this ) } ; svgedit . history . BatchCommand . prototype . elements = function ( ) { for ( var a = [ ] , n = this . stack . length ; n -- ; ) for ( var f = this . stack [ n ] . elements ( ) , c = f . length ; c -- ; ) a . indexOf ( f [ c ] ) == - 1 && a . push ( f [ c ] ) ; return a } ; svgedit . history . BatchCommand . prototype . addSubCommand = function ( a ) { this . stack . push ( a ) } ; svgedit . history . BatchCommand . prototype . isEmpty = function ( ) { return this . stack . length == 0 } ; svgedit . history . UndoManager = function ( a ) { this . handler _ = a || null ; this . undoStackPointer = 0 ; this . undoStack = [ ] ; this . undoChangeStackPointer =
- 1 ; this . undoableChangeStack = [ ] } ; svgedit . history . UndoManager . prototype . resetUndoStack = function ( ) { this . undoStack = [ ] ; this . undoStackPointer = 0 } ; svgedit . history . UndoManager . prototype . getUndoStackSize = function ( ) { return this . undoStackPointer } ; svgedit . history . UndoManager . prototype . getRedoStackSize = function ( ) { return this . undoStack . length - this . undoStackPointer } ; svgedit . history . UndoManager . prototype . getNextUndoCommandText = function ( ) { return this . undoStackPointer > 0 ? this . undoStack [ this . undoStackPointer - 1 ] . getText ( ) :
"" } ; svgedit . history . UndoManager . prototype . getNextRedoCommandText = function ( ) { return this . undoStackPointer < this . undoStack . length ? this . undoStack [ this . undoStackPointer ] . getText ( ) : "" } ; svgedit . history . UndoManager . prototype . undo = function ( ) { this . undoStackPointer > 0 && this . undoStack [ -- this . undoStackPointer ] . unapply ( this . handler _ ) } ; svgedit . history . UndoManager . prototype . redo = function ( ) { this . undoStackPointer < this . undoStack . length && this . undoStack . length > 0 && this . undoStack [ this . undoStackPointer ++ ] . apply ( this . handler _ ) } ;
svgedit . history . UndoManager . prototype . addCommandToHistory = function ( a ) { if ( this . undoStackPointer < this . undoStack . length && this . undoStack . length > 0 ) this . undoStack = this . undoStack . splice ( 0 , this . undoStackPointer ) ; this . undoStack . push ( a ) ; this . undoStackPointer = this . undoStack . length } ; svgedit . history . UndoManager . prototype . beginUndoableChange = function ( a , n ) { for ( var f = ++ this . undoChangeStackPointer , c = n . length , m = Array ( c ) , p = Array ( c ) ; c -- ; ) { var b = n [ c ] ; if ( b != null ) { p [ c ] = b ; m [ c ] = b . getAttribute ( a ) } } this . undoableChangeStack [ f ] =
{ attrName : a , oldValues : m , elements : p } } ; svgedit . history . UndoManager . prototype . finishUndoableChange = function ( ) { for ( var a = this . undoChangeStackPointer -- , n = this . undoableChangeStack [ a ] , f = n . elements . length , c = n . attrName , m = new svgedit . history . BatchCommand ( "Change " + c ) ; f -- ; ) { var p = n . elements [ f ] ; if ( p != null ) { var b = { } ; b [ c ] = n . oldValues [ f ] ; b [ c ] != p . getAttribute ( c ) && m . addSubCommand ( new svgedit . history . ChangeElementCommand ( p , b , c ) ) } } this . undoableChangeStack [ a ] = null ; return m } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . select ) svgedit . select = { } ; var a , n , f ; svgedit . select . Selector = function ( c , m ) { this . id = c ; this . selectedElement = m ; this . locked = true ; this . selectorGroup = a . createSVGElement ( { element : "g" , attr : { id : "selectorGroup" + this . id } } ) ; this . selectorRect = this . selectorGroup . appendChild ( a . createSVGElement ( { element : "path" , attr : { id : "selectedBox" + this . id , fill : "none" , stroke : "#4F80FF" , "stroke-width" : "1" , style : "pointer-events:none" } } ) ) ; this . gripCoords = { nw : null , n : null , ne : null , e : null , se : null , s : null , sw : null , w : null } ;
this . reset ( this . selectedElement ) } ; svgedit . select . Selector . prototype . reset = function ( c ) { this . locked = true ; this . selectedElement = c ; this . resize ( ) ; this . selectorGroup . setAttribute ( "display" , "inline" ) } ; svgedit . select . Selector . prototype . updateGripCursors = function ( c ) { var m = [ ] ; c = Math . round ( c / 45 ) ; if ( c < 0 ) c += 8 ; for ( var p in f . selectorGrips ) m . push ( p ) ; for ( ; c > 0 ; ) { m . push ( m . shift ( ) ) ; c -- } c = 0 ; for ( p in f . selectorGrips ) { f . selectorGrips [ p ] . setAttribute ( "style" , "cursor:" + m [ c ] + "-resize" ) ; c ++ } } ; svgedit . select . Selector . prototype . showGrips =
function ( c ) { f . selectorGripsGroup . setAttribute ( "display" , c ? "inline" : "none" ) ; var m = this . selectedElement ; this . hasGrips = c ; if ( m && c ) { this . selectorGroup . appendChild ( f . selectorGripsGroup ) ; this . updateGripCursors ( svgedit . utilities . getRotationAngle ( m ) ) } } ; svgedit . select . Selector . prototype . resize = function ( ) { var c = this . selectorRect , m = f , p = m . selectorGrips , b = this . selectedElement , d = b . getAttribute ( "stroke-width" ) , e = a . currentZoom ( ) , l = 1 / e ; if ( b . getAttribute ( "stroke" ) !== "none" && ! isNaN ( d ) ) l += d / 2 ; var u = b . tagName ; if ( u === "text" ) l +=
2 / e ; d = svgedit . transformlist . getTransformList ( b ) ; d = svgedit . math . transformListToTransform ( d ) . matrix ; d . e *= e ; d . f *= e ; var z = svgedit . utilities . getBBox ( b ) ; if ( u === "g" && ! $ . data ( b , "gsvg" ) ) if ( u = a . getStrokedBBox ( b . childNodes ) ) z = u ; u = z . x ; var o = z . y , L = z . width ; z = z . height ; l *= e ; e = svgedit . math . transformBox ( u * e , o * e , L * e , z * e , d ) ; d = e . aabox ; u = d . x - l ; o = d . y - l ; L = d . width + l * 2 ; var T = d . height + l * 2 ; d = u + L / 2 ; z = o + T / 2 ; if ( b = svgedit . utilities . getRotationAngle ( b ) ) { u = a . svgRoot ( ) . createSVGTransform ( ) ; u . setRotate ( - b , d , z ) ; u = u . matrix ; e . tl = svgedit . math . transformPoint ( e . tl . x ,
e . tl . y , u ) ; e . tr = svgedit . math . transformPoint ( e . tr . x , e . tr . y , u ) ; e . bl = svgedit . math . transformPoint ( e . bl . x , e . bl . y , u ) ; e . br = svgedit . math . transformPoint ( e . br . x , e . br . y , u ) ; u = e . tl ; L = u . x ; T = u . y ; var N = u . x , J = u . y ; u = Math . min ; o = Math . max ; L = u ( L , u ( e . tr . x , u ( e . bl . x , e . br . x ) ) ) - l ; T = u ( T , u ( e . tr . y , u ( e . bl . y , e . br . y ) ) ) - l ; N = o ( N , o ( e . tr . x , o ( e . bl . x , e . br . x ) ) ) + l ; J = o ( J , o ( e . tr . y , o ( e . bl . y , e . br . y ) ) ) + l ; u = L ; o = T ; L = N - L ; T = J - T } l = a . svgRoot ( ) . suspendRedraw ( 100 ) ; c . setAttribute ( "d" , "M" + u + "," + o + " L" + ( u + L ) + "," + o + " " + ( u + L ) + "," + ( o + T ) + " " + u + "," + ( o + T ) + "z" ) ;
this . selectorGroup . setAttribute ( "transform" , b ? "rotate(" + [ b , d , z ] . join ( "," ) + ")" : "" ) ; u -= 3.5 ; o -= 3.5 ; this . gripCoords = { nw : [ u , o ] , ne : [ u + L , o ] , sw : [ u , o + T ] , se : [ u + L , o + T ] , n : [ u + L / 2 , o ] , w : [ u , o + T / 2 ] , e : [ u + L , o + T / 2 ] , s : [ u + L / 2 , o + T ] } ; for ( var da in this . gripCoords ) { c = this . gripCoords [ da ] ; p [ da ] . setAttribute ( "x" , c [ 0 ] ) ; p [ da ] . setAttribute ( "y" , c [ 1 ] ) } this . rotateCoords = { nw : [ u , o ] , ne : [ u + L + 8 , o ] , sw : [ u , o + T + 8 ] , se : [ u + L + 8 , o + T + 8 ] } ; for ( da in this . rotateCoords ) { c = this . rotateCoords [ da ] ; m . rotateGrips [ da ] . setAttribute ( "cx" , c [ 0 ] ) ; m . rotateGrips [ da ] . setAttribute ( "cy" ,
c [ 1 ] ) } a . svgRoot ( ) . unsuspendRedraw ( l ) } ; svgedit . select . SelectorManager = function ( ) { this . rubberBandBox = this . selectorParentGroup = null ; this . selectors = [ ] ; this . selectorMap = { } ; this . selectorGrips = { nw : null , n : null , ne : null , e : null , se : null , s : null , sw : null , w : null } ; this . selectorGripsGroup = null ; this . rotateGrips = { nw : null , ne : null , se : null , sw : null } ; this . initGroup ( ) } ; svgedit . select . SelectorManager . prototype . initGroup = function ( ) { this . selectorParentGroup && this . selectorParentGroup . parentNode && this . selectorParentGroup . parentNode . removeChild ( this . selectorParentGroup ) ;
this . selectorParentGroup = a . createSVGElement ( { element : "g" , attr : { id : "selectorParentGroup" } } ) ; this . selectorGripsGroup = a . createSVGElement ( { element : "g" , attr : { display : "none" } } ) ; this . selectorParentGroup . appendChild ( this . selectorGripsGroup ) ; a . svgRoot ( ) . appendChild ( this . selectorParentGroup ) ; this . selectorMap = { } ; this . selectors = [ ] ; this . rubberBandBox = null ; for ( var c in this . rotateGrips ) { var m = a . createSVGElement ( { element : "circle" , attr : { id : "selectorGrip_rotate_" + c , fill : "transparent" , r : 8 , stroke : "transparent" , "stroke-width" : 0 ,
style : "cursor:url(" + n . imgPath + "rotate.png) 12 12, auto;" } } ) ; $ . data ( m , "dir" , c ) ; $ . data ( m , "type" , "rotate" ) ; this . rotateGrips [ c ] = this . selectorGripsGroup . appendChild ( m ) } for ( c in this . selectorGrips ) { m = a . createSVGElement ( { element : "rect" , attr : { id : "selectorGrip_resize_" + c , width : 7 , height : 7 , fill : "#4F80FF" , stroke : "transparent" , "stroke-width" : 2 , style : "cursor:" + c + "-resize" , "pointer-events" : "all" } } ) ; $ . data ( m , "dir" , c ) ; $ . data ( m , "type" , "resize" ) ; this . selectorGrips [ c ] = this . selectorGripsGroup . appendChild ( m ) } if ( ! $ ( "#canvasBackground" ) . length ) { c =
n . dimensions ; c = a . createSVGElement ( { element : "svg" , attr : { id : "canvasBackground" , width : c [ 0 ] , height : c [ 1 ] , x : 0 , y : 0 , overflow : svgedit . browser . isWebkit ( ) ? "none" : "visible" , style : "pointer-events:none" } } ) ; m = a . createSVGElement ( { element : "rect" , attr : { width : "100%" , height : "100%" , x : 0 , y : 0 , "stroke-width" : 1 , stroke : "#000" , fill : "#FFF" , style : "pointer-events:none" } } ) ; c . appendChild ( m ) ; a . svgRoot ( ) . insertBefore ( c , a . svgContent ( ) ) } } ; svgedit . select . SelectorManager . prototype . requestSelector = function ( c ) { if ( c == null ) return null ; var m =
this . selectors . length ; if ( typeof this . selectorMap [ c . id ] == "object" ) { this . selectorMap [ c . id ] . locked = true ; return this . selectorMap [ c . id ] } for ( var p = 0 ; p < m ; ++ p ) if ( this . selectors [ p ] && ! this . selectors [ p ] . locked ) { this . selectors [ p ] . locked = true ; this . selectors [ p ] . reset ( c ) ; this . selectorMap [ c . id ] = this . selectors [ p ] ; return this . selectors [ p ] } this . selectors [ m ] = new svgedit . select . Selector ( m , c ) ; this . selectorParentGroup . appendChild ( this . selectors [ m ] . selectorGroup ) ; this . selectorMap [ c . id ] = this . selectors [ m ] ; return this . selectors [ m ] } ;
svgedit . select . SelectorManager . prototype . releaseSelector = function ( c ) { if ( c != null ) for ( var m = this . selectors . length , p = this . selectorMap [ c . id ] , b = 0 ; b < m ; ++ b ) if ( this . selectors [ b ] && this . selectors [ b ] == p ) { p . locked == false && console . log ( "WARNING! selector was released but was already unlocked" ) ; delete this . selectorMap [ c . id ] ; p . locked = false ; p . selectedElement = null ; p . showGrips ( false ) ; try { p . selectorGroup . setAttribute ( "display" , "none" ) } catch ( d ) { } break } } ; svgedit . select . SelectorManager . prototype . getRubberBandBox = function ( ) { if ( ! this . rubberBandBox ) this . rubberBandBox =
this . selectorParentGroup . appendChild ( a . createSVGElement ( { element : "rect" , attr : { id : "selectorRubberBand" , fill : "transparent" , stroke : "#666" , "stroke-width" : 1 , "stroke-dasharray" : "3,2" , display : "none" , style : "pointer-events:none" } } ) ) ; return this . rubberBandBox } ; svgedit . select . init = function ( c , m ) { n = c ; a = m ; f = new svgedit . select . SelectorManager } ; svgedit . select . getSelectorManager = function ( ) { return f } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . draw ) svgedit . draw = { } ; var a = "a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use" . split ( "," ) , n = { LET _DOCUMENT _DECIDE : 0 , ALWAYS _RANDOMIZE : 1 , NEVER _RANDOMIZE : 2 } , f = n . LET _DOCUMENT _DECIDE ; svgedit . draw . Layer = function ( c , m ) { this . name _ = c ; this . group _ = m } ; svgedit . draw . Layer . prototype . getName = function ( ) { return this . name _ } ; svgedit . draw . Layer . prototype . getGroup = function ( ) { return this . group _ } ; svgedit . draw . randomizeIds = function ( c , m ) { f = c == false ? n . NEVER _RANDOMIZE :
n . ALWAYS _RANDOMIZE ; if ( f == n . ALWAYS _RANDOMIZE && ! m . getNonce ( ) ) m . setNonce ( Math . floor ( Math . random ( ) * 100001 ) ) ; else f == n . NEVER _RANDOMIZE && m . getNonce ( ) && m . clearNonce ( ) } ; svgedit . draw . Drawing = function ( c , m ) { if ( ! c || ! c . tagName || ! c . namespaceURI || c . tagName != "svg" || c . namespaceURI != "http://www.w3.org/2000/svg" ) throw "Error: svgedit.draw.Drawing instance initialized without a <svg> element" ; this . svgElem _ = c ; this . obj _num = 0 ; this . idPrefix = m || "svg_" ; this . releasedNums = [ ] ; this . all _layers = [ ] ; this . current _layer = null ; this . nonce _ =
"" ; var p = this . svgElem _ . getAttributeNS ( "http://svg-edit.googlecode.com" , "nonce" ) ; if ( p && f != n . NEVER _RANDOMIZE ) this . nonce _ = p ; else f == n . ALWAYS _RANDOMIZE && this . setNonce ( Math . floor ( Math . random ( ) * 100001 ) ) } ; svgedit . draw . Drawing . prototype . getElem _ = function ( c ) { return this . svgElem _ . querySelector ? this . svgElem _ . querySelector ( "#" + c ) : $ ( this . svgElem _ ) . find ( "[id=" + c + "]" ) [ 0 ] } ; svgedit . draw . Drawing . prototype . getSvgElem = function ( ) { return this . svgElem _ } ; svgedit . draw . Drawing . prototype . getNonce = function ( ) { return this . nonce _ } ;
svgedit . draw . Drawing . prototype . setNonce = function ( c ) { this . svgElem _ . setAttributeNS ( "http://www.w3.org/2000/xmlns/" , "xmlns:se" , "http://svg-edit.googlecode.com" ) ; this . svgElem _ . setAttributeNS ( "http://svg-edit.googlecode.com" , "se:nonce" , c ) ; this . nonce _ = c } ; svgedit . draw . Drawing . prototype . clearNonce = function ( ) { this . nonce _ = "" } ; svgedit . draw . Drawing . prototype . getId = function ( ) { return this . nonce _ ? this . idPrefix + this . nonce _ + "_" + this . obj _num : this . idPrefix + this . obj _num } ; svgedit . draw . Drawing . prototype . getNextId = function ( ) { var c =
this . obj _num , m = false ; if ( this . releasedNums . length > 0 ) { this . obj _num = this . releasedNums . pop ( ) ; m = true } else this . obj _num ++ ; for ( var p = this . getId ( ) ; this . getElem _ ( p ) ; ) { if ( m ) { this . obj _num = c ; m = false } this . obj _num ++ ; p = this . getId ( ) } if ( m ) this . obj _num = c ; return p } ; svgedit . draw . Drawing . prototype . releaseId = function ( c ) { var m = this . idPrefix + ( this . nonce _ ? this . nonce _ + "_" : "" ) ; if ( typeof c != "string" || c . indexOf ( m ) != 0 ) return false ; c = parseInt ( c . substr ( m . length ) ) ; if ( typeof c != "number" || c <= 0 || this . releasedNums . indexOf ( c ) != - 1 ) return false ;
this . releasedNums . push ( c ) ; return true } ; svgedit . draw . Drawing . prototype . getNumLayers = function ( ) { return this . all _layers . length } ; svgedit . draw . Drawing . prototype . hasLayer = function ( c ) { for ( var m = 0 ; m < this . getNumLayers ( ) ; m ++ ) if ( this . all _layers [ m ] [ 0 ] == c ) return true ; return false } ; svgedit . draw . Drawing . prototype . getLayerName = function ( c ) { if ( c >= 0 && c < this . getNumLayers ( ) ) return this . all _layers [ c ] [ 0 ] ; return "" } ; svgedit . draw . Drawing . prototype . getCurrentLayer = function ( ) { return this . current _layer } ; svgedit . draw . Drawing . prototype . getCurrentLayerName =
function ( ) { for ( var c = 0 ; c < this . getNumLayers ( ) ; ++ c ) if ( this . all _layers [ c ] [ 1 ] == this . current _layer ) return this . getLayerName ( c ) ; return "" } ; svgedit . draw . Drawing . prototype . setCurrentLayer = function ( c ) { for ( var m = 0 ; m < this . getNumLayers ( ) ; ++ m ) if ( c == this . getLayerName ( m ) ) { if ( this . current _layer != this . all _layers [ m ] [ 1 ] ) { this . current _layer . setAttribute ( "style" , "pointer-events:none" ) ; this . current _layer = this . all _layers [ m ] [ 1 ] ; this . current _layer . setAttribute ( "style" , "pointer-events:all" ) } return true } return false } ; svgedit . draw . Drawing . prototype . deleteCurrentLayer =
function ( ) { if ( this . current _layer && this . getNumLayers ( ) > 1 ) { var c = this . current _layer . parentNode . removeChild ( this . current _layer ) ; this . identifyLayers ( ) ; return c } return null } ; svgedit . draw . Drawing . prototype . identifyLayers = function ( ) { this . all _layers = [ ] ; for ( var c = this . svgElem _ . childNodes . length , m = [ ] , p = [ ] , b = null , d = false , e = 0 ; e < c ; ++ e ) { var l = this . svgElem _ . childNodes . item ( e ) ; if ( l && l . nodeType == 1 ) if ( l . tagName == "g" ) { d = true ; var u = $ ( "title" , l ) . text ( ) ; if ( ! u && svgedit . browser . isOpera ( ) && l . querySelectorAll ) u = $ ( l . querySelectorAll ( "title" ) ) . text ( ) ;
if ( u ) { p . push ( u ) ; this . all _layers . push ( [ u , l ] ) ; b = l ; svgedit . utilities . walkTree ( l , function ( z ) { z . setAttribute ( "style" , "pointer-events:inherit" ) } ) ; b . setAttribute ( "style" , "pointer-events:none" ) } else m . push ( l ) } else if ( ~ a . indexOf ( l . nodeName ) ) { svgedit . utilities . getBBox ( l ) ; m . push ( l ) } } c = this . svgElem _ . ownerDocument ; if ( m . length > 0 || ! d ) { for ( e = 1 ; p . indexOf ( "Layer " + e ) >= 0 ; ) e ++ ; p = "Layer " + e ; b = c . createElementNS ( "http://www.w3.org/2000/svg" , "g" ) ; d = c . createElementNS ( "http://www.w3.org/2000/svg" , "title" ) ; d . textContent = p ;
b . appendChild ( d ) ; for ( d = 0 ; d < m . length ; ++ d ) b . appendChild ( m [ d ] ) ; this . svgElem _ . appendChild ( b ) ; this . all _layers . push ( [ p , b ] ) } svgedit . utilities . walkTree ( b , function ( z ) { z . setAttribute ( "style" , "pointer-events:inherit" ) } ) ; this . current _layer = b ; this . current _layer . setAttribute ( "style" , "pointer-events:all" ) } ; svgedit . draw . Drawing . prototype . createLayer = function ( c ) { var m = this . svgElem _ . ownerDocument , p = m . createElementNS ( "http://www.w3.org/2000/svg" , "g" ) ; m = m . createElementNS ( "http://www.w3.org/2000/svg" , "title" ) ; m . textContent =
c ; p . appendChild ( m ) ; this . svgElem _ . appendChild ( p ) ; this . identifyLayers ( ) ; return p } ; svgedit . draw . Drawing . prototype . getLayerVisibility = function ( c ) { for ( var m = null , p = 0 ; p < this . getNumLayers ( ) ; ++ p ) if ( this . getLayerName ( p ) == c ) { m = this . all _layers [ p ] [ 1 ] ; break } if ( ! m ) return false ; return m . getAttribute ( "display" ) != "none" } ; svgedit . draw . Drawing . prototype . setLayerVisibility = function ( c , m ) { if ( typeof m != "boolean" ) return null ; for ( var p = null , b = 0 ; b < this . getNumLayers ( ) ; ++ b ) if ( this . getLayerName ( b ) == c ) { p = this . all _layers [ b ] [ 1 ] ;
break } if ( ! p ) return null ; p . getAttribute ( "display" ) ; p . setAttribute ( "display" , m ? "inline" : "none" ) ; return p } ; svgedit . draw . Drawing . prototype . getLayerOpacity = function ( c ) { for ( var m = 0 ; m < this . getNumLayers ( ) ; ++ m ) if ( this . getLayerName ( m ) == c ) { ( c = this . all _layers [ m ] [ 1 ] . getAttribute ( "opacity" ) ) || ( c = "1.0" ) ; return parseFloat ( c ) } return null } ; svgedit . draw . Drawing . prototype . setLayerOpacity = function ( c , m ) { if ( ! ( typeof m != "number" || m < 0 || m > 1 ) ) for ( var p = 0 ; p < this . getNumLayers ( ) ; ++ p ) if ( this . getLayerName ( p ) == c ) { this . all _layers [ p ] [ 1 ] . setAttribute ( "opacity" ,
m ) ; break } } } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { if ( ! svgedit . path ) svgedit . path = { } ; var a = { pathNodeTooltip : "Drag node to move it. Double-click node to change segment type" , pathCtrlPtTooltip : "Drag control point to adjust curve properties" } , n = { 2 : [ "x" , "y" ] , 4 : [ "x" , "y" ] , 6 : [ "x" , "y" , "x1" , "y1" , "x2" , "y2" ] , 8 : [ "x" , "y" , "x1" , "y1" ] , 10 : [ "x" , "y" , "r1" , "r2" , "angle" , "largeArcFlag" , "sweepFlag" ] , 12 : [ "x" ] , 14 : [ "y" ] , 16 : [ "x" , "y" , "x2" , "y2" ] , 18 : [ "x" , "y" ] } , f = [ ] , c = true , m = { } ; svgedit . path . setLinkControlPoints = function ( d ) { c = d } ; var p = svgedit . path . path = null ; svgedit . path . init =
function ( d ) { p = d ; f = [ 0 , "ClosePath" ] ; $ . each ( [ "Moveto" , "Lineto" , "CurvetoCubic" , "CurvetoQuadratic" , "Arc" , "LinetoHorizontal" , "LinetoVertical" , "CurvetoCubicSmooth" , "CurvetoQuadraticSmooth" ] , function ( e , l ) { f . push ( l + "Abs" ) ; f . push ( l + "Rel" ) } ) } ; svgedit . path . insertItemBefore = function ( d , e , l ) { d = d . pathSegList ; if ( svgedit . browser . supportsPathInsertItemBefore ( ) ) d . insertItemBefore ( e , l ) ; else { for ( var u = d . numberOfItems , z = [ ] , o = 0 ; o < u ; o ++ ) { var L = d . getItem ( o ) ; z . push ( L ) } d . clear ( ) ; for ( o = 0 ; o < u ; o ++ ) { o == l && d . appendItem ( e ) ; d . appendItem ( z [ o ] ) } } } ;
svgedit . path . ptObjToArr = function ( d , e ) { for ( var l = n [ d ] , u = l . length , z = Array ( u ) , o = 0 ; o < u ; o ++ ) z [ o ] = e [ l [ o ] ] ; return z } ; svgedit . path . getGripPt = function ( d , e ) { var l = { x : e ? e . x : d . item . x , y : e ? e . y : d . item . y } , u = d . path ; if ( u . matrix ) l = svgedit . math . transformPoint ( l . x , l . y , u . matrix ) ; l . x *= p . getCurrentZoom ( ) ; l . y *= p . getCurrentZoom ( ) ; return l } ; svgedit . path . getPointFromGrip = function ( d , e ) { var l = { x : d . x , y : d . y } ; if ( e . matrix ) { d = svgedit . math . transformPoint ( l . x , l . y , e . imatrix ) ; l . x = d . x ; l . y = d . y } l . x /= p . getCurrentZoom ( ) ; l . y /= p . getCurrentZoom ( ) ;
return l } ; svgedit . path . addPointGrip = function ( d , e , l ) { var u = svgedit . path . getGripContainer ( ) , z = svgedit . utilities . getElem ( "pathpointgrip_" + d ) ; if ( ! z ) { z = document . createElementNS ( "http://www.w3.org/2000/svg" , "rect" ) ; svgedit . utilities . assignAttributes ( z , { id : "pathpointgrip_" + d , display : "none" , width : 5 , height : 5 , fill : "#fff" , stroke : "#4F80FF" , "stroke-width" : 1 , cursor : "move" , style : "pointer-events:all" , "xlink:title" : a . pathNodeTooltip } ) ; z = u . appendChild ( z ) ; $ ( "#pathpointgrip_" + d ) . dblclick ( function ( ) { svgedit . path . path &&
svgedit . path . path . setSegType ( ) } ) } e && l && svgedit . utilities . assignAttributes ( z , { x : e - 2.5 , y : l - 2.5 , display : "inline" } ) ; return z } ; svgedit . path . getGripContainer = function ( ) { var d = svgedit . utilities . getElem ( "pathpointgrip_container" ) ; if ( ! d ) { d = svgedit . utilities . getElem ( "selectorParentGroup" ) . appendChild ( document . createElementNS ( "http://www.w3.org/2000/svg" , "g" ) ) ; d . id = "pathpointgrip_container" } return d } ; svgedit . path . addCtrlGrip = function ( d ) { var e = svgedit . utilities . getElem ( "ctrlpointgrip_" + d ) ; if ( e ) return e ; e = document . createElementNS ( "http://www.w3.org/2000/svg" ,
"circle" ) ; svgedit . utilities . assignAttributes ( e , { id : "ctrlpointgrip_" + d , display : "none" , r : 3 , fill : "#4F80FF" , cursor : "move" , style : "pointer-events:all" , "xlink:title" : a . pathCtrlPtTooltip } ) ; svgedit . path . getGripContainer ( ) . appendChild ( e ) ; return e } ; svgedit . path . getCtrlLine = function ( d ) { var e = svgedit . utilities . getElem ( "ctrlLine_" + d ) ; if ( e ) return e ; e = document . createElementNS ( "http://www.w3.org/2000/svg" , "line" ) ; svgedit . utilities . assignAttributes ( e , { id : "ctrlLine_" + d , stroke : "#4F80FF" , "stroke-width" : 1 , style : "pointer-events:none" } ) ;
svgedit . path . getGripContainer ( ) . appendChild ( e ) ; return e } ; svgedit . path . getPointGrip = function ( d , e ) { var l = svgedit . path . addPointGrip ( d . index ) ; if ( e ) { var u = svgedit . path . getGripPt ( d ) ; svgedit . utilities . assignAttributes ( l , { x : u . x - 2.5 , y : u . y - 2.5 , display : "inline" } ) } return l } ; svgedit . path . getControlPoints = function ( d ) { var e = d . item , l = d . index ; if ( ! ( "x1" in e ) || ! ( "x2" in e ) ) return null ; var u = { } ; svgedit . path . getGripContainer ( ) ; for ( var z = [ svgedit . path . path . segs [ l - 1 ] . item , e ] , o = 1 ; o < 3 ; o ++ ) { var L = l + "c" + o , T = u [ "c" + o + "_line" ] =
svgedit . path . getCtrlLine ( L ) , N = svgedit . path . getGripPt ( d , { x : e [ "x" + o ] , y : e [ "y" + o ] } ) , J = svgedit . path . getGripPt ( d , { x : z [ o - 1 ] . x , y : z [ o - 1 ] . y } ) ; svgedit . utilities . assignAttributes ( T , { x1 : N . x , y1 : N . y , x2 : J . x , y2 : J . y , display : "inline" } ) ; u [ "c" + o + "_line" ] = T ; pointGrip = u [ "c" + o ] = svgedit . path . addCtrlGrip ( L ) ; svgedit . utilities . assignAttributes ( pointGrip , { cx : N . x , cy : N . y , display : "inline" } ) ; u [ "c" + o ] = pointGrip } return u } ; svgedit . path . replacePathSeg = function ( d , e , l , u ) { u = u || svgedit . path . path . elem ; d = u [ "createSVGPathSeg" + f [ d ] ] . apply ( u ,
l ) ; if ( svgedit . browser . supportsPathReplaceItem ( ) ) u . pathSegList . replaceItem ( d , e ) ; else { l = u . pathSegList ; u = l . numberOfItems ; for ( var z = [ ] , o = 0 ; o < u ; o ++ ) { var L = l . getItem ( o ) ; z . push ( L ) } l . clear ( ) ; for ( o = 0 ; o < u ; o ++ ) o == e ? l . appendItem ( d ) : l . appendItem ( z [ o ] ) } } ; svgedit . path . getSegSelector = function ( d , e ) { var l = d . index , u = svgedit . utilities . getElem ( "segline_" + l ) ; if ( ! u ) { var z = svgedit . path . getGripContainer ( ) ; u = document . createElementNS ( "http://www.w3.org/2000/svg" , "path" ) ; svgedit . utilities . assignAttributes ( u , { id : "segline_" + l ,
display : "none" , fill : "none" , stroke : "#0FF" , "stroke-width" : 2 , style : "pointer-events:none" , d : "M0,0 0,0" } ) ; z . appendChild ( u ) } if ( e ) { l = d . prev ; if ( ! l ) { u . setAttribute ( "display" , "none" ) ; return u } l = svgedit . path . getGripPt ( l ) ; svgedit . path . replacePathSeg ( 2 , 0 , [ l . x , l . y ] , u ) ; z = svgedit . path . ptObjToArr ( d . type , d . item , true ) ; for ( var o = 0 ; o < z . length ; o += 2 ) { l = svgedit . path . getGripPt ( d , { x : z [ o ] , y : z [ o + 1 ] } ) ; z [ o ] = l . x ; z [ o + 1 ] = l . y } svgedit . path . replacePathSeg ( d . type , 1 , z , u ) } return u } ; svgedit . path . smoothControlPoints = this . smoothControlPoints =
function ( d , e , l ) { var u = d . x - l . x , z = d . y - l . y , o = e . x - l . x , L = e . y - l . y ; if ( ( u != 0 || z != 0 ) && ( o != 0 || L != 0 ) ) { d = Math . atan2 ( z , u ) ; e = Math . atan2 ( L , o ) ; u = Math . sqrt ( u * u + z * z ) ; o = Math . sqrt ( o * o + L * L ) ; z = p . getSVGRoot ( ) . createSVGPoint ( ) ; L = p . getSVGRoot ( ) . createSVGPoint ( ) ; if ( d < 0 ) d += 2 * Math . PI ; if ( e < 0 ) e += 2 * Math . PI ; var T = Math . abs ( d - e ) , N = Math . abs ( Math . PI - T ) / 2 ; if ( d - e > 0 ) { d = T < Math . PI ? d + N : d - N ; e = T < Math . PI ? e - N : e + N } else { d = T < Math . PI ? d - N : d + N ; e = T < Math . PI ? e + N : e - N } z . x = u * Math . cos ( d ) + l . x ; z . y = u * Math . sin ( d ) + l . y ; L . x = o * Math . cos ( e ) + l . x ; L . y = o * Math . sin ( e ) + l . y ;
return [ z , L ] } } ; svgedit . path . Segment = function ( d , e ) { this . selected = false ; this . index = d ; this . item = e ; this . type = e . pathSegType ; this . ctrlpts = [ ] ; this . segsel = this . ptgrip = null } ; svgedit . path . Segment . prototype . showCtrlPts = function ( d ) { for ( var e in this . ctrlpts ) this . ctrlpts [ e ] . setAttribute ( "display" , d ? "inline" : "none" ) } ; svgedit . path . Segment . prototype . selectCtrls = function ( ) { $ ( "#ctrlpointgrip_" + this . index + "c1, #ctrlpointgrip_" + this . index + "c2" ) . attr ( "fill" , "#4F80FF" ) } ; svgedit . path . Segment . prototype . show = function ( d ) { if ( this . ptgrip ) { this . ptgrip . setAttribute ( "display" ,
d ? "inline" : "none" ) ; this . segsel . setAttribute ( "display" , d ? "inline" : "none" ) ; this . showCtrlPts ( d ) } } ; svgedit . path . Segment . prototype . select = function ( d ) { if ( this . ptgrip ) { this . ptgrip . setAttribute ( "stroke" , d ? "#0FF" : "#00F" ) ; this . segsel . setAttribute ( "display" , d ? "inline" : "none" ) ; this . ctrlpts && this . selectCtrls ( d ) ; this . selected = d } } ; svgedit . path . Segment . prototype . addGrip = function ( ) { this . ptgrip = svgedit . path . getPointGrip ( this , true ) ; this . ctrlpts = svgedit . path . getControlPoints ( this , true ) ; this . segsel = svgedit . path . getSegSelector ( this ,
true ) } ; svgedit . path . Segment . prototype . update = function ( d ) { if ( this . ptgrip ) { var e = svgedit . path . getGripPt ( this ) ; svgedit . utilities . assignAttributes ( this . ptgrip , this . ptgrip . nodeName == "rect" ? { x : e . x - 2.5 , y : e . y - 2.5 } : { cx : e . x , cy : e . y } ) ; svgedit . path . getSegSelector ( this , true ) ; if ( this . ctrlpts ) { if ( d ) { this . item = svgedit . path . path . elem . pathSegList . getItem ( this . index ) ; this . type = this . item . pathSegType } svgedit . path . getControlPoints ( this ) } } } ; svgedit . path . Segment . prototype . move = function ( d , e ) { var l = this . item ; l = this . ctrlpts ?
[ l . x += d , l . y += e , l . x1 , l . y1 , l . x2 += d , l . y2 += e ] : [ l . x += d , l . y += e ] ; svgedit . path . replacePathSeg ( this . type , this . index , l ) ; if ( this . next && this . next . ctrlpts ) { l = this . next . item ; l = [ l . x , l . y , l . x1 += d , l . y1 += e , l . x2 , l . y2 ] ; svgedit . path . replacePathSeg ( this . next . type , this . next . index , l ) } if ( this . mate ) { l = this . mate . item ; l = [ l . x += d , l . y += e ] ; svgedit . path . replacePathSeg ( this . mate . type , this . mate . index , l ) } this . update ( true ) ; this . next && this . next . update ( true ) } ; svgedit . path . Segment . prototype . setLinked = function ( d ) { var e , l , u ; if ( d == 2 ) { l = 1 ; e =
this . next ; if ( ! e ) return ; u = this . item } else { l = 2 ; e = this . prev ; if ( ! e ) return ; u = e . item } var z = e . item ; z [ "x" + l ] = u . x + ( u . x - this . item [ "x" + d ] ) ; z [ "y" + l ] = u . y + ( u . y - this . item [ "y" + d ] ) ; svgedit . path . replacePathSeg ( e . type , e . index , [ z . x , z . y , z . x1 , z . y1 , z . x2 , z . y2 ] ) ; e . update ( true ) } ; svgedit . path . Segment . prototype . moveCtrl = function ( d , e , l ) { var u = this . item ; u [ "x" + d ] += e ; u [ "y" + d ] += l ; svgedit . path . replacePathSeg ( this . type , this . index , [ u . x , u . y , u . x1 , u . y1 , u . x2 , u . y2 ] ) ; this . update ( true ) } ; svgedit . path . Segment . prototype . setType = function ( d , e ) { svgedit . path . replacePathSeg ( d ,
this . index , e ) ; this . type = d ; this . item = svgedit . path . path . elem . pathSegList . getItem ( this . index ) ; this . showCtrlPts ( d === 6 ) ; this . ctrlpts = svgedit . path . getControlPoints ( this ) ; this . update ( true ) } ; svgedit . path . Path = function ( d ) { if ( ! d || d . tagName !== "path" ) throw "svgedit.path.Path constructed without a <path> element" ; this . elem = d ; this . segs = [ ] ; this . selected _pts = [ ] ; svgedit . path . path = this ; this . init ( ) } ; svgedit . path . Path . prototype . init = function ( ) { $ ( svgedit . path . getGripContainer ( ) ) . find ( "*" ) . attr ( "display" , "none" ) ; var d =
this . elem . pathSegList , e = d . numberOfItems ; this . segs = [ ] ; this . selected _pts = [ ] ; this . first _seg = null ; for ( var l = 0 ; l < e ; l ++ ) { var u = d . getItem ( l ) ; u = new svgedit . path . Segment ( l , u ) ; u . path = this ; this . segs . push ( u ) } d = this . segs ; u = null ; for ( l = 0 ; l < e ; l ++ ) { var z = d [ l ] , o = l + 1 >= e ? null : d [ l + 1 ] , L = l - 1 < 0 ? null : d [ l - 1 ] ; if ( z . type === 2 ) { if ( L && L . type !== 1 ) { o = d [ u ] ; o . next = d [ u + 1 ] ; o . next . prev = o ; o . addGrip ( ) } u = l } else if ( o && o . type === 1 ) { z . next = d [ u + 1 ] ; z . next . prev = z ; z . mate = d [ u ] ; z . addGrip ( ) ; if ( this . first _seg == null ) this . first _seg = z } else if ( o ) { if ( z . type !==
1 ) { z . addGrip ( ) ; if ( o && o . type !== 2 ) { z . next = o ; z . next . prev = z } } } else if ( z . type !== 1 ) { o = d [ u ] ; o . next = d [ u + 1 ] ; o . next . prev = o ; o . addGrip ( ) ; z . addGrip ( ) ; if ( ! this . first _seg ) this . first _seg = d [ u ] } } return this } ; svgedit . path . Path . prototype . eachSeg = function ( d ) { for ( var e = this . segs . length , l = 0 ; l < e ; l ++ ) if ( d . call ( this . segs [ l ] , l ) === false ) break } ; svgedit . path . Path . prototype . addSeg = function ( d ) { var e = this . segs [ d ] ; if ( e . prev ) { var l = e . prev , u ; switch ( e . item . pathSegType ) { case 4 : var z = ( e . item . x + l . item . x ) / 2 , o = ( e . item . y + l . item . y ) / 2 ; u = this . elem . createSVGPathSegLinetoAbs ( z ,
o ) ; break ; case 6 : u = ( l . item . x + e . item . x1 ) / 2 ; var L = ( e . item . x1 + e . item . x2 ) / 2 , T = ( e . item . x2 + e . item . x ) / 2 , N = ( u + L ) / 2 ; L = ( L + T ) / 2 ; z = ( N + L ) / 2 ; var J = ( l . item . y + e . item . y1 ) / 2 , da = ( e . item . y1 + e . item . y2 ) / 2 ; l = ( e . item . y2 + e . item . y ) / 2 ; var V = ( J + da ) / 2 ; da = ( da + l ) / 2 ; o = ( V + da ) / 2 ; u = this . elem . createSVGPathSegCurvetoCubicAbs ( z , o , u , J , N , V ) ; svgedit . path . replacePathSeg ( e . type , d , [ e . item . x , e . item . y , L , da , T , l ] ) } svgedit . path . insertItemBefore ( this . elem , u , d ) } } ; svgedit . path . Path . prototype . deleteSeg = function ( d ) { var e = this . segs [ d ] , l = this . elem . pathSegList ;
e . show ( false ) ; var u = e . next ; if ( e . mate ) { var z = [ u . item . x , u . item . y ] ; svgedit . path . replacePathSeg ( 2 , u . index , z ) ; svgedit . path . replacePathSeg ( 4 , e . index , z ) ; l . removeItem ( e . mate . index ) } else { if ( ! e . prev ) { z = [ u . item . x , u . item . y ] ; svgedit . path . replacePathSeg ( 2 , e . next . index , z ) } l . removeItem ( d ) } } ; svgedit . path . Path . prototype . subpathIsClosed = function ( d ) { var e = false ; svgedit . path . path . eachSeg ( function ( l ) { if ( l <= d ) return true ; if ( this . type === 2 ) return false ; else if ( this . type === 1 ) { e = true ; return false } } ) ; return e } ; svgedit . path . Path . prototype . removePtFromSelection =
function ( d ) { var e = this . selected _pts . indexOf ( d ) ; if ( e != - 1 ) { this . segs [ d ] . select ( false ) ; this . selected _pts . splice ( e , 1 ) } } ; svgedit . path . Path . prototype . clearSelection = function ( ) { this . eachSeg ( function ( ) { this . select ( false ) } ) ; this . selected _pts = [ ] } ; svgedit . path . Path . prototype . storeD = function ( ) { this . last _d = this . elem . getAttribute ( "d" ) } ; svgedit . path . Path . prototype . show = function ( d ) { this . eachSeg ( function ( ) { this . show ( d ) } ) ; d && this . selectPt ( this . first _seg . index ) ; return this } ; svgedit . path . Path . prototype . movePts = function ( d ,
e ) { for ( var l = this . selected _pts . length ; l -- ; ) this . segs [ this . selected _pts [ l ] ] . move ( d , e ) } ; svgedit . path . Path . prototype . moveCtrl = function ( d , e ) { var l = this . segs [ this . selected _pts [ 0 ] ] ; l . moveCtrl ( this . dragctrl , d , e ) ; c && l . setLinked ( this . dragctrl ) } ; svgedit . path . Path . prototype . setSegType = function ( d ) { this . storeD ( ) ; for ( var e = this . selected _pts . length , l ; e -- ; ) { var u = this . segs [ this . selected _pts [ e ] ] , z = u . prev ; if ( z ) { if ( ! d ) { l = "Toggle Path Segment Type" ; d = u . type == 6 ? 4 : 6 } d -= 0 ; var o = u . item . x , L = u . item . y , T = z . item . x ; z = z . item . y ;
var N ; switch ( d ) { case 6 : if ( u . olditem ) { T = u . olditem ; N = [ o , L , T . x1 , T . y1 , T . x2 , T . y2 ] } else { N = o - T ; var J = L - z ; N = [ o , L , T + N / 3 , z + J / 3 , o - N / 3 , L - J / 3 ] } break ; case 4 : N = [ o , L ] ; u . olditem = u . item } u . setType ( d , N ) } } svgedit . path . path . endChanges ( l ) } ; svgedit . path . Path . prototype . selectPt = function ( d , e ) { this . clearSelection ( ) ; d == null && this . eachSeg ( function ( l ) { if ( this . prev ) d = l } ) ; this . addPtsToSelection ( d ) ; if ( e ) { this . dragctrl = e ; c && this . segs [ d ] . setLinked ( e ) } } ; svgedit . path . Path . prototype . update = function ( ) { var d = this . elem ; if ( svgedit . utilities . getRotationAngle ( d ) ) { this . matrix =
svgedit . math . getMatrix ( d ) ; this . imatrix = this . matrix . inverse ( ) } else this . imatrix = this . matrix = null ; this . eachSeg ( function ( e ) { this . item = d . pathSegList . getItem ( e ) ; this . update ( ) } ) ; return this } ; svgedit . path . getPath _ = function ( d ) { var e = m [ d . id ] ; e || ( e = m [ d . id ] = new svgedit . path . Path ( d ) ) ; return e } ; svgedit . path . removePath _ = function ( d ) { d in m && delete m [ d ] } ; var b = function ( d , e ) { dx = d - oldcx ; dy = e - oldcy ; r = Math . sqrt ( dx * dx + dy * dy ) ; theta = Math . atan2 ( dy , dx ) + angle ; dx = r * Math . cos ( theta ) + oldcx ; dy = r * Math . sin ( theta ) + oldcy ; dx -= newcx ;
dy -= newcy ; r = Math . sqrt ( dx * dx + dy * dy ) ; theta = Math . atan2 ( dy , dx ) - angle ; return { x : ( r * Math . cos ( theta ) + newcx ) / 1 , y : ( r * Math . sin ( theta ) + newcy ) / 1 } } ; svgedit . path . recalcRotatedPath = function ( ) { var d = svgedit . path . path . elem , e = svgedit . utilities . getRotationAngle ( d , true ) ; if ( e ) { var l = svgedit . utilities . getBBox ( d ) , u = svgedit . path . path . oldbbox , z = u . x + u . width / 2 , o = u . y + u . height / 2 ; u = l . x + l . width / 2 ; l = l . y + l . height / 2 ; u = u - z ; var L = l - o ; l = Math . sqrt ( u * u + L * L ) ; L = Math . atan2 ( L , u ) + e ; u = l * Math . cos ( L ) + z ; l = l * Math . sin ( L ) + o ; z = d . pathSegList ; for ( o = z . numberOfItems ; o ; ) { o -=
1 ; L = z . getItem ( o ) ; var T = L . pathSegType ; if ( T != 1 ) { var N = b ( L . x , L . y ) ; N = [ N . x , N . y ] ; if ( L . x1 != null && L . x2 != null ) { c _vals1 = b ( L . x1 , L . y1 ) ; c _vals2 = b ( L . x2 , L . y2 ) ; N . splice ( N . length , 0 , c _vals1 . x , c _vals1 . y , c _vals2 . x , c _vals2 . y ) } svgedit . path . replacePathSeg ( T , o , N ) } } svgedit . utilities . getBBox ( d ) ; z = svgroot . createSVGTransform ( ) ; d = svgedit . transformlist . getTransformList ( d ) ; z . setRotate ( e * 180 / Math . PI , u , l ) ; d . replaceItem ( z , 0 ) } } ; svgedit . path . clearData = function ( ) { m = { } } } ) ( ) ; if ( ! window . console ) { window . console = { } ; window . console . log = function ( ) { } ; window . console . dir = function ( ) { } } if ( window . opera ) { window . console . log = function ( a ) { opera . postError ( a ) } ; window . console . dir = function ( ) { } }
( function ( ) { var a = jQuery . fn . attr ; jQuery . fn . attr = function ( n , f ) { var c = this . length ; if ( ! c ) return a . apply ( this , arguments ) ; for ( var m = 0 ; m < c ; m ++ ) { var p = this [ m ] ; if ( p . namespaceURI === "http://www.w3.org/2000/svg" ) if ( f !== undefined ) p . setAttribute ( n , f ) ; else if ( $ . isArray ( n ) ) { c = n . length ; for ( m = { } ; c -- ; ) { var b = n [ c ] , d = p . getAttribute ( b ) ; if ( d || d === "0" ) d = isNaN ( d ) ? d : d - 0 ; m [ b ] = d } return m } else if ( typeof n === "object" ) for ( b in n ) p . setAttribute ( b , n [ b ] ) ; else { if ( ( d = p . getAttribute ( n ) ) || d === "0" ) d = isNaN ( d ) ? d : d - 0 ; return d } else return a . apply ( this ,
arguments ) } return this } } ) ( ) ;
$ . SvgCanvas = function ( a , n ) { function f ( g , h ) { for ( var k = svgedit . utilities . getBBox ( g ) , v = 0 ; v < 2 ; v ++ ) { var t = v === 0 ? "fill" : "stroke" , E = g . getAttribute ( t ) ; if ( E && E . indexOf ( "url(" ) === 0 ) { E = X ( E ) ; if ( E . tagName === "linearGradient" ) { var w = E . getAttribute ( "x1" ) || 0 , s = E . getAttribute ( "y1" ) || 0 , A = E . getAttribute ( "x2" ) || 1 , F = E . getAttribute ( "y2" ) || 0 ; w = k . width * w + k . x ; s = k . height * s + k . y ; A = k . width * A + k . x ; F = k . height * F + k . y ; w = O ( w , s , h ) ; F = O ( A , F , h ) ; A = { } ; A . x1 = ( w . x - k . x ) / k . width ; A . y1 = ( w . y - k . y ) / k . height ; A . x2 = ( F . x - k . x ) / k . width ; A . y2 = ( F . y - k . y ) / k . height ;
E = E . cloneNode ( true ) ; $ ( E ) . attr ( A ) ; E . id = M ( ) ; ub ( ) . appendChild ( E ) ; g . setAttribute ( t , "url(#" + E . id + ")" ) } } } } var c = "http://www.w3.org/2000/svg" , m = { show _outside _canvas : true , selectNew : true , dimensions : [ 640 , 480 ] } ; n && $ . extend ( m , n ) ; var p = m . dimensions , b = this , d = a . ownerDocument , e = d . importNode ( svgedit . utilities . text2xml ( '<svg id="svgroot" xmlns="' + c + '" xlinkns="http://www.w3.org/1999/xlink" width="' + p [ 0 ] + '" height="' + p [ 1 ] + '" x="' + p [ 0 ] + '" y="' + p [ 1 ] + '" overflow="visible"><defs><filter id="canvashadow" filterUnits="objectBoundingBox"><feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/><feOffset in="blur" dx="5" dy="5" result="offsetBlur"/><feMerge><feMergeNode in="offsetBlur"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs></svg>' ) . documentElement ,
true ) ; a . appendChild ( e ) ; var l = d . createElementNS ( c , "svg" ) ; ( b . clearSvgContentElement = function ( ) { for ( ; l . firstChild ; ) l . removeChild ( l . firstChild ) ; $ ( l ) . attr ( { id : "svgcontent" , width : p [ 0 ] , height : p [ 1 ] , x : p [ 0 ] , y : p [ 1 ] , overflow : m . show _outside _canvas ? "visible" : "hidden" , xmlns : c , "xmlns:se" : "http://svg-edit.googlecode.com" , "xmlns:xlink" : "http://www.w3.org/1999/xlink" } ) . appendTo ( e ) ; var g = d . createComment ( " Created with SVG-edit - http://svg-edit.googlecode.com/ " ) ; l . appendChild ( g ) } ) ( ) ; var u = "svg_" ; b . setIdPrefix = function ( g ) { u =
g } ; b . current _drawing _ = new svgedit . draw . Drawing ( l , u ) ; var z = b . getCurrentDrawing = function ( ) { return b . current _drawing _ } , o = 1 , L = null , T = { shape : { fill : ( m . initFill . color == "none" ? "" : "#" ) + m . initFill . color , fill _paint : null , fill _opacity : m . initFill . opacity , stroke : "#" + m . initStroke . color , stroke _paint : null , stroke _opacity : m . initStroke . opacity , stroke _width : m . initStroke . width , stroke _dasharray : "none" , stroke _linejoin : "miter" , stroke _linecap : "butt" , opacity : m . initOpacity } } ; T . text = $ . extend ( true , { } , T . shape ) ; $ . extend ( T . text , { fill : "#000000" ,
stroke _width : 0 , font _size : 24 , font _family : "Junction" } ) ; var N = T . shape , J = Array ( 1 ) , da = this . addSvgElementFromJson = function ( g ) { var h = svgedit . utilities . getElem ( g . attr . id ) , k = z ( ) . getCurrentLayer ( ) ; if ( h && g . element != h . tagName ) { k . removeChild ( h ) ; h = null } if ( ! h ) { h = d . createElementNS ( c , g . element ) ; if ( k ) ( L || k ) . appendChild ( h ) } g . curStyles && svgedit . utilities . assignAttributes ( h , { fill : N . fill , stroke : N . stroke , "stroke-width" : N . stroke _width , "stroke-dasharray" : N . stroke _dasharray , "stroke-linejoin" : N . stroke _linejoin , "stroke-linecap" : N . stroke _linecap ,
"stroke-opacity" : N . stroke _opacity , "fill-opacity" : N . fill _opacity , opacity : N . opacity / 2 , style : "pointer-events:inherit" } , 100 ) ; svgedit . utilities . assignAttributes ( h , g . attr , 100 ) ; svgedit . utilities . cleanupElement ( h ) ; return h } , V = b . getTransformList = svgedit . transformlist . getTransformList , O = svgedit . math . transformPoint , fa = b . matrixMultiply = svgedit . math . matrixMultiply , sa = b . hasMatrixTransform = svgedit . math . hasMatrixTransform , ja = b . transformListToTransform = svgedit . math . transformListToTransform , ca = svgedit . math . snapToAngle ,
ea = svgedit . math . getMatrix ; svgedit . units . init ( { getBaseUnit : function ( ) { return m . baseUnit } , getElement : svgedit . utilities . getElem , getHeight : function ( ) { return l . getAttribute ( "height" ) / o } , getWidth : function ( ) { return l . getAttribute ( "width" ) / o } , getRoundDigits : function ( ) { return Za . round _digits } } ) ; var qa = b . convertToNum = svgedit . units . convertToNum ; svgedit . utilities . init ( { getDOMDocument : function ( ) { return d } , getDOMContainer : function ( ) { return a } , getSVGRoot : function ( ) { return e } , getSelectedElements : function ( ) { return J } ,
getSVGContent : function ( ) { return l } } ) ; var pa = b . getUrlFromAttr = svgedit . utilities . getUrlFromAttr , ba = b . getHref = svgedit . utilities . getHref , S = b . setHref = svgedit . utilities . setHref , U = svgedit . utilities . getPathBBox ; b . getBBox = svgedit . utilities . getBBox ; var ra = b . getRotationAngle = svgedit . utilities . getRotationAngle , la = b . getElem = svgedit . utilities . getElem , ma = b . assignAttributes = svgedit . utilities . assignAttributes , Y = this . cleanupElement = svgedit . utilities . cleanupElement , za = svgedit . sanitize . getNSMap ( ) , Ia = b . sanitizeSvg = svgedit . sanitize . sanitizeSvg ,
Qa = svgedit . history . MoveElementCommand , Ka = svgedit . history . InsertElementCommand , Ua = svgedit . history . RemoveElementCommand , Wa = svgedit . history . ChangeElementCommand , La = svgedit . history . BatchCommand ; b . undoMgr = new svgedit . history . UndoManager ( { handleHistoryEvent : function ( g , h ) { var k = svgedit . history . HistoryEventTypes ; if ( g == k . BEFORE _UNAPPLY || g == k . BEFORE _APPLY ) b . clearSelection ( ) ; else if ( g == k . AFTER _APPLY || g == k . AFTER _UNAPPLY ) { var v = h . elements ( ) ; b . pathActions . clear ( ) ; I ( "changed" , v ) ; v = h . type ( ) ; k = g == k . AFTER _APPLY ; if ( v ==
Qa . type ( ) ) { k = k ? h . newParent : h . oldParent ; k == l && b . identifyLayers ( ) } else if ( v == Ka . type ( ) || v == Ua . type ( ) ) { h . parent == l && b . identifyLayers ( ) ; if ( v == Ka . type ( ) ) k && ab ( h . elem ) ; else k || ab ( h . elem ) ; h . elem . tagName === "use" && Ub ( h . elem ) } else if ( v == Wa . type ( ) ) { h . elem . tagName == "title" && h . elem . parentNode . parentNode == l && b . identifyLayers ( ) ; k = k ? h . newValues : h . oldValues ; k . stdDeviation && b . setBlurOffsets ( h . elem . parentNode , k . stdDeviation ) ; if ( h . elem . tagName === "use" && svgedit . browser . isWebkit ( ) ) { v = h . elem ; if ( ! v . getAttribute ( "x" ) && ! v . getAttribute ( "y" ) ) { k =
v . parentNode ; var t = v . nextSibling ; k . removeChild ( v ) ; k . insertBefore ( v , t ) } } } } } } ) ; var Ga = function ( g ) { b . undoMgr . addCommandToHistory ( g ) } ; svgedit . select . init ( m , { createSVGElement : function ( g ) { return b . addSvgElementFromJson ( g ) } , svgRoot : function ( ) { return e } , svgContent : function ( ) { return l } , currentZoom : function ( ) { return o } , getStrokedBBox : function ( g ) { return b . getStrokedBBox ( [ g ] ) } } ) ; var Oa = this . selectorManager = svgedit . select . getSelectorManager ( ) ; svgedit . path . init ( { getCurrentZoom : function ( ) { return o } , getSVGRoot : function ( ) { return e } } ) ;
svgedit . utilities . snapToGrid = function ( g ) { var h = m . snappingStep , k = m . baseUnit ; if ( k !== "px" ) h *= svgedit . units . getTypeMap ( ) [ k ] ; return g = Math . round ( g / h ) * h } ; var Fa = svgedit . utilities . snapToGrid , Gb = { exportNoBlur : "Blurred elements will appear as un-blurred" , exportNoforeignObject : "foreignObject elements will not appear" , exportNoDashArray : "Strokes will appear filled" , exportNoText : "Text may not appear as expected" } , Nb = [ "clip-path" , "fill" , "filter" , "marker-end" , "marker-mid" , "marker-start" , "mask" , "stroke" ] , lb = $ . data ,
ab = function ( g ) { var h = $ ( g ) . attr ( Nb ) , k ; for ( k in h ) { var v = h [ k ] ; if ( v && v . indexOf ( "url(" ) === 0 ) { v = pa ( v ) . substr ( 1 ) ; if ( ! la ( v ) ) { ub ( ) . appendChild ( Bb [ v ] ) ; delete Bb [ v ] } } } g = g . getElementsByTagName ( "*" ) ; if ( g . length ) { h = 0 ; for ( k = g . length ; h < k ; h ++ ) ab ( g [ h ] ) } } , Sa = { } , Ja = m . imgPath + "logo.png" , Ea = [ ] , Za = { round _digits : 5 } , Ra = false , $a = null , Na = "select" , mb = "none" , Ab = { } , cb = T . text , jb = N , kb = null , Ca = null , wb = [ ] , nb = { } , yb = null , Bb = { } ; b . clipBoard = [ ] ; var ob = this . runExtensions = function ( g , h , k ) { var v = false ; if ( k ) v = [ ] ; $ . each ( nb , function ( t , E ) { if ( g in
E ) if ( k ) v . push ( E [ g ] ( h ) ) ; else v = E [ g ] ( h ) } ) ; return v } ; this . addExtension = function ( g , h ) { if ( g in nb ) console . log ( 'Cannot add extension "' + g + '", an extension by that name already exists"' ) ; else { var k = $ . isFunction ( h ) ? h ( $ . extend ( b . getPrivateMethods ( ) , { svgroot : e , svgcontent : l , nonce : z ( ) . getNonce ( ) , selectorManager : Oa } ) ) : h ; nb [ g ] = k ; I ( "extension_added" , k ) } } ; var Cb = this . round = function ( g ) { return parseInt ( g * o ) / o } , Kb = this . getIntersectionList = function ( g ) { if ( Ca == null ) return null ; var h = L || z ( ) . getCurrentLayer ( ) ; wb . length ||
( wb = Rb ( h ) ) ; var k = null ; try { k = h . getIntersectionList ( g , null ) } catch ( v ) { } if ( k == null || typeof k . item != "function" ) { k = [ ] ; if ( g ) g = g ; else { g = Ca . getBBox ( ) ; h = { } ; for ( var t in g ) h [ t ] = g [ t ] / o ; g = h } for ( t = wb . length ; t -- ; ) g . width && g . width && svgedit . math . rectsIntersect ( g , wb [ t ] . bbox ) && k . push ( wb [ t ] . elem ) } return k } ; getStrokedBBox = this . getStrokedBBox = function ( g ) { g || ( g = Ib ( ) ) ; if ( ! g . length ) return false ; var h = function ( F ) { try { var C = svgedit . utilities . getBBox ( F ) , D = svgedit . utilities . getRotationAngle ( F ) ; if ( D && D % 90 || svgedit . math . hasMatrixTransform ( svgedit . transformlist . getTransformList ( F ) ) ) { D =
false ; if ( [ "ellipse" , "path" , "line" , "polyline" , "polygon" ] . indexOf ( F . tagName ) >= 0 ) C = D = b . convertToPath ( F , true ) ; else if ( F . tagName == "rect" ) { var G = F . getAttribute ( "rx" ) , H = F . getAttribute ( "ry" ) ; if ( G || H ) C = D = b . convertToPath ( F , true ) } if ( ! D ) { var P = F . cloneNode ( true ) , R = document . createElementNS ( c , "g" ) , aa = F . parentNode ; aa . appendChild ( R ) ; R . appendChild ( P ) ; C = svgedit . utilities . bboxToObj ( R . getBBox ( ) ) ; aa . removeChild ( R ) } } return C } catch ( ua ) { console . log ( F , ua ) ; return null } } , k ; $ . each ( g , function ( ) { if ( ! k ) if ( this . parentNode ) k = h ( this ) } ) ;
if ( k == null ) return null ; var v = k . x + k . width , t = k . y + k . height , E = k . x , w = k . y , s = function ( F ) { var C = F . getAttribute ( "stroke-width" ) , D = 0 ; if ( F . getAttribute ( "stroke" ) != "none" && ! isNaN ( C ) ) D += C / 2 ; return D } , A = [ ] ; $ . each ( g , function ( F , C ) { var D = h ( C ) ; if ( D ) { var G = s ( C ) ; E = Math . min ( E , D . x - G ) ; w = Math . min ( w , D . y - G ) ; A . push ( D ) } } ) ; k . x = E ; k . y = w ; $ . each ( g , function ( F , C ) { var D = A [ F ] ; if ( D && C . nodeType == 1 ) { var G = s ( C ) ; v = Math . max ( v , D . x + D . width + G ) ; t = Math . max ( t , D . y + D . height + G ) } } ) ; k . width = v - E ; k . height = t - w ; return k } ; var Ib = this . getVisibleElements = function ( g ) { g ||
( g = $ ( l ) . children ( ) ) ; var h = [ ] ; $ ( g ) . children ( ) . each ( function ( k , v ) { try { v . getBBox ( ) && h . push ( v ) } catch ( t ) { } } ) ; return h . reverse ( ) } , Rb = this . getVisibleElementsAndBBoxes = function ( g ) { g || ( g = $ ( l ) . children ( ) ) ; var h = [ ] ; $ ( g ) . children ( ) . each ( function ( k , v ) { try { v . getBBox ( ) && h . push ( { elem : v , bbox : getStrokedBBox ( [ v ] ) } ) } catch ( t ) { } } ) ; return h . reverse ( ) } , na = this . groupSvgElem = function ( g ) { var h = document . createElementNS ( c , "g" ) ; g . parentNode . replaceChild ( h , g ) ; $ ( h ) . append ( g ) . data ( "gsvg" , g ) [ 0 ] . id = M ( ) } , Z = function ( g ) { var h = document . createElementNS ( g . namespaceURI ,
g . nodeName ) ; h . removeAttribute ( "id" ) ; $ . each ( g . attributes , function ( v , t ) { t . localName != "-moz-math-font-style" && h . setAttributeNS ( t . namespaceURI , t . nodeName , t . nodeValue ) } ) ; if ( svgedit . browser . isWebkit ( ) && g . nodeName == "path" ) { var k = Va . convertPath ( g ) ; h . setAttribute ( "d" , k ) } $ . each ( g . childNodes , function ( v , t ) { switch ( t . nodeType ) { case 1 : h . appendChild ( Z ( t ) ) ; break ; case 3 : h . textContent = t . nodeValue } } ) ; if ( $ ( g ) . data ( "gsvg" ) ) $ ( h ) . data ( "gsvg" , h . firstChild ) ; else if ( $ ( g ) . data ( "symbol" ) ) { g = $ ( g ) . data ( "symbol" ) ; $ ( h ) . data ( "ref" ,
g ) . data ( "symbol" , g ) } else h . tagName == "image" && Zb ( h ) ; h . id = M ( ) ; console . log ( h ) ; return h } , ta , M , I ; ( function ( g ) { var h = { } ; ta = g . getId = function ( ) { return z ( ) . getId ( ) } ; M = g . getNextId = function ( ) { return z ( ) . getNextId ( ) } ; I = g . call = function ( k , v ) { if ( h [ k ] ) return h [ k ] ( this , v ) } ; g . bind = function ( k , v ) { var t = h [ k ] ; h [ k ] = v ; return t } } ) ( b ) ; this . prepareSvg = function ( g ) { this . sanitizeSvg ( g . documentElement ) ; g = g . getElementsByTagNameNS ( c , "path" ) ; for ( var h = 0 , k = g . length ; h < k ; ++ h ) { var v = g [ h ] ; v . setAttribute ( "d" , Va . convertPath ( v ) ) ; Va . fixEnd ( v ) } } ;
var X = this . getRefElem = function ( g ) { return la ( pa ( g ) . substr ( 1 ) ) } , Ma = function ( g ) { if ( ! svgedit . browser . isGecko ( ) ) return g ; var h = g . cloneNode ( true ) ; g . parentNode . insertBefore ( h , g ) ; g . parentNode . removeChild ( g ) ; Oa . releaseSelector ( g ) ; J [ 0 ] = h ; Oa . requestSelector ( h ) . showGrips ( true ) ; return h } ; this . setRotationAngle = function ( g , h ) { g = parseFloat ( g ) ; var k = J [ 0 ] , v = k . getAttribute ( "transform" ) , t = svgedit . utilities . getBBox ( k ) , E = t . x + t . width / 2 , w = t . y + t . height / 2 ; t = V ( k ) ; t . numberOfItems > 0 && t . getItem ( 0 ) . type == 4 && t . removeItem ( 0 ) ; if ( g !=
0 ) { E = O ( E , w , ja ( t ) . matrix ) ; w = e . createSVGTransform ( ) ; w . setRotate ( g , E . x , E . y ) ; t . numberOfItems ? t . insertItemBefore ( w , 0 ) : t . appendItem ( w ) } else t . numberOfItems == 0 && k . removeAttribute ( "transform" ) ; if ( ! h ) { t = k . getAttribute ( "transform" ) ; k . setAttribute ( "transform" , v ) ; vb ( "transform" , t , J ) ; I ( "changed" , J ) } la ( "pathpointgrip_container" ) ; k = Oa . requestSelector ( J [ 0 ] ) ; k . resize ( ) ; k . updateGripCursors ( g ) } ; var Xa = this . recalculateAllSelectedDimensions = function ( ) { for ( var g = new La ( mb == "none" ? "position" : "size" ) , h = J . length ; h -- ; ) { var k =
pb ( J [ h ] ) ; k && g . addSubCommand ( k ) } if ( ! g . isEmpty ( ) ) { Ga ( g ) ; I ( "changed" , J ) } } , db = [ 0 , "z" , "M" , "m" , "L" , "l" , "C" , "c" , "Q" , "q" , "A" , "a" , "H" , "h" , "V" , "v" , "S" , "s" , "T" , "t" ] , tb = function ( g ) { console . log ( [ g . a , g . b , g . c , g . d , g . e , g . f ] ) } , xb = this . remapElement = function ( g , h , k ) { var v = m . gridSnapping && g . parentNode . parentNode . localName === "svg" , t = function ( ) { if ( v ) for ( var D in h ) h [ D ] = Fa ( h [ D ] ) ; ma ( g , h , 1E3 , true ) } ; box = svgedit . utilities . getBBox ( g ) ; for ( var E = 0 ; E < 2 ; E ++ ) { var w = E === 0 ? "fill" : "stroke" , s = g . getAttribute ( w ) ; if ( s && s . indexOf ( "url(" ) ===
0 ) if ( k . a < 0 || k . d < 0 ) { s = X ( s ) . cloneNode ( true ) ; if ( k . a < 0 ) { var A = s . getAttribute ( "x1" ) , F = s . getAttribute ( "x2" ) ; s . setAttribute ( "x1" , - ( A - 1 ) ) ; s . setAttribute ( "x2" , - ( F - 1 ) ) } if ( k . d < 0 ) { A = s . getAttribute ( "y1" ) ; F = s . getAttribute ( "y2" ) ; s . setAttribute ( "y1" , - ( A - 1 ) ) ; s . setAttribute ( "y2" , - ( F - 1 ) ) } s . id = M ( ) ; ub ( ) . appendChild ( s ) ; g . setAttribute ( w , "url(#" + s . id + ")" ) } } E = g . tagName ; if ( E === "g" || E === "text" || E === "use" ) if ( k . a == 1 && k . b == 0 && k . c == 0 && k . d == 1 && ( k . e != 0 || k . f != 0 ) ) { w = ja ( g ) . matrix ; w = fa ( w . inverse ( ) , k , w ) ; h . x = parseFloat ( h . x ) + w . e ; h . y = parseFloat ( h . y ) +
w . f } else { w = V ( g ) ; s = e . createSVGTransform ( ) ; s . setMatrix ( fa ( ja ( w ) . matrix , k ) ) ; w . clear ( ) ; w . appendItem ( s ) } switch ( E ) { case "foreignObject" : case "rect" : case "image" : if ( E === "image" && ( k . a < 0 || k . d < 0 ) ) { w = V ( g ) ; s = e . createSVGTransform ( ) ; s . setMatrix ( fa ( ja ( w ) . matrix , k ) ) ; w . clear ( ) ; w . appendItem ( s ) } else { w = O ( h . x , h . y , k ) ; h . width = k . a * h . width ; h . height = k . d * h . height ; h . x = w . x + Math . min ( 0 , h . width ) ; h . y = w . y + Math . min ( 0 , h . height ) ; h . width = Math . abs ( h . width ) ; h . height = Math . abs ( h . height ) } t ( ) ; break ; case "ellipse" : E = O ( h . cx , h . cy , k ) ; h . cx = E . x ;
h . cy = E . y ; h . rx = k . a * h . rx ; h . ry = k . d * h . ry ; h . rx = Math . abs ( h . rx ) ; h . ry = Math . abs ( h . ry ) ; t ( ) ; break ; case "circle" : E = O ( h . cx , h . cy , k ) ; h . cx = E . x ; h . cy = E . y ; E = svgedit . math . transformBox ( box . x , box . y , box . width , box . height , k ) ; h . r = Math . min ( ( E . tr . x - E . tl . x ) / 2 , ( E . bl . y - E . tl . y ) / 2 ) ; if ( h . r ) h . r = Math . abs ( h . r ) ; t ( ) ; break ; case "line" : w = O ( h . x1 , h . y1 , k ) ; A = O ( h . x2 , h . y2 , k ) ; h . x1 = w . x ; h . y1 = w . y ; h . x2 = A . x ; h . y2 = A . y ; case "text" : k = g . querySelectorAll ( "tspan" ) ; for ( E = k . length ; E -- ; ) { w = qa ( "x" , g . getAttribute ( "x" ) ) ; s = qa ( "x" , k [ E ] . getAttribute ( "x" ) ) ; A = qa ( "y" ,
g . getAttribute ( "y" ) ) ; F = qa ( "y" , k [ E ] . getAttribute ( "y" ) ) ; var C = { } ; if ( ! isNaN ( w ) && ! isNaN ( s ) && w != 0 && s != 0 && h . x ) C . x = h . x - ( w - s ) ; if ( ! isNaN ( A ) && ! isNaN ( F ) && A != 0 && F != 0 && h . y ) C . y = h . y - ( A - F ) ; if ( C . x || C . y ) ma ( k [ E ] , C , 1E3 , true ) } t ( ) ; break ; case "use" : t ( ) ; break ; case "g" : ( t = $ ( g ) . data ( "gsvg" ) ) && ma ( t , h , 1E3 , true ) ; break ; case "polyline" : case "polygon" : t = h . points . length ; for ( E = 0 ; E < t ; ++ E ) { F = h . points [ E ] ; F = O ( F . x , F . y , k ) ; h . points [ E ] . x = F . x ; h . points [ E ] . y = F . y } t = h . points . length ; k = "" ; for ( E = 0 ; E < t ; ++ E ) { F = h . points [ E ] ; k += F . x + "," + F . y + " " } g . setAttribute ( "points" ,
k ) ; break ; case "path" : w = g . pathSegList ; t = w . numberOfItems ; h . d = Array ( t ) ; for ( E = 0 ; E < t ; ++ E ) { s = w . getItem ( E ) ; h . d [ E ] = { type : s . pathSegType , x : s . x , y : s . y , x1 : s . x1 , y1 : s . y1 , x2 : s . x2 , y2 : s . y2 , r1 : s . r1 , r2 : s . r2 , angle : s . angle , largeArcFlag : s . largeArcFlag , sweepFlag : s . sweepFlag } } t = h . d . length ; E = h . d [ 0 ] ; C = O ( E . x , E . y , k ) ; h . d [ 0 ] . x = C . x ; h . d [ 0 ] . y = C . y ; for ( E = 1 ; E < t ; ++ E ) { s = h . d [ E ] ; w = s . type ; if ( w % 2 == 0 ) { F = O ( s . x != undefined ? s . x : C . x , s . y != undefined ? s . y : C . y , k ) ; w = O ( s . x1 , s . y1 , k ) ; A = O ( s . x2 , s . y2 , k ) ; s . x = F . x ; s . y = F . y ; s . x1 = w . x ; s . y1 = w . y ; s . x2 = A . x ; s . y2 = A . y } else { s . x =
k . a * s . x ; s . y = k . d * s . y ; s . x1 = k . a * s . x1 ; s . y1 = k . d * s . y1 ; s . x2 = k . a * s . x2 ; s . y2 = k . d * s . y2 } s . r1 = k . a * s . r1 ; s . r2 = k . d * s . r2 } k = "" ; t = h . d . length ; for ( E = 0 ; E < t ; ++ E ) { s = h . d [ E ] ; w = s . type ; k += db [ w ] ; switch ( w ) { case 13 : case 12 : k += s . x + " " ; break ; case 15 : case 14 : k += s . y + " " ; break ; case 3 : case 5 : case 19 : case 2 : case 4 : case 18 : k += s . x + "," + s . y + " " ; break ; case 7 : case 6 : k += s . x1 + "," + s . y1 + " " + s . x2 + "," + s . y2 + " " + s . x + "," + s . y + " " ; break ; case 9 : case 8 : k += s . x1 + "," + s . y1 + " " + s . x + "," + s . y + " " ; break ; case 11 : case 10 : k += s . r1 + "," + s . r2 + " " + s . angle + " " + + s . largeArcFlag +
" " + + s . sweepFlag + " " + s . x + "," + s . y + " " ; break ; case 17 : case 16 : k += s . x2 + "," + s . y2 + " " + s . x + "," + s . y + " " } } g . setAttribute ( "d" , k ) } } , Hb = function ( g , h , k ) { g = X ( g ) . firstChild ; var v = V ( g ) , t = e . createSVGTransform ( ) ; t . setTranslate ( h , k ) ; v . appendItem ( t ) ; pb ( g ) } , pb = this . recalculateDimensions = function ( g ) { if ( g == null ) return null ; var h = V ( g ) ; if ( h && h . numberOfItems > 0 ) { for ( var k = h . numberOfItems ; k -- ; ) { var v = h . getItem ( k ) ; if ( v . type === 0 ) h . removeItem ( k ) ; else if ( v . type === 1 ) svgedit . math . isIdentity ( v . matrix ) && h . removeItem ( k ) ; else v . type ===
4 && v . angle === 0 && h . removeItem ( k ) } if ( h . numberOfItems === 1 && ra ( g ) ) return null } if ( ! h || h . numberOfItems == 0 ) { g . removeAttribute ( "transform" ) ; return null } if ( h ) { k = h . numberOfItems ; for ( var t = [ ] ; k -- ; ) { v = h . getItem ( k ) ; if ( v . type === 1 ) t . push ( [ v . matrix , k ] ) ; else if ( t . length ) t = [ ] } if ( t . length === 2 ) { k = e . createSVGTransformFromMatrix ( fa ( t [ 1 ] [ 0 ] , t [ 0 ] [ 0 ] ) ) ; h . removeItem ( t [ 0 ] [ 1 ] ) ; h . removeItem ( t [ 1 ] [ 1 ] ) ; h . insertItemBefore ( k , t [ 1 ] [ 1 ] ) } k = h . numberOfItems ; if ( k >= 2 && h . getItem ( k - 2 ) . type === 1 && h . getItem ( k - 1 ) . type === 2 ) { t = e . createSVGTransform ( ) ;
v = fa ( h . getItem ( k - 2 ) . matrix , h . getItem ( k - 1 ) . matrix ) ; t . setMatrix ( v ) ; h . removeItem ( k - 2 ) ; h . removeItem ( k - 2 ) ; h . appendItem ( t ) } } switch ( g . tagName ) { case "line" : case "polyline" : case "polygon" : case "path" : break ; default : if ( h . numberOfItems === 1 && h . getItem ( 0 ) . type === 1 || h . numberOfItems === 2 && h . getItem ( 0 ) . type === 1 && h . getItem ( 0 ) . type === 4 ) return null } var E = $ ( g ) . data ( "gsvg" ) ; k = new La ( "Transform" ) ; var w = { } , s = null ; v = [ ] ; switch ( g . tagName ) { case "line" : v = [ "x1" , "y1" , "x2" , "y2" ] ; break ; case "circle" : v = [ "cx" , "cy" , "r" ] ; break ; case "ellipse" : v =
[ "cx" , "cy" , "rx" , "ry" ] ; break ; case "foreignObject" : case "rect" : case "image" : v = [ "width" , "height" , "x" , "y" ] ; break ; case "use" : case "text" : case "tspan" : v = [ "x" , "y" ] ; break ; case "polygon" : case "polyline" : s = { } ; s . points = g . getAttribute ( "points" ) ; t = g . points ; var A = t . numberOfItems ; w . points = Array ( A ) ; for ( var F = 0 ; F < A ; ++ F ) { var C = t . getItem ( F ) ; w . points [ F ] = { x : C . x , y : C . y } } break ; case "path" : s = { } ; s . d = g . getAttribute ( "d" ) ; w . d = g . getAttribute ( "d" ) } if ( v . length ) { w = $ ( g ) . attr ( v ) ; $ . each ( w , function ( Jb , Ob ) { w [ Jb ] = qa ( Jb , Ob ) } ) } else if ( E ) w =
{ x : $ ( E ) . attr ( "x" ) || 0 , y : $ ( E ) . attr ( "y" ) || 0 } ; if ( s == null ) { s = $ . extend ( true , { } , w ) ; $ . each ( s , function ( Jb , Ob ) { s [ Jb ] = qa ( Jb , Ob ) } ) } s . transform = $a ? $a : "" ; if ( g . tagName == "g" && ! E || g . tagName == "a" ) { t = svgedit . utilities . getBBox ( g ) ; var D = { x : t . x + t . width / 2 , y : t . y + t . height / 2 } , G = O ( t . x + t . width / 2 , t . y + t . height / 2 , ja ( h ) . matrix ) ; v = e . createSVGMatrix ( ) ; if ( t = ra ( g ) ) { F = t * Math . PI / 180 ; A = Math . abs ( F ) > 1.0 E - 10 ? Math . sin ( F ) / ( 1 - Math . cos ( F ) ) : 2 / F ; for ( F = 0 ; F < h . numberOfItems ; ++ F ) { v = h . getItem ( F ) ; if ( v . type == 4 ) { v = v . matrix ; D . y = ( A * v . e + v . f ) / 2 ; D . x = ( v . e - A *
v . f ) / 2 ; h . removeItem ( F ) ; break } } } F = v = E = 0 ; var H = h . numberOfItems ; if ( H ) var P = h . getItem ( 0 ) . matrix ; if ( H >= 3 && h . getItem ( H - 2 ) . type == 3 && h . getItem ( H - 3 ) . type == 2 && h . getItem ( H - 1 ) . type == 2 ) { F = 3 ; var R = h . getItem ( H - 3 ) . matrix , aa = h . getItem ( H - 2 ) . matrix , ua = h . getItem ( H - 1 ) . matrix ; A = g . childNodes ; for ( C = A . length ; C -- ; ) { var wa = A . item ( C ) ; v = E = 0 ; if ( wa . nodeType == 1 ) { var ha = V ( wa ) ; if ( ha ) { v = ja ( ha ) . matrix ; E = ra ( wa ) ; var ka = $a , oa = [ ] ; $a = wa . getAttribute ( "transform" ) ; if ( E || sa ( ha ) ) { var xa = e . createSVGTransform ( ) ; xa . setMatrix ( fa ( R , aa , ua , v ) ) ; ha . clear ( ) ;
ha . appendItem ( xa ) ; oa . push ( xa ) } else { E = fa ( v . inverse ( ) , ua , v ) ; xa = e . createSVGMatrix ( ) ; xa . e = - E . e ; xa . f = - E . f ; v = fa ( xa . inverse ( ) , v . inverse ( ) , R , aa , ua , v , E . inverse ( ) ) ; var eb = e . createSVGTransform ( ) , Db = e . createSVGTransform ( ) , Pb = e . createSVGTransform ( ) ; eb . setTranslate ( E . e , E . f ) ; Db . setScale ( v . a , v . d ) ; Pb . setTranslate ( xa . e , xa . f ) ; ha . appendItem ( Pb ) ; ha . appendItem ( Db ) ; ha . appendItem ( eb ) ; oa . push ( Pb ) ; oa . push ( Db ) ; oa . push ( eb ) } k . addSubCommand ( pb ( wa ) ) ; $a = ka } } } h . removeItem ( H - 1 ) ; h . removeItem ( H - 2 ) ; h . removeItem ( H - 3 ) } else if ( H >= 3 && h . getItem ( H -
1 ) . type == 1 ) { F = 3 ; v = ja ( h ) . matrix ; xa = e . createSVGTransform ( ) ; xa . setMatrix ( v ) ; h . clear ( ) ; h . appendItem ( xa ) } else if ( ( H == 1 || H > 1 && h . getItem ( 1 ) . type != 3 ) && h . getItem ( 0 ) . type == 2 ) { F = 2 ; E = ja ( h ) . matrix ; h . removeItem ( 0 ) ; v = ja ( h ) . matrix . inverse ( ) ; v = fa ( v , E ) ; E = v . e ; v = v . f ; if ( E != 0 || v != 0 ) { A = g . childNodes ; C = A . length ; for ( H = [ ] ; C -- ; ) { wa = A . item ( C ) ; if ( wa . nodeType == 1 ) { if ( wa . getAttribute ( "clip-path" ) ) { ka = wa . getAttribute ( "clip-path" ) ; if ( H . indexOf ( ka ) === - 1 ) { Hb ( ka , E , v ) ; H . push ( ka ) } } ka = $a ; $a = wa . getAttribute ( "transform" ) ; if ( ha = V ( wa ) ) { R = e . createSVGTransform ( ) ;
R . setTranslate ( E , v ) ; ha . numberOfItems ? ha . insertItemBefore ( R , 0 ) : ha . appendItem ( R ) ; k . addSubCommand ( pb ( wa ) ) ; ha = g . getElementsByTagNameNS ( c , "use" ) ; wa = "#" + wa . id ; for ( R = ha . length ; R -- ; ) { aa = ha . item ( R ) ; if ( wa == ba ( aa ) ) { ua = e . createSVGTransform ( ) ; ua . setTranslate ( - E , - v ) ; V ( aa ) . insertItemBefore ( ua , 0 ) ; k . addSubCommand ( pb ( aa ) ) } } $a = ka } } } H = [ ] ; $a = ka } } else if ( H == 1 && h . getItem ( 0 ) . type == 1 && ! t ) { F = 1 ; v = h . getItem ( 0 ) . matrix ; A = g . childNodes ; for ( C = A . length ; C -- ; ) { wa = A . item ( C ) ; if ( wa . nodeType == 1 ) { ka = $a ; $a = wa . getAttribute ( "transform" ) ; if ( ha =
V ( wa ) ) { E = fa ( v , ja ( ha ) . matrix ) ; H = e . createSVGTransform ( ) ; H . setMatrix ( E ) ; ha . clear ( ) ; ha . appendItem ( H , 0 ) ; k . addSubCommand ( pb ( wa ) ) ; $a = ka ; ka = wa . getAttribute ( "stroke-width" ) ; wa . getAttribute ( "stroke" ) !== "none" && ! isNaN ( ka ) && wa . setAttribute ( "stroke-width" , ka * ( ( Math . abs ( E . a ) + Math . abs ( E . d ) ) / 2 ) ) } } } h . clear ( ) } else { if ( t ) { D = e . createSVGTransform ( ) ; D . setRotate ( t , G . x , G . y ) ; h . numberOfItems ? h . insertItemBefore ( D , 0 ) : h . appendItem ( D ) } h . numberOfItems == 0 && g . removeAttribute ( "transform" ) ; return null } if ( F == 2 ) { if ( t ) { G = { x : D . x + P . e , y : D . y +
P . f } ; D = e . createSVGTransform ( ) ; D . setRotate ( t , G . x , G . y ) ; h . numberOfItems ? h . insertItemBefore ( D , 0 ) : h . appendItem ( D ) } } else if ( F == 3 ) { v = ja ( h ) . matrix ; P = e . createSVGTransform ( ) ; P . setRotate ( t , D . x , D . y ) ; P = P . matrix ; D = e . createSVGTransform ( ) ; D . setRotate ( t , G . x , G . y ) ; G = D . matrix . inverse ( ) ; ka = v . inverse ( ) ; G = fa ( ka , G , P , v ) ; E = G . e ; v = G . f ; if ( E != 0 || v != 0 ) { A = g . childNodes ; for ( C = A . length ; C -- ; ) { wa = A . item ( C ) ; if ( wa . nodeType == 1 ) { ka = $a ; $a = wa . getAttribute ( "transform" ) ; ha = V ( wa ) ; R = e . createSVGTransform ( ) ; R . setTranslate ( E , v ) ; ha . numberOfItems ?
ha . insertItemBefore ( R , 0 ) : ha . appendItem ( R ) ; k . addSubCommand ( pb ( wa ) ) ; $a = ka } } } if ( t ) h . numberOfItems ? h . insertItemBefore ( D , 0 ) : h . appendItem ( D ) } } else { t = svgedit . utilities . getBBox ( g ) ; if ( ! t && g . tagName != "path" ) return null ; v = e . createSVGMatrix ( ) ; if ( E = ra ( g ) ) { D = { x : t . x + t . width / 2 , y : t . y + t . height / 2 } ; G = O ( t . x + t . width / 2 , t . y + t . height / 2 , ja ( h ) . matrix ) ; F = E * Math . PI / 180 ; A = Math . abs ( F ) > 1.0 E - 10 ? Math . sin ( F ) / ( 1 - Math . cos ( F ) ) : 2 / F ; for ( F = 0 ; F < h . numberOfItems ; ++ F ) { v = h . getItem ( F ) ; if ( v . type == 4 ) { v = v . matrix ; D . y = ( A * v . e + v . f ) / 2 ; D . x = ( v . e - A * v . f ) /
2 ; h . removeItem ( F ) ; break } } } F = 0 ; H = h . numberOfItems ; if ( ! svgedit . browser . isWebkit ( ) ) if ( ( P = g . getAttribute ( "fill" ) ) && P . indexOf ( "url(" ) === 0 ) { P = X ( P ) ; ka = "pattern" ; if ( P . tagName !== ka ) ka = "gradient" ; if ( P . getAttribute ( ka + "Units" ) === "userSpaceOnUse" ) { v = ja ( h ) . matrix ; t = V ( P ) ; t = ja ( t ) . matrix ; v = fa ( v , t ) ; t = "matrix(" + [ v . a , v . b , v . c , v . d , v . e , v . f ] . join ( "," ) + ")" ; P . setAttribute ( ka + "Transform" , t ) } } if ( H >= 3 && h . getItem ( H - 2 ) . type == 3 && h . getItem ( H - 3 ) . type == 2 && h . getItem ( H - 1 ) . type == 2 ) { F = 3 ; v = ja ( h , H - 3 , H - 1 ) . matrix ; h . removeItem ( H - 1 ) ; h . removeItem ( H -
2 ) ; h . removeItem ( H - 3 ) } else if ( H == 4 && h . getItem ( H - 1 ) . type == 1 ) { F = 3 ; v = ja ( h ) . matrix ; xa = e . createSVGTransform ( ) ; xa . setMatrix ( v ) ; h . clear ( ) ; h . appendItem ( xa ) ; v = e . createSVGMatrix ( ) } else if ( ( H == 1 || H > 1 && h . getItem ( 1 ) . type != 3 ) && h . getItem ( 0 ) . type == 2 ) { F = 2 ; P = h . getItem ( 0 ) . matrix ; ka = ja ( h , 1 ) . matrix ; t = ka . inverse ( ) ; v = fa ( t , P , ka ) ; h . removeItem ( 0 ) } else if ( H == 1 && h . getItem ( 0 ) . type == 1 && ! E ) { v = ja ( h ) . matrix ; switch ( g . tagName ) { case "line" : w = $ ( g ) . attr ( [ "x1" , "y1" , "x2" , "y2" ] ) ; case "polyline" : case "polygon" : w . points = g . getAttribute ( "points" ) ;
if ( w . points ) { t = g . points ; A = t . numberOfItems ; w . points = Array ( A ) ; for ( F = 0 ; F < A ; ++ F ) { C = t . getItem ( F ) ; w . points [ F ] = { x : C . x , y : C . y } } } case "path" : w . d = g . getAttribute ( "d" ) ; F = 1 ; h . clear ( ) } } else { F = 4 ; if ( E ) { D = e . createSVGTransform ( ) ; D . setRotate ( E , G . x , G . y ) ; h . numberOfItems ? h . insertItemBefore ( D , 0 ) : h . appendItem ( D ) } h . numberOfItems == 0 && g . removeAttribute ( "transform" ) ; return null } if ( F == 1 || F == 2 || F == 3 ) xb ( g , w , v ) ; if ( F == 2 ) { if ( E ) { sa ( h ) || ( G = { x : D . x + v . e , y : D . y + v . f } ) ; D = e . createSVGTransform ( ) ; D . setRotate ( E , G . x , G . y ) ; h . numberOfItems ? h . insertItemBefore ( D ,
0 ) : h . appendItem ( D ) } } else if ( F == 3 && E ) { v = ja ( h ) . matrix ; P = e . createSVGTransform ( ) ; P . setRotate ( E , D . x , D . y ) ; P = P . matrix ; D = e . createSVGTransform ( ) ; D . setRotate ( E , G . x , G . y ) ; G = D . matrix . inverse ( ) ; ka = v . inverse ( ) ; G = fa ( ka , G , P , v ) ; xb ( g , w , G ) ; if ( E ) h . numberOfItems ? h . insertItemBefore ( D , 0 ) : h . appendItem ( D ) } } h . numberOfItems == 0 && g . removeAttribute ( "transform" ) ; k . addSubCommand ( new Wa ( g , s ) ) ; return k } , Lb = null , bb = this . clearSelection = function ( g ) { if ( J [ 0 ] != null ) for ( var h = J . length , k = 0 ; k < h ; ++ k ) { var v = J [ k ] ; if ( v == null ) break ; Oa . releaseSelector ( v ) ;
J [ k ] = null } g || I ( "selected" , J ) } , qb = this . addToSelection = function ( g , h ) { if ( g . length != 0 ) { for ( var k = 0 ; k < J . length ; ) { if ( J [ k ] == null ) break ; ++ k } for ( var v = g . length ; v -- ; ) { var t = g [ v ] ; if ( t && svgedit . utilities . getBBox ( t ) ) { if ( t . tagName === "a" && t . childNodes . length === 1 ) t = t . firstChild ; if ( J . indexOf ( t ) == - 1 ) { J [ k ] = t ; k ++ ; t = Oa . requestSelector ( t ) ; J . length > 1 && t . showGrips ( false ) } } } I ( "selected" , J ) ; h || J . length == 1 ? Oa . requestSelector ( J [ 0 ] ) . showGrips ( true ) : Oa . requestSelector ( J [ 0 ] ) . showGrips ( false ) ; for ( J . sort ( function ( E , w ) { if ( E && w && E . compareDocumentPosition ) return 3 -
( w . compareDocumentPosition ( E ) & 6 ) ; else if ( E == null ) return 1 } ) ; J [ 0 ] == null ; ) J . shift ( 0 ) } } , Qb = this . selectOnly = function ( g , h ) { bb ( true ) ; qb ( g , h ) } ; this . removeFromSelection = function ( g ) { if ( J [ 0 ] != null ) if ( g . length != 0 ) { var h = Array ( J . length ) ; j = 0 ; len = J . length ; for ( var k = 0 ; k < len ; ++ k ) { var v = J [ k ] ; if ( v ) if ( g . indexOf ( v ) == - 1 ) { h [ j ] = v ; j ++ } else Oa . releaseSelector ( v ) } J = h } } ; this . selectAllInCurrentLayer = function ( ) { var g = z ( ) . getCurrentLayer ( ) ; if ( g ) { Na = "select" ; Qb ( $ ( L || g ) . children ( ) ) } } ; var $b = this . getMouseTarget = function ( g ) { if ( g ==
null ) return null ; g = g . target ; if ( g . correspondingUseElement ) g = g . correspondingUseElement ; if ( [ "http://www.w3.org/1998/Math/MathML" , "http://www.w3.org/1999/xhtml" ] . indexOf ( g . namespaceURI ) >= 0 && g . id != "svgcanvas" ) for ( ; g . nodeName != "foreignObject" ; ) { g = g . parentNode ; if ( ! g ) return e } var h = z ( ) . getCurrentLayer ( ) ; if ( [ e , a , l , h ] . indexOf ( g ) >= 0 ) return e ; if ( $ ( g ) . closest ( "#selectorParentGroup" ) . length ) return Oa . selectorParentGroup ; for ( ; g . parentNode !== ( L || h ) ; ) g = g . parentNode ; return g } ; ( function ( ) { var g = null , h = null , k = null , v =
null , t = null , E = { } , w = { minx : null , miny : null , maxx : null , maxy : null } ; $ ( a ) . mousedown ( function ( s ) { if ( ! ( b . spaceKey || s . button === 1 ) ) { var A = s . button === 2 ; s . altKey && svgCanvas . cloneSelectedElements ( 0 , 0 ) ; Lb = l . getScreenCTM ( ) . inverse ( ) ; var F = O ( s . pageX , s . pageY , Lb ) , C = F . x * o , D = F . y * o ; s . preventDefault ( ) ; if ( A ) { Na = "select" ; yb = F } F = C / o ; D = D / o ; var G = $b ( s ) ; if ( G . tagName === "a" && G . childNodes . length === 1 ) G = G . firstChild ; C = v = h = F ; var H = t = k = D ; if ( m . gridSnapping ) { F = Fa ( F ) ; D = Fa ( D ) ; h = Fa ( h ) ; k = Fa ( k ) } if ( G == Oa . selectorParentGroup && J [ 0 ] != null ) { G = s . target ;
var P = lb ( G , "type" ) ; if ( P == "rotate" ) { Na = "rotate" ; current _rotate _mode = lb ( G , "dir" ) } else if ( P == "resize" ) { Na = "resize" ; mb = lb ( G , "dir" ) } G = J [ 0 ] } $a = G . getAttribute ( "transform" ) ; P = V ( G ) ; switch ( Na ) { case "select" : Ra = true ; mb = "none" ; if ( A ) Ra = false ; if ( G != e ) { if ( J . indexOf ( G ) == - 1 ) { s . shiftKey || bb ( true ) ; qb ( [ G ] ) ; kb = G ; Va . clear ( ) } if ( ! A ) for ( A = 0 ; A < J . length ; ++ A ) if ( J [ A ] != null ) { var R = V ( J [ A ] ) ; R . numberOfItems ? R . insertItemBefore ( e . createSVGTransform ( ) , 0 ) : R . appendItem ( e . createSVGTransform ( ) ) } } else if ( ! A ) { bb ( ) ; Na = "multiselect" ; if ( Ca ==
null ) Ca = Oa . getRubberBandBox ( ) ; v *= o ; t *= o ; ma ( Ca , { x : v , y : t , width : 0 , height : 0 , display : "inline" } , 100 ) } break ; case "zoom" : Ra = true ; if ( Ca == null ) Ca = Oa . getRubberBandBox ( ) ; ma ( Ca , { x : C * o , y : C * o , width : 0 , height : 0 , display : "inline" } , 100 ) ; break ; case "resize" : Ra = true ; h = F ; k = D ; E = svgedit . utilities . getBBox ( $ ( "#selectedBox0" ) [ 0 ] ) ; var aa = { } ; $ . each ( E , function ( ua , wa ) { aa [ ua ] = wa / o } ) ; E = aa ; A = ra ( G ) ? 1 : 0 ; if ( sa ( P ) ) { P . insertItemBefore ( e . createSVGTransform ( ) , A ) ; P . insertItemBefore ( e . createSVGTransform ( ) , A ) ; P . insertItemBefore ( e . createSVGTransform ( ) ,
A ) } else { P . appendItem ( e . createSVGTransform ( ) ) ; P . appendItem ( e . createSVGTransform ( ) ) ; P . appendItem ( e . createSVGTransform ( ) ) ; if ( svgedit . browser . supportsNonScalingStroke ( ) ) { if ( F = svgedit . browser . isChrome ( ) ) R = function ( ua ) { var wa = ua . getAttributeNS ( null , "stroke" ) ; ua . removeAttributeNS ( null , "stroke" ) ; setTimeout ( function ( ) { ua . setAttributeNS ( null , "stroke" , wa ) } , 1 ) } ; G . style . vectorEffect = "non-scaling-stroke" ; F && R ( G ) ; D = G . getElementsByTagName ( "*" ) ; C = D . length ; for ( A = 0 ; A < C ; A ++ ) { D [ A ] . style . vectorEffect = "non-scaling-stroke" ;
F && R ( D [ A ] ) } } } break ; case "fhellipse" : case "fhrect" : case "fhpath" : Ra = true ; g = C + "," + H + " " ; R = N . stroke _width == 0 ? 1 : N . stroke _width ; da ( { element : "polyline" , curStyles : true , attr : { points : g , id : M ( ) , fill : "none" , opacity : N . opacity / 2 , "stroke-linecap" : "round" , style : "pointer-events:none" } } ) ; w . minx = C ; w . maxx = C ; w . miny = H ; w . maxy = H ; break ; case "image" : Ra = true ; R = da ( { element : "image" , attr : { x : F , y : D , width : 0 , height : 0 , id : M ( ) , opacity : N . opacity / 2 , style : "pointer-events:inherit" } } ) ; S ( R , Ja ) ; Zb ( R ) ; break ; case "square" : case "rect" : Ra = true ;
h = F ; k = D ; da ( { element : "rect" , curStyles : true , attr : { x : F , y : D , width : 0 , height : 0 , id : M ( ) , opacity : N . opacity / 2 } } ) ; break ; case "line" : Ra = true ; R = N . stroke _width == 0 ? 1 : N . stroke _width ; da ( { element : "line" , curStyles : true , attr : { x1 : F , y1 : D , x2 : F , y2 : D , id : M ( ) , stroke : N . stroke , "stroke-width" : R , "stroke-dasharray" : N . stroke _dasharray , "stroke-linejoin" : N . stroke _linejoin , "stroke-linecap" : N . stroke _linecap , "stroke-opacity" : N . stroke _opacity , fill : "none" , opacity : N . opacity / 2 , style : "pointer-events:none" } } ) ; break ; case "circle" : Ra = true ; da ( { element : "circle" ,
curStyles : true , attr : { cx : F , cy : D , r : 0 , id : M ( ) , opacity : N . opacity / 2 } } ) ; break ; case "ellipse" : Ra = true ; da ( { element : "ellipse" , curStyles : true , attr : { cx : F , cy : D , rx : 0 , ry : 0 , id : M ( ) , opacity : N . opacity / 2 } } ) ; break ; case "text" : Ra = true ; da ( { element : "text" , curStyles : true , attr : { x : F , y : D , id : M ( ) , fill : cb . fill , "stroke-width" : cb . stroke _width , "font-size" : cb . font _size , "font-family" : cb . font _family , "text-anchor" : "left" , "xml:space" : "preserve" , opacity : N . opacity } } ) ; break ; case "path" : case "pathedit" : h *= o ; k *= o ; Va . mouseDown ( s , G , h , k ) ; Ra = true ;
break ; case "textedit" : h *= o ; k *= o ; rb . mouseDown ( s , G , h , k ) ; Ra = true ; break ; case "rotate" : Ra = true ; b . undoMgr . beginUndoableChange ( "transform" , J ) ; document . getElementById ( "workarea" ) . className = "rotate" } s = ob ( "mouseDown" , { event : s , start _x : h , start _y : k , selectedElements : J } , true ) ; $ . each ( s , function ( ua , wa ) { if ( wa && wa . started ) Ra = true } ) } } ) . mousemove ( function ( s ) { if ( Ra ) if ( ! ( s . button === 1 || b . spaceKey ) ) { var A = J [ 0 ] , F = O ( s . pageX , s . pageY , Lb ) , C = F . x * o ; F = F . y * o ; var D = la ( ta ( ) ) , G = x = C / o , H = y = F / o ; if ( m . gridSnapping ) { x = Fa ( x ) ; y = Fa ( y ) } s . preventDefault ( ) ;
switch ( Na ) { case "select" : if ( J [ 0 ] !== null ) { G = x - h ; var P = y - k ; if ( m . gridSnapping ) { G = Fa ( G ) ; P = Fa ( P ) } if ( s . shiftKey ) { var R = ca ( h , k , x , y ) ; x = R . x ; y = R . y } if ( G != 0 || P != 0 ) { R = J . length ; for ( H = 0 ; H < R ; ++ H ) { A = J [ H ] ; if ( A == null ) break ; var aa = e . createSVGTransform ( ) ; D = V ( A ) ; aa . setTranslate ( G , P ) ; D . numberOfItems ? D . replaceItem ( aa , 0 ) : D . appendItem ( aa ) ; Oa . requestSelector ( A ) . resize ( ) } I ( "transition" , J ) } } break ; case "multiselect" : G *= o ; H *= o ; ma ( Ca , { x : Math . min ( v , G ) , y : Math . min ( t , H ) , width : Math . abs ( G - v ) , height : Math . abs ( H - t ) } , 100 ) ; D = [ ] ; G = [ ] ; aa = Kb ( ) ;
R = J . length ; for ( H = 0 ; H < R ; ++ H ) { P = aa . indexOf ( J [ H ] ) ; if ( P == - 1 ) D . push ( J [ H ] ) ; else aa [ P ] = null } R = aa . length ; for ( H = 0 ; H < R ; ++ H ) aa [ H ] && G . push ( aa [ H ] ) ; D . length > 0 && b . removeFromSelection ( D ) ; G . length > 0 && qb ( G ) ; break ; case "resize" : D = V ( A ) ; G = ( R = sa ( D ) ) ? E : svgedit . utilities . getBBox ( A ) ; H = G . x ; aa = G . y ; var ua = G . width , wa = G . height ; G = x - h ; P = y - k ; if ( m . gridSnapping ) { G = Fa ( G ) ; P = Fa ( P ) ; wa = Fa ( wa ) ; ua = Fa ( ua ) } var ha = ra ( A ) ; if ( ha ) { var ka = Math . sqrt ( G * G + P * P ) ; P = Math . atan2 ( P , G ) - ha * Math . PI / 180 ; G = ka * Math . cos ( P ) ; P = ka * Math . sin ( P ) } if ( mb . indexOf ( "n" ) == - 1 &&
mb . indexOf ( "s" ) == - 1 ) P = 0 ; if ( mb . indexOf ( "e" ) == - 1 && mb . indexOf ( "w" ) == - 1 ) G = 0 ; var oa = ka = 0 , xa = wa ? ( wa + P ) / wa : 1 , eb = ua ? ( ua + G ) / ua : 1 ; if ( mb . indexOf ( "n" ) >= 0 ) { xa = wa ? ( wa - P ) / wa : 1 ; oa = wa } if ( mb . indexOf ( "w" ) >= 0 ) { eb = ua ? ( ua - G ) / ua : 1 ; ka = ua } G = e . createSVGTransform ( ) ; P = e . createSVGTransform ( ) ; ua = e . createSVGTransform ( ) ; if ( m . gridSnapping ) { H = Fa ( H ) ; ka = Fa ( ka ) ; aa = Fa ( aa ) ; oa = Fa ( oa ) } G . setTranslate ( - ( H + ka ) , - ( aa + oa ) ) ; if ( s . shiftKey ) if ( eb == 1 ) eb = xa ; else xa = eb ; P . setScale ( eb , xa ) ; ua . setTranslate ( H + ka , aa + oa ) ; if ( R ) { R = ha ? 1 : 0 ; D . replaceItem ( G , 2 + R ) ;
D . replaceItem ( P , 1 + R ) ; D . replaceItem ( ua , 0 + R ) } else { R = D . numberOfItems ; D . replaceItem ( ua , R - 3 ) ; D . replaceItem ( P , R - 2 ) ; D . replaceItem ( G , R - 1 ) } Oa . requestSelector ( A ) . resize ( ) ; I ( "transition" , J ) ; break ; case "zoom" : G *= o ; H *= o ; ma ( Ca , { x : Math . min ( v * o , G ) , y : Math . min ( t * o , H ) , width : Math . abs ( G - v * o ) , height : Math . abs ( H - t * o ) } , 100 ) ; break ; case "text" : ma ( D , { x : x , y : y } , 1E3 ) ; break ; case "line" : G = null ; window . opera || e . suspendRedraw ( 1E3 ) ; if ( m . gridSnapping ) { x = Fa ( x ) ; y = Fa ( y ) } H = x ; R = y ; if ( s . shiftKey ) { R = ca ( h , k , H , R ) ; H = R . x ; R = R . y } D . setAttributeNS ( null ,
"x2" , H ) ; D . setAttributeNS ( null , "y2" , R ) ; window . opera || e . unsuspendRedraw ( G ) ; break ; case "foreignObject" : case "square" : case "rect" : case "image" : G = Math . abs ( x - h ) ; R = Math . abs ( y - k ) ; if ( Na == "square" || s . shiftKey ) { G = R = Math . max ( G , R ) ; H = h < x ? h : h - G ; aa = k < y ? k : k - R } else { H = Math . min ( h , x ) ; aa = Math . min ( k , y ) } if ( m . gridSnapping ) { G = Fa ( G ) ; R = Fa ( R ) ; H = Fa ( H ) ; aa = Fa ( aa ) } ma ( D , { width : G , height : R , x : H , y : aa } , 1E3 ) ; break ; case "circle" : G = $ ( D ) . attr ( [ "cx" , "cy" ] ) ; R = G . cx ; H = G . cy ; G = Math . sqrt ( ( x - R ) * ( x - R ) + ( y - H ) * ( y - H ) ) ; if ( m . gridSnapping ) G = Fa ( G ) ; D . setAttributeNS ( null ,
"r" , G ) ; break ; case "ellipse" : G = $ ( D ) . attr ( [ "cx" , "cy" ] ) ; R = G . cx ; H = G . cy ; G = null ; window . opera || e . suspendRedraw ( 1E3 ) ; if ( m . gridSnapping ) { x = Fa ( x ) ; R = Fa ( R ) ; y = Fa ( y ) ; H = Fa ( H ) } D . setAttributeNS ( null , "rx" , Math . abs ( x - R ) ) ; D . setAttributeNS ( null , "ry" , Math . abs ( s . shiftKey ? x - R : y - H ) ) ; window . opera || e . unsuspendRedraw ( G ) ; break ; case "fhellipse" : case "fhrect" : w . minx = Math . min ( G , w . minx ) ; w . maxx = Math . max ( G , w . maxx ) ; w . miny = Math . min ( H , w . miny ) ; w . maxy = Math . max ( H , w . maxy ) ; case "fhpath" : g += + G + "," + H + " " ; D . setAttributeNS ( null , "points" , g ) ; break ;
case "path" : case "pathedit" : x *= o ; y *= o ; if ( m . gridSnapping ) { x = Fa ( x ) ; y = Fa ( y ) ; h = Fa ( h ) ; k = Fa ( k ) } if ( s . shiftKey ) { if ( R = svgedit . path . path ) { D = R . dragging ? R . dragging [ 0 ] : h ; R = R . dragging ? R . dragging [ 1 ] : k } else { D = h ; R = k } R = ca ( D , R , x , y ) ; x = R . x ; y = R . y } if ( Ca && Ca . getAttribute ( "display" ) !== "none" ) { G *= o ; H *= o ; ma ( Ca , { x : Math . min ( v * o , G ) , y : Math . min ( t * o , H ) , width : Math . abs ( G - v * o ) , height : Math . abs ( H - t * o ) } , 100 ) } Va . mouseMove ( s , x , y ) ; break ; case "textedit" : x *= o ; y *= o ; rb . mouseMove ( C , F ) ; break ; case "rotate" : G = svgedit . utilities . getBBox ( A ) ; R = G . x + G . width /
2 ; H = G . y + G . height / 2 ; D = ea ( A ) ; D = O ( R , H , D ) ; R = D . x ; H = D . y ; D = G . x ; aa = G . y ; if ( current _rotate _mode == "nw" ) D = G . x + G . width ; if ( current _rotate _mode == "se" ) aa = G . y + G . height ; if ( current _rotate _mode == "sw" ) { D = G . x + G . width ; aa = G . y + G . height } compensation _angle = ( Math . atan2 ( H - aa , R - D ) * ( 180 / Math . PI ) - 90 ) % 360 ; ha = ( Math . atan2 ( H - y , R - x ) * ( 180 / Math . PI ) - 90 ) % 360 ; ha += compensation _angle ; if ( m . gridSnapping ) ha = Fa ( ha ) ; if ( s . shiftKey ) ha = Math . round ( ha / 45 ) * 45 ; b . setRotationAngle ( ha < - 180 ? 360 + ha : ha , true ) ; I ( "transition" , J ) } ob ( "mouseMove" , { event : s , mouse _x : C ,
mouse _y : F , selected : A } ) } } ) . click ( function ( s ) { s . preventDefault ( ) ; return false } ) . dblclick ( function ( s ) { var A = s . target . parentNode ; if ( A !== L ) { var F = $b ( s ) , C = F . tagName ; if ( C === "text" && Na !== "textedit" ) { s = O ( s . pageX , s . pageY , Lb ) ; rb . select ( F , s . x , s . y ) } if ( ( C === "g" || C === "a" ) && ra ( F ) ) { fc ( F ) ; F = J [ 0 ] ; bb ( true ) } L && ac ( ) ; A . tagName !== "g" && A . tagName !== "a" || A === z ( ) . getCurrentLayer ( ) || F === Oa . selectorParentGroup || nc ( F ) } } ) . mouseup ( function ( s ) { if ( s . button !== 2 ) { var A = kb ; kb = null ; if ( Ra ) { var F = O ( s . pageX , s . pageY , Lb ) , C = F . x * o ; F = F . y * o ; var D =
C / o , G = F / o , H = la ( ta ( ) ) , P = false ; Ra = false ; switch ( Na ) { case "resize" : case "multiselect" : if ( Ca != null ) { Ca . setAttribute ( "display" , "none" ) ; wb = [ ] } Na = "select" ; case "select" : if ( J [ 0 ] != null ) { if ( J [ 1 ] == null ) { C = J [ 0 ] ; switch ( C . tagName ) { case "g" : case "use" : case "image" : case "foreignObject" : break ; default : jb . fill = C . getAttribute ( "fill" ) ; jb . fill _opacity = C . getAttribute ( "fill-opacity" ) ; jb . stroke = C . getAttribute ( "stroke" ) ; jb . stroke _opacity = C . getAttribute ( "stroke-opacity" ) ; jb . stroke _width = C . getAttribute ( "stroke-width" ) ; jb . stroke _dasharray =
C . getAttribute ( "stroke-dasharray" ) ; jb . stroke _linejoin = C . getAttribute ( "stroke-linejoin" ) ; jb . stroke _linecap = C . getAttribute ( "stroke-linecap" ) } if ( C . tagName == "text" ) { cb . font _size = C . getAttribute ( "font-size" ) ; cb . font _family = C . getAttribute ( "font-family" ) } Oa . requestSelector ( C ) . showGrips ( true ) } Xa ( ) ; if ( D != v || G != t ) { s = J . length ; for ( C = 0 ; C < s ; ++ C ) { if ( J [ C ] == null ) break ; J [ C ] . firstChild || Oa . requestSelector ( J [ C ] ) . resize ( ) } } else { C = s . target ; if ( J [ 0 ] . nodeName === "path" && J [ 1 ] == null ) Va . select ( J [ 0 ] ) ; else s . shiftKey && A != C && b . removeFromSelection ( [ C ] ) } if ( svgedit . browser . supportsNonScalingStroke ( ) ) if ( s =
J [ 0 ] ) { s . removeAttribute ( "style" ) ; svgedit . utilities . walkTree ( s , function ( ua ) { ua . removeAttribute ( "style" ) } ) } } return ; case "zoom" : Ca != null && Ca . setAttribute ( "display" , "none" ) ; I ( "zoomed" , { x : Math . min ( v , D ) , y : Math . min ( t , G ) , width : Math . abs ( D - v ) , height : Math . abs ( G - t ) , factor : s . altKey ? 0.5 : 2 } ) ; return ; case "fhpath" : A = H . getAttribute ( "points" ) ; D = A . indexOf ( "," ) ; if ( P = D >= 0 ? A . indexOf ( "," , D + 1 ) >= 0 : A . indexOf ( " " , A . indexOf ( " " ) + 1 ) >= 0 ) H = Va . smoothPolylineIntoPath ( H ) ; break ; case "line" : A = $ ( H ) . attr ( [ "x1" , "x2" , "y1" , "y2" ] ) ; P = A . x1 !=
A . x2 || A . y1 != A . y2 ; break ; case "foreignObject" : case "square" : case "rect" : case "image" : A = $ ( H ) . attr ( [ "width" , "height" ] ) ; P = A . width != 0 || A . height != 0 || Na === "image" ; break ; case "circle" : P = H . getAttribute ( "r" ) != 0 ; break ; case "ellipse" : A = $ ( H ) . attr ( [ "rx" , "ry" ] ) ; P = A . rx != null || A . ry != null ; break ; case "fhellipse" : if ( w . maxx - w . minx > 0 && w . maxy - w . miny > 0 ) { H = da ( { element : "ellipse" , curStyles : true , attr : { cx : ( w . minx + w . maxx ) / 2 , cy : ( w . miny + w . maxy ) / 2 , rx : ( w . maxx - w . minx ) / 2 , ry : ( w . maxy - w . miny ) / 2 , id : ta ( ) } } ) ; I ( "changed" , [ H ] ) ; P = true } break ;
case "fhrect" : if ( w . maxx - w . minx > 0 && w . maxy - w . miny > 0 ) { H = da ( { element : "rect" , curStyles : true , attr : { x : w . minx , y : w . miny , width : w . maxx - w . minx , height : w . maxy - w . miny , id : ta ( ) } } ) ; I ( "changed" , [ H ] ) ; P = true } break ; case "text" : P = true ; Qb ( [ H ] ) ; rb . start ( H ) ; break ; case "path" : H = null ; Ra = true ; A = Va . mouseUp ( s , H , C , F ) ; H = A . element ; P = A . keep ; break ; case "pathedit" : P = true ; H = null ; Va . mouseUp ( s ) ; break ; case "textedit" : P = false ; H = null ; rb . mouseUp ( s , C , F ) ; break ; case "rotate" : P = true ; H = null ; Na = "select" ; A = b . undoMgr . finishUndoableChange ( ) ; A . isEmpty ( ) ||
Ga ( A ) ; Xa ( ) ; I ( "changed" , J ) } C = ob ( "mouseUp" , { event : s , mouse _x : C , mouse _y : F } , true ) ; $ . each ( C , function ( ua , wa ) { if ( wa ) { P = wa . keep || P ; H = wa . element ; Ra = wa . started || Ra } } ) ; if ( ! P && H != null ) { z ( ) . releaseId ( ta ( ) ) ; H . parentNode . removeChild ( H ) ; H = null ; for ( C = s . target ; C . parentNode . parentNode . tagName == "g" ; ) C = C . parentNode ; if ( ( Na != "path" || ! drawn _path ) && C . parentNode . id != "selectorParentGroup" && C . id != "svgcanvas" && C . id != "svgroot" ) { b . setMode ( "select" ) ; Qb ( [ C ] , true ) } } else if ( H != null ) { b . addedNew = true ; s = 0.2 ; var R ; if ( false . beginElement &&
H . getAttribute ( "opacity" ) != N . opacity ) { R = $ ( false ) . clone ( ) . attr ( { to : N . opacity , dur : s } ) . appendTo ( H ) ; try { R [ 0 ] . beginElement ( ) } catch ( aa ) { } } else s = 0 ; setTimeout ( function ( ) { R && R . remove ( ) ; H . setAttribute ( "opacity" , N . opacity ) ; H . setAttribute ( "style" , "pointer-events:inherit" ) ; Y ( H ) ; if ( Na === "path" ) Va . toEditMode ( H ) ; else m . selectNew && Qb ( [ H ] , true ) ; Ga ( new Ka ( H ) ) ; I ( "changed" , [ H ] ) } , s * 1E3 ) } $a = null } } } ) ; $ ( a ) . bind ( "mousewheel DOMMouseScroll" , function ( s ) { if ( s . shiftKey ) { s . preventDefault ( ) ; Lb = l . getScreenCTM ( ) . inverse ( ) ; var A =
O ( s . pageX , s . pageY , Lb ) ; A = { x : A . x , y : A . y , width : 0 , height : 0 } ; if ( s . wheelDelta ) if ( s . wheelDelta >= 120 ) A . factor = 2 ; else { if ( s . wheelDelta <= - 120 ) A . factor = 0.5 } else if ( s . detail ) if ( s . detail > 0 ) A . factor = 0.5 ; else if ( s . detail < 0 ) A . factor = 2 ; A . factor && I ( "zoomed" , A ) } } ) } ) ( ) ; var Zb = function ( g ) { $ ( g ) . click ( function ( h ) { h . preventDefault ( ) } ) } , rb = b . textActions = function ( ) { function g ( ha ) { var ka = F . value === "" ; $ ( F ) . focus ( ) ; if ( ! arguments . length ) if ( ka ) ha = 0 ; else { if ( F . selectionEnd !== F . selectionStart ) return ; ha = F . selectionEnd } var oa ; oa = H [ ha ] ;
ka || F . setSelectionRange ( ha , ha ) ; C = la ( "text_cursor" ) ; if ( ! C ) { C = document . createElementNS ( c , "line" ) ; ma ( C , { id : "text_cursor" , stroke : "#333" , "stroke-width" : 1 } ) ; C = la ( "selectorParentGroup" ) . appendChild ( C ) } G || ( G = setInterval ( function ( ) { var xa = C . getAttribute ( "display" ) === "none" ; C . setAttribute ( "display" , xa ? "inline" : "none" ) } , 600 ) ) ; ka = E ( oa . x , P . y ) ; oa = E ( oa . x , P . y + P . height ) ; ma ( C , { x1 : ka . x , y1 : ka . y , x2 : oa . x , y2 : oa . y , visibility : "visible" , display : "inline" } ) ; D && D . setAttribute ( "d" , "" ) } function h ( ha , ka , oa ) { if ( ha === ka ) g ( ka ) ; else { oa ||
F . setSelectionRange ( ha , ka ) ; D = la ( "text_selectblock" ) ; if ( ! D ) { D = document . createElementNS ( c , "path" ) ; ma ( D , { id : "text_selectblock" , fill : "green" , opacity : 0.5 , style : "pointer-events:none" } ) ; la ( "selectorParentGroup" ) . appendChild ( D ) } ha = H [ ha ] ; var xa = H [ ka ] ; C . setAttribute ( "visibility" , "hidden" ) ; ka = E ( ha . x , P . y ) ; oa = E ( ha . x + ( xa . x - ha . x ) , P . y ) ; var eb = E ( ha . x , P . y + P . height ) ; ha = E ( ha . x + ( xa . x - ha . x ) , P . y + P . height ) ; ma ( D , { d : "M" + ka . x + "," + ka . y + " L" + oa . x + "," + oa . y + " " + ha . x + "," + ha . y + " " + eb . x + "," + eb . y + "z" , display : "inline" } ) } } function k ( ha ,
ka ) { var oa = e . createSVGPoint ( ) ; oa . x = ha ; oa . y = ka ; if ( H . length == 1 ) return 0 ; oa = A . getCharNumAtPosition ( oa ) ; if ( oa < 0 ) { oa = H . length - 2 ; if ( ha <= H [ 0 ] . x ) oa = 0 } else if ( oa >= H . length - 2 ) oa = H . length - 2 ; var xa = H [ oa ] ; ha > xa . x + xa . width / 2 && oa ++ ; return oa } function v ( ha , ka , oa ) { var xa = F . selectionStart ; ha = k ( ha , ka ) ; h ( Math . min ( xa , ha ) , Math . max ( xa , ha ) , ! oa ) } function t ( ha , ka ) { var oa = { x : ha , y : ka } ; oa . x /= o ; oa . y /= o ; if ( R ) { var xa = O ( oa . x , oa . y , R . inverse ( ) ) ; oa . x = xa . x ; oa . y = xa . y } return oa } function E ( ha , ka ) { var oa = { x : ha , y : ka } ; if ( R ) { var xa = O ( oa . x ,
oa . y , R ) ; oa . x = xa . x ; oa . y = xa . y } oa . x *= o ; oa . y *= o ; return oa } function w ( ha ) { h ( 0 , A . textContent . length ) ; $ ( this ) . unbind ( ha ) } function s ( ha ) { if ( wa && A ) { var ka = O ( ha . pageX , ha . pageY , Lb ) ; ka = t ( ka . x * o , ka . y * o ) ; ka = k ( ka . x , ka . y ) ; var oa = A . textContent , xa = oa . substr ( 0 , ka ) . replace ( /[a-z0-9]+$/i , "" ) . length ; oa = oa . substr ( ka ) . match ( /^[a-z0-9]+/i ) ; h ( xa , ( oa ? oa [ 0 ] . length : 0 ) + ka ) ; $ ( ha . target ) . click ( w ) ; setTimeout ( function ( ) { $ ( ha . target ) . unbind ( "click" , w ) } , 300 ) } } var A , F , C , D , G , H = [ ] , P , R , aa , ua , wa ; return { select : function ( ha , ka , oa ) { A = ha ; rb . toEditMode ( ka ,
oa ) } , start : function ( ha ) { A = ha ; rb . toEditMode ( ) } , mouseDown : function ( ha , ka , oa , xa ) { ha = t ( oa , xa ) ; F . focus ( ) ; g ( k ( ha . x , ha . y ) ) ; aa = oa ; ua = xa } , mouseMove : function ( ha , ka ) { var oa = t ( ha , ka ) ; v ( oa . x , oa . y ) } , mouseUp : function ( ha , ka , oa ) { var xa = t ( ka , oa ) ; v ( xa . x , xa . y , true ) ; ha . target !== A && ka < aa + 2 && ka > aa - 2 && oa < ua + 2 && oa > ua - 2 && rb . toSelectMode ( true ) } , setCursor : g , toEditMode : function ( ha , ka ) { wa = false ; Na = "textedit" ; Oa . requestSelector ( A ) . showGrips ( false ) ; Oa . requestSelector ( A ) ; rb . init ( ) ; $ ( A ) . css ( "cursor" , "text" ) ; if ( arguments . length ) { var oa =
t ( ha , ka ) ; g ( k ( oa . x , oa . y ) ) } else g ( ) ; setTimeout ( function ( ) { wa = true } , 300 ) } , toSelectMode : function ( ha ) { Na = "select" ; clearInterval ( G ) ; G = null ; D && $ ( D ) . attr ( "display" , "none" ) ; C && $ ( C ) . attr ( "visibility" , "hidden" ) ; $ ( A ) . css ( "cursor" , "move" ) ; if ( ha ) { bb ( ) ; $ ( A ) . css ( "cursor" , "move" ) ; I ( "selected" , [ A ] ) ; qb ( [ A ] , true ) } A && ! A . textContent . length && b . deleteSelectedElements ( ) ; $ ( F ) . blur ( ) ; A = false } , setInputElem : function ( ha ) { F = ha } , clear : function ( ) { Na == "textedit" && rb . toSelectMode ( ) } , init : function ( ) { if ( A ) { if ( ! A . parentNode ) { A = J [ 0 ] ; Oa . requestSelector ( A ) . showGrips ( false ) } var ha =
A . textContent . length , ka = A . getAttribute ( "transform" ) ; P = svgedit . utilities . getBBox ( A ) ; R = ka ? ea ( A ) : null ; H = Array ( ha ) ; F . focus ( ) ; $ ( A ) . unbind ( "dblclick" , s ) . dblclick ( s ) ; if ( ! ha ) var oa = { x : P . x + P . width / 2 , width : 0 } ; for ( ka = 0 ; ka < ha ; ka ++ ) { var xa = A . getStartPositionOfChar ( ka ) ; oa = A . getEndPositionOfChar ( ka ) ; if ( ! svgedit . browser . supportsGoodTextCharPos ( ) ) { var eb = b . contentW * o ; xa . x -= eb ; oa . x -= eb ; xa . x /= o ; oa . x /= o } H [ ka ] = { x : xa . x , y : P . y , width : oa . x - xa . x , height : P . height } } H . push ( { x : oa . x , width : 0 } ) ; h ( F . selectionStart , F . selectionEnd , true ) } } } } ( ) ,
Va = b . pathActions = function ( ) { var g = false , h , k , v ; svgedit . path . Path . prototype . endChanges = function ( w ) { if ( svgedit . browser . isWebkit ( ) ) { var s = this . elem ; s . setAttribute ( "d" , Va . convertPath ( s ) ) } w = new Wa ( this . elem , { d : this . last _d } , w ) ; Ga ( w ) ; I ( "changed" , [ this . elem ] ) } ; svgedit . path . Path . prototype . addPtsToSelection = function ( w ) { $ . isArray ( w ) || ( w = [ w ] ) ; for ( var s = 0 ; s < w . length ; s ++ ) { var A = w [ s ] , F = this . segs [ A ] ; F . ptgrip && this . selected _pts . indexOf ( A ) == - 1 && A >= 0 && this . selected _pts . push ( A ) } this . selected _pts . sort ( ) ; s = this . selected _pts . length ;
for ( w = Array ( s ) ; s -- ; ) { F = this . segs [ this . selected _pts [ s ] ] ; F . select ( true ) ; w [ s ] = F . ptgrip } Va . canDeleteNodes = true ; Va . closed _subpath = this . subpathIsClosed ( this . selected _pts [ 0 ] ) ; I ( "selected" , w ) } ; var t = h = null , E = false ; return { mouseDown : function ( w , s , A , F ) { if ( Na === "path" ) { mouse _x = A ; mouse _y = F ; F = mouse _x / o ; s = mouse _y / o ; A = la ( "path_stretch_line" ) ; k = [ F , s ] ; if ( m . gridSnapping ) { F = Fa ( F ) ; s = Fa ( s ) ; mouse _x = Fa ( mouse _x ) ; mouse _y = Fa ( mouse _y ) } if ( ! A ) { A = document . createElementNS ( c , "path" ) ; ma ( A , { id : "path_stretch_line" , stroke : "#22C" , "stroke-width" : "0.5" ,
fill : "none" } ) ; A = la ( "selectorParentGroup" ) . appendChild ( A ) } A . setAttribute ( "display" , "inline" ) ; var C = null ; if ( t ) { C = t . pathSegList ; for ( var D = C . numberOfItems , G = 6 / o , H = false ; D ; ) { D -- ; var P = C . getItem ( D ) , R = P . x ; P = P . y ; if ( F >= R - G && F <= R + G && s >= P - G && s <= P + G ) { H = true ; break } } G = ta ( ) ; svgedit . path . removePath _ ( G ) ; G = la ( G ) ; R = C . numberOfItems ; if ( H ) { if ( D <= 1 && R >= 2 ) { F = C . getItem ( 0 ) . x ; s = C . getItem ( 0 ) . y ; w = A . pathSegList . getItem ( 1 ) ; w = w . pathSegType === 4 ? t . createSVGPathSegLinetoAbs ( F , s ) : t . createSVGPathSegCurvetoCubicAbs ( F , s , w . x1 / o , w . y1 / o ,
F , s ) ; F = t . createSVGPathSegClosePath ( ) ; C . appendItem ( w ) ; C . appendItem ( F ) } else if ( R < 3 ) return C = false ; $ ( A ) . remove ( ) ; element = G ; t = null ; Ra = false ; if ( g ) { svgedit . path . path . matrix && xb ( G , { } , svgedit . path . path . matrix . inverse ( ) ) ; A = G . getAttribute ( "d" ) ; w = $ ( svgedit . path . path . elem ) . attr ( "d" ) ; $ ( svgedit . path . path . elem ) . attr ( "d" , w + A ) ; $ ( G ) . remove ( ) ; svgedit . path . path . matrix && svgedit . path . recalcRotatedPath ( ) ; svgedit . path . path . init ( ) ; Va . toEditMode ( svgedit . path . path . elem ) ; svgedit . path . path . selectPt ( ) ; return false } } else { if ( ! $ . contains ( a ,
$b ( w ) ) ) { console . log ( "Clicked outside canvas" ) ; return false } C = t . pathSegList . numberOfItems ; D = t . pathSegList . getItem ( C - 1 ) ; G = D . x ; D = D . y ; if ( w . shiftKey ) { w = ca ( G , D , F , s ) ; F = w . x ; s = w . y } w = A . pathSegList . getItem ( 1 ) ; w = w . pathSegType === 4 ? t . createSVGPathSegLinetoAbs ( Cb ( F ) , Cb ( s ) ) : t . createSVGPathSegCurvetoCubicAbs ( Cb ( F ) , Cb ( s ) , w . x1 / o , w . y1 / o , w . x2 / o , w . y2 / o ) ; t . pathSegList . appendItem ( w ) ; F *= o ; s *= o ; A . setAttribute ( "d" , [ "M" , F , s , F , s ] . join ( " " ) ) ; A = C ; if ( g ) A += svgedit . path . path . segs . length ; svgedit . path . addPointGrip ( A , F , s ) } } else { d _attr =
"M" + F + "," + s + " " ; t = da ( { element : "path" , curStyles : true , attr : { d : d _attr , id : M ( ) , opacity : N . opacity / 2 } } ) ; A . setAttribute ( "d" , [ "M" , mouse _x , mouse _y , mouse _x , mouse _y ] . join ( " " ) ) ; A = g ? svgedit . path . path . segs . length : 0 ; svgedit . path . addPointGrip ( A , mouse _x , mouse _y ) } } else if ( svgedit . path . path ) { svgedit . path . path . storeD ( ) ; G = w . target . id ; if ( G . substr ( 0 , 14 ) == "pathpointgrip_" ) { s = svgedit . path . path . cur _pt = parseInt ( G . substr ( 14 ) ) ; svgedit . path . path . dragging = [ A , F ] ; C = svgedit . path . path . segs [ s ] ; if ( w . shiftKey ) C . selected ? svgedit . path . path . removePtFromSelection ( s ) :
svgedit . path . path . addPtsToSelection ( s ) ; else { if ( svgedit . path . path . selected _pts . length <= 1 || ! C . selected ) svgedit . path . path . clearSelection ( ) ; svgedit . path . path . addPtsToSelection ( s ) } } else if ( G . indexOf ( "ctrlpointgrip_" ) == 0 ) { svgedit . path . path . dragging = [ A , F ] ; w = G . split ( "_" ) [ 1 ] . split ( "c" ) ; s = w [ 0 ] - 0 ; svgedit . path . path . selectPt ( s , w [ 1 ] - 0 ) } if ( ! svgedit . path . path . dragging ) { if ( Ca == null ) Ca = Oa . getRubberBandBox ( ) ; ma ( Ca , { x : A * o , y : F * o , width : 0 , height : 0 , display : "inline" } , 100 ) } } } , mouseMove : function ( w , s , A ) { E = true ; if ( Na === "path" ) { if ( t ) { var F =
t . pathSegList ; w = F . numberOfItems - 1 ; if ( k ) { var C = svgedit . path . addCtrlGrip ( "1c1" ) , D = svgedit . path . addCtrlGrip ( "0c2" ) ; D . getAttribute ( "cx" ) ; D . getAttribute ( "cy" ) ; C . setAttribute ( "cx" , s ) ; C . setAttribute ( "cy" , A ) ; C . setAttribute ( "display" , "inline" ) ; C = k [ 0 ] ; var G = k [ 1 ] ; F . getItem ( w ) ; var H = C + ( C - s / o ) , P = G + ( G - A / o ) ; D . setAttribute ( "cx" , H * o ) ; D . setAttribute ( "cy" , P * o ) ; D . setAttribute ( "display" , "inline" ) ; D = svgedit . path . getCtrlLine ( 1 ) ; var R = svgedit . path . getCtrlLine ( 2 ) ; ma ( D , { x1 : s , y1 : A , x2 : C * o , y2 : G * o , display : "inline" } ) ; ma ( R , { x1 : H *
o , y1 : P * o , x2 : C * o , y2 : G * o , display : "inline" } ) ; if ( w === 0 ) v = [ s , A ] ; else { F = F . getItem ( w - 1 ) ; s = F . x ; A = F . y ; if ( F . pathSegType === 6 ) { s += s - F . x2 ; A += A - F . y2 } else if ( v ) { s = v [ 0 ] / o ; A = v [ 1 ] / o } svgedit . path . replacePathSeg ( 6 , w , [ C , G , s , A , H , P ] , t ) } } else if ( C = la ( "path_stretch_line" ) ) { w = F . getItem ( w ) ; if ( w . pathSegType === 6 ) svgedit . path . replacePathSeg ( 6 , 1 , [ s , A , ( w . x + ( w . x - w . x2 ) ) * o , ( w . y + ( w . y - w . y2 ) ) * o , s , A ] , C ) ; else v ? svgedit . path . replacePathSeg ( 6 , 1 , [ s , A , v [ 0 ] , v [ 1 ] , s , A ] , C ) : svgedit . path . replacePathSeg ( 4 , 1 , [ s , A ] , C ) } } } else if ( svgedit . path . path . dragging ) { C =
svgedit . path . getPointFromGrip ( { x : svgedit . path . path . dragging [ 0 ] , y : svgedit . path . path . dragging [ 1 ] } , svgedit . path . path ) ; G = svgedit . path . getPointFromGrip ( { x : s , y : A } , svgedit . path . path ) ; w = G . x - C . x ; C = G . y - C . y ; svgedit . path . path . dragging = [ s , A ] ; svgedit . path . path . dragctrl ? svgedit . path . path . moveCtrl ( w , C ) : svgedit . path . path . movePts ( w , C ) } else { svgedit . path . path . selected _pts = [ ] ; svgedit . path . path . eachSeg ( function ( ) { if ( this . next || this . prev ) { var aa = Ca . getBBox ( ) , ua = svgedit . path . getGripPt ( this ) ; aa = svgedit . math . rectsIntersect ( aa ,
{ x : ua . x , y : ua . y , width : 0 , height : 0 } ) ; this . select ( aa ) ; aa && svgedit . path . path . selected _pts . push ( this . index ) } } ) } } , mouseUp : function ( w , s ) { if ( Na === "path" ) { k = null ; if ( ! t ) { s = la ( ta ( ) ) ; Ra = false ; v = null } return { keep : true , element : s } } if ( svgedit . path . path . dragging ) { var A = svgedit . path . path . cur _pt ; svgedit . path . path . dragging = false ; svgedit . path . path . dragctrl = false ; svgedit . path . path . update ( ) ; E && svgedit . path . path . endChanges ( "Move path point(s)" ) ; ! w . shiftKey && ! E && svgedit . path . path . selectPt ( A ) } else if ( Ca && Ca . getAttribute ( "display" ) !=
"none" ) { Ca . setAttribute ( "display" , "none" ) ; Ca . getAttribute ( "width" ) <= 2 && Ca . getAttribute ( "height" ) <= 2 && Va . toSelectMode ( w . target ) } else Va . toSelectMode ( w . target ) ; E = false } , toEditMode : function ( w ) { svgedit . path . path = svgedit . path . getPath _ ( w ) ; Na = "pathedit" ; bb ( ) ; svgedit . path . path . show ( true ) . update ( ) ; svgedit . path . path . oldbbox = svgedit . utilities . getBBox ( svgedit . path . path . elem ) ; g = false } , toSelectMode : function ( w ) { var s = w == svgedit . path . path . elem ; Na = "select" ; svgedit . path . path . show ( false ) ; h = false ; bb ( ) ; svgedit . path . path . matrix &&
svgedit . path . recalcRotatedPath ( ) ; if ( s ) { I ( "selected" , [ w ] ) ; qb ( [ w ] , true ) } } , addSubPath : function ( w ) { if ( w ) { Na = "path" ; g = true } else { Va . clear ( true ) ; Va . toEditMode ( svgedit . path . path . elem ) } } , select : function ( w ) { if ( h === w ) { Va . toEditMode ( w ) ; Na = "pathedit" } else h = w } , reorient : function ( ) { var w = J [ 0 ] ; if ( w ) if ( ra ( w ) != 0 ) { var s = new La ( "Reorient path" ) , A = { d : w . getAttribute ( "d" ) , transform : w . getAttribute ( "transform" ) } ; s . addSubCommand ( new Wa ( w , A ) ) ; bb ( ) ; this . resetOrientation ( w ) ; Ga ( s ) ; svgedit . path . getPath _ ( w ) . show ( false ) . matrix = null ;
this . clear ( ) ; qb ( [ w ] , true ) ; I ( "changed" , J ) } } , clear : function ( ) { h = null ; if ( t ) { var w = la ( ta ( ) ) ; $ ( la ( "path_stretch_line" ) ) . remove ( ) ; $ ( w ) . remove ( ) ; $ ( la ( "pathpointgrip_container" ) ) . find ( "*" ) . attr ( "display" , "none" ) ; t = v = null ; Ra = false } else Na == "pathedit" && this . toSelectMode ( ) ; svgedit . path . path && svgedit . path . path . init ( ) . show ( false ) } , resetOrientation : function ( w ) { if ( w == null || w . nodeName != "path" ) return false ; var s = V ( w ) , A = ja ( s ) . matrix ; s . clear ( ) ; w . removeAttribute ( "transform" ) ; s = w . pathSegList ; for ( var F = s . numberOfItems ,
C = 0 ; C < F ; ++ C ) { var D = s . getItem ( C ) , G = D . pathSegType ; if ( G != 1 ) { var H = [ ] ; $ . each ( [ "" , 1 , 2 ] , function ( P , R ) { var aa = D [ "x" + R ] , ua = D [ "y" + R ] ; if ( aa !== undefined && ua !== undefined ) { aa = O ( aa , ua , A ) ; H . splice ( H . length , 0 , aa . x , aa . y ) } } ) ; svgedit . path . replacePathSeg ( G , C , H , w ) } } f ( w , A ) } , zoomChange : function ( ) { Na == "pathedit" && svgedit . path . path . update ( ) } , getNodePoint : function ( ) { var w = svgedit . path . path . segs [ svgedit . path . path . selected _pts . length ? svgedit . path . path . selected _pts [ 0 ] : 1 ] ; return { x : w . item . x , y : w . item . y , type : w . type } } , linkControlPoints : function ( w ) { svgedit . path . setLinkControlPoints ( w ) } ,
clonePathNode : function ( ) { svgedit . path . path . storeD ( ) ; for ( var w = svgedit . path . path . selected _pts , s = w . length , A = [ ] ; s -- ; ) { var F = w [ s ] ; svgedit . path . path . addSeg ( F ) ; A . push ( F + s ) ; A . push ( F + s + 1 ) } svgedit . path . path . init ( ) . addPtsToSelection ( A ) ; svgedit . path . path . endChanges ( "Clone path node(s)" ) } , opencloseSubPath : function ( ) { var w = svgedit . path . path . selected _pts ; if ( w . length === 1 ) { var s = svgedit . path . path . elem , A = s . pathSegList , F = w [ 0 ] , C = null , D = null ; svgedit . path . path . eachSeg ( function ( R ) { if ( this . type === 2 && R <= F ) D = this . item ; if ( R <=
F ) return true ; if ( this . type === 2 ) { C = R ; return false } else if ( this . type === 1 ) return C = false } ) ; if ( C == null ) C = svgedit . path . path . segs . length - 1 ; if ( C !== false ) { var G = s . createSVGPathSegLinetoAbs ( D . x , D . y ) , H = s . createSVGPathSegClosePath ( ) ; if ( C == svgedit . path . path . segs . length - 1 ) { A . appendItem ( G ) ; A . appendItem ( H ) } else { svgedit . path . insertItemBefore ( s , H , C ) ; svgedit . path . insertItemBefore ( s , G , C ) } svgedit . path . path . init ( ) . selectPt ( C + 1 ) } else if ( svgedit . path . path . segs [ F ] . mate ) { A . removeItem ( F ) ; A . removeItem ( F ) ; svgedit . path . path . init ( ) . selectPt ( F -
1 ) } else { for ( w = 0 ; w < A . numberOfItems ; w ++ ) { var P = A . getItem ( w ) ; if ( P . pathSegType === 2 ) G = w ; else if ( w === F ) A . removeItem ( G ) ; else if ( P . pathSegType === 1 && F < w ) { H = w - 1 ; A . removeItem ( w ) ; break } } for ( w = F - G - 1 ; w -- ; ) svgedit . path . insertItemBefore ( s , A . getItem ( G ) , H ) ; s = A . getItem ( G ) ; svgedit . path . replacePathSeg ( 2 , G , [ s . x , s . y ] ) ; w = F ; svgedit . path . path . init ( ) . selectPt ( 0 ) } } } , deletePathNode : function ( ) { if ( Va . canDeleteNodes ) { svgedit . path . path . storeD ( ) ; for ( var w = svgedit . path . path . selected _pts , s = w . length ; s -- ; ) svgedit . path . path . deleteSeg ( w [ s ] ) ;
var A = function ( ) { var F = svgedit . path . path . elem . pathSegList , C = F . numberOfItems , D = function ( P , R ) { for ( ; R -- ; ) F . removeItem ( P ) } ; if ( C <= 1 ) return true ; for ( ; C -- ; ) { var G = F . getItem ( C ) ; if ( G . pathSegType === 1 ) { G = F . getItem ( C - 1 ) ; var H = F . getItem ( C - 2 ) ; if ( G . pathSegType === 2 ) { D ( C - 1 , 2 ) ; A ( ) ; break } else if ( H . pathSegType === 2 ) { D ( C - 2 , 3 ) ; A ( ) ; break } } else if ( G . pathSegType === 2 ) if ( C > 0 ) { G = F . getItem ( C - 1 ) . pathSegType ; if ( G === 2 ) { D ( C - 1 , 1 ) ; A ( ) ; break } else if ( G === 1 && F . numberOfItems - 1 === C ) { D ( C , 1 ) ; A ( ) ; break } } } return false } ; A ( ) ; if ( svgedit . path . path . elem . pathSegList . numberOfItems <=
1 ) { Va . toSelectMode ( svgedit . path . path . elem ) ; b . deleteSelectedElements ( ) } else { svgedit . path . path . init ( ) ; svgedit . path . path . clearSelection ( ) ; if ( window . opera ) { w = $ ( svgedit . path . path . elem ) ; w . attr ( "d" , w . attr ( "d" ) ) } svgedit . path . path . endChanges ( "Delete path node(s)" ) } } } , smoothPolylineIntoPath : function ( w ) { var s = w . points , A = s . numberOfItems ; if ( A >= 4 ) { var F = s . getItem ( 0 ) , C = null ; w = [ ] ; w . push ( [ "M" , F . x , "," , F . y , " C" ] . join ( "" ) ) ; for ( var D = 1 ; D <= A - 4 ; D += 3 ) { var G = s . getItem ( D ) , H = s . getItem ( D + 1 ) , P = s . getItem ( D + 2 ) ; if ( C ) if ( ( F = svgedit . path . smoothControlPoints ( C ,
G , F ) ) && F . length == 2 ) { G = w [ w . length - 1 ] . split ( "," ) ; G [ 2 ] = F [ 0 ] . x ; G [ 3 ] = F [ 0 ] . y ; w [ w . length - 1 ] = G . join ( "," ) ; G = F [ 1 ] } w . push ( [ G . x , G . y , H . x , H . y , P . x , P . y ] . join ( "," ) ) ; F = P ; C = H } for ( w . push ( "L" ) ; D < A ; ++ D ) { H = s . getItem ( D ) ; w . push ( [ H . x , H . y ] . join ( "," ) ) } w = w . join ( " " ) ; w = da ( { element : "path" , curStyles : true , attr : { id : ta ( ) , d : w , fill : "none" } } ) } return w } , setSegType : function ( w ) { svgedit . path . path . setSegType ( w ) } , moveNode : function ( w , s ) { var A = svgedit . path . path . selected _pts ; if ( A . length ) { svgedit . path . path . storeD ( ) ; A = svgedit . path . path . segs [ A [ 0 ] ] ;
var F = { x : 0 , y : 0 } ; F [ w ] = s - A . item [ w ] ; A . move ( F . x , F . y ) ; svgedit . path . path . endChanges ( "Move path point" ) } } , fixEnd : function ( w ) { for ( var s = w . pathSegList , A = s . numberOfItems , F , C = 0 ; C < A ; ++ C ) { var D = s . getItem ( C ) ; if ( D . pathSegType === 2 ) F = D ; if ( D . pathSegType === 1 ) { D = s . getItem ( C - 1 ) ; if ( D . x != F . x || D . y != F . y ) { s = w . createSVGPathSegLinetoAbs ( F . x , F . y ) ; svgedit . path . insertItemBefore ( w , s , C ) ; Va . fixEnd ( w ) ; break } } } svgedit . browser . isWebkit ( ) && w . setAttribute ( "d" , Va . convertPath ( w ) ) } , convertPath : function ( w , s ) { for ( var A = w . pathSegList , F = A . numberOfItems ,
C = 0 , D = 0 , G = "" , H = null , P = 0 ; P < F ; ++ P ) { var R = A . getItem ( P ) , aa = R . x || 0 , ua = R . y || 0 , wa = R . x1 || 0 , ha = R . y1 || 0 , ka = R . x2 || 0 , oa = R . y2 || 0 , xa = R . pathSegType , eb = db [ xa ] [ "to" + ( s ? "Lower" : "Upper" ) + "Case" ] ( ) , Db = function ( Pb , Jb , Ob ) { Jb = Jb ? " " + Jb . join ( " " ) : "" ; Ob = Ob ? " " + svgedit . units . shortFloat ( Ob ) : "" ; $ . each ( Pb , function ( bc , kc ) { Pb [ bc ] = svgedit . units . shortFloat ( kc ) } ) ; G += eb + Pb . join ( " " ) + Jb + Ob } ; switch ( xa ) { case 1 : G += "z" ; break ; case 12 : aa -= C ; case 13 : if ( s ) { C += aa ; eb = "l" } else { aa += C ; C = aa ; eb = "L" } Db ( [ [ aa , D ] ] ) ; break ; case 14 : ua -= D ; case 15 : if ( s ) { D +=
ua ; eb = "l" } else { ua += D ; D = ua ; eb = "L" } Db ( [ [ C , ua ] ] ) ; break ; case 2 : case 4 : case 18 : aa -= C ; ua -= D ; case 5 : case 3 : if ( H && A . getItem ( P - 1 ) . pathSegType === 1 && ! s ) { C = H [ 0 ] ; D = H [ 1 ] } case 19 : if ( s ) { C += aa ; D += ua } else { aa += C ; ua += D ; C = aa ; D = ua } if ( xa === 3 ) H = [ C , D ] ; Db ( [ [ aa , ua ] ] ) ; break ; case 6 : aa -= C ; wa -= C ; ka -= C ; ua -= D ; ha -= D ; oa -= D ; case 7 : if ( s ) { C += aa ; D += ua } else { aa += C ; wa += C ; ka += C ; ua += D ; ha += D ; oa += D ; C = aa ; D = ua } Db ( [ [ wa , ha ] , [ ka , oa ] , [ aa , ua ] ] ) ; break ; case 8 : aa -= C ; wa -= C ; ua -= D ; ha -= D ; case 9 : if ( s ) { C += aa ; D += ua } else { aa += C ; wa += C ; ua += D ; ha += D ; C = aa ; D = ua } Db ( [ [ wa ,
ha ] , [ aa , ua ] ] ) ; break ; case 10 : aa -= C ; ua -= D ; case 11 : if ( s ) { C += aa ; D += ua } else { aa += C ; ua += D ; C = aa ; D = ua } Db ( [ [ R . r1 , R . r2 ] ] , [ R . angle , R . largeArcFlag ? 1 : 0 , R . sweepFlag ? 1 : 0 ] , [ aa , ua ] ) ; break ; case 16 : aa -= C ; ka -= C ; ua -= D ; oa -= D ; case 17 : if ( s ) { C += aa ; D += ua } else { aa += C ; ka += C ; ua += D ; oa += D ; C = aa ; D = ua } Db ( [ [ ka , oa ] , [ aa , ua ] ] ) } } return G } } } ( ) , gc = this . removeUnusedDefElems = function ( ) { var g = l . getElementsByTagNameNS ( c , "defs" ) ; if ( ! g || ! g . length ) return 0 ; for ( var h = [ ] , k = 0 , v = [ "fill" , "stroke" , "filter" , "marker-start" , "marker-mid" , "marker-end" ] , t = v . length ,
E = l . getElementsByTagNameNS ( c , "*" ) , w = E . length , s = 0 ; s < w ; s ++ ) { for ( var A = E [ s ] , F = 0 ; F < t ; F ++ ) { var C = pa ( A . getAttribute ( v [ F ] ) ) ; C && h . push ( C . substr ( 1 ) ) } ( A = ba ( A ) ) && A . indexOf ( "#" ) === 0 && h . push ( A . substr ( 1 ) ) } g = $ ( g ) . find ( "linearGradient, radialGradient, filter, marker, svg, symbol" ) ; defelem _ids = [ ] ; for ( s = g . length ; s -- ; ) { v = g [ s ] ; t = v . id ; if ( h . indexOf ( t ) < 0 ) { Bb [ t ] = v ; v . parentNode . removeChild ( v ) ; k ++ } } return k } ; this . svgCanvasToString = function ( ) { for ( ; gc ( ) > 0 ; ) ; Va . clear ( true ) ; $ . each ( l . childNodes , function ( k , v ) { k && v . nodeType === 8 &&
v . data . indexOf ( "Created with" ) >= 0 && l . insertBefore ( v , l . firstChild ) } ) ; if ( L ) { ac ( ) ; Qb ( [ L ] ) } var g = [ ] ; $ ( l ) . find ( "g:data(gsvg)" ) . each ( function ( ) { for ( var k = this . attributes , v = k . length , t = 0 ; t < v ; t ++ ) if ( k [ t ] . nodeName == "id" || k [ t ] . nodeName == "style" ) v -- ; if ( v <= 0 ) { k = this . firstChild ; g . push ( k ) ; $ ( this ) . replaceWith ( k ) } } ) ; var h = this . svgToString ( l , 0 ) ; g . length && $ ( g ) . each ( function ( ) { na ( this ) } ) ; return h } ; this . svgToString = function ( g , h ) { var k = [ ] , v = svgedit . utilities . toXml , t = m . baseUnit , E = RegExp ( "^-?[\\d\\.]+" + t + "$" ) ; if ( g ) { Y ( g ) ;
var w = g . attributes , s , A , F = g . childNodes ; for ( A = 0 ; A < h ; A ++ ) k . push ( " " ) ; k . push ( "<" ) ; k . push ( g . nodeName ) ; if ( g . id === "svgcontent" ) { A = Vb ( ) ; if ( t !== "px" ) { A . w = svgedit . units . convertUnit ( A . w , t ) + t ; A . h = svgedit . units . convertUnit ( A . h , t ) + t } k . push ( ' width="' + A . w + '" height="' + A . h + '" xmlns="' + c + '"' ) ; var C = { } ; $ ( g ) . find ( "*" ) . andSelf ( ) . each ( function ( ) { $ . each ( this . attributes , function ( P , R ) { var aa = R . namespaceURI ; if ( aa && ! C [ aa ] && za [ aa ] !== "xmlns" && za [ aa ] !== "xml" ) { C [ aa ] = true ; k . push ( " xmlns:" + za [ aa ] + '="' + aa + '"' ) } } ) } ) ; A = w . length ; for ( t =
[ "width" , "height" , "xmlns" , "x" , "y" , "viewBox" , "id" , "overflow" ] ; A -- ; ) { s = w . item ( A ) ; var D = v ( s . nodeValue ) ; if ( s . nodeName . indexOf ( "xmlns:" ) !== 0 ) if ( D != "" && t . indexOf ( s . localName ) == - 1 ) if ( ! s . namespaceURI || za [ s . namespaceURI ] ) { k . push ( " " ) ; k . push ( s . nodeName ) ; k . push ( '="' ) ; k . push ( D ) ; k . push ( '"' ) } } } else { if ( g . nodeName === "defs" && ! g . firstChild ) return ; var G = [ "-moz-math-font-style" , "_moz-math-font-style" ] ; for ( A = w . length - 1 ; A >= 0 ; A -- ) { s = w . item ( A ) ; D = v ( s . nodeValue ) ; if ( ! ( G . indexOf ( s . localName ) >= 0 ) ) if ( D != "" ) if ( D . indexOf ( "pointer-events" ) !==
0 ) if ( ! ( s . localName === "class" && D . indexOf ( "se_" ) === 0 ) ) { k . push ( " " ) ; if ( s . localName === "d" ) D = Va . convertPath ( g , true ) ; if ( isNaN ( D ) ) { if ( E . test ( D ) ) D = svgedit . units . shortFloat ( D ) + t } else D = svgedit . units . shortFloat ( D ) ; if ( Za . apply && g . nodeName === "image" && s . localName === "href" && Za . images && Za . images === "embed" ) { var H = Sa [ D ] ; if ( H ) D = H } if ( ! s . namespaceURI || s . namespaceURI == c || za [ s . namespaceURI ] ) { k . push ( s . nodeName ) ; k . push ( '="' ) ; k . push ( D ) ; k . push ( '"' ) } } } } if ( g . hasChildNodes ( ) ) { k . push ( ">" ) ; h ++ ; w = false ; for ( A = 0 ; A < F . length ; A ++ ) { t =
F . item ( A ) ; switch ( t . nodeType ) { case 1 : k . push ( "\n" ) ; k . push ( this . svgToString ( F . item ( A ) , h ) ) ; break ; case 3 : t = t . nodeValue . replace ( /^\s+|\s+$/g , "" ) ; if ( t != "" ) { w = true ; k . push ( v ( t ) + "" ) } break ; case 4 : k . push ( "\n" ) ; k . push ( Array ( h + 1 ) . join ( " " ) ) ; k . push ( "<![CDATA[" ) ; k . push ( t . nodeValue ) ; k . push ( "]]\>" ) ; break ; case 8 : k . push ( "\n" ) ; k . push ( Array ( h + 1 ) . join ( " " ) ) ; k . push ( "<!--" ) ; k . push ( t . data ) ; k . push ( "--\>" ) } } h -- ; if ( ! w ) { k . push ( "\n" ) ; for ( A = 0 ; A < h ; A ++ ) k . push ( " " ) } k . push ( "</" ) ; k . push ( g . nodeName ) ; k . push ( ">" ) } else k . push ( "/>" ) } return k . join ( "" ) } ;
this . embedImage = function ( g , h ) { $ ( new Image ) . load ( function ( ) { var k = document . createElement ( "canvas" ) ; k . width = this . width ; k . height = this . height ; k . getContext ( "2d" ) . drawImage ( this , 0 , 0 ) ; try { var v = ";svgedit_url=" + encodeURIComponent ( g ) ; v = k . toDataURL ( ) . replace ( ";base64" , v + ";base64" ) ; Sa [ g ] = v } catch ( t ) { Sa [ g ] = false } Ja = g ; h && h ( Sa [ g ] ) } ) . attr ( "src" , g ) } ; this . setGoodImage = function ( g ) { Ja = g } ; this . open = function ( ) { } ; this . save = function ( g ) { bb ( ) ; g && $ . extend ( Za , g ) ; Za . apply = true ; g = this . svgCanvasToString ( ) ; I ( "saved" , g ) } ; this . rasterExport =
function ( ) { bb ( ) ; var g = [ ] , h = { feGaussianBlur : Gb . exportNoBlur , foreignObject : Gb . exportNoforeignObject , "[stroke-dasharray]" : Gb . exportNoDashArray } , k = $ ( l ) ; if ( ! ( "font" in $ ( "<canvas>" ) [ 0 ] . getContext ( "2d" ) ) ) h . text = Gb . exportNoText ; $ . each ( h , function ( v , t ) { k . find ( v ) . length && g . push ( t ) } ) ; h = this . svgCanvasToString ( ) ; I ( "exported" , { svg : h , issues : g } ) } ; this . getSvgString = function ( ) { Za . apply = false ; return this . svgCanvasToString ( ) } ; this . randomizeIds = function ( ) { arguments . length > 0 && arguments [ 0 ] == false ? svgedit . draw . randomizeIds ( false ,
z ( ) ) : svgedit . draw . randomizeIds ( true , z ( ) ) } ; var cc = this . uniquifyElems = function ( g ) { var h = { } , k = [ "filter" , "linearGradient" , "pattern" , "radialGradient" , "symbol" , "textPath" , "use" ] ; svgedit . utilities . walkTree ( g , function ( s ) { if ( s . nodeType == 1 ) { if ( s . id ) { s . id in h || ( h [ s . id ] = { elem : null , attrs : [ ] , hrefs : [ ] } ) ; h [ s . id ] . elem = s } $ . each ( Nb , function ( F , C ) { var D = s . getAttributeNode ( C ) ; if ( D ) { var G = svgedit . utilities . getUrlFromAttr ( D . value ) ; if ( G = G ? G . substr ( 1 ) : null ) { G in h || ( h [ G ] = { elem : null , attrs : [ ] , hrefs : [ ] } ) ; h [ G ] . attrs . push ( D ) } } } ) ;
var A = svgedit . utilities . getHref ( s ) ; if ( A && k . indexOf ( s . nodeName ) >= 0 ) if ( A = A . substr ( 1 ) ) { A in h || ( h [ A ] = { elem : null , attrs : [ ] , hrefs : [ ] } ) ; h [ A ] . hrefs . push ( s ) } } } ) ; for ( var v in h ) if ( v ) { var t = h [ v ] . elem ; if ( t ) { g = M ( ) ; t . id = g ; t = h [ v ] . attrs ; for ( var E = t . length ; E -- ; ) { var w = t [ E ] ; w . ownerElement . setAttribute ( w . name , "url(#" + g + ")" ) } t = h [ v ] . hrefs ; for ( E = t . length ; E -- ; ) svgedit . utilities . setHref ( t [ E ] , "#" + g ) } } } , Ub = this . setUseData = function ( g ) { var h = $ ( g ) ; if ( g . tagName !== "use" ) h = h . find ( "use" ) ; h . each ( function ( ) { var k = ba ( this ) . substr ( 1 ) ;
if ( k = la ( k ) ) { $ ( this ) . data ( "ref" , k ) ; if ( k . tagName == "symbol" || k . tagName == "svg" ) $ ( this ) . data ( "symbol" , k ) . data ( "ref" , k ) } } ) } , hc = this . convertGradients = function ( g ) { var h = $ ( g ) . find ( "linearGradient, radialGradient" ) ; if ( ! h . length && svgedit . browser . isWebkit ( ) ) h = $ ( g ) . find ( "*" ) . filter ( function ( ) { return this . tagName . indexOf ( "Gradient" ) >= 0 } ) ; h . each ( function ( ) { if ( $ ( this ) . attr ( "gradientUnits" ) === "userSpaceOnUse" ) { var k = $ ( l ) . find ( '[fill="url(#' + this . id + ')"],[stroke="url(#' + this . id + ')"]' ) ; if ( k . length ) if ( k = svgedit . utilities . getBBox ( k [ 0 ] ) ) if ( this . tagName ===
"linearGradient" ) { var v = $ ( this ) . attr ( [ "x1" , "y1" , "x2" , "y2" ] ) , t = this . gradientTransform . baseVal ; if ( t && t . numberOfItems > 0 ) { var E = ja ( t ) . matrix ; t = O ( v . x1 , v . y1 , E ) ; E = O ( v . x2 , v . y2 , E ) ; v . x1 = t . x ; v . y1 = t . y ; v . x2 = E . x ; v . y2 = E . y ; this . removeAttribute ( "gradientTransform" ) } $ ( this ) . attr ( { x1 : ( v . x1 - k . x ) / k . width , y1 : ( v . y1 - k . y ) / k . height , x2 : ( v . x2 - k . x ) / k . width , y2 : ( v . y2 - k . y ) / k . height } ) ; this . removeAttribute ( "gradientUnits" ) } } } ) } , lc = this . convertToGroup = function ( g ) { g || ( g = J [ 0 ] ) ; var h = $ ( g ) , k = new La , v ; if ( h . data ( "gsvg" ) ) { k = $ ( g . firstChild ) . attr ( [ "x" ,
"y" ] ) ; $ ( g . firstChild . firstChild ) . unwrap ( ) ; $ ( g ) . removeData ( "gsvg" ) ; v = V ( g ) ; var t = e . createSVGTransform ( ) ; t . setTranslate ( k . x , k . y ) ; v . appendItem ( t ) ; pb ( g ) ; I ( "selected" , [ g ] ) } else if ( h . data ( "symbol" ) ) { g = h . data ( "symbol" ) ; v = h . attr ( "transform" ) ; t = h . attr ( [ "x" , "y" ] ) ; var E = g . getAttribute ( "viewBox" ) ; if ( E ) { E = E . split ( " " ) ; t . x -= + E [ 0 ] ; t . y -= + E [ 1 ] } v += " translate(" + ( t . x || 0 ) + "," + ( t . y || 0 ) + ")" ; t = h . prev ( ) ; k . addSubCommand ( new Ua ( h [ 0 ] , h [ 0 ] . nextSibling , h [ 0 ] . parentNode ) ) ; h . remove ( ) ; E = $ ( l ) . find ( "use:data(symbol)" ) . length ; h = d . createElementNS ( c ,
"g" ) ; for ( var w = g . childNodes , s = 0 ; s < w . length ; s ++ ) h . appendChild ( w [ s ] . cloneNode ( true ) ) ; if ( svgedit . browser . isGecko ( ) ) { w = $ ( ub ( ) ) . children ( "linearGradient,radialGradient,pattern" ) . clone ( ) ; $ ( h ) . append ( w ) } v && h . setAttribute ( "transform" , v ) ; v = g . parentNode ; cc ( h ) ; svgedit . browser . isGecko ( ) && $ ( ub ( ) ) . append ( $ ( h ) . find ( "linearGradient,radialGradient,pattern" ) ) ; h . id = M ( ) ; t . after ( h ) ; if ( v ) { if ( ! E ) { t = g . nextSibling ; v . removeChild ( g ) ; k . addSubCommand ( new Ua ( g , t , v ) ) } k . addSubCommand ( new Ka ( h ) ) } Ub ( h ) ; svgedit . browser . isGecko ( ) ? hc ( ub ( ) ) :
hc ( h ) ; svgedit . utilities . walkTreePost ( h , function ( A ) { try { pb ( A ) } catch ( F ) { console . log ( F ) } } ) ; $ ( h ) . find ( "a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use" ) . each ( function ( ) { if ( ! this . id ) this . id = M ( ) } ) ; Qb ( [ h ] ) ; ( g = fc ( h , true ) ) && k . addSubCommand ( g ) ; Ga ( k ) } else console . log ( "Unexpected element to ungroup:" , g ) } ; this . setSvgString = function ( g ) { try { var h = svgedit . utilities . text2xml ( g ) ; this . prepareSvg ( h ) ; var k = new La ( "Change Source" ) , v = l . nextSibling , t = e . removeChild ( l ) ; k . addSubCommand ( new Ua ( t ,
v , e ) ) ; l = d . adoptNode ? d . adoptNode ( h . documentElement ) : d . importNode ( h . documentElement , true ) ; e . appendChild ( l ) ; var E = $ ( l ) ; b . current _drawing _ = new svgedit . draw . Drawing ( l , u ) ; var w = z ( ) . getNonce ( ) ; w ? I ( "setnonce" , w ) : I ( "unsetnonce" ) ; E . find ( "image" ) . each ( function ( ) { var H = this ; Zb ( H ) ; var P = ba ( this ) ; if ( P . indexOf ( "data:" ) === 0 ) { var R = P . match ( /svgedit_url=(.*?);/ ) ; if ( R ) { var aa = decodeURIComponent ( R [ 1 ] ) ; $ ( new Image ) . load ( function ( ) { H . setAttributeNS ( "http://www.w3.org/1999/xlink" , "xlink:href" , aa ) } ) . attr ( "src" , aa ) } } b . embedImage ( P ) } ) ;
E . find ( "svg" ) . each ( function ( ) { if ( ! $ ( this ) . closest ( "defs" ) . length ) { cc ( this ) ; var H = this . parentNode ; if ( H . childNodes . length === 1 && H . nodeName === "g" ) { $ ( H ) . data ( "gsvg" , this ) ; H . id = H . id || M ( ) } else na ( this ) } } ) ; svgedit . browser . isGecko ( ) && E . find ( "linearGradient, radialGradient, pattern" ) . appendTo ( ub ( ) ) ; Ub ( E ) ; hc ( E [ 0 ] ) ; svgedit . utilities . walkTreePost ( l , function ( H ) { try { pb ( H ) } catch ( P ) { console . log ( P ) } } ) ; var s = { id : "svgcontent" , overflow : m . show _outside _canvas ? "visible" : "hidden" } , A = false ; if ( E . attr ( "viewBox" ) ) { var F = E . attr ( "viewBox" ) . split ( " " ) ;
s . width = F [ 2 ] ; s . height = F [ 3 ] } else $ . each ( [ "width" , "height" ] , function ( H , P ) { var R = E . attr ( P ) ; R || ( R = "100%" ) ; if ( ( R + "" ) . substr ( - 1 ) === "%" ) A = true ; else s [ P ] = qa ( P , R ) } ) ; Wb ( ) ; E . children ( ) . find ( "a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use" ) . each ( function ( ) { if ( ! this . id ) this . id = M ( ) } ) ; if ( A ) { var C = getStrokedBBox ( ) ; s . width = C . width + C . x ; s . height = C . height + C . y } if ( s . width <= 0 ) s . width = 100 ; if ( s . height <= 0 ) s . height = 100 ; E . attr ( s ) ; this . contentW = s . width ; this . contentH = s . height ; k . addSubCommand ( new Ka ( l ) ) ;
var D = E . attr ( [ "width" , "height" ] ) ; k . addSubCommand ( new Wa ( e , D ) ) ; o = 1 ; svgedit . transformlist . resetListMap ( ) ; bb ( ) ; svgedit . path . clearData ( ) ; e . appendChild ( Oa . selectorParentGroup ) ; Ga ( k ) ; I ( "changed" , [ l ] ) } catch ( G ) { console . log ( G ) ; return false } return true } ; this . importSvgString = function ( g ) { try { var h = svgedit . utilities . encode64 ( g . length + g ) . substr ( 0 , 32 ) , k = false ; if ( Ab [ h ] ) if ( $ ( Ab [ h ] . symbol ) . parents ( "#svgroot" ) . length ) k = true ; var v = new La ( "Import SVG" ) ; if ( k ) var t = Ab [ h ] . symbol , E = Ab [ h ] . xform ; else { var w = svgedit . utilities . text2xml ( g ) ;
this . prepareSvg ( w ) ; var s ; s = d . adoptNode ? d . adoptNode ( w . documentElement ) : d . importNode ( w . documentElement , true ) ; cc ( s ) ; var A = qa ( "width" , s . getAttribute ( "width" ) ) , F = qa ( "height" , s . getAttribute ( "height" ) ) , C = s . getAttribute ( "viewBox" ) , D = C ? C . split ( " " ) : [ 0 , 0 , A , F ] ; for ( g = 0 ; g < 4 ; ++ g ) D [ g ] = + D [ g ] ; l . getAttribute ( "width" ) ; var G = + l . getAttribute ( "height" ) ; E = F > A ? "scale(" + G / 3 / D [ 3 ] + ")" : "scale(" + G / 3 / D [ 2 ] + ")" ; E = "translate(0) " + E + " translate(0)" ; t = d . createElementNS ( c , "symbol" ) ; var H = ub ( ) ; for ( svgedit . browser . isGecko ( ) && $ ( s ) . find ( "linearGradient, radialGradient, pattern" ) . appendTo ( H ) ; s . firstChild ; ) t . appendChild ( s . firstChild ) ;
var P = s . attributes ; for ( s = 0 ; s < P . length ; s ++ ) { var R = P [ s ] ; t . setAttribute ( R . nodeName , R . nodeValue ) } t . id = M ( ) ; Ab [ h ] = { symbol : t , xform : E } ; ub ( ) . appendChild ( t ) ; v . addSubCommand ( new Ka ( t ) ) } var aa = d . createElementNS ( c , "use" ) ; aa . id = M ( ) ; S ( aa , "#" + t . id ) ; ( L || z ( ) . getCurrentLayer ( ) ) . appendChild ( aa ) ; v . addSubCommand ( new Ka ( aa ) ) ; bb ( ) ; aa . setAttribute ( "transform" , E ) ; pb ( aa ) ; $ ( aa ) . data ( "symbol" , t ) . data ( "ref" , t ) ; qb ( [ aa ] ) ; Ga ( v ) ; I ( "changed" , [ l ] ) } catch ( ua ) { console . log ( ua ) ; return false } return true } ; var Wb = b . identifyLayers = function ( ) { ac ( ) ;
z ( ) . identifyLayers ( ) } ; this . createLayer = function ( g ) { var h = new La ( "Create Layer" ) ; g = z ( ) . createLayer ( g ) ; h . addSubCommand ( new Ka ( g ) ) ; Ga ( h ) ; bb ( ) ; I ( "changed" , [ g ] ) } ; this . cloneLayer = function ( g ) { var h = new La ( "Duplicate Layer" ) , k = d . createElementNS ( c , "g" ) , v = d . createElementNS ( c , "title" ) ; v . textContent = g ; k . appendChild ( v ) ; v = z ( ) . getCurrentLayer ( ) ; $ ( v ) . after ( k ) ; v = v . childNodes ; for ( var t = 0 ; t < v . length ; t ++ ) { var E = v [ t ] ; E . localName != "title" && k . appendChild ( Z ( E ) ) } bb ( ) ; Wb ( ) ; h . addSubCommand ( new Ka ( k ) ) ; Ga ( h ) ; b . setCurrentLayer ( g ) ;
I ( "changed" , [ k ] ) } ; this . deleteCurrentLayer = function ( ) { var g = z ( ) . getCurrentLayer ( ) , h = g . nextSibling , k = g . parentNode ; if ( g = z ( ) . deleteCurrentLayer ( ) ) { var v = new La ( "Delete Layer" ) ; v . addSubCommand ( new Ua ( g , h , k ) ) ; Ga ( v ) ; bb ( ) ; I ( "changed" , [ k ] ) ; return true } return false } ; this . setCurrentLayer = function ( g ) { ( g = z ( ) . setCurrentLayer ( svgedit . utilities . toXml ( g ) ) ) && bb ( ) ; return g } ; this . renameCurrentLayer = function ( g ) { var h = z ( ) ; if ( h . current _layer ) { var k = h . current _layer ; if ( ! b . setCurrentLayer ( g ) ) { for ( var v = new La ( "Rename Layer" ) ,
t = 0 ; t < h . getNumLayers ( ) ; ++ t ) if ( h . all _layers [ t ] [ 1 ] == k ) break ; var E = h . getLayerName ( t ) ; h . all _layers [ t ] [ 0 ] = svgedit . utilities . toXml ( g ) ; var w = k . childNodes . length ; for ( t = 0 ; t < w ; ++ t ) { var s = k . childNodes . item ( t ) ; if ( s && s . tagName == "title" ) { for ( ; s . firstChild ; ) s . removeChild ( s . firstChild ) ; s . textContent = g ; v . addSubCommand ( new Wa ( s , { "#text" : E } ) ) ; Ga ( v ) ; I ( "changed" , [ k ] ) ; return true } } } h . current _layer = k } return false } ; this . setCurrentLayerPosition = function ( g ) { var h = z ( ) ; if ( h . current _layer && g >= 0 && g < h . getNumLayers ( ) ) { for ( var k =
0 ; k < h . getNumLayers ( ) ; ++ k ) if ( h . all _layers [ k ] [ 1 ] == h . current _layer ) break ; if ( k == h . getNumLayers ( ) ) return false ; if ( k != g ) { var v = null , t = h . current _layer . nextSibling ; if ( g > k ) { if ( g < h . getNumLayers ( ) - 1 ) v = h . all _layers [ g + 1 ] [ 1 ] } else v = h . all _layers [ g ] [ 1 ] ; l . insertBefore ( h . current _layer , v ) ; Ga ( new Qa ( h . current _layer , t , l ) ) ; Wb ( ) ; b . setCurrentLayer ( h . getLayerName ( g ) ) ; return true } } return false } ; this . setLayerVisibility = function ( g , h ) { var k = z ( ) , v = k . getLayerVisibility ( g ) , t = k . setLayerVisibility ( g , h ) ; if ( t ) Ga ( new Wa ( t , { display : v ?
"inline" : "none" } , "Layer Visibility" ) ) ; else return false ; if ( t == k . getCurrentLayer ( ) ) { bb ( ) ; Va . clear ( ) } return true } ; this . moveSelectedToLayer = function ( g ) { for ( var h = null , k = z ( ) , v = 0 ; v < k . getNumLayers ( ) ; ++ v ) if ( k . getLayerName ( v ) == g ) { h = k . all _layers [ v ] [ 1 ] ; break } if ( ! h ) return false ; g = new La ( "Move Elements to Layer" ) ; k = J ; for ( v = k . length ; v -- ; ) { var t = k [ v ] ; if ( t ) { var E = t . nextSibling , w = t . parentNode ; h . appendChild ( t ) ; g . addSubCommand ( new Qa ( t , E , w ) ) } } Ga ( g ) ; return true } ; this . mergeLayer = function ( g ) { var h = new La ( "Merge Layer" ) ,
k = z ( ) , v = $ ( k . current _layer ) . prev ( ) [ 0 ] ; if ( v ) { for ( h . addSubCommand ( new Ua ( k . current _layer , k . current _layer . nextSibling , l ) ) ; k . current _layer . firstChild ; ) { var t = k . current _layer . firstChild ; if ( t . localName == "title" ) { h . addSubCommand ( new Ua ( t , t . nextSibling , k . current _layer ) ) ; k . current _layer . removeChild ( t ) } else { var E = t . nextSibling ; v . appendChild ( t ) ; h . addSubCommand ( new Qa ( t , E , k . current _layer ) ) } } l . removeChild ( k . current _layer ) ; if ( ! g ) { bb ( ) ; Wb ( ) ; I ( "changed" , [ l ] ) ; Ga ( h ) } k . current _layer = v ; return h } } ; this . mergeAllLayers =
function ( ) { var g = new La ( "Merge all Layers" ) , h = z ( ) ; for ( h . current _layer = h . all _layers [ h . getNumLayers ( ) - 1 ] [ 1 ] ; $ ( l ) . children ( "g" ) . length > 1 ; ) g . addSubCommand ( b . mergeLayer ( true ) ) ; bb ( ) ; Wb ( ) ; I ( "changed" , [ l ] ) ; Ga ( g ) } ; var ac = this . leaveContext = function ( ) { var g = Ea . length ; if ( g ) { for ( var h = 0 ; h < g ; h ++ ) { var k = Ea [ h ] , v = lb ( k , "orig_opac" ) ; v !== 1 ? k . setAttribute ( "opacity" , v ) : k . removeAttribute ( "opacity" ) ; k . setAttribute ( "style" , "pointer-events: inherit" ) } Ea = [ ] ; bb ( true ) ; I ( "contextset" , null ) } L = null } , nc = this . setContext = function ( g ) { ac ( ) ;
if ( typeof g === "string" ) g = la ( g ) ; L = g ; $ ( g ) . parentsUntil ( "#svgcontent" ) . andSelf ( ) . siblings ( ) . each ( function ( ) { var h = this . getAttribute ( "opacity" ) || 1 ; lb ( this , "orig_opac" , h ) ; this . setAttribute ( "opacity" , h * 0.33 ) ; this . setAttribute ( "style" , "pointer-events: none" ) ; Ea . push ( this ) } ) ; bb ( ) ; I ( "contextset" , L ) } ; this . clear = function ( ) { Va . clear ( ) ; bb ( ) ; b . clearSvgContentElement ( ) ; b . current _drawing _ = new svgedit . draw . Drawing ( l ) ; b . createLayer ( "Layer 1" ) ; b . undoMgr . resetUndoStack ( ) ; Oa . initGroup ( ) ; Ca = Oa . getRubberBandBox ( ) ; I ( "cleared" ) } ;
this . linkControlPoints = Va . linkControlPoints ; this . getContentElem = function ( ) { return l } ; this . getRootElem = function ( ) { return e } ; this . getSelectedElems = function ( ) { return J } ; var Vb = this . getResolution = function ( ) { var g = l . getAttribute ( "width" ) / o , h = l . getAttribute ( "height" ) / o ; return { w : g , h : h , zoom : o } } ; this . getZoom = function ( ) { return o } ; this . getVersion = function ( ) { return "svgcanvas.js ($Rev: 2082 $)" } ; this . setUiStrings = function ( g ) { $ . extend ( Gb , g . notification ) } ; this . setConfig = function ( g ) { $ . extend ( m , g ) } ; this . getTitle =
function ( g ) { if ( g = g || J [ 0 ] ) { g = $ ( g ) . data ( "gsvg" ) || $ ( g ) . data ( "symbol" ) || g ; g = g . childNodes ; for ( var h = 0 ; h < g . length ; h ++ ) if ( g [ h ] . nodeName == "title" ) return g [ h ] . textContent ; return "" } } ; this . setGroupTitle = function ( g ) { var h = J [ 0 ] ; h = $ ( h ) . data ( "gsvg" ) || h ; var k = $ ( h ) . children ( "title" ) , v = new La ( "Set Label" ) ; if ( g . length ) if ( k . length ) { k = k [ 0 ] ; v . addSubCommand ( new Wa ( k , { "#text" : k . textContent } ) ) ; k . textContent = g } else { k = d . createElementNS ( c , "title" ) ; k . textContent = g ; $ ( h ) . prepend ( k ) ; v . addSubCommand ( new Ka ( k ) ) } else { v . addSubCommand ( new Ua ( k [ 0 ] ,
k . nextSibling , h ) ) ; k . remove ( ) } Ga ( v ) } ; this . getDocumentTitle = function ( ) { return b . getTitle ( l ) } ; this . setDocumentTitle = function ( g ) { for ( var h = l . childNodes , k = false , v = "" , t = new La ( "Change Image Title" ) , E = 0 ; E < h . length ; E ++ ) if ( h [ E ] . nodeName == "title" ) { k = h [ E ] ; v = k . textContent ; break } if ( ! k ) { k = d . createElementNS ( c , "title" ) ; l . insertBefore ( k , l . firstChild ) } if ( g . length ) k . textContent = g ; else k . parentNode . removeChild ( k ) ; t . addSubCommand ( new Wa ( k , { "#text" : v } ) ) ; Ga ( t ) } ; this . getEditorNS = function ( g ) { g && l . setAttribute ( "xmlns:se" ,
"http://svg-edit.googlecode.com" ) ; return "http://svg-edit.googlecode.com" } ; this . setResolution = function ( g , h ) { var k = Vb ( ) , v = k . w ; k = k . h ; var t ; if ( g == "fit" ) { var E = getStrokedBBox ( ) ; if ( E ) { t = new La ( "Fit Canvas to Content" ) ; var w = Ib ( ) ; qb ( w ) ; var s = [ ] , A = [ ] ; $ . each ( w , function ( ) { s . push ( E . x * - 1 ) ; A . push ( E . y * - 1 ) } ) ; w = b . moveSelectedElements ( s , A , true ) ; t . addSubCommand ( w ) ; bb ( ) ; g = Math . round ( E . width ) ; h = Math . round ( E . height ) } else return false } if ( g != v || h != k ) { w = e . suspendRedraw ( 1E3 ) ; t || ( t = new La ( "Change Image Dimensions" ) ) ; g = qa ( "width" ,
g ) ; h = qa ( "height" , h ) ; l . setAttribute ( "width" , g ) ; l . setAttribute ( "height" , h ) ; this . contentW = g ; this . contentH = h ; t . addSubCommand ( new Wa ( l , { width : v , height : k } ) ) ; l . setAttribute ( "viewBox" , [ 0 , 0 , g / o , h / o ] . join ( " " ) ) ; t . addSubCommand ( new Wa ( l , { viewBox : [ "0 0" , v , k ] . join ( " " ) } ) ) ; Ga ( t ) ; e . unsuspendRedraw ( w ) ; I ( "changed" , [ l ] ) } return true } ; this . getOffset = function ( ) { return $ ( l ) . attr ( [ "x" , "y" ] ) } ; this . setBBoxZoom = function ( g , h , k ) { var v = 0.85 , t = function ( E ) { if ( ! E ) return false ; var w = Math . min ( Math . round ( h / E . width * 100 * v ) / 100 , Math . round ( k /
E . height * 100 * v ) / 100 ) ; b . setZoom ( w ) ; return { zoom : w , bbox : E } } ; if ( typeof g == "object" ) { g = g ; if ( g . width == 0 || g . height == 0 ) { b . setZoom ( g . zoom ? g . zoom : o * g . factor ) ; return { zoom : o , bbox : g } } return t ( g ) } switch ( g ) { case "selection" : if ( ! J [ 0 ] ) return ; g = $ . map ( J , function ( E ) { if ( E ) return E } ) ; g = getStrokedBBox ( g ) ; break ; case "canvas" : g = Vb ( ) ; v = 0.95 ; g = { width : g . w , height : g . h , x : 0 , y : 0 } ; break ; case "content" : g = getStrokedBBox ( ) ; break ; case "layer" : g = getStrokedBBox ( Ib ( z ( ) . getCurrentLayer ( ) ) ) ; break ; default : return } return t ( g ) } ; this . setZoom = function ( g ) { var h =
Vb ( ) ; l . setAttribute ( "viewBox" , "0 0 " + h . w / g + " " + h . h / g ) ; o = g ; $ . each ( J , function ( k , v ) { v && Oa . requestSelector ( v ) . resize ( ) } ) ; Va . zoomChange ( ) ; ob ( "zoomChanged" , g ) } ; this . getMode = function ( ) { return Na } ; this . setMode = function ( g ) { Va . clear ( true ) ; rb . clear ( ) ; $ ( "#workarea" ) . attr ( "class" , g ) ; jb = J [ 0 ] && J [ 0 ] . nodeName == "text" ? cb : N ; Na = g } ; this . getColor = function ( g ) { return jb [ g ] } ; this . setColor = function ( g , h , k ) { N [ g ] = h ; jb [ g + "_paint" ] = { type : "solidColor" } ; for ( var v = [ ] , t = J . length ; t -- ; ) { var E = J [ t ] ; if ( E ) if ( E . tagName == "g" ) svgedit . utilities . walkTree ( E ,
function ( w ) { w . nodeName != "g" && v . push ( w ) } ) ; else if ( g == "fill" ) E . tagName != "polyline" && E . tagName != "line" && v . push ( E ) ; else v . push ( E ) } if ( v . length > 0 ) if ( k ) Sb ( g , h , v ) ; else { vb ( g , h , v ) ; I ( "changed" , v ) } } ; var ub = function ( ) { var g = l . getElementsByTagNameNS ( c , "defs" ) ; if ( g . length > 0 ) g = g [ 0 ] ; else { g = d . createElementNS ( c , "defs" ) ; l . firstChild ? l . insertBefore ( g , l . firstChild . nextSibling ) : l . appendChild ( g ) } return g } , ic = this . setGradient = function ( g ) { if ( ! ( ! jb [ g + "_paint" ] || jb [ g + "_paint" ] . type == "solidColor" ) ) { var h = b [ g + "Grad" ] , k = dc ( h ) ,
v = ub ( ) ; if ( k ) h = k ; else { h = v . appendChild ( d . importNode ( h , true ) ) ; h . id = M ( ) } b . setColor ( g , "url(#" + h . id + ")" ) } } , dc = function ( g ) { var h = ub ( ) ; h = $ ( h ) . find ( "linearGradient, radialGradient" ) ; for ( var k = h . length , v = [ "r" , "cx" , "cy" , "fx" , "fy" ] ; k -- ; ) { var t = h [ k ] ; if ( g . tagName == "linearGradient" ) { if ( g . getAttribute ( "x1" ) != t . getAttribute ( "x1" ) || g . getAttribute ( "y1" ) != t . getAttribute ( "y1" ) || g . getAttribute ( "x2" ) != t . getAttribute ( "x2" ) || g . getAttribute ( "y2" ) != t . getAttribute ( "y2" ) ) continue } else { var E = $ ( g ) . attr ( v ) , w = $ ( t ) . attr ( v ) , s = false ;
$ . each ( v , function ( H , P ) { if ( E [ P ] != w [ P ] ) s = true } ) ; if ( s ) continue } var A = g . getElementsByTagNameNS ( c , "stop" ) , F = t . getElementsByTagNameNS ( c , "stop" ) ; if ( A . length == F . length ) { for ( var C = A . length ; C -- ; ) { var D = A [ C ] , G = F [ C ] ; if ( D . getAttribute ( "offset" ) != G . getAttribute ( "offset" ) || D . getAttribute ( "stop-opacity" ) != G . getAttribute ( "stop-opacity" ) || D . getAttribute ( "stop-color" ) != G . getAttribute ( "stop-color" ) ) break } if ( C == - 1 ) return t } } return null } ; this . setPaint = function ( g , h ) { var k = new $ . jGraduate . Paint ( h ) ; this . setPaintOpacity ( g ,
k . alpha / 100 , true ) ; jb [ g + "_paint" ] = k ; switch ( k . type ) { case "solidColor" : if ( k . solidColor != "none" ) this . setColor ( g , "#" + k . solidColor ) ; else { this . setColor ( g , "none" ) ; document . querySelector ( g == "fill" ? "#fill_color rect" : "#stroke_color rect" ) . setAttribute ( "fill" , "transparent" ) } break ; case "linearGradient" : case "radialGradient" : b [ g + "Grad" ] = k [ k . type ] ; ic ( g ) } } ; this . getStrokeWidth = function ( ) { return jb . stroke _width } ; this . setStrokeWidth = function ( g ) { if ( g == 0 && [ "line" , "path" ] . indexOf ( Na ) >= 0 ) b . setStrokeWidth ( 1 ) ; else { jb . stroke _width =
g ; for ( var h = [ ] , k = J . length ; k -- ; ) { var v = J [ k ] ; if ( v ) v . tagName == "g" ? svgedit . utilities . walkTree ( v , function ( t ) { t . nodeName != "g" && h . push ( t ) } ) : h . push ( v ) } if ( h . length > 0 ) { vb ( "stroke-width" , g , h ) ; I ( "changed" , J ) } } } ; this . setStrokeAttr = function ( g , h ) { N [ g . replace ( "-" , "_" ) ] = h ; for ( var k = [ ] , v = J . length ; v -- ; ) { var t = J [ v ] ; if ( t ) t . tagName == "g" ? svgedit . utilities . walkTree ( t , function ( E ) { E . nodeName != "g" && k . push ( E ) } ) : k . push ( t ) } if ( k . length > 0 ) { vb ( g , h , k ) ; I ( "changed" , J ) } } ; this . getStyle = function ( ) { return N } ; this . getOpacity = function ( ) { return N . opacity } ;
this . setOpacity = function ( g ) { N . opacity = g ; vb ( "opacity" , g ) } ; this . getFillOpacity = function ( ) { return N . fill _opacity } ; this . getStrokeOpacity = function ( ) { return N . stroke _opacity } ; this . setPaintOpacity = function ( g , h , k ) { N [ g + "_opacity" ] = h ; k ? Sb ( g + "-opacity" , h ) : vb ( g + "-opacity" , h ) } ; this . getBlur = function ( g ) { var h = 0 ; if ( g ) if ( g . getAttribute ( "filter" ) ) if ( g = la ( g . id + "_blur" ) ) h = g . firstChild . getAttribute ( "stdDeviation" ) ; return h } ; ( function ( ) { function g ( ) { var t = b . undoMgr . finishUndoableChange ( ) ; h . addSubCommand ( t ) ; Ga ( h ) ; k = h = null }
var h = null , k = null , v = false ; b . setBlurNoUndo = function ( t ) { if ( k ) if ( t === 0 ) { Sb ( "filter" , "" ) ; v = true } else { var E = J [ 0 ] ; v && Sb ( "filter" , "url(#" + E . id + "_blur)" ) ; if ( svgedit . browser . isWebkit ( ) ) { E . removeAttribute ( "filter" ) ; E . setAttribute ( "filter" , "url(#" + E . id + "_blur)" ) } Sb ( "stdDeviation" , t , [ k . firstChild ] ) ; b . setBlurOffsets ( k , t ) } else b . setBlur ( t ) } ; b . setBlurOffsets = function ( t , E ) { if ( E > 3 ) ma ( t , { x : "-50%" , y : "-50%" , width : "200%" , height : "200%" } , 100 ) ; else if ( ! svgedit . browser . isWebkit ( ) ) { t . removeAttribute ( "x" ) ; t . removeAttribute ( "y" ) ;
t . removeAttribute ( "width" ) ; t . removeAttribute ( "height" ) } } ; b . setBlur = function ( t , E ) { if ( h ) g ( ) ; else { var w = J [ 0 ] , s = w . id ; k = la ( s + "_blur" ) ; t -= 0 ; var A = new La ; if ( k ) { if ( t === 0 ) k = null } else { var F = da ( { element : "feGaussianBlur" , attr : { "in" : "SourceGraphic" , stdDeviation : t } } ) ; k = da ( { element : "filter" , attr : { id : s + "_blur" } } ) ; k . appendChild ( F ) ; ub ( ) . appendChild ( k ) ; A . addSubCommand ( new Ka ( k ) ) } F = { filter : w . getAttribute ( "filter" ) } ; if ( t === 0 ) { w . removeAttribute ( "filter" ) ; A . addSubCommand ( new Wa ( w , F ) ) } else { vb ( "filter" , "url(#" + s + "_blur)" ) ;
A . addSubCommand ( new Wa ( w , F ) ) ; b . setBlurOffsets ( k , t ) ; h = A ; b . undoMgr . beginUndoableChange ( "stdDeviation" , [ k ? k . firstChild : null ] ) ; if ( E ) { b . setBlurNoUndo ( t ) ; g ( ) } } } } } ) ( ) ; this . getBold = function ( ) { var g = J [ 0 ] ; if ( g != null && g . tagName == "text" && J [ 1 ] == null ) return g . getAttribute ( "font-weight" ) == "bold" ; return false } ; this . setBold = function ( g ) { var h = J [ 0 ] ; if ( h != null && h . tagName == "text" && J [ 1 ] == null ) vb ( "font-weight" , g ? "bold" : "normal" ) ; J [ 0 ] . textContent || rb . setCursor ( ) } ; this . getItalic = function ( ) { var g = J [ 0 ] ; if ( g != null && g . tagName ==
"text" && J [ 1 ] == null ) return g . getAttribute ( "font-style" ) == "italic" ; return false } ; this . setItalic = function ( g ) { var h = J [ 0 ] ; if ( h != null && h . tagName == "text" && J [ 1 ] == null ) vb ( "font-style" , g ? "italic" : "normal" ) ; J [ 0 ] . textContent || rb . setCursor ( ) } ; this . getFontFamily = function ( ) { return cb . font _family } ; this . setFontFamily = function ( g ) { cb . font _family = g ; vb ( "font-family" , g ) ; J [ 0 ] && ! J [ 0 ] . textContent && rb . setCursor ( ) } ; this . setFontColor = function ( g ) { cb . fill = g ; vb ( "fill" , g ) } ; this . getFontSize = function ( ) { return cb . fill } ; this . getFontSize =
function ( ) { return cb . font _size } ; this . setFontSize = function ( g ) { cb . font _size = g ; vb ( "font-size" , g ) ; J [ 0 ] . textContent || rb . setCursor ( ) } ; this . getText = function ( ) { var g = J [ 0 ] ; if ( g == null ) return "" ; return g . textContent } ; this . setTextContent = function ( g ) { vb ( "#text" , g ) ; rb . init ( g ) ; rb . setCursor ( ) } ; this . setImageURL = function ( g ) { var h = J [ 0 ] ; if ( h ) { var k = $ ( h ) . attr ( [ "width" , "height" ] ) ; k = ! k . width || ! k . height ; var v = ba ( h ) ; if ( v !== g ) k = true ; else if ( ! k ) return ; var t = new La ( "Change Image URL" ) ; S ( h , g ) ; t . addSubCommand ( new Wa ( h , { "#href" : v } ) ) ;
k ? $ ( new Image ) . load ( function ( ) { var E = $ ( h ) . attr ( [ "width" , "height" ] ) ; $ ( h ) . attr ( { width : this . width , height : this . height } ) ; Oa . requestSelector ( h ) . resize ( ) ; t . addSubCommand ( new Wa ( h , E ) ) ; Ga ( t ) ; I ( "changed" , [ h ] ) } ) . attr ( "src" , g ) : Ga ( t ) } } ; this . setLinkURL = function ( g ) { var h = J [ 0 ] ; if ( h ) { if ( h . tagName !== "a" ) { h = $ ( h ) . parents ( "a" ) ; if ( h . length ) h = h [ 0 ] ; else return } var k = ba ( h ) ; if ( k !== g ) { var v = new La ( "Change Link URL" ) ; S ( h , g ) ; v . addSubCommand ( new Wa ( h , { "#href" : k } ) ) ; Ga ( v ) } } } ; this . setRectRadius = function ( g ) { var h = J [ 0 ] ; if ( h != null &&
h . tagName == "rect" ) { var k = h . getAttribute ( "rx" ) ; if ( k != g ) { h . setAttribute ( "rx" , g ) ; h . setAttribute ( "ry" , g ) ; Ga ( new Wa ( h , { rx : k , ry : k } , "Radius" ) ) ; I ( "changed" , [ h ] ) } } } ; this . makeHyperlink = function ( g ) { b . groupSelectedElements ( "a" , g ) } ; this . removeHyperlink = function ( ) { b . ungroupSelectedElement ( ) } ; this . setSegType = function ( g ) { Va . setSegType ( g ) } ; this . convertToPath = function ( g , h ) { if ( g == null ) $ . each ( J , function ( wa , ha ) { ha && b . convertToPath ( ha ) } ) ; else { if ( ! h ) var k = new La ( "Convert element to Path" ) ; var v = h ? { } : { fill : N . fill , "fill-opacity" : N . fill _opacity ,
stroke : N . stroke , "stroke-width" : N . stroke _width , "stroke-dasharray" : N . stroke _dasharray , "stroke-linejoin" : N . stroke _linejoin , "stroke-linecap" : N . stroke _linecap , "stroke-opacity" : N . stroke _opacity , opacity : N . opacity , visibility : "hidden" } ; $ . each ( [ "marker-start" , "marker-end" , "marker-mid" , "filter" , "clip-path" ] , function ( ) { if ( g . getAttribute ( this ) ) v [ this ] = g . getAttribute ( this ) } ) ; var t = da ( { element : "path" , attr : v } ) , E = g . getAttribute ( "transform" ) ; E && t . setAttribute ( "transform" , E ) ; var w = g . id , s = g . parentNode ; g . nextSibling ?
s . insertBefore ( t , g ) : s . appendChild ( t ) ; var A = "" , F = function ( wa ) { $ . each ( wa , function ( ha , ka ) { var oa = ka [ 1 ] ; A += ka [ 0 ] ; for ( var xa = 0 ; xa < oa . length ; xa += 2 ) A += oa [ xa ] + "," + oa [ xa + 1 ] + " " } ) } , C = 1.81 ; switch ( g . tagName ) { case "ellipse" : case "circle" : var D = $ ( g ) . attr ( [ "rx" , "ry" , "cx" , "cy" ] ) , G = D . cx , H = D . cy , P = D . rx ; D = D . ry ; if ( g . tagName == "circle" ) P = D = $ ( g ) . attr ( "r" ) ; F ( [ [ "M" , [ G - P , H ] ] , [ "C" , [ G - P , H - D / C , G - P / C , H - D , G , H - D ] ] , [ "C" , [ G + P / C , H - D , G + P , H - D / C , G + P , H ] ] , [ "C" , [ G + P , H + D / C , G + P / C , H + D , G , H + D ] ] , [ "C" , [ G - P / C , H + D , G - P , H + D / C , G - P , H ] ] , [ "Z" , [ ] ] ] ) ; break ;
case "path" : A = g . getAttribute ( "d" ) ; break ; case "line" : D = $ ( g ) . attr ( [ "x1" , "y1" , "x2" , "y2" ] ) ; A = "M" + D . x1 + "," + D . y1 + "L" + D . x2 + "," + D . y2 ; break ; case "polyline" : case "polygon" : A = "M" + g . getAttribute ( "points" ) ; break ; case "rect" : D = $ ( g ) . attr ( [ "rx" , "ry" ] ) ; P = D . rx ; D = D . ry ; var R = g . getBBox ( ) ; G = R . x ; H = R . y ; var aa = R . width ; R = R . height ; C = 4 - C ; ! P && ! D ? F ( [ [ "M" , [ G , H ] ] , [ "L" , [ G + aa , H ] ] , [ "L" , [ G + aa , H + R ] ] , [ "L" , [ G , H + R ] ] , [ "L" , [ G , H ] ] , [ "Z" , [ ] ] ] ) : F ( [ [ "M" , [ G , H + D ] ] , [ "C" , [ G , H + D / C , G + P / C , H , G + P , H ] ] , [ "L" , [ G + aa - P , H ] ] , [ "C" , [ G + aa - P / C , H , G + aa , H + D / C , G + aa , H +
D ] ] , [ "L" , [ G + aa , H + R - D ] ] , [ "C" , [ G + aa , H + R - D / C , G + aa - P / C , H + R , G + aa - P , H + R ] ] , [ "L" , [ G + P , H + R ] ] , [ "C" , [ G + P / C , H + R , G , H + R - D / C , G , H + R - D ] ] , [ "L" , [ G , H + D ] ] , [ "Z" , [ ] ] ] ) ; break ; default : t . parentNode . removeChild ( t ) } A && t . setAttribute ( "d" , A ) ; if ( h ) { Va . resetOrientation ( t ) ; k = false ; try { k = t . getBBox ( ) } catch ( ua ) { } t . parentNode . removeChild ( t ) ; return k } else { if ( E ) { E = V ( t ) ; sa ( E ) && Va . resetOrientation ( t ) } k . addSubCommand ( new Ua ( g , g . nextSibling , s ) ) ; k . addSubCommand ( new Ka ( t ) ) ; bb ( ) ; g . parentNode . removeChild ( g ) ; t . setAttribute ( "id" , w ) ; t . removeAttribute ( "visibility" ) ;
qb ( [ t ] , true ) ; Ga ( k ) } } } ; var Sb = function ( g , h , k ) { var v = e . suspendRedraw ( 1E3 ) ; Na == "pathedit" && Va . moveNode ( g , h ) ; k = k || J ; for ( var t = k . length , E = [ "g" , "polyline" , "path" ] ; t -- ; ) { var w = k [ t ] ; if ( w != null ) { Na === "textedit" && g !== "#text" && w . textContent . length && rb . toSelectMode ( w ) ; if ( ( g === "x" || g === "y" ) && E . indexOf ( w . tagName ) >= 0 ) { var s = getStrokedBBox ( [ w ] ) ; b . moveSelectedElements ( ( g === "x" ? h - s . x : 0 ) * o , ( g === "y" ? h - s . y : 0 ) * o , true ) } else { s = g === "#text" ? w . textContent : w . getAttribute ( g ) ; if ( s == null ) s = "" ; if ( s !== String ( h ) ) { if ( g == "#text" ) { svgedit . utilities . getBBox ( w ) ;
w . textContent = h ; if ( /rotate/ . test ( w . getAttribute ( "transform" ) ) ) w = Ma ( w ) } else g == "#href" ? S ( w , h ) : w . setAttribute ( g , h ) ; if ( svgedit . browser . isGecko ( ) && w . nodeName === "text" && /rotate/ . test ( w . getAttribute ( "transform" ) ) ) if ( ( h + "" ) . indexOf ( "url" ) === 0 || [ "font-size" , "font-family" , "x" , "y" ] . indexOf ( g ) >= 0 && w . textContent ) w = Ma ( w ) ; J . indexOf ( w ) >= 0 && setTimeout ( function ( ) { w . parentNode && Oa . requestSelector ( w ) . resize ( ) } , 0 ) ; s = ra ( w ) ; if ( s != 0 && g != "transform" ) for ( var A = V ( w ) , F = A . numberOfItems ; F -- ; ) if ( A . getItem ( F ) . type == 4 ) { A . removeItem ( F ) ;
var C = svgedit . utilities . getBBox ( w ) , D = O ( C . x + C . width / 2 , C . y + C . height / 2 , ja ( A ) . matrix ) ; C = D . x ; D = D . y ; var G = e . createSVGTransform ( ) ; G . setRotate ( s , C , D ) ; A . insertItemBefore ( G , F ) ; break } } } } } e . unsuspendRedraw ( v ) } , vb = this . changeSelectedAttribute = function ( g , h , k ) { k = k || J ; b . undoMgr . beginUndoableChange ( g , k ) ; Sb ( g , h , k ) ; g = b . undoMgr . finishUndoableChange ( ) ; g . isEmpty ( ) || Ga ( g ) } ; this . deleteSelectedElements = function ( ) { for ( var g = new La ( "Delete Elements" ) , h = J . length , k = [ ] , v = 0 ; v < h ; ++ v ) { var t = J [ v ] ; if ( t == null ) break ; var E = t . parentNode ,
w = t ; Oa . releaseSelector ( w ) ; svgedit . path . removePath _ ( w . id ) ; if ( E . tagName === "a" && E . childNodes . length === 1 ) { w = E ; E = E . parentNode } var s = w . nextSibling ; w = E . removeChild ( w ) ; k . push ( t ) ; J [ v ] = null ; g . addSubCommand ( new Ua ( w , s , E ) ) } g . isEmpty ( ) || Ga ( g ) ; I ( "changed" , k ) ; bb ( ) } ; this . cutSelectedElements = function ( ) { for ( var g = new La ( "Cut Elements" ) , h = J . length , k = [ ] , v = 0 ; v < h ; ++ v ) { var t = J [ v ] ; if ( t == null ) break ; var E = t . parentNode , w = t ; Oa . releaseSelector ( w ) ; svgedit . path . removePath _ ( w . id ) ; var s = w . nextSibling ; w = E . removeChild ( w ) ; k . push ( t ) ;
J [ v ] = null ; g . addSubCommand ( new Ua ( w , s , E ) ) } g . isEmpty ( ) || Ga ( g ) ; I ( "changed" , k ) ; bb ( ) ; b . clipBoard = k } ; this . copySelectedElements = function ( ) { b . clipBoard = $ . merge ( [ ] , J ) } ; this . pasteElements = function ( g , h , k ) { var v = b . clipBoard , t = v . length ; if ( t ) { for ( var E = [ ] , w = new La ( "Paste elements" ) ; t -- ; ) { var s = v [ t ] ; if ( s ) { var A = Z ( s ) ; if ( ! la ( s . id ) ) A . id = s . id ; E . push ( A ) ; ( L || z ( ) . getCurrentLayer ( ) ) . appendChild ( A ) ; w . addSubCommand ( new Ka ( A ) ) } } Qb ( E ) ; if ( g != "in_place" ) { if ( yb == null ) { yb . x = 0 ; yb . y = 0 } var F , C ; if ( g ) { if ( g === "point" ) { F = h ; C = k } } else { F =
yb . x ; C = yb . y } g = getStrokedBBox ( E ) ; var D = F - ( g . x + g . width / 2 ) , G = C - ( g . y + g . height / 2 ) , H = [ ] , P = [ ] ; $ . each ( E , function ( ) { H . push ( D ) ; P . push ( G ) } ) ; F = b . moveSelectedElements ( H , P , false ) ; w . addSubCommand ( F ) } Ga ( w ) ; I ( "changed" , E ) } } ; this . groupSelectedElements = function ( g ) { g || ( g = "g" ) ; var h = "" ; switch ( g ) { case "a" : h = "Make hyperlink" ; var k = "" ; if ( arguments . length > 1 ) k = arguments [ 1 ] ; break ; default : g = "g" ; h = "Group Elements" } h = new La ( h ) ; var v = da ( { element : g , attr : { id : M ( ) } } ) ; g === "a" && S ( v , k ) ; h . addSubCommand ( new Ka ( v ) ) ; for ( k = J . length ; k -- ; ) { var t =
J [ k ] ; if ( t != null ) { if ( t . parentNode . tagName === "a" && t . parentNode . childNodes . length === 1 ) t = t . parentNode ; var E = t . nextSibling , w = t . parentNode ; v . appendChild ( t ) ; h . addSubCommand ( new Qa ( t , E , w ) ) } } h . isEmpty ( ) || Ga ( h ) ; Qb ( [ v ] , true ) } ; var fc = this . pushGroupProperties = function ( g , h ) { var k = g . childNodes , v = k . length , t = g . getAttribute ( "transform" ) , E = V ( g ) , w = ja ( E ) . matrix , s = new La ( "Push group properties" ) , A = 0 , F = ra ( g ) , C = $ ( g ) . attr ( [ "filter" , "opacity" ] ) , D , G ; for ( A = 0 ; A < v ; A ++ ) { var H = k [ A ] ; if ( H . nodeType === 1 ) { if ( C . opacity !== null && C . opacity !==
1 ) { H . getAttribute ( "opacity" ) ; var P = Math . round ( ( H . getAttribute ( "opacity" ) || 1 ) * C . opacity * 100 ) / 100 ; vb ( "opacity" , P , [ H ] ) } if ( C . filter ) { var R = P = this . getBlur ( H ) ; G || ( G = this . getBlur ( g ) ) ; if ( P ) P = G - 0 + ( P - 0 ) ; else if ( P === 0 ) P = G ; if ( R ) D = X ( H . getAttribute ( "filter" ) ) ; else if ( D ) { D = Z ( D ) ; ub ( ) . appendChild ( D ) } else D = X ( C . filter ) ; D . id = H . id + "_" + ( D . firstChild . tagName === "feGaussianBlur" ? "blur" : "filter" ) ; vb ( "filter" , "url(#" + D . id + ")" , [ H ] ) ; if ( P ) { vb ( "stdDeviation" , P , [ D . firstChild ] ) ; b . setBlurOffsets ( D , P ) } } P = V ( H ) ; if ( ~ H . tagName . indexOf ( "Gradient" ) ) P =
null ; if ( P ) if ( H . tagName !== "defs" ) if ( E . numberOfItems ) { if ( F && E . numberOfItems == 1 ) { var aa = E . getItem ( 0 ) . matrix , ua = e . createSVGMatrix ( ) ; if ( R = ra ( H ) ) ua = P . getItem ( 0 ) . matrix ; var wa = svgedit . utilities . getBBox ( H ) , ha = ja ( P ) . matrix , ka = O ( wa . x + wa . width / 2 , wa . y + wa . height / 2 , ha ) ; wa = F + R ; ha = e . createSVGTransform ( ) ; ha . setRotate ( wa , ka . x , ka . y ) ; aa = fa ( aa , ua , ha . matrix . inverse ( ) ) ; R && P . removeItem ( 0 ) ; if ( wa ) P . numberOfItems ? P . insertItemBefore ( ha , 0 ) : P . appendItem ( ha ) ; if ( aa . e || aa . f ) { R = e . createSVGTransform ( ) ; R . setTranslate ( aa . e , aa . f ) ; P . numberOfItems ?
P . insertItemBefore ( R , 0 ) : P . appendItem ( R ) } } else { R = H . getAttribute ( "transform" ) ; aa = { } ; aa . transform = R ? R : "" ; R = e . createSVGTransform ( ) ; aa = ja ( P ) . matrix ; ua = aa . inverse ( ) ; aa = fa ( ua , w , aa ) ; R . setMatrix ( aa ) ; P . appendItem ( R ) } ( H = pb ( H ) ) && s . addSubCommand ( H ) } } } if ( t ) { aa = { } ; aa . transform = t ; g . setAttribute ( "transform" , "" ) ; g . removeAttribute ( "transform" ) ; s . addSubCommand ( new Wa ( g , aa ) ) } if ( h && ! s . isEmpty ( ) ) return s } ; this . ungroupSelectedElement = function ( ) { var g = J [ 0 ] ; if ( $ ( g ) . data ( "gsvg" ) || $ ( g ) . data ( "symbol" ) ) lc ( g ) ; else if ( g . tagName ===
"use" ) { var h = la ( ba ( g ) . substr ( 1 ) ) ; $ ( g ) . data ( "symbol" , h ) . data ( "ref" , h ) ; lc ( g ) } else { h = $ ( g ) . parents ( "a" ) ; if ( h . length ) g = h [ 0 ] ; if ( g . tagName === "g" || g . tagName === "a" ) { h = new La ( "Ungroup Elements" ) ; var k = fc ( g , true ) ; k && h . addSubCommand ( k ) ; k = g . parentNode ; for ( var v = g . nextSibling , t = Array ( g . childNodes . length ) , E = 0 ; g . firstChild ; ) { var w = g . firstChild , s = w . nextSibling , A = w . parentNode ; if ( w . tagName === "title" ) { h . addSubCommand ( new Ua ( w , w . nextSibling , A ) ) ; A . removeChild ( w ) } else { t [ E ++ ] = w = k . insertBefore ( w , v ) ; h . addSubCommand ( new Qa ( w ,
s , A ) ) } } bb ( ) ; v = g . nextSibling ; g = k . removeChild ( g ) ; h . addSubCommand ( new Ua ( g , v , k ) ) ; h . isEmpty ( ) || Ga ( h ) ; qb ( t ) } } } ; this . moveToTopSelectedElement = function ( ) { var g = J [ 0 ] ; if ( g != null ) { g = g ; var h = g . parentNode , k = g . nextSibling ; g = g . parentNode . appendChild ( g ) ; if ( k != g . nextSibling ) { Ga ( new Qa ( g , k , h , "top" ) ) ; I ( "changed" , [ g ] ) } } } ; this . moveToBottomSelectedElement = function ( ) { var g = J [ 0 ] ; if ( g != null ) { g = g ; var h = g . parentNode , k = g . nextSibling , v = g . parentNode . firstChild ; if ( v . tagName == "title" ) v = v . nextSibling ; if ( v . tagName == "defs" ) v = v . nextSibling ;
g = g . parentNode . insertBefore ( g , v ) ; if ( k != g . nextSibling ) { Ga ( new Qa ( g , k , h , "bottom" ) ) ; I ( "changed" , [ g ] ) } } } ; this . moveUpDownSelected = function ( g ) { var h = J [ 0 ] ; if ( h ) { wb = [ ] ; var k , v , t = $ ( Kb ( getStrokedBBox ( [ h ] ) ) ) . toArray ( ) ; g == "Down" && t . reverse ( ) ; $ . each ( t , function ( ) { if ( v ) { k = this ; return false } else if ( this == h ) v = true } ) ; if ( k ) { t = h . parentNode ; var E = h . nextSibling ; $ ( k ) [ g == "Down" ? "before" : "after" ] ( h ) ; if ( E != h . nextSibling ) { Ga ( new Qa ( h , E , t , "Move " + g ) ) ; I ( "changed" , [ h ] ) } } } } ; this . moveSelectedElements = function ( g , h , k ) { if ( g . constructor !=
Array ) { g /= o ; h /= o } k = k || true ; for ( var v = new La ( "position" ) , t = J . length ; t -- ; ) { var E = J [ t ] ; if ( E != null ) { var w = e . createSVGTransform ( ) , s = V ( E ) ; g . constructor == Array ? w . setTranslate ( g [ t ] , h [ t ] ) : w . setTranslate ( g , h ) ; s . numberOfItems ? s . insertItemBefore ( w , 0 ) : s . appendItem ( w ) ; ( w = pb ( E ) ) && v . addSubCommand ( w ) ; Oa . requestSelector ( E ) . resize ( ) } } if ( ! v . isEmpty ( ) ) { k && Ga ( v ) ; I ( "changed" , J ) ; return v } } ; this . cloneSelectedElements = function ( g , h ) { for ( var k = new La ( "Clone Elements" ) , v = J . length , t = 0 ; t < v ; ++ t ) { var E = J [ t ] ; if ( E == null ) break } v = J . slice ( 0 ,
t ) ; this . clearSelection ( true ) ; for ( t = v . length ; t -- ; ) { E = v [ t ] = Z ( v [ t ] ) ; ( L || z ( ) . getCurrentLayer ( ) ) . appendChild ( E ) ; k . addSubCommand ( new Ka ( E ) ) } if ( ! k . isEmpty ( ) ) { qb ( v . reverse ( ) ) ; this . moveSelectedElements ( g , h , false ) ; Ga ( k ) } } ; this . alignSelectedElements = function ( g , h ) { var k = [ ] , v = Number . MAX _VALUE , t = Number . MIN _VALUE , E = Number . MAX _VALUE , w = Number . MIN _VALUE , s = Number . MIN _VALUE , A = Number . MIN _VALUE , F = J . length ; if ( F ) { for ( var C = 0 ; C < F ; ++ C ) { if ( J [ C ] == null ) break ; k [ C ] = getStrokedBBox ( [ J [ C ] ] ) ; switch ( h ) { case "smallest" : if ( ( g == "l" || g ==
"c" || g == "r" ) && ( s == Number . MIN _VALUE || s > k [ C ] . width ) || ( g == "t" || g == "m" || g == "b" ) && ( A == Number . MIN _VALUE || A > k [ C ] . height ) ) { v = k [ C ] . x ; E = k [ C ] . y ; t = k [ C ] . x + k [ C ] . width ; w = k [ C ] . y + k [ C ] . height ; s = k [ C ] . width ; A = k [ C ] . height } break ; case "largest" : if ( ( g == "l" || g == "c" || g == "r" ) && ( s == Number . MIN _VALUE || s < k [ C ] . width ) || ( g == "t" || g == "m" || g == "b" ) && ( A == Number . MIN _VALUE || A < k [ C ] . height ) ) { v = k [ C ] . x ; E = k [ C ] . y ; t = k [ C ] . x + k [ C ] . width ; w = k [ C ] . y + k [ C ] . height ; s = k [ C ] . width ; A = k [ C ] . height } break ; default : if ( k [ C ] . x < v ) v = k [ C ] . x ; if ( k [ C ] . y < E ) E = k [ C ] . y ; if ( k [ C ] . x +
k [ C ] . width > t ) t = k [ C ] . x + k [ C ] . width ; if ( k [ C ] . y + k [ C ] . height > w ) w = k [ C ] . y + k [ C ] . height } } if ( h == "page" ) { E = v = 0 ; t = b . contentW ; w = b . contentH } s = Array ( F ) ; A = Array ( F ) ; for ( C = 0 ; C < F ; ++ C ) { if ( J [ C ] == null ) break ; var D = k [ C ] ; s [ C ] = 0 ; A [ C ] = 0 ; switch ( g ) { case "l" : s [ C ] = v - D . x ; break ; case "c" : s [ C ] = ( v + t ) / 2 - ( D . x + D . width / 2 ) ; break ; case "r" : s [ C ] = t - ( D . x + D . width ) ; break ; case "t" : A [ C ] = E - D . y ; break ; case "m" : A [ C ] = ( E + w ) / 2 - ( D . y + D . height / 2 ) ; break ; case "b" : A [ C ] = w - ( D . y + D . height ) } } this . moveSelectedElements ( s , A ) } } ; this . contentW = Vb ( ) . w ; this . contentH = Vb ( ) . h ;
this . updateCanvas = function ( g , h ) { e . setAttribute ( "width" , g ) ; e . setAttribute ( "height" , h ) ; var k = $ ( "#canvasBackground" ) [ 0 ] , v = l . getAttribute ( "x" ) , t = l . getAttribute ( "y" ) , E = g / 2 - this . contentW * o / 2 , w = h / 2 - this . contentH * o / 2 ; ma ( l , { width : this . contentW * o , height : this . contentH * o , x : E , y : w , viewBox : "0 0 " + this . contentW + " " + this . contentH } ) ; ma ( k , { width : l . getAttribute ( "width" ) , height : l . getAttribute ( "height" ) , x : E , y : w } ) ; ( k = la ( "background_image" ) ) && ma ( k , { width : "100%" , height : "100%" } ) ; Oa . selectorParentGroup . setAttribute ( "transform" ,
"translate(" + E + "," + w + ")" ) ; return { x : E , y : w , old _x : v , old _y : t , d _x : E - v , d _y : w - t } } ; this . setBackground = function ( g , h ) { var k = la ( "canvasBackground" ) , v = $ ( k ) . find ( "rect" ) [ 0 ] , t = la ( "background_image" ) ; v . setAttribute ( "fill" , g ) ; if ( h ) { if ( ! t ) { t = d . createElementNS ( c , "image" ) ; ma ( t , { id : "background_image" , width : "100%" , height : "100%" , preserveAspectRatio : "xMinYMin" , style : "pointer-events:none" } ) } S ( t , h ) ; k . appendChild ( t ) } else t && t . parentNode . removeChild ( t ) } ; this . cycleElement = function ( g ) { var h = J [ 0 ] , k = false , v = Ib ( L || z ( ) . getCurrentLayer ( ) ) ;
if ( v . length ) { if ( h == null ) { g = g ? v . length - 1 : 0 ; k = v [ g ] } else for ( var t = v . length ; t -- ; ) if ( v [ t ] == h ) { g = g ? t - 1 : t + 1 ; if ( g >= v . length ) g = 0 ; else if ( g < 0 ) g = v . length - 1 ; k = v [ g ] ; break } Qb ( [ k ] , true ) ; I ( "selected" , J ) } } ; this . clear ( ) ; this . getPrivateMethods = function ( ) { return { addCommandToHistory : Ga , setGradient : ic , addSvgElementFromJson : da , assignAttributes : ma , BatchCommand : La , call : I , ChangeElementCommand : Wa , copyElem : Z , ffClone : Ma , findDefs : ub , findDuplicateGradient : dc , getElem : la , getId : ta , getIntersectionList : Kb , getMouseTarget : $b , getNextId : M ,
getPathBBox : U , getUrlFromAttr : pa , hasMatrixTransform : sa , identifyLayers : Wb , InsertElementCommand : Ka , isIdentity : svgedit . math . isIdentity , logMatrix : tb , matrixMultiply : fa , MoveElementCommand : Qa , preventClickDefault : Zb , recalculateAllSelectedDimensions : Xa , recalculateDimensions : pb , remapElement : xb , RemoveElementCommand : Ua , removeUnusedDefElems : gc , round : Cb , runExtensions : ob , sanitizeSvg : Ia , SVGEditTransformList : svgedit . transformlist . SVGTransformList , toString : toString , transformBox : svgedit . math . transformBox , transformListToTransform : ja ,
transformPoint : O , walkTree : svgedit . utilities . walkTree } } } ; ( function ( ) { document . addEventListener ( "touchstart" , touchHandler , true ) ; document . addEventListener ( "touchmove" , touchHandler , true ) ; document . addEventListener ( "touchend" , touchHandler , true ) ; document . addEventListener ( "touchcancel" , touchHandler , true ) ; if ( ! window . svgEditor ) window . svgEditor = function ( a ) { function n ( z , o ) { var L = f . setSvgString ( z ) !== false ; o = o || a . noop ; L ? o ( true ) : a . alert ( e . notification . errorLoadingSVG , function ( ) { o ( false ) } ) } var f , c = { } , m = false , p = { lang : "en" , iconsize : "m" , bkgd _color : "FFF" , bkgd _url : "" , img _save : "embed" } ,
2012-06-25 02:14:52 +00:00
b = { } , d = { canvas _expansion : 1 , dimensions : [ 640 , 480 ] , initFill : { color : "fff" , opacity : 1 } , initStroke : { width : 1.5 , color : "000" , opacity : 1 } , initOpacity : 1 , imgPath : "images/" , langPath : "locale/" , extPath : "extensions/" , jGraduatePath : "jgraduate/images/" , extensions : [ "ext-markers.js" , "ext-eyedropper.js" , "ext-shapes.js" , "ext-grid.js" ] , initTool : "select" , wireframe : false , colorPickerCSS : false , gridSnapping : false , gridColor : "#000" , baseUnit : "px" , snappingStep : 10 , showRulers : true , show _outside _canvas : false , no _save _warning : true } , e = c . uiStrings =
{ common : { ok : "OK" , cancel : "Cancel" , key _up : "Up" , key _down : "Down" , key _backspace : "Backspace" , key _del : "Del" } , layers : { layer : "Layer" } , notification : { invalidAttrValGiven : "Invalid value given" , noContentToFitTo : "No content to fit to" , dupeLayerName : "There is already a layer named that!" , enterUniqueLayerName : "Please enter a unique layer name" , enterNewLayerName : "Please enter the new layer name" , layerHasThatName : "Layer already has that name" , QmoveElemsToLayer : 'Move selected elements to layer "%s"?' , QwantToClear : "Do you want to clear the drawing?\nThis will also erase your undo history!" ,
2012-06-23 19:40:40 +00:00
QwantToOpen : "Do you want to open a new file?\nThis will also erase your undo history!" , QerrorsRevertToSource : "There were parsing errors in your SVG source.\nRevert back to original SVG source?" , QignoreSourceChanges : "Ignore changes made to SVG source?" , featNotSupported : "Feature not supported" , enterNewImgURL : "Enter the new image URL" , defsFailOnSave : "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved." , loadingImage : "Loading image, please wait..." ,
saveFromBrowser : 'Select "Save As..." in your browser to save this image as a %s file.' , noteTheseIssues : "Also note the following issues: " , unsavedChanges : "There are unsaved changes." , enterNewLinkURL : "Enter the new hyperlink URL" , errorLoadingSVG : "Error: Unable to load SVG data" , URLloadFail : "Unable to load from URL" , retrieving : 'Retrieving "%s" ...' } } ; b = { } ; var l = { } ; c . curConfig = d ; c . tool _scale = 1 ; a . pref = function ( z , o ) { if ( o ) b [ z ] = o ; z = "svg-edit-" + z ; var L = location . hostname , T = L && L . indexOf ( "." ) >= 0 , N = o != undefined ,
J = false ; try { if ( window . localStorage ) J = localStorage } catch ( da ) { } try { if ( window . globalStorage && T ) J = globalStorage [ L ] } catch ( V ) { } if ( J ) if ( N ) J . setItem ( z , o ) ; else { if ( J . getItem ( z ) ) return J . getItem ( z ) + "" } else if ( window . widget ) if ( N ) widget . setPreferenceForKey ( o , z ) ; else return widget . preferenceForKey ( z ) ; else if ( N ) { L = new Date ; L . setTime ( L . getTime ( ) + 31536E6 ) ; o = encodeURIComponent ( o ) ; document . cookie = z + "=" + o + "; expires=" + L . toUTCString ( ) } else return ( L = document . cookie . match ( RegExp ( z + "=([^;]+)" ) ) ) ? decodeURIComponent ( L [ 1 ] ) :
"" } ; c . setConfig = function ( z ) { a . each ( z , function ( o , L ) { o in p && a . pref ( o , L ) } ) ; a . extend ( true , d , z ) ; if ( z . extensions ) d . extensions = z . extensions } ; c . setCustomHandlers = function ( z ) { c . ready ( function ( ) { if ( z . open ) { a ( '#tool_open > input[type="file"]' ) . remove ( ) ; a ( "#tool_open" ) . show ( ) ; f . open = z . open } if ( z . save ) { c . show _save _warning = false ; f . bind ( "saved" , z . save ) } z . pngsave && f . bind ( "exported" , z . pngsave ) ; l = z } ) } ; c . randomizeIds = function ( ) { f . randomizeIds ( arguments ) } ; c . init = function ( ) { function z ( q , B ) { var K = q . id , Q = K . split ( "_" ) , W =
Q [ 0 ] ; Q = Q [ 1 ] ; B && f . setStrokeAttr ( "stroke-" + W , Q ) ; cb ( ) ; H ( "#cur_" + W , K , 20 ) ; a ( q ) . addClass ( "current" ) . siblings ( ) . removeClass ( "current" ) } function o ( q , B ) { a . pref ( "bkgd_color" , q ) ; a . pref ( "bkgd_url" , B ) ; f . setBackground ( q , B ) } function L ( ) { var q = f . getHref ( Y ) ; q = q . indexOf ( "data:" ) === 0 ? "" : q ; a . prompt ( e . notification . enterNewImgURL , q , function ( B ) { B && Ja ( B ) } ) } function T ( ) { if ( f . deleteCurrentLayer ( ) ) { Za ( ) ; Eb ( ) ; a ( "#layerlist tr.layer" ) . removeClass ( "layersel" ) ; a ( "#layerlist tr.layer:first" ) . addClass ( "layersel" ) } } function N ( ) { var q =
f . getCurrentDrawing ( ) . getCurrentLayerName ( ) + " copy" ; a . prompt ( e . notification . enterUniqueLayerName , q , function ( B ) { if ( B ) if ( f . getCurrentDrawing ( ) . hasLayer ( B ) ) a . alert ( e . notification . dupeLayerName ) ; else { f . cloneLayer ( B ) ; Za ( ) ; Eb ( ) } } ) } function J ( q ) { var B = a ( "#layerlist tr.layersel" ) . index ( ) , K = f . getCurrentDrawing ( ) . getNumLayers ( ) ; if ( B > 0 || B < K - 1 ) { B += q ; f . setCurrentLayerPosition ( K - B - 1 ) ; Eb ( ) } } function da ( q , B ) { var K = document . getElementById ( "ruler_x_cursor" ) , Q = document . getElementById ( "ruler_y_cursor" ) , W = document . getElementById ( "workarea" ) ,
ia = document . getElementById ( "title_show" ) ; a ( "#workarea" ) . unbind ( "mousemove.rulers" ) . bind ( "mousemove.rulers" , function ( Xb ) { Xb . stopPropagation ( ) ; K . style . left = Xb . pageX - 66 + W . scrollLeft + "px" ; Q . style . top = Xb . pageY - 48 + W . scrollTop + "px" ; Xb = Xb . target . getAttribute ( "title" ) ; typeof Xb != "undefined" && Xb && ia . innerHTML ( Xb ) } ) ; B || ( B = f . getZoom ( ) ) ; q || ( q = a ( "#svgcanvas" ) ) ; for ( var va = f . getContentElem ( ) , ya = svgedit . units . getTypeMap ( ) [ d . baseUnit ] , Da = 0 ; Da < 2 ; Da ++ ) { var Ha = Da === 0 , Aa = Ha ? "x" : "y" , fb = Ha ? "width" : "height" , gb = va . getAttribute ( Aa ) -
0 ; Aa = a ( "#ruler_" + Aa + " canvas:first" ) ; $hcanv = Aa . clone ( ) ; Aa . replaceWith ( $hcanv ) ; var ga = $hcanv [ 0 ] ; var zb = Aa = q [ fb ] ( ) * 2 ; ga . parentNode . style [ fb ] = zb + "px" ; var hb = 0 , Ta , Pa = ga . getContext ( "2d" ) ; Pa . fillStyle = "rgb(200,0,0)" ; Pa . fillRect ( 0 , 0 , ga . width , ga . height ) ; $hcanv . siblings ( ) . remove ( ) ; if ( Aa >= 3E4 ) { var Ya = parseInt ( Aa / 3E4 ) + 1 ; Ta = Array ( Ya ) ; Ta [ 0 ] = Pa ; for ( var Ba = 1 ; Ba < Ya ; Ba ++ ) { ga [ fb ] = 3E4 ; var ib = ga . cloneNode ( true ) ; ga . parentNode . appendChild ( ib ) ; Ta [ Ba ] = ib . getContext ( "2d" ) } ib [ fb ] = Aa % 3E4 ; Aa = 3E4 } ga [ fb ] = Aa ; fb = ya * B ; var sb = 50 /
fb ; ga = 1 ; for ( Ba = 0 ; Ba < jc . length ; Ba ++ ) { ga = Ya = jc [ Ba ] ; if ( sb <= Ya ) break } sb = ga * fb ; Pa . font = "normal 9px 'Lucida Grande', sans-serif" ; Pa . fillStyle = "#777" ; for ( var Fb = gb / fb % ga * fb , Yb = Fb - sb ; Fb < zb ; Fb += sb ) { Yb += sb ; Ba = Math . round ( Fb ) + 0.5 ; if ( Ha ) { Pa . moveTo ( Ba , 15 ) ; Pa . lineTo ( Ba , 0 ) } else { Pa . moveTo ( 15 , Ba ) ; Pa . lineTo ( 0 , Ba ) } Ya = ( Yb - gb ) / fb ; if ( ga >= 1 ) Ba = Math . round ( Ya ) ; else { Ba = ( ga + "" ) . split ( "." ) [ 1 ] . length ; Ba = Ya . toFixed ( Ba ) - 0 } if ( Ba !== 0 && Ba !== 1E3 && Ba % 1E3 === 0 ) Ba = Ba / 1E3 + "K" ; if ( Ha ) { Pa . fillText ( Ba , Fb + 2 , 8 ) ; Pa . fillStyle = "#777" } else { Ya = ( Ba +
"" ) . split ( "" ) ; for ( Ba = 0 ; Ba < Ya . length ; Ba ++ ) { Pa . fillText ( Ya [ Ba ] , 1 , Fb + 9 + Ba * 9 ) ; Pa . fillStyle = "#777" } } Ya = sb / 10 ; for ( Ba = 1 ; Ba < 10 ; Ba ++ ) { var Mb = Math . round ( Fb + Ya * Ba ) + 0.5 ; if ( Ta && Mb > Aa ) { hb ++ ; Pa . stroke ( ) ; if ( hb >= Ta . length ) { Ba = 10 ; Fb = zb ; continue } Pa = Ta [ hb ] ; Fb -= 3E4 ; Mb = Math . round ( Fb + Ya * Ba ) + 0.5 } var qc = Ba % 2 ? 12 : 10 ; if ( Ha ) { Pa . moveTo ( Mb , 15 ) ; Pa . lineTo ( Mb , qc ) } else { Pa . moveTo ( 15 , Mb ) ; Pa . lineTo ( qc , Mb ) } } } Pa . strokeStyle = "#666" ; Pa . stroke ( ) } } ( function ( ) { var q = window . opener ; if ( q ) try { var B = q . document . createEvent ( "Event" ) ; B . initEvent ( "svgEditorReady" ,
true , true ) ; q . document . documentElement . dispatchEvent ( B ) } catch ( K ) { } } ) ( ) ; ( function ( ) { var q = a . deparam . querystring ( true ) ; if ( ! a . isEmptyObject ( q ) ) { if ( q . dimensions ) q . dimensions = q . dimensions . split ( "," ) ; if ( q . extensions ) q . extensions = q . extensions . split ( "," ) ; if ( q . bkgd _color ) q . bkgd _color = "#" + q . bkgd _color ; svgEditor . setConfig ( q ) ; var B = q . source , K = a . param . querystring ( ) ; if ( ! B ) if ( K . indexOf ( "source=data:" ) >= 0 ) B = K . match ( /source=(data:[^&]*)/ ) [ 1 ] ; if ( B ) if ( B . indexOf ( "data:" ) === 0 ) { B = B . replace ( / /g , "+" ) ; c . loadFromDataURI ( B ) } else c . loadFromString ( B ) ;
else if ( K . indexOf ( "paramurl=" ) !== - 1 ) svgEditor . loadFromURL ( K . substr ( 9 ) ) ; else q . url && svgEditor . loadFromURL ( q . url ) } } ) ( ) ; var V = function ( ) { a . each ( d . extensions , function ( ) { var B = this ; a . getScript ( d . extPath + B , function ( K ) { if ( ! K ) { K = document . createElement ( "script" ) ; K . src = d . extPath + B ; document . querySelector ( "head" ) . appendChild ( K ) } } ) } ) ; var q = [ ] ; a ( "#lang_select option" ) . each ( function ( ) { q . push ( this . value ) } ) ; c . putLocale ( null , q ) } ; document . location . protocol === "file:" ? setTimeout ( V , 100 ) : V ( ) ; a . svgIcons ( d . imgPath + "svg_edit_icons.svg" ,
{ w : 24 , h : 24 , id _match : false , no _img : ! svgedit . browser . isWebkit ( ) , fallback _path : d . imgPath , fallback : { new _image : "clear.png" , save : "save.png" , open : "open.png" , source : "source.png" , docprops : "document-properties.png" , wireframe : "wireframe.png" , undo : "undo.png" , redo : "redo.png" , select : "select.png" , select _node : "select_node.png" , pencil : "fhpath.png" , pen : "line.png" , square : "square.png" , rect : "rect.png" , fh _rect : "freehand-square.png" , circle : "circle.png" , ellipse : "ellipse.png" , fh _ellipse : "freehand-circle.png" , path : "path.png" ,
text : "text.png" , image : "image.png" , zoom : "zoom.png" , clone : "clone.png" , node _clone : "node_clone.png" , "delete" : "delete.png" , node _delete : "node_delete.png" , move _top : "move_top.png" , move _bottom : "move_bottom.png" , to _path : "to_path.png" , link _controls : "link_controls.png" , reorient : "reorient.png" , align _left : "align-left.png" , align _center : "align-center" , align _right : "align-right" , align _top : "align-top" , align _middle : "align-middle" , align _bottom : "align-bottom" , go _up : "go-up.png" , go _down : "go-down.png" , ok : "save.png" , cancel : "cancel.png" ,
arrow _right : "flyouth.png" , arrow _down : "dropdown.gif" } , placement : { "#tool_docprops > div" : "docprops" , "#tool_select" : "select" , "#tool_fhpath" : "pencil" , "#tool_line" : "pen" , "#tool_rect,#tools_rect_show" : "rect" , "#tool_square" : "square" , "#tool_fhrect" : "fh_rect" , "#tool_ellipse,#tools_ellipse_show" : "ellipse" , "#tool_circle" : "circle" , "#tool_fhellipse" : "fh_ellipse" , "#tool_path" : "path" , "#tool_text,#layer_rename" : "text" , "#tool_image" : "image" , "#tool_zoom" : "zoom" , "#tool_node_clone" : "node_clone" , "#tool_node_delete" : "node_delete" ,
"#tool_add_subpath" : "add_subpath" , "#tool_openclose_path" : "open_path" , "#tool_alignleft, #tool_posleft" : "align_left" , "#tool_aligncenter, #tool_poscenter" : "align_center" , "#tool_alignright, #tool_posright" : "align_right" , "#tool_aligntop, #tool_postop" : "align_top" , "#tool_alignmiddle, #tool_posmiddle" : "align_middle" , "#tool_alignbottom, #tool_posbottom" : "align_bottom" , "#cur_position" : "align" , "#linecap_butt,#cur_linecap" : "linecap_butt" , "#linecap_round" : "linecap_round" , "#linecap_square" : "linecap_square" , "#linejoin_miter,#cur_linejoin" : "linejoin_miter" ,
"#linejoin_round" : "linejoin_round" , "#linejoin_bevel" : "linejoin_bevel" , "#url_notice" : "warning" , "#layer_up" : "go_up" , "#layer_down" : "go_down" , "#layer_moreopts" : "context_menu" , "#layerlist td.layervis" : "eye" , "#tool_source_save,#tool_docprops_save,#tool_prefs_save" : "ok" , "#tool_source_cancel,#tool_docprops_cancel,#tool_prefs_cancel" : "cancel" , "#rwidthLabel, #iwidthLabel" : "width" , "#rheightLabel, #iheightLabel" : "height" , "#angleLabel" : "angle" , "#linkLabel,#tool_make_link,#tool_make_link_multi" : "globe_link" , "#zoomLabel" : "zoom" ,
"#blurLabel" : "blur" , ".flyout_arrow_horiz" : "arrow_right" , "#palette .palette_item:first, #fill_bg, #stroke_bg" : "no_color" } , resize : { "#logo .svg_icon" : 32 , ".flyout_arrow_horiz .svg_icon" : 5 , ".layer_button .svg_icon, #layerlist td.layervis .svg_icon" : 14 , "#main_button .dropdown .svg_icon" : 9 , "#fill_bg .svg_icon, #stroke_bg .svg_icon" : 24 , ".palette_item:first .svg_icon" : 16 , ".toolbar_button button .svg_icon" : 16 , ".stroke_tool div div .svg_icon" : 20 , "#tools_bottom label .svg_icon" : 18 , "#zoom_dropdown .svg_icon" : 7 } ,
callback : function ( ) { a ( ".toolbar_button button > svg, .toolbar_button button > img" ) . each ( function ( ) { a ( this ) . parent ( ) . prepend ( this ) } ) ; var q = a ( "#tools_left" ) ; if ( q . length != 0 ) { q . offset ( ) ; q . outerHeight ( ) } a ( ".tools_flyout" ) . each ( function ( ) { var B = a ( "#" + this . id + "_show" ) , K = B . attr ( "data-curopt" ) ; if ( ! B . children ( "svg, img" ) . length ) { K = a ( K ) . children ( ) . clone ( ) ; if ( K . length ) { K [ 0 ] . removeAttribute ( "style" ) ; B . append ( K ) } } } ) ; svgEditor . runCallbacks ( ) ; setTimeout ( function ( ) { a ( ".flyout_arrow_horiz:empty" ) . each ( function ( ) { a ( this ) . append ( a . getSvgIcon ( "arrow_right" ) . width ( 5 ) . height ( 5 ) ) } ) } ,
1 ) } } ) ; c . canvas = f = new a . SvgCanvas ( document . getElementById ( "svgcanvas" ) , d ) ; c . show _save _warning = false ; V = navigator . platform . indexOf ( "Mac" ) >= 0 ; var O = navigator . userAgent . indexOf ( "AppleWebKit" ) >= 0 , fa = V ? "meta+" : "ctrl+" , sa = f . pathActions , ja = f . undoMgr , ca = svgedit . utilities , ea = d . imgPath + "placeholder.svg" , qa = a ( "#workarea" ) , pa = a ( "#cmenu_canvas" ) ; a ( "#cmenu_layers" ) ; var ba = null , S = 1 , U = "toolbars" , ra = "" , la = { fill : null , stroke : null } ; ( function ( ) { a ( "#dialog_container" ) . draggable ( { cancel : "#dialog_content, #dialog_buttons *" ,
containment : "window" } ) ; var q = a ( "#dialog_box" ) , B = a ( "#dialog_buttons" ) , K = function ( Q , W , ia , va ) { a ( "#dialog_content" ) . html ( "<p>" + W . replace ( /\n/g , "</p><p>" ) + "</p>" ) . toggleClass ( "prompt" , Q == "prompt" ) ; B . empty ( ) ; var ya = a ( '<input type="button" value="' + e . common . ok + '">' ) . appendTo ( B ) ; Q != "alert" && a ( '<input type="button" value="' + e . common . cancel + '">' ) . appendTo ( B ) . click ( function ( ) { q . hide ( ) ; ia ( false ) } ) ; if ( Q == "prompt" ) { var Da = a ( '<input type="text">' ) . prependTo ( B ) ; Da . val ( va || "" ) ; Da . bind ( "keydown" , "return" , function ( ) { ya . click ( ) } ) } Q ==
"process" && ya . hide ( ) ; q . show ( ) ; ya . click ( function ( ) { q . hide ( ) ; var Ha = Q == "prompt" ? Da . val ( ) : true ; ia && ia ( Ha ) } ) . focus ( ) ; Q == "prompt" && Da . focus ( ) } ; a . alert = function ( Q , W ) { K ( "alert" , Q , W ) } ; a . confirm = function ( Q , W ) { K ( "confirm" , Q , W ) } ; a . process _cancel = function ( Q , W ) { K ( "process" , Q , W ) } ; a . prompt = function ( Q , W , ia ) { K ( "prompt" , Q , ia , W ) } } ) ( ) ; var ma = function ( ) { var q = a ( ".tool_button_current" ) ; if ( q . length && q [ 0 ] . id !== "tool_select" ) { q . removeClass ( "tool_button_current" ) . addClass ( "tool_button" ) ; a ( "#tool_select" ) . addClass ( "tool_button_current" ) . removeClass ( "tool_button" ) ;
a ( "#styleoverrides" ) . text ( "#svgcanvas svg *{cursor:move;pointer-events:all} #svgcanvas svg{cursor:default}" ) } f . setMode ( "select" ) } , Y = null , za = false , Ia = false , Qa = false , Ka = false , Ua = "" , Wa = a ( "title:first" ) . text ( ) , La = function ( q , B , K ) { f . getResolution ( ) ; a ( "#svgcanvas" ) . position ( ) ; if ( B = f . setBBoxZoom ( B , qa . width ( ) - 15 , qa . height ( ) - 15 ) ) { q = B . zoom ; B = B . bbox ; if ( q < 0.0010 ) Na ( { value : 0.1 } ) ; else { a ( "#zoom" ) . val ( q * 100 ) ; K ? Tb ( ) : Tb ( false , { x : B . x * q + B . width * q / 2 , y : B . y * q + B . height * q / 2 } ) ; f . getMode ( ) == "zoom" && B . width && ma ( ) ; t ( ) } } } ; a ( "#cur_context_panel" ) . delegate ( "a" ,
"click" , function ( ) { var q = a ( this ) ; q . attr ( "data-root" ) ? f . leaveContext ( ) : f . setContext ( q . text ( ) ) ; return false } ) ; var Ga = { } , Oa = function ( q ) { a . each ( q , function ( B , K ) { var Q = a ( B ) . children ( ) , W = B + "_show" , ia = a ( W ) , va = false ; Q . addClass ( "tool_button" ) . unbind ( "click mousedown mouseup" ) . each ( function ( Ha ) { var Aa = K [ Ha ] ; Ga [ Aa . sel ] = Aa . fn ; if ( Aa . isDefault ) va = Ha ; Ha = function ( fb ) { var gb = Aa ; if ( fb . type === "keydown" ) { var ga = a ( gb . parent + "_show" ) . hasClass ( "tool_button_current" ) , zb = a ( gb . parent + "_show" ) . attr ( "data-curopt" ) ; a . each ( q [ Aa . parent ] ,
function ( Ta , Pa ) { if ( Pa . sel == zb ) gb = ! fb . shiftKey || ! ga ? Pa : q [ Aa . parent ] [ Ta + 1 ] || q [ Aa . parent ] [ 0 ] } ) } if ( a ( this ) . hasClass ( "disabled" ) ) return false ; kb ( W ) && gb . fn ( ) ; var hb = gb . icon ? a . getSvgIcon ( gb . icon , true ) : a ( gb . sel ) . children ( ) . eq ( 0 ) . clone ( ) ; hb [ 0 ] . setAttribute ( "width" , ia . width ( ) ) ; hb [ 0 ] . setAttribute ( "height" , ia . height ( ) ) ; ia . children ( ":not(.flyout_arrow_horiz)" ) . remove ( ) ; ia . append ( hb ) . attr ( "data-curopt" , gb . sel ) } ; a ( this ) . mouseup ( Ha ) ; Aa . key && a ( document ) . bind ( "keydown" , Aa . key [ 0 ] + " shift+" + Aa . key [ 0 ] , Ha ) } ) ; if ( va ) ia . attr ( "data-curopt" ,
K [ va ] . sel ) ; else ia . attr ( "data-curopt" ) || ia . attr ( "data-curopt" , K [ 0 ] . sel ) ; var ya , Da = a ( W ) . position ( ) ; a ( B ) . css ( { left : Da . left + 34 , top : Da . top + 77 } ) ; ia . mousedown ( function ( Ha ) { a ( "#tools_shapelib" ) . is ( ":visible" ) && kb ( W , false ) ; if ( ia . hasClass ( "disabled" ) ) return false ; var Aa = a ( B ) , fb = Da . left + 34 , gb = Aa . width ( ) * - 1 , ga = Aa . data ( "shown_popop" ) ? 200 : 0 ; ya = setTimeout ( function ( ) { ia . data ( "isLibrary" ) ? Aa . css ( "left" , fb ) . show ( ) : Aa . css ( "left" , gb ) . show ( ) . animate ( { left : fb } , 150 ) ; Aa . data ( "shown_popop" , true ) } , ga ) ; Ha . preventDefault ( ) } ) . mouseup ( function ( ) { clearTimeout ( ya ) ;
var Ha = a ( this ) . attr ( "data-curopt" ) ; if ( ia . data ( "isLibrary" ) && a ( W . replace ( "_show" , "" ) ) . is ( ":visible" ) ) kb ( W , true ) ; else kb ( W ) && Ha in Ga && Ga [ Ha ] ( ) } ) } ) ; Nb ( ) } , Fa = function ( q , B ) { return a ( "<div>" , { "class" : "tools_flyout" , id : q } ) . appendTo ( "#svg_editor" ) . append ( B ) } , Gb = function ( ) { a ( ".tools_flyout" ) . each ( function ( ) { var q = a ( "#" + this . id + "_show" ) , B = q . offset ( ) ; q = q . outerWidth ( ) ; a ( this ) . css ( { left : ( B . left + q ) * S , top : B . top } ) } ) } , Nb = function ( ) { a ( ".tools_flyout" ) . each ( function ( ) { var q = a ( "#" + this . id + "_show" ) ; if ( ! q . data ( "isLibrary" ) ) { var B =
[ ] ; a ( this ) . children ( ) . each ( function ( ) { B . push ( this . title ) } ) ; q [ 0 ] . title = B . join ( " / " ) } } ) } , lb , ab = function ( q , B , K ) { var Q = null ; if ( q . indexOf ( "url(#" ) === 0 ) { q = ( q = f . getRefElem ( q ) ) ? q . cloneNode ( true ) : a ( "#" + K + "_color defs *" ) [ 0 ] ; Q = { alpha : B } ; Q [ q . tagName ] = q } else Q = q . indexOf ( "#" ) === 0 ? { alpha : B , solidColor : q . substr ( 1 ) } : { alpha : B , solidColor : "none" } ; return new a . jGraduate . Paint ( Q ) } , Sa = f . getResolution ( ) ; if ( d . baseUnit !== "px" ) { Sa . w = svgedit . units . convertUnit ( Sa . w ) + d . baseUnit ; Sa . h = svgedit . units . convertUnit ( Sa . h ) + d . baseUnit } a ( ".canvas_width" ) . val ( Sa . w ) ;
a ( ".canvas_height" ) . val ( Sa . h ) ; a ( "#docprops_button" ) . on ( "click" , function ( ) { w ( ) } ) ; var Ja = c . setImageURL = function ( q ) { q || ( q = ea ) ; f . setImageURL ( q ) ; a ( "#image_url" ) . val ( q ) ; if ( q . indexOf ( "data:" ) === 0 ) { a ( "#image_url" ) . hide ( ) ; a ( "#change_image_url" ) . show ( ) } else { f . embedImage ( q , function ( B ) { B ? a ( "#url_notice" ) . hide ( ) : a ( "#url_notice" ) . show ( ) ; ea = q } ) ; a ( "#image_url" ) . show ( ) ; a ( "#change_image_url" ) . hide ( ) } } , Ea = function ( q ) { var B = Math . min ( Math . max ( 12 + q . value . length * 6 , 50 ) , 300 ) ; a ( q ) . width ( B ) } , Za = function ( ) { var q = Y ; if ( q != null &&
! q . parentNode ) q = null ; var B = f . getCurrentDrawing ( ) . getCurrentLayerName ( ) , K = f . getMode ( ) , Q = d . baseUnit !== "px" ? d . baseUnit : null , W = K == "pathedit" , ia = a ( "#cmenu_canvas li" ) ; a ( "#selected_panel, #multiselected_panel, #g_panel, #path_panel, #rect_panel, #canvas_panel, #circle_panel,\t\t\t\t\t#ellipse_panel, #line_panel, #text_panel, #image_panel, #container_panel, #use_panel, #a_panel" ) . hide ( ) ; a ( ".menu_item" , "#edit_menu" ) . addClass ( "disabled" ) ; a ( ".menu_item" , "#object_menu" ) . addClass ( "disabled" ) ; ! q && ! za && a ( "#canvas_panel" ) . show ( ) ;
if ( q != null ) { var va = q . nodeName , ya = f . getRotationAngle ( q ) ; a ( "#angle" ) . val ( Math . round ( ya ) ) ; ya = f . getBlur ( q ) ; a ( "#blur" ) . val ( ya ) ; a ( "#blur_slider" ) . slider ( "option" , "value" , ya ) ; f . addedNew && va === "image" && f . getHref ( q ) . indexOf ( "data:" ) !== 0 && L ( ) ; if ( ! W && K != "pathedit" ) { a ( "#selected_panel" ) . show ( ) ; a ( ".action_selected" ) . removeClass ( "disabled" ) ; if ( [ "line" , "circle" , "ellipse" ] . indexOf ( va ) >= 0 ) a ( "#xy_panel" ) . hide ( ) ; else { var Da , Ha ; if ( [ "g" , "polyline" , "path" ] . indexOf ( va ) >= 0 ) { if ( K = f . getStrokedBBox ( [ q ] ) ) { Da = K . x ; Ha = K . y } } else { Da =
q . getAttribute ( "x" ) ; Ha = q . getAttribute ( "y" ) } if ( Q ) { Da = svgedit . units . convertUnit ( Da ) ; Ha = svgedit . units . convertUnit ( Ha ) } a ( "#selected_x" ) . val ( Da || 0 ) ; a ( "#selected_y" ) . val ( Ha || 0 ) ; a ( "#xy_panel" ) . show ( ) } [ "image" , "text" , "path" , "g" , "use" ] . indexOf ( va ) == - 1 && a ( ".action_path_convert_selected" ) . removeClass ( "disabled" ) ; va === "path" && a ( ".action_path_selected" ) . removeClass ( "disabled" ) } else { B = sa . getNodePoint ( ) ; a ( "#tool_add_subpath" ) . removeClass ( "push_button_pressed" ) . addClass ( "tool_button" ) ; a ( "#tool_node_delete" ) . toggleClass ( "disabled" ,
! sa . canDeleteNodes ) ; H ( "#tool_openclose_path" , sa . closed _subpath ? "open_path" : "close_path" ) ; if ( B ) { W = a ( "#seg_type" ) ; if ( Q ) { B . x = svgedit . units . convertUnit ( B . x ) ; B . y = svgedit . units . convertUnit ( B . y ) } a ( "#path_node_x" ) . val ( B . x ) ; a ( "#path_node_y" ) . val ( B . y ) ; B . type ? W . val ( B . type ) . removeAttr ( "disabled" ) : W . val ( 4 ) . attr ( "disabled" , "disabled" ) } return } Q = { g : [ ] , a : [ ] , rect : [ "rx" , "width" , "height" ] , image : [ "width" , "height" ] , circle : [ "cx" , "cy" , "r" ] , ellipse : [ "cx" , "cy" , "rx" , "ry" ] , line : [ "x1" , "y1" , "x2" , "y2" ] , text : [ ] , use : [ ] } ; var Aa = q . tagName ;
a ( q ) . data ( "gsvg" ) && a ( "#g_panel" ) . show ( ) ; Aa == "path" && a ( "#path_panel" ) . show ( ) ; if ( Q [ Aa ] ) { Q = Q [ Aa ] ; a ( "#" + Aa + "_panel" ) . show ( ) ; a . each ( Q , function ( fb , gb ) { var ga = q . getAttribute ( gb ) ; if ( d . baseUnit !== "px" && q [ gb ] ) ga = svgedit . units . convertUnit ( q [ gb ] . baseVal . value ) ; a ( "#" + Aa + "_" + gb ) . val ( ga || 0 ) } ) ; if ( Aa == "text" ) { a ( "#text_panel" ) . css ( "display" , "inline" ) ; f . getItalic ( ) ? a ( "#tool_italic" ) . addClass ( "push_button_pressed" ) . removeClass ( "tool_button" ) : a ( "#tool_italic" ) . removeClass ( "push_button_pressed" ) . addClass ( "tool_button" ) ;
f . getBold ( ) ? a ( "#tool_bold" ) . addClass ( "push_button_pressed" ) . removeClass ( "tool_button" ) : a ( "#tool_bold" ) . removeClass ( "push_button_pressed" ) . addClass ( "tool_button" ) ; a ( "#font_family" ) . val ( q . getAttribute ( "font-family" ) ) ; a ( "#font_size" ) . val ( q . getAttribute ( "font-size" ) ) ; a ( "#text" ) . val ( q . textContent ) ; f . addedNew && setTimeout ( function ( ) { a ( "#text" ) . focus ( ) . select ( ) } , 100 ) } else if ( Aa == "image" ) Ja ( f . getHref ( q ) ) ; else if ( Aa === "g" || Aa === "use" ) { a ( "#container_panel" ) . show ( ) ; a ( ".action_group_selected" ) . removeClass ( "disabled" ) ;
Q = f . getTitle ( ) ; va = a ( "#g_title" ) [ 0 ] ; va . value = Q ; Ea ( va ) ; Aa == "use" ? va . setAttribute ( "disabled" , "disabled" ) : va . removeAttribute ( "disabled" ) } } ia [ ( Aa === "g" ? "en" : "dis" ) + "ableContextMenuItems" ] ( "#ungroup" ) ; ia [ ( Aa === "g" || ! za ? "dis" : "en" ) + "ableContextMenuItems" ] ( "#group" ) } else if ( za ) { a ( "#multiselected_panel" ) . show ( ) ; a ( ".action_multi_selected" ) . removeClass ( "disabled" ) ; ia . enableContextMenuItems ( "#group" ) . disableContextMenuItems ( "#ungroup" ) } else ia . disableContextMenuItems ( "#delete,#cut,#copy,#group,#ungroup,#move_front,#move_up,#move_down,#move_back" ) ;
ja . getUndoStackSize ( ) > 0 ? a ( "#tool_undo" ) . removeClass ( "disabled" ) : a ( "#tool_undo" ) . addClass ( "disabled" ) ; ja . getRedoStackSize ( ) > 0 ? a ( "#tool_redo" ) . removeClass ( "disabled" ) : a ( "#tool_redo" ) . addClass ( "disabled" ) ; f . addedNew = false ; if ( q && ! W || za ) { a ( "#selLayerNames" ) . removeAttr ( "disabled" ) . val ( B ) ; pa . enableContextMenuItems ( "#delete,#cut,#copy,#move_front,#move_up,#move_down,#move_back" ) } else a ( "#selLayerNames" ) . attr ( "disabled" , "disabled" ) } ; a ( "#text" ) . focus ( function ( ) { } ) ; a ( "#text" ) . blur ( function ( ) { } ) ; f . bind ( "selected" ,
function ( q , B ) { var K = f . getMode ( ) ; K === "select" && ma ( ) ; K = K == "pathedit" ; Y = B . length == 1 || B [ 1 ] == null ? B [ 0 ] : null ; za = B . length >= 2 && B [ 1 ] != null ; if ( Y != null ) if ( ! K ) { if ( Y != null ) switch ( Y . tagName ) { case "use" : case "image" : case "foreignObject" : break ; case "g" : case "a" : for ( var Q = null , W = Y . getElementsByTagName ( "*" ) , ia = 0 , va = W . length ; ia < va ; ia ++ ) { var ya = W [ ia ] . getAttribute ( "stroke-width" ) ; if ( ia === 0 ) Q = ya ; else if ( Q !== ya ) Q = null } a ( "#stroke_width" ) . val ( Q === null ? "" : Q ) ; la . fill . update ( true ) ; la . stroke . update ( true ) ; break ; default : la . fill . update ( true ) ;
la . stroke . update ( true ) ; a ( "#stroke_width" ) . val ( Y . getAttribute ( "stroke-width" ) || 1 ) ; a ( "#stroke_style" ) . val ( Y . getAttribute ( "stroke-dasharray" ) || "none" ) ; Q = Y . getAttribute ( "stroke-linejoin" ) || "miter" ; a ( "#linejoin_" + Q ) . length != 0 && z ( a ( "#linejoin_" + Q ) [ 0 ] ) ; Q = Y . getAttribute ( "stroke-linecap" ) || "butt" ; a ( "#linecap_" + Q ) . length != 0 && z ( a ( "#linecap_" + Q ) [ 0 ] ) } if ( Y != null ) { Q = ( Y . getAttribute ( "opacity" ) || 1 ) * 100 ; a ( "#group_opacity" ) . val ( Q ) ; a ( "#opac_slider" ) . slider ( "option" , "value" , Q ) ; a ( "#elem_id" ) . val ( Y . id ) } bc ( ) } a ( "#path_node_panel" ) . toggle ( K ) ;
a ( "#tools_bottom_2,#tools_bottom_3" ) . toggle ( ! K ) ; if ( K ) { a ( ".tool_button_current" ) . removeClass ( "tool_button_current" ) . addClass ( "tool_button" ) ; a ( "#tool_select" ) . addClass ( "tool_button_current" ) . removeClass ( "tool_button" ) ; H ( "#tool_select" , "select_node" ) ; za = false ; if ( B . length ) Y = B [ 0 ] } else H ( "#tool_select" , "select" ) ; Za ( ) ; f . runExtensions ( "selectedChanged" , { elems : B , selectedElement : Y , multiselected : za } ) } ) ; f . bind ( "transition" , function ( q , B ) { var K = f . getMode ( ) , Q = B [ 0 ] ; if ( Q ) { za = B . length >= 2 && B [ 1 ] != null ; if ( ! za ) switch ( K ) { case "rotate" : K =
f . getRotationAngle ( Q ) ; a ( "#angle" ) . val ( Math . round ( K ) ) ; a ( "#tool_reorient" ) . toggleClass ( "disabled" , K == 0 ) } f . runExtensions ( "elementTransition" , { elems : B } ) } } ) ; f . bind ( "changed" , function ( q , B ) { var K = f . getMode ( ) ; K === "select" && ma ( ) ; for ( var Q = 0 ; Q < B . length ; ++ Q ) { var W = B [ Q ] ; if ( W && W . tagName === "svg" ) { Eb ( ) ; Tb ( ) } else if ( W && Y && Y . parentNode == null ) Y = W } c . show _save _warning = true ; Za ( ) ; if ( Y && K === "select" ) { la . fill . update ( ) ; la . stroke . update ( ) } f . runExtensions ( "elementChanged" , { elems : B } ) } ) ; f . bind ( "saved" , function ( q , B ) { c . show _save _warning =
false ; B = '<?xml version="1.0"?>\n' + B ; var K = navigator . userAgent ; if ( ~ K . indexOf ( "Chrome" ) && a . browser . version >= 533 || ~ K . indexOf ( "MSIE" ) ) E ( 0 , true ) ; else { var Q = q . open ( "data:image/svg+xml;base64," + ca . encode64 ( B ) ) , W = a . pref ( "save_notice_done" ) ; if ( W !== "all" ) { var ia = e . notification . saveFromBrowser . replace ( "%s" , "SVG" ) ; if ( K . indexOf ( "Gecko/" ) !== - 1 ) if ( B . indexOf ( "<defs" ) !== - 1 ) { ia += "\n\n" + e . notification . defsFailOnSave ; a . pref ( "save_notice_done" , "all" ) ; W = "all" } else a . pref ( "save_notice_done" , "part" ) ; else a . pref ( "save_notice_done" ,
"all" ) ; W !== "part" && Q . alert ( ia ) } } } ) ; f . bind ( "exported" , function ( q , B ) { var K = B . issues ; a ( "#export_canvas" ) . length || a ( "<canvas>" , { id : "export_canvas" } ) . hide ( ) . appendTo ( "body" ) ; var Q = a ( "#export_canvas" ) [ 0 ] ; Q . width = f . contentW ; Q . height = f . contentH ; canvg ( Q , B . svg , { renderCallback : function ( ) { var W = Q . toDataURL ( "image/png" ) ; ba . location . href = W ; if ( a . pref ( "export_notice_done" ) !== "all" ) { W = e . notification . saveFromBrowser . replace ( "%s" , "PNG" ) ; if ( K . length ) W += "\n\n" + e . notification . noteTheseIssues + "\n \u2022 " + K . join ( "\n \u2022 " ) ;
a . pref ( "export_notice_done" , "all" ) ; ba . alert ( W ) } } } ) } ) ; f . bind ( "zoomed" , La ) ; f . bind ( "contextset" , function ( q , B ) { var K = "" ; if ( B ) { var Q = "" ; K = '<a href="#" data-root="y">' + f . getCurrentDrawing ( ) . getCurrentLayerName ( ) + "</a>" ; a ( B ) . parentsUntil ( "#svgcontent > g" ) . andSelf ( ) . each ( function ( ) { if ( this . id ) { Q += " > " + this . id ; K += this !== B ? ' > <a href="#">' + this . id + "</a>" : " > " + this . id } } ) ; Ua = Q } else Ua = null ; a ( "#cur_context_panel" ) . toggle ( ! ! B ) . html ( K ) ; C ( ) } ) ; f . bind ( "extension_added" , function ( q , B ) { function K ( ) { if ( lb ) { clearTimeout ( lb ) ;
lb = null } W || ( lb = setTimeout ( function ( ) { W = true ; aa ( b . iconsize ) } , 50 ) ) } var Q = false , W = false , ia = true , va = function ( ) { if ( B . callback && ! Q && ia ) { Q = true ; B . callback ( ) } } , ya = [ ] ; B . context _tools && a . each ( B . context _tools , function ( gb , ga ) { var zb = ga . container _id ? ' id="' + ga . container _id + '"' : "" , hb = a ( "#" + ga . panel ) ; hb . length || ( hb = a ( "<div>" , { id : ga . panel } ) . appendTo ( "#tools_top" ) ) ; switch ( ga . type ) { case "tool_button" : var Ta = '<div class="tool_button">' + ga . id + "</div>" , Pa = a ( Ta ) . appendTo ( hb ) ; ga . events && a . each ( ga . events , function ( ib , sb ) { a ( Pa ) . bind ( ib ,
sb ) } ) ; break ; case "select" : Ta = "<label" + zb + '><select id="' + ga . id + '">' ; a . each ( ga . options , function ( ib , sb ) { Ta += '<option value="' + ib + '"' + ( ib == ga . defval ? " selected" : "" ) + ">" + sb + "</option>" } ) ; Ta += "</select></label>" ; var Ya = a ( Ta ) . appendTo ( hb ) . find ( "select" ) ; a . each ( ga . events , function ( ib , sb ) { a ( Ya ) . bind ( ib , sb ) } ) ; break ; case "button-select" : Ta = '<div id="' + ga . id + '" class="dropdown toolset" title="' + ga . title + '"><div id="cur_' + ga . id + '" class="icon_label"></div><button></button></div>' ; zb = a ( '<ul id="' + ga . id + '_opts"></ul>' ) . appendTo ( "#option_lists" ) ;
ga . colnum && zb . addClass ( "optcols" + ga . colnum ) ; a ( Ta ) . appendTo ( hb ) . children ( ) ; ya . push ( { elem : "#" + ga . id , list : "#" + ga . id + "_opts" , title : ga . title , callback : ga . events . change , cur : "#cur_" + ga . id } ) ; break ; case "input" : Ta = "<label" + zb + '><span id="' + ga . id + '_label">' + ga . label + ':</span><input id="' + ga . id + '" title="' + ga . title + '" size="' + ( ga . size || "4" ) + '" value="' + ( ga . defval || "" ) + '" type="text"/></label>' ; var Ba = a ( Ta ) . appendTo ( hb ) . find ( "input" ) ; ga . spindata && Ba . SpinButton ( ga . spindata ) ; ga . events && a . each ( ga . events , function ( ib ,
sb ) { Ba . bind ( ib , sb ) } ) } } ) ; if ( B . buttons ) { var Da = { } , Ha = { } , Aa = B . svgicons , fb = { } ; a . each ( B . buttons , function ( gb , ga ) { for ( var zb , hb = ga . id , Ta = gb ; a ( "#" + hb ) . length ; ) hb = ga . id + "_" + ++ Ta ; if ( Aa ) { Da [ hb ] = ga . icon ; Ta = ga . svgicon ? ga . svgicon : ga . id ; if ( ga . type == "app_menu" ) Ha [ "#" + hb + " > div" ] = Ta ; else Ha [ "#" + hb ] = Ta } else zb = ga . type == "menu" ? "" : a ( '<img src="' + ga . icon + '">' ) ; var Pa , Ya ; switch ( ga . type ) { case "mode_flyout" : case "mode" : Pa = "tool_button" ; if ( ga . cls ) Pa += " " + ga . cls ; Ya = "#tools_left" ; break ; case "context" : Pa = "tool_button" ; Ya =
"#" + ga . panel ; a ( Ya ) . length || a ( "<div>" , { id : ga . panel } ) . appendTo ( "#tools_top" ) ; break ; case "menu" : Pa = "menu_item tool_button" ; Ya = "#" + ( ga . after || ga . panel ) ; break ; case "app_menu" : Pa = "" ; Ya = ga . parent || "#main_menu ul" ; a ( Ya ) . length || a ( "<div>" , { id : ga . panel } ) . appendTo ( "#tools_top" ) } var Ba = a ( ga . list || ga . type == "app_menu" ? "<li/>" : "<div/>" ) . attr ( "id" , hb ) . attr ( "title" , ga . title ) . addClass ( Pa ) ; if ( ! ga . includeWith && ! ga . list ) { if ( "position" in ga ) a ( Ya ) . children ( ) . eq ( ga . position ) . before ( Ba ) ; else ga . type != "menu" || ! ga . after ? Ba . appendTo ( Ya ) :
a ( Ya ) . after ( Ba ) ; if ( ga . type == "mode_flyout" ) { Ta = a ( Ba ) ; Pa = Ta . parent ( ) ; if ( ! Ta . parent ( ) . hasClass ( "tools_flyout" ) ) { var ib = Ta [ 0 ] . id . replace ( "tool_" , "tools_" ) , sb = Ta . clone ( ) . attr ( "id" , ib + "_show" ) . append ( a ( "<div>" , { "class" : "flyout_arrow_horiz" } ) ) ; Ta . before ( sb ) ; Pa = Fa ( ib , Ta ) ; Pa . data ( "isLibrary" , true ) ; sb . data ( "isLibrary" , true ) } Ha [ "#" + ib + "_show" ] = ga . id ; hb = fb [ "#" + Pa [ 0 ] . id ] = [ { sel : "#" + hb , fn : ga . events . click , icon : ga . id , isDefault : true } , Fb ] } else if ( ga . type == "app_menu" || ga . type == "menu" ) Ba . append ( ga . title ) } else if ( ga . list ) { Ba . addClass ( "push_button" ) ;
a ( "#" + ga . list + "_opts" ) . append ( Ba ) ; if ( ga . isDefault ) { a ( "#cur_" + ga . list ) . append ( Ba . children ( ) . clone ( ) ) ; Ta = ga . svgicon ? ga . svgicon : ga . id ; Ha [ "#cur_" + ga . list ] = Ta } } else if ( ga . includeWith ) { Ya = ga . includeWith ; Ta = a ( Ya . button ) ; Pa = Ta . parent ( ) ; if ( ! Ta . parent ( ) . hasClass ( "tools_flyout" ) ) { ib = Ta [ 0 ] . id . replace ( "tool_" , "tools_" ) ; sb = Ta . clone ( ) . attr ( "id" , ib + "_show" ) . append ( a ( "<div>" , { "class" : "flyout_arrow_horiz" } ) ) ; Ta . before ( sb ) ; Pa = Fa ( ib , Ta ) } var Fb = oc . getButtonData ( Ya . button ) ; if ( Ya . isDefault ) Ha [ "#" + ib + "_show" ] = ga . id ; hb = fb [ "#" +
Pa [ 0 ] . id ] = [ { sel : "#" + hb , fn : ga . events . click , icon : ga . id , key : ga . key , isDefault : ga . includeWith ? ga . includeWith . isDefault : 0 } , Fb ] ; ib = "position" in Ya ? Ya . position : "last" ; Fb = Pa . children ( ) . length ; if ( ! isNaN ( ib ) && ib >= 0 && ib < Fb ) Pa . children ( ) . eq ( ib ) . before ( Ba ) ; else { Pa . append ( Ba ) ; hb . reverse ( ) } } Aa || Ba . append ( zb ) ; ga . list || a . each ( ga . events , function ( Yb , Mb ) { if ( Yb == "click" ) if ( ga . type == "mode" ) { ga . includeWith ? Ba . bind ( Yb , Mb ) : Ba . bind ( Yb , function ( ) { kb ( Ba ) && Mb ( ) } ) ; if ( ga . key ) { a ( document ) . bind ( "keydown" , ga . key , Mb ) ; ga . title && Ba . attr ( "title" ,
ga . title + " [" + ga . key + "]" ) } } else Ba . bind ( Yb , Mb ) ; else Ba . bind ( Yb , Mb ) } ) ; Oa ( fb ) } ) ; a . each ( ya , function ( ) { nb ( this . elem , this . list , this . callback , { seticon : true } ) } ) ; if ( Aa ) ia = false ; a . svgIcons ( Aa , { w : 24 , h : 24 , id _match : false , no _img : ! O , fallback : Da , placement : Ha , callback : function ( ) { b . iconsize && b . iconsize != "m" && K ( ) ; ia = true ; va ( ) } } ) } va ( ) } ) ; f . textActions . setInputElem ( a ( "#text" ) [ 0 ] ) ; var Ra = '<div class="palette_item" data-rgb="#none"></div>' ; a . each ( [ "#000000" , "#3f3f3f" , "#7f7f7f" , "#bfbfbf" , "#ffffff" , "#ff0000" , "#ff7f00" , "#ffff00" ,
"#7fff00" , "#00ff00" , "#00ff7f" , "#00ffff" , "#007fff" , "#0000ff" , "#7f00ff" , "#ff00ff" , "#ff007f" , "#7f0000" , "#7f3f00" , "#7f7f00" , "#3f7f00" , "#007f00" , "#007f3f" , "#007f7f" , "#003f7f" , "#00007f" , "#3f007f" , "#7f007f" , "#7f003f" , "#ffaaaa" , "#ffd4aa" , "#ffffaa" , "#d4ffaa" , "#aaffaa" , "#aaffd4" , "#aaffff" , "#aad4ff" ] , function ( q , B ) { Ra += '<div class="palette_item" style="background-color: ' + B + ';" data-rgb="' + B + '"></div>' } ) ; a ( "#palette" ) . append ( Ra ) ; Ra = "" ; a . each ( [ "#FFF" , "#888" , "#000" ] , function ( ) { Ra += '<div class="color_block" style="background-color:' +
this + ';"></div>' } ) ; a ( "#bg_blocks" ) . append ( Ra ) ; var $a = a ( "#bg_blocks div" ) ; $a . each ( function ( ) { a ( this ) . click ( function ( ) { $a . removeClass ( "cur_background" ) ; a ( this ) . addClass ( "cur_background" ) } ) } ) ; if ( a . pref ( "bkgd_color" ) ) o ( a . pref ( "bkgd_color" ) , a . pref ( "bkgd_url" ) ) ; else a . pref ( "bkgd_url" ) && o ( p . bkgd _color , a . pref ( "bkgd_url" ) ) ; if ( a . pref ( "img_save" ) ) { b . img _save = a . pref ( "img_save" ) ; a ( "#image_save_opts input" ) . val ( [ b . img _save ] ) } var Na = function ( q ) { var B = q . value / 100 ; if ( B < 0.0010 ) q . value = 0.1 ; else { q = f . getZoom ( ) ; La ( window ,
{ width : 0 , height : 0 , x : ( qa [ 0 ] . scrollLeft + qa . width ( ) / 2 ) / q , y : ( qa [ 0 ] . scrollTop + qa . height ( ) / 2 ) / q , zoom : B } , true ) } } , mb = function ( q , B ) { if ( B == null ) B = q . value ; a ( "#group_opacity" ) . val ( B ) ; if ( ! q || ! q . handle ) a ( "#opac_slider" ) . slider ( "option" , "value" , B ) ; f . setOpacity ( B / 100 ) } , Ab = function ( q , B , K ) { if ( B == null ) B = q . value ; a ( "#blur" ) . val ( B ) ; var Q = false ; if ( ! q || ! q . handle ) { a ( "#blur_slider" ) . slider ( "option" , "value" , B ) ; Q = true } K ? f . setBlurNoUndo ( B ) : f . setBlur ( B , Q ) } , cb = function ( ) { window . opera && a ( "<p/>" ) . hide ( ) . appendTo ( "body" ) . remove ( ) } ;
a ( "#stroke_style" ) . change ( function ( ) { f . setStrokeAttr ( "stroke-dasharray" , a ( this ) . val ( ) ) ; cb ( ) } ) ; a ( "#stroke_linejoin" ) . change ( function ( ) { f . setStrokeAttr ( "stroke-linejoin" , a ( this ) . val ( ) ) ; cb ( ) } ) ; a ( "select" ) . change ( function ( ) { a ( this ) . blur ( ) } ) ; var jb = false ; a ( "#selLayerNames" ) . change ( function ( ) { var q = this . options [ this . selectedIndex ] . value , B = e . notification . QmoveElemsToLayer . replace ( "%s" , q ) , K = function ( Q ) { if ( Q ) { jb = true ; f . moveSelectedToLayer ( q ) ; f . clearSelection ( ) ; Eb ( ) } } ; if ( q ) jb ? K ( true ) : a . confirm ( B , K ) } ) ; a ( "#font_family" ) . change ( function ( ) { f . setFontFamily ( this . value ) } ) ;
a ( "#seg_type" ) . change ( function ( ) { f . setSegType ( a ( this ) . val ( ) ) } ) ; a ( "#text" ) . keyup ( function ( ) { f . setTextContent ( this . value ) } ) ; a ( "#image_url" ) . change ( function ( ) { Ja ( this . value ) } ) ; a ( "#link_url" ) . change ( function ( ) { this . value . length ? f . setLinkURL ( this . value ) : f . removeHyperlink ( ) } ) ; a ( "#g_title" ) . change ( function ( ) { f . setGroupTitle ( this . value ) } ) ; a ( ".attr_changer" ) . change ( function ( ) { var q = this . getAttribute ( "data-attr" ) , B = this . value ; if ( svgedit . units . isValidUnit ( q , B , Y ) ) this . blur ( ) ; else { a . alert ( e . notification . invalidAttrValGiven ) ;
this . value = Y . getAttribute ( q ) ; return false } if ( q !== "id" ) if ( isNaN ( B ) ) B = f . convertToNum ( q , B ) ; else if ( d . baseUnit !== "px" ) { var K = svgedit . units . getTypeMap ( ) ; if ( Y [ q ] || f . getMode ( ) === "pathedit" || q === "x" || q === "y" ) B *= K [ d . baseUnit ] } if ( q === "id" ) { q = Y ; f . clearSelection ( ) ; q . id = B ; f . addToSelection ( [ q ] , true ) } else f . changeSelectedAttribute ( q , B ) ; this . blur ( ) } ) ; a ( "#palette" ) . mouseover ( function ( ) { var q = a ( '<input type="hidden">' ) ; a ( this ) . append ( q ) ; q . focus ( ) . remove ( ) } ) ; a ( ".palette_item" ) . mousedown ( function ( ) { var q = a ( "#tool_stroke" ) . hasClass ( "active" ) ,
B = q ? "stroke" : "fill" , K = a ( this ) . attr ( "data-rgb" ) , Q = null ; console . log ( K ) ; if ( K === "transparent" || K === "initial" || K === "#none" ) { K = "none" ; Q = new a . jGraduate . Paint } else Q = new a . jGraduate . Paint ( { alpha : 100 , solidColor : K . substr ( 1 ) } ) ; la [ B ] . setPaint ( Q ) ; if ( q ) { f . setColor ( "stroke" , K ) ; K != "none" && f . getStrokeOpacity ( ) != 1 && f . setPaintOpacity ( "stroke" , 1 ) } else { f . setColor ( "fill" , K ) ; K != "none" && f . getFillOpacity ( ) != 1 && f . setPaintOpacity ( "fill" , 1 ) } bc ( ) } ) . bind ( "contextmenu" , function ( q ) { q . preventDefault ( ) } ) ; a ( "#toggle_stroke_tools" ) . toggle ( function ( ) { a ( ".stroke_tool" ) . css ( "display" ,
"table-cell" ) ; a ( this ) . addClass ( "expanded" ) ; xa ( ) } , function ( ) { a ( ".stroke_tool" ) . css ( "display" , "none" ) ; a ( this ) . removeClass ( "expanded" ) ; xa ( ) } ) ; var kb = function ( q , B ) { if ( a ( q ) . hasClass ( "disabled" ) ) return false ; if ( a ( q ) . parent ( ) . hasClass ( "tools_flyout" ) ) return true ; var K = K || "normal" ; B || a ( ".tools_flyout" ) . fadeOut ( K ) ; a ( "#styleoverrides" ) . text ( "" ) ; a ( ".tool_button_current" ) . removeClass ( "tool_button_current" ) . addClass ( "tool_button" ) ; a ( q ) . addClass ( "tool_button_current" ) . removeClass ( "tool_button" ) ; return true } ; ( function ( ) { var q =
null , B = null , K = qa [ 0 ] , Q = false , W = false ; a ( "#svgcanvas" ) . bind ( "mousemove mouseup" , function ( ia ) { if ( Q !== false ) { K . scrollLeft -= ia . clientX - q ; K . scrollTop -= ia . clientY - B ; q = ia . clientX ; B = ia . clientY ; if ( ia . type === "mouseup" ) Q = false ; return false } } ) . mousedown ( function ( ia ) { if ( ia . button === 1 || W === true ) { Q = true ; q = ia . clientX ; B = ia . clientY ; return false } } ) ; a ( window ) . mouseup ( function ( ) { Q = false } ) ; a ( document ) . bind ( "keydown" , "space" , function ( ia ) { f . spaceKey = W = true ; ia . preventDefault ( ) } ) . bind ( "keyup" , "space" , function ( ia ) { ia . preventDefault ( ) ;
f . spaceKey = W = false } ) . bind ( "keydown" , "alt" , function ( ) { f . getMode ( ) === "zoom" && qa . addClass ( "out" ) } ) . bind ( "keyup" , "alt" , function ( ) { f . getMode ( ) === "zoom" && qa . removeClass ( "out" ) } ) } ) ( ) ; var Ca = a ( ".menu" ) , wb = function ( q ) { q . target . style . background = "#fff" ; setTimeout ( function ( ) { q . target . style . background = "#ddd" } , 50 ) ; setTimeout ( function ( ) { q . target . style . background = "#fff" } , 150 ) ; setTimeout ( function ( ) { q . target . style . background = "#ddd" } , 200 ) ; setTimeout ( function ( ) { q . target . style . background = "" } , 200 ) ; setTimeout ( function ( ) { a ( "#menu_bar" ) . removeClass ( "active" ) } ,
220 ) ; return false } ; a ( ".menu_item" ) . live ( "click" , function ( q ) { wb ( q ) } ) ; a ( "svg, body" ) . on ( "click" , function ( q ) { if ( ! a ( q . target ) . hasClass ( "menu_title" ) && a ( "#menu_bar" ) . hasClass ( "active" ) ) if ( ! a ( q . target ) . hasClass ( "disabled" ) && a ( q . target ) . hasClass ( "menu_item" ) ) wb ( q ) ; else { a ( "#menu_bar" ) . removeClass ( "active" ) ; a ( ".tools_flyout" ) . hide ( ) ; a ( "input" ) . blur ( ) } } ) ; a ( ".menu_title" ) . on ( "click" , function ( ) { a ( "#menu_bar" ) . toggleClass ( "active" ) } ) ; a ( ".menu_title" ) . on ( "mouseover" , function ( ) { Ca . removeClass ( "open" ) ; a ( this ) . parent ( ) . addClass ( "open" ) } ) ;
c . addDropDown = function ( q , B , K ) { if ( a ( q ) . length != 0 ) { var Q = a ( q ) . find ( "button" ) , W = a ( q ) . find ( "ul" ) . attr ( "id" , a ( q ) [ 0 ] . id + "-list" ) ; K || a ( "#option_lists" ) . append ( W ) ; var ia = false ; K && a ( q ) . addClass ( "dropup" ) ; W . find ( "li" ) . bind ( "mouseup" , B ) ; a ( window ) . mouseup ( function ( ) { if ( ! ia ) { Q . removeClass ( "down" ) ; W . hide ( ) } ia = false } ) ; Q . bind ( "mousedown" , function ( ) { if ( Q . hasClass ( "down" ) ) { Q . removeClass ( "down" ) ; W . hide ( ) } else { Q . addClass ( "down" ) ; if ( ! K ) { var va = a ( q ) . offset ( ) ; W . css ( { top : va . top , left : va . left - 110 } ) } W . show ( ) ; ia = true } } ) . hover ( function ( ) { ia =
true } ) . mouseout ( function ( ) { ia = false } ) } } ; var nb = function ( q , B , K , Q ) { var W = a ( q ) ; B = a ( B ) ; var ia = false , va = Q . dropUp ; va && a ( q ) . addClass ( "dropup" ) ; B . find ( "li" ) . bind ( "mouseup" , function ( ) { if ( Q . seticon ) { H ( "#cur_" + W [ 0 ] . id , a ( this ) . children ( ) ) ; a ( this ) . addClass ( "current" ) . siblings ( ) . removeClass ( "current" ) } K . apply ( this , arguments ) } ) ; a ( window ) . mouseup ( function ( ) { if ( ! ia ) { W . removeClass ( "down" ) ; B . hide ( ) ; B . css ( { top : 0 , left : 0 } ) } ia = false } ) ; B . height ( ) ; a ( q ) . bind ( "mousedown" , function ( ) { var ya = a ( q ) . offset ( ) ; if ( va ) { ya . top -= B . height ( ) ;
ya . left += 8 } else ya . top += a ( q ) . height ( ) ; a ( B ) . offset ( ya ) ; if ( W . hasClass ( "down" ) ) { W . removeClass ( "down" ) ; B . hide ( ) ; B . css ( { top : 0 , left : 0 } ) } else { W . addClass ( "down" ) ; B . show ( ) ; ia = true ; return false } } ) . hover ( function ( ) { ia = true } ) . mouseout ( function ( ) { ia = false } ) ; Q . multiclick && B . mousedown ( function ( ) { ia = true } ) } ; c . addDropDown ( "#font_family_dropdown" , function ( ) { a ( this ) . text ( ) ; a ( "#font_family" ) . val ( a ( this ) . text ( ) ) . change ( ) } ) ; c . addDropDown ( "#opacity_dropdown" , function ( ) { if ( ! a ( this ) . find ( "div" ) . length ) { var q = parseInt ( a ( this ) . text ( ) . split ( "%" ) [ 0 ] ) ;
mb ( false , q ) } } , false ) ; a ( "#opac_slider" ) . slider ( { start : function ( ) { a ( "#opacity_dropdown li:not(.special)" ) . hide ( ) } , stop : function ( ) { a ( "#opacity_dropdown li" ) . show ( ) ; a ( window ) . mouseup ( ) } , slide : function ( q , B ) { mb ( B ) } } ) ; c . addDropDown ( "#blur_dropdown" , a . noop ) ; var yb = false ; a ( "#blur_slider" ) . slider ( { max : 10 , step : 0.1 , stop : function ( q , B ) { yb = false ; Ab ( B ) ; a ( "#blur_dropdown li" ) . show ( ) ; a ( window ) . mouseup ( ) } , start : function ( ) { yb = true } , slide : function ( q , B ) { Ab ( B , null , yb ) } } ) ; c . addDropDown ( "#zoom_dropdown" , function ( ) { var q =
a ( this ) , B = q . attr ( "data-val" ) ; B ? La ( window , B ) : Na ( { value : parseInt ( q . text ( ) ) } ) } , true ) ; nb ( "#stroke_linecap" , "#linecap_opts" , function ( ) { z ( this , true ) } , { dropUp : true } ) ; nb ( "#stroke_linejoin" , "#linejoin_opts" , function ( ) { z ( this , true ) } , { dropUp : true } ) ; a ( "div" , "#position_opts" ) . each ( function ( ) { this . addEventListener ( "mouseup" , function ( ) { var q = this . id . replace ( "tool_pos" , "" ) . charAt ( 0 ) ; f . alignSelectedElements ( q , "page" ) } ) } ) ; ( function ( ) { var q , B = function ( ) { a ( q ) . blur ( ) } ; a ( "#svg_editor" ) . find ( "button, select, input:not(#text)" ) . focus ( function ( ) { q =
this ; U = "toolbars" ; qa . mousedown ( B ) } ) . blur ( function ( ) { U = "canvas" ; qa . unbind ( "mousedown" , B ) ; f . getMode ( ) == "textedit" && a ( "#text" ) . focus ( ) } ) } ) ( ) ; var Bb = function ( ) { if ( kb ( "#tool_select" ) ) { f . setMode ( "select" ) ; a ( "#styleoverrides" ) . text ( "#svgcanvas svg *{cursor:move;pointer-events:all}, #svgcanvas svg{cursor:default}" ) } } , ob = function ( ) { kb ( "#tool_fhpath" ) && f . setMode ( "fhpath" ) } , Cb = function ( ) { kb ( "#tool_line" ) && f . setMode ( "line" ) } , Kb = function ( ) { kb ( "#tool_rect" ) && f . setMode ( "rect" ) } , Ib = function ( ) { kb ( "#tool_ellipse" ) &&
f . setMode ( "ellipse" ) } , Rb = function ( ) { kb ( "#tool_image" ) && f . setMode ( "image" ) } , na = function ( ) { kb ( "#tool_zoom" ) && f . setMode ( "zoom" ) } , Z = function ( ) { if ( kb ( "#tool_zoom" ) ) { h ( ) ; ma ( ) } } , ta = function ( ) { kb ( "#tool_text" ) && f . setMode ( "text" ) } , M = function ( ) { kb ( "#tool_path" ) && f . setMode ( "path" ) } , I = function ( ) { if ( Y != null || za ) f . deleteSelectedElements ( ) } , X = function ( ) { if ( Y != null || za ) f . cutSelectedElements ( ) } , Ma = function ( ) { if ( Y != null || za ) f . copySelectedElements ( ) } , Xa = function ( ) { var q = f . getZoom ( ) , B = ( qa [ 0 ] . scrollLeft + qa . width ( ) / 2 ) /
q - f . contentW ; q = ( qa [ 0 ] . scrollTop + qa . height ( ) / 2 ) / q - f . contentH ; f . pasteElements ( "point" , B , q ) } , db = function ( ) { Y != null && f . moveToTopSelectedElement ( ) } , tb = function ( ) { Y != null && f . moveToBottomSelectedElement ( ) } , xb = function ( ) { Y != null && f . moveUpDownSelected ( "Up" ) } , Hb = function ( ) { Y != null && f . moveUpDownSelected ( "Down" ) } , pb = function ( ) { Y != null && f . convertToPath ( ) } , Lb = function ( ) { Y != null && sa . reorient ( ) } , bb = function ( ) { if ( Y != null || za ) a . prompt ( e . notification . enterNewLinkURL , "http://" , function ( q ) { q && f . makeHyperlink ( q ) } ) } , qb =
function ( q , B ) { if ( Y != null || za ) { if ( d . gridSnapping ) { var K = f . getZoom ( ) * d . snappingStep ; q *= K ; B *= K } f . moveSelectedElements ( q , B ) } } , Qb = function ( ) { var q = ! a ( "#tool_node_link" ) . hasClass ( "push_button_pressed" ) ; q ? a ( "#tool_node_link" ) . addClass ( "push_button_pressed" ) . removeClass ( "tool_button" ) . find ( "input" ) . attr ( "checked" , true ) : a ( "#tool_node_link" ) . removeClass ( "push_button_pressed" ) . addClass ( "tool_button" ) . find ( "input" ) . attr ( "checked" , false ) ; sa . linkControlPoints ( q ) } , $b = function ( ) { sa . getNodePoint ( ) && sa . clonePathNode ( ) } ,
Zb = function ( ) { sa . getNodePoint ( ) && sa . deletePathNode ( ) } , rb = function ( ) { var q = a ( "#tool_add_subpath" ) , B = ! q . hasClass ( "push_button_pressed" ) ; B ? q . addClass ( "push_button_pressed" ) . removeClass ( "tool_button" ) : q . removeClass ( "push_button_pressed" ) . addClass ( "tool_button" ) ; sa . addSubPath ( B ) } , Va = function ( ) { sa . opencloseSubPath ( ) } , gc = function ( ) { f . cycleElement ( 1 ) } , cc = function ( ) { f . cycleElement ( 0 ) } , Ub = function ( q , B ) { if ( ! ( Y == null || za ) ) { q || ( B *= - 1 ) ; var K = a ( "#angle" ) . val ( ) * 1 + B ; f . setRotationAngle ( K ) ; Za ( ) } } , hc = function ( ) { var q =
d . dimensions ; a . confirm ( e . notification . QwantToClear , function ( B ) { if ( B ) { ma ( ) ; f . clear ( ) ; f . setResolution ( q [ 0 ] , q [ 1 ] ) ; Tb ( true ) ; h ( ) ; Eb ( ) ; Za ( ) ; la . fill . prep ( ) ; la . stroke . prep ( ) ; f . runExtensions ( "onNewDocument" ) } } ) } , lc = function ( ) { f . setBold ( ! f . getBold ( ) ) ; Za ( ) ; return false } , Wb = function ( ) { f . setItalic ( ! f . getItalic ( ) ) ; Za ( ) ; return false } , ac = function ( ) { if ( ! l . pngsave ) { var q = e . notification . loadingImage ; ba = window . open ( "data:text/html;charset=utf-8,<title>" + q + "</title><h1>" + q + "</h1>" ) } window . canvg ? f . rasterExport ( ) : a . getScript ( "canvg/rgbcolor.js" ,
function ( ) { a . getScript ( "canvg/canvg.js" , function ( ) { f . rasterExport ( ) } ) } ) } , nc = function ( ) { f . open ( ) } , Vb = function ( ) { } , ub = function ( q ) { var B = q . prev ( ) ; B . css ( "background" , "#09f" ) ; setTimeout ( function ( ) { B . css ( "background" , "" ) } , 200 ) } , ic = function ( ) { if ( ja . getUndoStackSize ( ) > 0 ) { window . event . type === "keydown" && ub ( a ( "#edit_menu" ) ) ; ja . undo ( ) ; Eb ( ) } } , dc = function ( ) { if ( ja . getRedoStackSize ( ) > 0 ) { window . event . type === "keydown" && ub ( a ( "#edit_menu" ) ) ; ja . redo ( ) ; Eb ( ) } } , Sb = function ( ) { if ( za ) f . groupSelectedElements ( ) ; else Y && f . ungroupSelectedElement ( ) } ,
vb = function ( ) { window . event . type === "keydown" && ub ( a ( "#edit_menu" ) ) ; f . cloneSelectedElements ( 20 , 20 ) } , fc = function ( ) { var q = this . id . replace ( "tool_align" , "" ) . charAt ( 0 ) ; f . alignSelectedElements ( q , a ( "#align_relative_to" ) . val ( ) ) } , g = function ( ) { var q = document . querySelector ( "#tool_stroke rect" ) , B = document . querySelector ( "#tool_fill rect" ) , K = B . getAttribute ( "fill" ) , Q = q . getAttribute ( "fill" ) ; q = parseFloat ( q . getAttribute ( "stroke-opacity" ) ) ; if ( isNaN ( q ) ) q = 100 ; B = parseFloat ( B . getAttribute ( "fill-opacity" ) ) ; if ( isNaN ( B ) ) B = 100 ;
Q = ab ( Q , q , "stroke" ) ; K = ab ( K , B , "fill" ) ; la . fill . setPaint ( Q , true ) ; la . stroke . setPaint ( K , true ) } , h = function ( q ) { var B = f . getResolution ( ) ; q = q ? B . zoom * q : 1 ; a ( "#zoom" ) . val ( q * 100 ) ; f . setZoom ( q ) ; t ( ) ; Tb ( true ) } , k = function ( ) { ! a ( "#tool_wireframe" ) . hasClass ( "push_button_pressed" ) ? a ( "#tool_wireframe" ) . addClass ( "push_button_pressed" ) : a ( "#tool_wireframe" ) . removeClass ( "push_button_pressed" ) ; qa . toggleClass ( "wireframe" ) ; if ( ! kc ) { var q = a ( "#wireframe_rules" ) ; q . length ? q . empty ( ) : a ( '<style id="wireframe_rules"></style>' ) . appendTo ( "head" ) ;
t ( ) } } , v = function ( ) { if ( a ( "#tool_rulers" ) . hasClass ( "push_button_pressed" ) ) { a ( "#tool_rulers" ) . removeClass ( "push_button_pressed" ) ; a ( "#show_rulers" ) . attr ( "checked" , false ) ; d . showRulers = false } else { a ( "#tool_rulers" ) . addClass ( "push_button_pressed" ) ; a ( "#show_rulers" ) . attr ( "checked" , true ) ; d . showRulers = true } a ( "#rulers" ) . toggle ( ! ! d . showRulers ) } , t = function ( ) { if ( ! kc ) { var q = "#workarea.wireframe #svgcontent * { stroke-width: " + 1 / f . getZoom ( ) + "px; }" ; a ( "#wireframe_rules" ) . text ( qa . hasClass ( "wireframe" ) ? q : "" ) } } , E = function ( q ,
B ) { if ( ! Ia ) { Ia = true ; a ( "#save_output_btns" ) . toggle ( ! ! B ) ; a ( "#tool_source_back" ) . toggle ( ! B ) ; var K = ra = f . getSvgString ( ) ; a ( "#svg_source_textarea" ) . val ( K ) ; a ( "#svg_source_editor" ) . fadeIn ( ) ; A ( ) ; a ( "#svg_source_textarea" ) . focus ( ) } } , w = function ( ) { if ( ! Qa ) { Qa = true ; a ( "#image_save_opts input" ) . val ( [ b . img _save ] ) ; var q = f . getResolution ( ) ; if ( d . baseUnit !== "px" ) { q . w = svgedit . units . convertUnit ( q . w ) + d . baseUnit ; q . h = svgedit . units . convertUnit ( q . h ) + d . baseUnit } a ( ".canvas_width" ) . val ( q . w ) ; a ( ".canvas_height" ) . val ( q . h ) ; a ( "#canvas_title" ) . val ( f . getDocumentTitle ( ) ) ;
a ( "#svg_docprops" ) . show ( ) } } , s = function ( ) { if ( ! Ka ) { Ka = true ; var q = a ( "#bg_blocks div" ) , B = a . pref ( "bkgd_color" ) , K = a . pref ( "bkgd_url" ) ; q . each ( function ( ) { var Q = a ( this ) , W = Q . css ( "background-color" ) == B ; Q . toggleClass ( "cur_background" , W ) ; W && a ( "#canvas_bg_url" ) . removeClass ( "cur_background" ) } ) ; B || q . eq ( 0 ) . addClass ( "cur_background" ) ; K && a ( "#canvas_bg_url" ) . val ( K ) ; a ( "grid_snapping_step" ) . attr ( "value" , d . snappingStep ) ; d . gridSnapping == true ? a ( "#grid_snapping_on" ) . attr ( "checked" , "checked" ) : a ( "#grid_snapping_on" ) . removeAttr ( "checked" ) ;
a ( "#svg_prefs" ) . show ( ) } } , A = function ( ) { var q = a ( "#svg_source_container" ) . height ( ) - 50 ; a ( "#svg_source_textarea" ) . css ( "height" , q ) } , F = function ( ) { if ( Ia ) { var q = function ( ) { f . clearSelection ( ) ; wa ( ) ; h ( ) ; Eb ( ) ; C ( ) ; la . fill . prep ( ) ; la . stroke . prep ( ) } ; f . setSvgString ( a ( "#svg_source_textarea" ) . val ( ) ) ? q ( ) : a . confirm ( e . notification . QerrorsRevertToSource , function ( B ) { if ( ! B ) return false ; q ( ) } ) ; ma ( ) } } , C = function ( q ) { q = q || f . getDocumentTitle ( ) ; q = Wa + ( q ? ": " + q : "" ) ; a ( "title:first" ) . text ( q ) } , D = function ( ) { var q = a ( "#canvas_width" ) , B =
q . val ( ) , K = a ( "#canvas_height" ) , Q = K . val ( ) ; if ( B != "fit" && ! svgedit . units . isValidUnit ( "width" , B ) ) { a . alert ( e . notification . invalidAttrValGiven ) ; q . parent ( ) . addClass ( "error" ) ; return false } q . parent ( ) . removeClass ( "error" ) ; if ( Q != "fit" && ! svgedit . units . isValidUnit ( "height" , Q ) ) { a . alert ( e . notification . invalidAttrValGiven ) ; K . parent ( ) . addClass ( "error" ) ; return false } K . parent ( ) . removeClass ( "error" ) ; if ( ! f . setResolution ( B , Q ) ) { a . alert ( e . notification . noContentToFitTo ) ; return false } b . img _save = a ( "#image_save_opts :checked" ) . val ( ) ;
a . pref ( "img_save" , b . img _save ) ; Tb ( ) ; ha ( ) } , G = function ( ) { var q = a ( "#bg_blocks div.cur_background" ) . css ( "background-color" ) || "#FFF" ; o ( q , a ( "#canvas_bg_url" ) . val ( ) ) ; q = a ( "#lang_select" ) . val ( ) ; q != b . lang && c . putLocale ( q ) ; aa ( a ( "#iconsize" ) . val ( ) ) ; d . gridSnapping = a ( "#grid_snapping_on" ) [ 0 ] . checked ; d . snappingStep = a ( "#grid_snapping_step" ) . val ( ) ; d . showRulers = a ( "#show_rulers" ) [ 0 ] . checked ; a ( "#rulers" ) . toggle ( d . showRulers ) ; d . showRulers && da ( ) ; d . baseUnit = a ( "#base_unit" ) . val ( ) ; f . setConfig ( d ) ; Tb ( ) ; ka ( ) } , H = c . setIcon = function ( q ,
2012-06-24 18:34:58 +00:00
B ) { var K = typeof B === "string" ? a . getSvgIcon ( B , true ) : B . clone ( ) ; K ? a ( q ) . find ( "img" ) . replaceWith ( K ) : console . log ( "NOTE: Icon image missing: " + B ) } , P ; P = function ( ) { var q = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/ , B = document . getElementsByTagName ( "script" ) [ 0 ] , K ; for ( K in B . style ) if ( q . test ( K ) ) return K . match ( q ) [ 0 ] ; if ( "WebkitOpacity" in B . style ) return "Webkit" ; if ( "KhtmlOpacity" in B . style ) return "Khtml" ; return "" } ( ) ; var R = function ( q , B ) { P . toLowerCase ( ) ; var K = [ "top" , "left" , "bottom" , "right" ] ; q . each ( function ( ) { for ( var Q = a ( this ) ,
W = Q . outerWidth ( ) * ( B - 1 ) , ia = Q . outerHeight ( ) * ( B - 1 ) , va = 0 ; va < 4 ; va ++ ) { var ya = K [ va ] , Da = Q . data ( "orig_margin-" + ya ) ; if ( Da == null ) { Da = parseInt ( Q . css ( "margin-" + ya ) ) ; Q . data ( "orig_margin-" + ya , Da ) } Da = Da * B ; if ( ya === "right" ) Da += W ; else if ( ya === "bottom" ) Da += ia ; Q . css ( "margin-" + ya , Da ) } } ) } , aa = c . setIconSize = function ( q , B ) { if ( ! ( q == b . size && ! B ) ) { console . log ( "size" , q ) ; var K = a ( "#tools_top .toolset, #editor_panel > *, #history_panel > *,\t\t\t\t#main_button, #tools_left > *, #path_node_panel > *, #multiselected_panel > *,\t\t\t\t#g_panel > *, #tool_font_size > *, .tools_flyout" ) ,
2012-06-23 19:40:40 +00:00
Q = 1 ; Q = typeof q == "number" ? q : { s : 0.75 , m : 1 , l : 1.25 , xl : 1.5 } [ q ] ; c . tool _scale = S = Q ; Gb ( ) ; var W = K . parents ( ":hidden" ) ; W . css ( "visibility" , "hidden" ) . show ( ) ; R ( K , Q ) ; W . css ( "visibility" , "visible" ) . hide ( ) ; a . pref ( "iconsize" , q ) ; a ( "#iconsize" ) . val ( q ) ; W = { "#tools_top" : { left : 50 , height : 72 } , "#tools_left" : { width : 31 , top : 74 } , "div#workarea" : { left : 38 , top : 74 } } ; K = a ( "#tool_size_rules" ) ; if ( K . length ) K . empty ( ) ; else K = a ( '<style id="tool_size_rules"></style>' ) . appendTo ( "head" ) ; if ( q != "m" ) { var ia = "" ; a . each ( W , function ( va , ya ) { va = "#svg_editor " +
va . replace ( /,/g , ", #svg_editor" ) ; ia += va + "{" ; a . each ( ya , function ( Da , Ha ) { if ( typeof Ha === "number" ) var Aa = Ha * Q + "px" ; else if ( Ha [ q ] || Ha . all ) Aa = Ha [ q ] || Ha . all ; ia += Da + ":" + Aa + ";" } ) ; ia += "}" } ) ; W = "-" + P . toLowerCase ( ) + "-" ; ia += "#tools_top .toolset, #editor_panel > *, #history_panel > *,\t\t\t\t#main_button, #tools_left > *, #path_node_panel > *, #multiselected_panel > *,\t\t\t\t#g_panel > *, #tool_font_size > *, .tools_flyout{" + W + "transform: scale(" + Q + ");} #svg_editor div.toolset .toolset {" + W + "transform: scale(1); margin: 1px !important;} #svg_editor .ui-slider {" +
W + "transform: scale(" + 1 / Q + ");}" ; K . text ( ia ) } Gb ( ) } } , ua = function ( ) { a ( "#dialog_box" ) . hide ( ) ; if ( ! Ia && ! Qa && ! Ka ) Ua && f . leaveContext ( ) ; else { if ( Ia ) ra !== a ( "#svg_source_textarea" ) . val ( ) ? a . confirm ( e . notification . QignoreSourceChanges , function ( q ) { q && wa ( ) } ) : wa ( ) ; else if ( Qa ) ha ( ) ; else Ka && ka ( ) ; xa ( ) } } , wa = function ( ) { a ( "#svg_source_editor" ) . hide ( ) ; Ia = false ; a ( "#svg_source_textarea" ) . blur ( ) } , ha = function ( ) { a ( "#svg_docprops" ) . hide ( ) ; a ( "#canvas_width,#canvas_height" ) . removeAttr ( "disabled" ) ; a ( "#resolution" ) [ 0 ] . selectedIndex =
0 ; a ( "#image_save_opts input" ) . val ( [ b . img _save ] ) ; Qa = false } , ka = function ( ) { a ( "#svg_prefs" ) . hide ( ) ; Ka = false } , oa = { width : a ( window ) . width ( ) , height : a ( window ) . height ( ) } , xa = a . noop , eb ; svgedit . browser . isIE ( ) && function ( ) { xa = function ( ) { if ( qa [ 0 ] . scrollLeft === 0 && qa [ 0 ] . scrollTop === 0 ) { qa [ 0 ] . scrollLeft = eb . left ; qa [ 0 ] . scrollTop = eb . top } } ; eb = { left : qa [ 0 ] . scrollLeft , top : qa [ 0 ] . scrollTop } ; a ( window ) . resize ( xa ) ; svgEditor . ready ( function ( ) { setTimeout ( function ( ) { xa ( ) } , 500 ) } ) ; qa . scroll ( function ( ) { eb = { left : qa [ 0 ] . scrollLeft , top : qa [ 0 ] . scrollTop } } ) } ( ) ;
a ( window ) . resize ( function ( ) { Ia && A ( ) ; a . each ( oa , function ( q , B ) { var K = a ( window ) [ q ] ( ) ; qa [ 0 ] [ "scroll" + ( q === "width" ? "Left" : "Top" ) ] -= ( K - B ) / 2 ; oa [ q ] = K } ) } ) ; ( function ( ) { qa . scroll ( function ( ) { if ( a ( "#ruler_x" ) . length != 0 ) a ( "#ruler_x" ) [ 0 ] . scrollLeft = qa [ 0 ] . scrollLeft ; if ( a ( "#ruler_y" ) . length != 0 ) a ( "#ruler_y" ) [ 0 ] . scrollTop = qa [ 0 ] . scrollTop } ) } ) ( ) ; a ( "#url_notice" ) . click ( function ( ) { a . alert ( this . title ) } ) ; a ( "#change_image_url" ) . click ( L ) ; ( function ( ) { var q = [ "clear" , "open" , "save" , "source" , "delete" , "delete_multi" , "paste" , "clone" ,
"clone_multi" , "move_top" , "move_bottom" ] , B = "" ; a . each ( q , function ( K , Q ) { B += "#tool_" + Q + ( K == q . length - 1 ? "," : "" ) } ) ; a ( B ) . mousedown ( function ( ) { a ( this ) . addClass ( "tool_button_current" ) } ) . bind ( "mousedown mouseout" , function ( ) { a ( this ) . removeClass ( "tool_button_current" ) } ) ; a ( "#tool_undo, #tool_redo" ) . mousedown ( function ( ) { a ( this ) . hasClass ( "disabled" ) || a ( this ) . addClass ( "tool_button_current" ) } ) . bind ( "mousedown mouseout" , function ( ) { a ( this ) . removeClass ( "tool_button_current" ) } ) } ) ( ) ; if ( V && ! window . opera ) { V = [ "tool_clear" ,
"tool_save" , "tool_source" , "tool_undo" , "tool_redo" , "tool_clone" ] ; for ( Sa = V . length ; Sa -- ; ) { var Db = document . getElementById ( V [ Sa ] ) ; if ( Db != null ) { var Pb = Db . title , Jb = Pb . indexOf ( "Ctrl+" ) ; Db . title = [ Pb . substr ( 0 , Jb ) , "Cmd+" , Pb . substr ( Jb + 5 ) ] . join ( "" ) } } } var Ob = function ( q ) { var B = q . attr ( "id" ) == "stroke_color" ? "stroke" : "fill" , K = la [ B ] . paint , Q = B == "stroke" ? "Pick a Stroke Paint and Opacity" : "Pick a Fill Paint and Opacity" ; q = q . position ( ) ; a ( "#color_picker" ) . draggable ( { cancel : ".jGraduate_tabs, .jGraduate_colPick, .jGraduate_gradPick, .jPicker" ,
containment : "window" } ) . css ( d . colorPickerCSS || { left : q . left , bottom : 50 - q . top } ) . jGraduate ( { paint : K , window : { pickerTitle : Q } , images : { clientPath : d . jGraduatePath } , newstop : "inverse" } , function ( W ) { K = new a . jGraduate . Paint ( W ) ; la [ B ] . setPaint ( K ) ; f . setPaint ( B , K ) ; a ( "#color_picker" ) . hide ( ) } , function ( ) { a ( "#color_picker" ) . hide ( ) } ) } , bc = function ( ) { var q = f . getColor ( "fill" ) == "none" , B = f . getColor ( "stroke" ) == "none" , K = [ "#tool_fhpath" , "#tool_line" ] , Q = [ "#tools_rect .tool_button" , "#tools_ellipse .tool_button" , "#tool_text" , "#tool_path" ] ;
if ( B ) for ( var W in K ) { var ia = K [ W ] ; a ( ia ) . hasClass ( "tool_button_current" ) && Bb ( ) ; a ( ia ) . addClass ( "disabled" ) } else for ( W in K ) { ia = K [ W ] ; a ( ia ) . removeClass ( "disabled" ) } if ( B && q ) for ( W in Q ) { ia = Q [ W ] ; a ( ia ) . hasClass ( "tool_button_current" ) && Bb ( ) ; a ( ia ) . addClass ( "disabled" ) } else for ( W in Q ) { ia = Q [ W ] ; a ( ia ) . removeClass ( "disabled" ) } f . runExtensions ( "toolButtonStateUpdate" , { nofill : q , nostroke : B } ) ; a ( ".tools_flyout" ) . each ( function ( ) { var va = a ( "#" + this . id + "_show" ) , ya = false ; a ( this ) . children ( ) . each ( function ( ) { a ( this ) . hasClass ( "disabled" ) ||
( ya = true ) } ) ; va . toggleClass ( "disabled" , ! ya ) } ) ; cb ( ) } ; V = function ( q , B ) { var K = d [ B === "fill" ? "initFill" : "initStroke" ] , Q = ( new DOMParser ) . parseFromString ( '<svg xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%"\t\t\t\t\tfill="#' + K . color + '" opacity="' + K . opacity + '"/>\t\t\t\t\t<defs><linearGradient id="gradbox_"/></defs></svg>' , "text/xml" ) . documentElement ; Q = a ( q ) [ 0 ] . appendChild ( document . importNode ( Q , true ) ) ; Q . setAttribute ( "width" , 24.5 ) ; this . rect = Q . firstChild ; this . defs = Q . getElementsByTagName ( "defs" ) [ 0 ] ;
this . grad = this . defs . firstChild ; this . paint = new a . jGraduate . Paint ( { solidColor : K . color } ) ; this . type = B ; this . setPaint = function ( W , ia ) { this . paint = W ; var va = "none" , ya = W . type , Da = W . alpha / 100 ; switch ( ya ) { case "solidColor" : va = "#" + W [ ya ] ; break ; case "linearGradient" : case "radialGradient" : this . defs . removeChild ( this . grad ) ; this . grad = this . defs . appendChild ( W [ ya ] ) ; va = "url(#" + ( this . grad . id = "gradbox_" + this . type ) + ")" } this . rect . setAttribute ( "fill" , va ) ; this . rect . setAttribute ( "opacity" , Da ) ; if ( ia ) { f . setColor ( this . type , va , true ) ;
f . setPaintOpacity ( this . type , Da , true ) } } ; this . update = function ( W ) { if ( Y ) { var ia = this . type ; switch ( Y . tagName ) { case "use" : case "image" : case "foreignObject" : return ; case "g" : case "a" : for ( var va = null , ya = Y . getElementsByTagName ( "*" ) , Da = 0 , Ha = ya . length ; Da < Ha ; Da ++ ) { var Aa = ya [ Da ] . getAttribute ( ia ) ; if ( Da === 0 ) va = Aa ; else if ( va !== Aa ) { va = null ; break } } if ( va === null ) { ya = null ; return } ya = va ; va = 1 ; break ; default : va = parseFloat ( Y . getAttribute ( ia + "-opacity" ) ) ; if ( isNaN ( va ) ) va = 1 ; ya = ia === "fill" ? "black" : "none" ; ya = Y . getAttribute ( ia ) || ya } if ( W ) { f . setColor ( ia ,
ya , true ) ; f . setPaintOpacity ( ia , va , true ) } va *= 100 ; this . setPaint ( ab ( ya , va , ia ) ) } } ; this . prep = function ( ) { switch ( this . paint . type ) { case "linearGradient" : case "radialGradient" : var W = new a . jGraduate . Paint ( { copy : this . paint } ) ; f . setPaint ( B , W ) } } } ; la . fill = new V ( "#fill_color" , "fill" ) ; la . stroke = new V ( "#stroke_color" , "stroke" ) ; a ( "#stroke_width" ) . val ( d . initStroke . width ) ; a ( "#group_opacity" ) . val ( d . initOpacity * 100 ) ; V = la . fill . rect . cloneNode ( false ) ; V . setAttribute ( "style" , "vector-effect:non-scaling-stroke" ) ; var kc = V . style . vectorEffect ===
"non-scaling-stroke" ; V . removeAttribute ( "style" ) ; V = la . fill . rect . ownerDocument . createElementNS ( "http://www.w3.org/2000/svg" , "feGaussianBlur" ) ; typeof V . stdDeviationX === "undefined" && a ( "#tool_blur" ) . hide ( ) ; a ( V ) . remove ( ) ; setTimeout ( function ( ) { f . embedImage ( "images/placeholder.svg" , function ( q ) { if ( ! q ) { a ( "#image_save_opts [value=embed]" ) . attr ( "disabled" , "disabled" ) ; a ( "#image_save_opts input" ) . val ( [ "ref" ] ) ; b . img _save = "ref" ; a ( "#image_opt_embed" ) . css ( "color" , "#666" ) . attr ( "title" , e . notification . featNotSupported ) } } ) } ,
1E3 ) ; a ( "#tool_fill" ) . click ( function ( ) { if ( a ( "#tool_fill" ) . hasClass ( "active" ) ) { Ob ( a ( "#fill_color" ) ) ; bc ( ) } else { a ( "#tool_fill" ) . addClass ( "active" ) ; a ( "#tool_stroke" ) . removeClass ( "active" ) } } ) ; a ( "#tool_stroke" ) . click ( function ( ) { if ( a ( "#tool_stroke" ) . hasClass ( "active" ) ) { Ob ( a ( "#stroke_color" ) ) ; bc ( ) } else { a ( "#tool_stroke" ) . addClass ( "active" ) ; console . log ( a ( "#tool_stroke" ) ) ; a ( "#tool_fill" ) . removeClass ( "active" ) } } ) ; a ( "#group_opacityLabel" ) . click ( function ( ) { a ( "#opacity_dropdown button" ) . mousedown ( ) ; a ( window ) . mouseup ( ) } ) ;
a ( "#zoomLabel" ) . click ( function ( ) { a ( "#zoom_dropdown button" ) . mousedown ( ) ; a ( window ) . mouseup ( ) } ) ; a ( "#tool_move_top" ) . mousedown ( function ( q ) { a ( "#tools_stacking" ) . show ( ) ; q . preventDefault ( ) } ) ; a ( ".layer_button" ) . mousedown ( function ( ) { a ( this ) . addClass ( "layer_buttonpressed" ) } ) . mouseout ( function ( ) { a ( this ) . removeClass ( "layer_buttonpressed" ) } ) . mouseup ( function ( ) { a ( this ) . removeClass ( "layer_buttonpressed" ) } ) ; a ( ".push_button" ) . mousedown ( function ( ) { a ( this ) . hasClass ( "disabled" ) || a ( this ) . addClass ( "push_button_pressed" ) . removeClass ( "push_button" ) } ) . mouseout ( function ( ) { a ( this ) . removeClass ( "push_button_pressed" ) . addClass ( "push_button" ) } ) . mouseup ( function ( ) { a ( this ) . removeClass ( "push_button_pressed" ) . addClass ( "push_button" ) } ) ;
a ( "#layer_new" ) . click ( function ( ) { var q = f . getCurrentDrawing ( ) . getNumLayers ( ) ; do var B = e . layers . layer + " " + ++ q ; while ( f . getCurrentDrawing ( ) . hasLayer ( B ) ) ; a . prompt ( e . notification . enterUniqueLayerName , B , function ( K ) { if ( K ) if ( f . getCurrentDrawing ( ) . hasLayer ( K ) ) a . alert ( e . notification . dupeLayerName ) ; else { f . createLayer ( K ) ; Za ( ) ; Eb ( ) } } ) } ) ; a ( "#layer_delete" ) . click ( T ) ; a ( "#layer_up" ) . click ( function ( ) { J ( - 1 ) } ) ; a ( "#layer_down" ) . click ( function ( ) { J ( 1 ) } ) ; a ( "#layer_rename" ) . click ( function ( ) { a ( "#layerlist tr.layersel" ) . prevAll ( ) ;
var q = a ( "#layerlist tr.layersel td.layername" ) . text ( ) ; a . prompt ( e . notification . enterNewLayerName , "" , function ( B ) { if ( B ) if ( q == B || f . getCurrentDrawing ( ) . hasLayer ( B ) ) a . alert ( e . notification . layerHasThatName ) ; else { f . renameCurrentLayer ( B ) ; Eb ( ) } } ) } ) ; var ec = - 1 , mc = false , pc = false , rc = function ( q ) { if ( pc ) if ( ec != - 1 ) { mc = true ; q = ec - q . pageX ; var B = a ( "#sidepanels" ) , K = parseInt ( B . css ( "width" ) ) ; if ( K + q > 300 ) q = 300 - K ; else if ( K + q < 2 ) q = 2 - K ; if ( q != 0 ) { ec -= q ; K = a ( "#layerpanel" ) ; qa . css ( "right" , parseInt ( qa . css ( "right" ) ) + q ) ; B . css ( "width" ,
parseInt ( B . css ( "width" ) ) + q ) ; K . css ( "width" , parseInt ( K . css ( "width" ) ) + q ) ; B = a ( "#ruler_x" ) ; B . css ( "right" , parseInt ( B . css ( "right" ) ) + q ) } } } ; a ( "#sidepanel_handle" ) . mousedown ( function ( q ) { ec = q . pageX ; a ( window ) . mousemove ( rc ) ; pc = false ; setTimeout ( function ( ) { pc = true } , 20 ) } ) . mouseup ( function ( ) { mc || sc ( ) ; ec = - 1 ; mc = false } ) ; a ( window ) . mouseup ( function ( ) { ec = - 1 ; mc = false ; a ( "#svg_editor" ) . unbind ( "mousemove" , rc ) } ) ; var sc = function ( q ) { var B = parseInt ( a ( "#sidepanels" ) . css ( "width" ) ) ; q = ( B > 2 || q ? 2 : 150 ) - B ; B = a ( "#sidepanels" ) ; var K = a ( "#layerpanel" ) ,
Q = a ( "#ruler_x" ) ; qa . css ( "right" , parseInt ( qa . css ( "right" ) ) + q ) ; B . css ( "width" , parseInt ( B . css ( "width" ) ) + q ) ; K . css ( "width" , parseInt ( K . css ( "width" ) ) + q ) ; Q . css ( "right" , parseInt ( Q . css ( "right" ) ) + q ) } , tc = function ( q ) { for ( var B = Array ( f . getCurrentDrawing ( ) . getNumLayers ( ) ) , K = 0 ; K < B . length ; ++ K ) B [ K ] = f . getCurrentDrawing ( ) . getLayerName ( K ) ; if ( q ) for ( K = 0 ; K < B . length ; ++ K ) B [ K ] != q && f . getCurrentDrawing ( ) . setLayerOpacity ( B [ K ] , 0.5 ) ; else for ( K = 0 ; K < B . length ; ++ K ) f . getCurrentDrawing ( ) . setLayerOpacity ( B [ K ] , 1 ) } , Eb = function ( ) { var q = a ( "#layerlist tbody" ) ,
B = a ( "#selLayerNames" ) ; q . empty ( ) ; B . empty ( ) ; for ( var K = f . getCurrentDrawing ( ) . getCurrentLayerName ( ) , Q = f . getCurrentDrawing ( ) . getNumLayers ( ) , W = a . getSvgIcon ( "eye" ) ; Q -- ; ) { var ia = f . getCurrentDrawing ( ) . getLayerName ( Q ) , va = '<tr class="layer' ; if ( ia == K ) va += " layersel" ; va += '">' ; va += f . getCurrentDrawing ( ) . getLayerVisibility ( ia ) ? '<td class="layervis"/><td class="layername" >' + ia + "</td></tr>" : '<td class="layervis layerinvis"/><td class="layername" >' + ia + "</td></tr>" ; q . append ( va ) ; B . append ( '<option value="' + ia + '">' + ia +
"</option>" ) } if ( W !== undefined ) { W . clone ( ) ; a ( "td.layervis" , q ) . append ( W . clone ( ) ) ; a . resizeSvgIcons ( { "td.layervis .svg_icon" : 14 } ) } a ( "#layerlist td.layername" ) . mouseup ( function ( ya ) { a ( "#layerlist tr.layer" ) . removeClass ( "layersel" ) ; a ( this . parentNode ) . addClass ( "layersel" ) ; f . setCurrentLayer ( this . textContent ) ; ya . preventDefault ( ) } ) . mouseover ( function ( ) { a ( this ) . css ( { "font-style" : "italic" , color : "blue" } ) ; tc ( this . textContent ) } ) . mouseout ( function ( ) { a ( this ) . css ( { "font-style" : "normal" , color : "black" } ) ; tc ( ) } ) ; a ( "#layerlist td.layervis" ) . click ( function ( ) { var ya =
a ( this . parentNode ) . prevAll ( ) . length ; ya = a ( "#layerlist tr.layer:eq(" + ya + ") td.layername" ) . text ( ) ; var Da = a ( this ) . hasClass ( "layerinvis" ) ; f . setLayerVisibility ( ya , Da ) ; Da ? a ( this ) . removeClass ( "layerinvis" ) : a ( this ) . addClass ( "layerinvis" ) } ) ; for ( B = 5 - a ( "#layerlist tr.layer" ) . size ( ) ; B -- > 0 ; ) q . append ( '<tr><td style="color:white">_</td><td/></tr>' ) } ; Eb ( ) ; a ( window ) . bind ( "load resize" , function ( ) { qa . css ( "line-height" , qa . height ( ) + "px" ) } ) ; a ( "#resolution" ) . change ( function ( ) { var q = a ( "#canvas_width,#canvas_height" ) ; if ( this . selectedIndex ) if ( this . value ==
"content" ) q . val ( "fit" ) . attr ( "disabled" , "disabled" ) ; else { var B = this . value . split ( "x" ) ; a ( "#canvas_width" ) . val ( B [ 0 ] ) ; a ( "#canvas_height" ) . val ( B [ 1 ] ) ; q . removeAttr ( "disabled" ) } else a ( "#canvas_width" ) . val ( ) == "fit" && q . removeAttr ( "disabled" ) . val ( 100 ) } ) ; a ( "input,select" ) . attr ( "autocomplete" , "off" ) ; var oc = function ( ) { var q = [ { sel : "#tool_select" , fn : Bb , evt : "click" , key : [ "V" , true ] } , { sel : "#tool_fhpath" , fn : ob , evt : "click" , key : [ "Q" , true ] } , { sel : "#tool_line" , fn : Cb , evt : "click" , key : [ "L" , true ] } , { sel : "#tool_rect" , fn : Kb , evt : "click" ,
key : [ "R" , true ] , icon : "rect" } , { sel : "#tool_ellipse" , fn : Ib , evt : "mouseup" , key : [ "C" , true ] , icon : "ellipse" } , { sel : "#tool_path" , fn : M , evt : "click" , key : [ "P" , true ] } , { sel : "#tool_text" , fn : ta , evt : "click" , key : [ "T" , true ] } , { sel : "#tool_image" , fn : Rb , evt : "mouseup" } , { sel : "#tool_zoom" , fn : na , evt : "mouseup" , key : [ "Z" , true ] } , { sel : "#tool_clear" , fn : hc , evt : "mouseup" , key : [ fa + "N" , true ] } , { sel : "#tool_save" , fn : function ( ) { Ia ? F ( ) : f . save ( { images : b . img _save , round _digits : 6 } ) } , evt : "mouseup" , key : [ fa + "S" , true ] } , { sel : "#tool_export" , fn : ac , evt : "mouseup" } ,
{ sel : "#tool_open" , fn : nc , evt : "mouseup" } , { sel : "#tool_import" , fn : Vb , evt : "mouseup" } , { sel : "#tool_source" , fn : E , evt : "click" , key : [ fa + "U" , true ] } , { sel : "#tool_wireframe" , fn : k , evt : "click" } , { sel : "#tool_rulers" , fn : v , evt : "click" } , { sel : "#tool_source_cancel,#svg_source_overlay,#tool_docprops_cancel,#tool_prefs_cancel" , fn : ua , evt : "click" , key : [ "esc" , false , false ] , hidekey : true } , { sel : "#tool_source_save" , fn : F , evt : "click" } , { sel : "#tool_docprops_save" , fn : D , evt : "click" } , { sel : "#tool_docprops" , fn : w , evt : "mouseup" } , { sel : "#tool_prefs_save" ,
fn : G , evt : "click" } , { sel : "#tool_prefs_option" , fn : function ( ) { s ( ) ; return false } , evt : "mouseup" } , { sel : "#tool_delete,#tool_delete_multi" , fn : I , evt : "click" , key : [ "del/backspace" , true ] } , { sel : "#tool_reorient" , fn : Lb , evt : "click" } , { sel : "#tool_node_link" , fn : Qb , evt : "click" } , { sel : "#tool_node_clone" , fn : $b , evt : "click" } , { sel : "#tool_node_delete" , fn : Zb , evt : "click" } , { sel : "#tool_openclose_path" , fn : Va , evt : "click" } , { sel : "#tool_add_subpath" , fn : rb , evt : "click" } , { sel : "#tool_move_top" , fn : db , evt : "click" , key : fa + "shift+up" } , { sel : "#tool_move_bottom" ,
fn : tb , evt : "click" , key : fa + "shift+down" } , { sel : "#tool_move_up" , fn : xb , evt : "click" , key : [ fa + "up" , true ] } , { sel : "#tool_move_down" , fn : Hb , evt : "click" , key : [ fa + "down" , true ] } , { sel : "#tool_topath" , fn : pb , evt : "click" } , { sel : "#tool_make_link,#tool_make_link_multi" , fn : bb , evt : "click" } , { sel : "#tool_undo" , fn : ic , evt : "click" , key : [ fa + "Z" , true ] } , { sel : "#tool_redo" , fn : dc , evt : "click" , key : [ "Y" , true ] } , { sel : "#tool_clone,#tool_clone_multi" , fn : vb , evt : "click" , key : [ fa + "D" , true ] } , { sel : "#tool_group" , fn : Sb , evt : "click" , key : [ fa + "G" , true ] } ,
{ sel : "#tool_ungroup" , fn : Sb , evt : "click" , key : fa + "shift+G" } , { sel : "#tool_unlink_use" , fn : Sb , evt : "click" } , { sel : "[id^=tool_align]" , fn : fc , evt : "click" } , { sel : "#tool_switch" , fn : g , evt : "click" , key : [ "X" , true ] } , { sel : "#tool_bold" , fn : lc , evt : "mousedown" , key : [ fa + "B" , true ] } , { sel : "#tool_italic" , fn : Wb , evt : "mousedown" , key : [ fa + "I" , true ] } , { sel : "#copy_save_done" , fn : ua , evt : "click" } , { key : "ctrl+left" , fn : function ( ) { Ub ( 0 , 1 ) } } , { key : "ctrl+right" , fn : function ( ) { Ub ( 1 , 1 ) } } , { key : "ctrl+shift+left" , fn : function ( ) { Ub ( 0 , 5 ) } } , { key : "ctrl+shift+right" ,
fn : function ( ) { Ub ( 1 , 5 ) } } , { key : "shift+O" , fn : cc } , { key : "shift+P" , fn : gc } , { key : [ fa + "+" , true ] , fn : function ( ) { h ( 2 ) } } , { key : [ fa + "-" , true ] , fn : function ( ) { h ( 0.5 ) } } , { key : [ "up" , true ] , fn : function ( ) { qb ( 0 , - 1 ) } } , { key : [ "down" , true ] , fn : function ( ) { qb ( 0 , 1 ) } } , { key : [ "left" , true ] , fn : function ( ) { qb ( - 1 , 0 ) } } , { key : [ "right" , true ] , fn : function ( ) { qb ( 1 , 0 ) } } , { key : "shift+up" , fn : function ( ) { qb ( 0 , - 10 ) } } , { key : "shift+down" , fn : function ( ) { qb ( 0 , 10 ) } } , { key : "shift+left" , fn : function ( ) { qb ( - 10 , 0 ) } } , { key : "shift+right" , fn : function ( ) { qb ( 10 , 0 ) } } , { key : [ "alt+up" ,
true ] , fn : function ( ) { f . cloneSelectedElements ( 0 , - 1 ) } } , { key : [ "alt+down" , true ] , fn : function ( ) { f . cloneSelectedElements ( 0 , 1 ) } } , { key : [ "alt+left" , true ] , fn : function ( ) { f . cloneSelectedElements ( - 1 , 0 ) } } , { key : [ "alt+right" , true ] , fn : function ( ) { f . cloneSelectedElements ( 1 , 0 ) } } , { key : [ "alt+shift+up" , true ] , fn : function ( ) { f . cloneSelectedElements ( 0 , - 10 ) } } , { key : [ "alt+shift+down" , true ] , fn : function ( ) { f . cloneSelectedElements ( 0 , 10 ) } } , { key : [ "alt+shift+left" , true ] , fn : function ( ) { f . cloneSelectedElements ( - 10 , 0 ) } } , { key : [ "alt+shift+right" ,
true ] , fn : function ( ) { f . cloneSelectedElements ( 10 , 0 ) } } , { key : fa + "A" , fn : function ( ) { f . selectAllInCurrentLayer ( ) } } , { key : fa + "z" , fn : ic } , { key : fa + "shift+z" , fn : dc } , { key : fa + "y" , fn : dc } , { key : fa + "x" , fn : X } , { key : fa + "c" , fn : Ma } , { key : fa + "v" , fn : Xa } ] , B = { "4/Shift+4" : "#tools_rect_show" , "5/Shift+5" : "#tools_ellipse_show" } ; return { setAll : function ( ) { var K = { } ; a . each ( q , function ( Q , W ) { if ( W . sel ) { var ia = a ( W . sel ) ; if ( ia . length == 0 ) return true ; if ( W . evt ) { if ( svgedit . browser . isTouch ( ) && W . evt === "click" ) W . evt = "mousedown" ; ia [ W . evt ] ( W . fn ) } if ( W . parent &&
a ( W . parent + "_show" ) . length != 0 ) { var va = a ( W . parent ) ; va . length || ( va = Fa ( W . parent . substr ( 1 ) ) ) ; va . append ( ia ) ; a . isArray ( K [ W . parent ] ) || ( K [ W . parent ] = [ ] ) ; K [ W . parent ] . push ( W ) } } if ( W . key ) { var ya = W . fn , Da = false ; if ( a . isArray ( W . key ) ) { va = W . key [ 0 ] ; if ( W . key . length > 1 ) Da = W . key [ 1 ] } else va = W . key ; va += "" ; svgedit . browser . isMac && va . indexOf ( "+" ) != - 1 && va . split ( "+" ) [ 0 ] == "ctrl" && va . replace ( "ctrl" , "cmd" ) ; a . each ( va . split ( "/" ) , function ( Aa , fb ) { a ( document ) . bind ( "keydown" , fb , function ( gb ) { ya ( ) ; Da && gb . preventDefault ( ) ; return false } ) } ) ;
if ( W . sel && ! W . hidekey && ia . attr ( "title" ) ) { var Ha = ia . attr ( "title" ) . split ( "[" ) [ 0 ] + " (" + va + ")" ; B [ va ] = W . sel ; ia . parents ( "#main_menu" ) . length || ia . attr ( "title" , Ha ) } } } ) ; Oa ( K ) ; a ( ".attr_changer, #image_url" ) . bind ( "keydown" , "return" , function ( Q ) { a ( this ) . change ( ) ; Q . preventDefault ( ) } ) ; a ( window ) . bind ( "keydown" , "tab" , function ( Q ) { if ( U === "canvas" ) { Q . preventDefault ( ) ; gc ( ) } } ) . bind ( "keydown" , "shift+tab" , function ( Q ) { if ( U === "canvas" ) { Q . preventDefault ( ) ; cc ( ) } } ) ; a ( "#tool_zoom" ) . dblclick ( Z ) } , setTitles : function ( ) { a . each ( B , function ( K ,
Q ) { var W = a ( Q ) . parents ( "#main_menu" ) . length ; a ( Q ) . each ( function ( ) { var ia = W ? a ( this ) . text ( ) . split ( " [" ) [ 0 ] : this . title . split ( " [" ) [ 0 ] , va = "" ; a . each ( K . split ( "/" ) , function ( ya , Da ) { var Ha = Da . split ( "+" ) , Aa = "" ; if ( Ha . length > 1 ) { Aa = Ha [ 0 ] + "+" ; Da = Ha [ 1 ] } va += ( ya ? "/" : "" ) + Aa + ( e [ "key_" + Da ] || Da ) } ) ; if ( W ) this . lastChild . textContent = ia + " [" + va + "]" ; else this . title = ia + " [" + va + "]" } ) } ) } , getButtonData : function ( K ) { var Q ; a . each ( q , function ( W , ia ) { if ( ia . sel === K ) Q = ia } ) ; return Q } } } ( ) ; oc . setAll ( ) ; c . ready ( function ( ) { var q = d . initTool , B = a ( "#tools_left, #svg_editor .tools_flyout" ) ,
K = B . find ( "#tool_" + q ) ; q = B . find ( "#" + q ) ; ( K . length ? K : q . length ? q : a ( "#tool_select" ) ) . click ( ) . mouseup ( ) ; d . wireframe && a ( "#tool_wireframe" ) . click ( ) ; d . showlayers && sc ( ) ; a ( "#rulers" ) . toggle ( ! ! d . showRulers ) ; if ( d . showRulers ) a ( "#show_rulers" ) [ 0 ] . checked = true ; if ( d . gridSnapping ) a ( "#grid_snapping_on" ) [ 0 ] . checked = true ; d . baseUnit && a ( "#base_unit" ) . val ( d . baseUnit ) ; d . snappingStep && a ( "#grid_snapping_step" ) . val ( d . snappingStep ) } ) ; a ( "#rect_rx" ) . SpinButton ( { min : 0 , max : 1E3 , step : 1 , callback : function ( q ) { f . setRectRadius ( q . value ) } } ) ;
a ( "#stroke_width" ) . SpinButton ( { min : 0 , max : 99 , step : 1 , smallStep : 0.1 , callback : function ( q ) { var B = q . value ; if ( B == 0 && Y && [ "line" , "polyline" ] . indexOf ( Y . nodeName ) >= 0 ) B = q . value = 1 ; f . setStrokeWidth ( B ) } } ) ; a ( "#angle" ) . SpinButton ( { min : - 180 , max : 180 , step : 5 , callback : function ( q ) { f . setRotationAngle ( q . value ) ; a ( "#tool_reorient" ) . toggleClass ( "disabled" , q . value == 0 ) } } ) ; a ( "#font_size" ) . SpinButton ( { step : 1 , min : 0.0010 , stepfunc : function ( q , B ) { var K = q . value - 0 , Q = K + B , W = Q >= K ; if ( B === 0 ) return K ; return K >= 24 ? W ? Math . round ( K * 1.1 ) : Math . round ( K /
1.1 ) : K <= 1 ? W ? K * 2 : K / 2 : Q } , callback : function ( q ) { f . setFontSize ( q . value ) } } ) ; a ( "#group_opacity" ) . SpinButton ( { step : 5 , min : 0 , max : 100 , callback : mb } ) ; a ( "#blur" ) . SpinButton ( { step : 0.1 , min : 0 , max : 10 , callback : Ab } ) ; a ( "#zoom" ) . SpinButton ( { min : 0.0010 , max : 1E4 , step : 50 , stepfunc : function ( q , B ) { var K = q . value - 0 ; if ( K === 0 ) return 100 ; var Q = K + B ; if ( B === 0 ) return K ; return K >= 100 ? Q : Q >= K ? K * 2 : K / 2 } , callback : Na } ) . val ( f . getZoom ( ) * 100 ) ; a ( "#workarea" ) . contextMenu ( { menu : "cmenu_canvas" , inSpeed : 0 } , function ( q ) { switch ( q ) { case "delete" : I ( ) ; break ;
case "cut" : X ( ) ; break ; case "copy" : Ma ( ) ; break ; case "paste" : f . pasteElements ( ) ; break ; case "paste_in_place" : f . pasteElements ( "in_place" ) ; break ; case "group" : f . groupSelectedElements ( ) ; break ; case "ungroup" : f . ungroupSelectedElement ( ) ; break ; case "move_front" : db ( ) ; break ; case "move_up" : Y != null && f . moveUpDownSelected ( "Up" ) ; break ; case "move_down" : Y != null && f . moveUpDownSelected ( "Down" ) ; break ; case "move_back" : tb ( ) ; break ; default : svgedit . contextmenu && svgedit . contextmenu . hasCustomHandler ( q ) && svgedit . contextmenu . getCustomHandler ( q ) . call ( ) } f . clipBoard . length &&
pa . enableContextMenuItems ( "#paste,#paste_in_place" ) } ) ; V = function ( q ) { switch ( q ) { case "dupe" : N ( ) ; break ; case "delete" : T ( ) ; break ; case "merge_down" : if ( a ( "#layerlist tr.layersel" ) . index ( ) != f . getCurrentDrawing ( ) . getNumLayers ( ) - 1 ) { f . mergeLayer ( ) ; Za ( ) ; Eb ( ) } break ; case "merge_all" : f . mergeAllLayers ( ) ; Za ( ) ; Eb ( ) } } ; a ( "#layerlist" ) . contextMenu ( { menu : "cmenu_layers" , inSpeed : 0 } , V ) ; a ( "#layer_moreopts" ) . contextMenu ( { menu : "cmenu_layers" , inSpeed : 0 , allowLeft : true } , V ) ; a ( ".contextMenu li" ) . mousedown ( function ( q ) { q . preventDefault ( ) } ) ;
a ( "#cmenu_canvas li" ) . disableContextMenu ( ) ; pa . enableContextMenuItems ( "#delete,#cut,#copy" ) ; window . onbeforeunload = function ( ) { if ( ja . getUndoStackSize ( ) === 0 ) c . show _save _warning = false ; if ( ! d . no _save _warning && c . show _save _warning ) return e . notification . unsavedChanges } ; c . openPrep = function ( q ) { a ( "#main_menu" ) . hide ( ) ; ja . getUndoStackSize ( ) === 0 ? q ( true ) : a . confirm ( e . notification . QwantToOpen , q ) } ; if ( window . FileReader ) { V = a ( '<input type="file">' ) . change ( function ( ) { var q = this ; c . openPrep ( function ( B ) { if ( B ) { f . clear ( ) ; if ( q . files . length ==
1 ) { B = new FileReader ; B . onloadend = function ( K ) { n ( K . target . result ) ; Tb ( ) } ; B . readAsText ( q . files [ 0 ] ) } } } ) } ) ; a ( "#tool_open" ) . show ( ) . prepend ( V ) ; V = a ( '<input type="file">' ) . change ( function ( ) { a ( "#main_menu" ) . hide ( ) ; if ( this . files . length == 1 ) { var q = new FileReader ; q . onloadend = function ( B ) { f . importSvgString ( B . target . result , true ) ; Tb ( ) } ; q . readAsText ( this . files [ 0 ] ) } } ) ; a ( "#tool_import" ) . show ( ) . prepend ( V ) } var Tb = c . updateCanvas = function ( q , B ) { var K = qa . width ( ) , Q = qa . height ( ) , W = K , ia = Q , va = f . getZoom ( ) , ya = a ( "#svgcanvas" ) , Da = { x : qa [ 0 ] . scrollLeft +
W / 2 , y : qa [ 0 ] . scrollTop + ia / 2 } , Ha = d . canvas _expansion ; K = Math . max ( W , f . contentW * va * Ha ) ; Q = Math . max ( ia , f . contentH * va * Ha ) ; K == W && Q == ia ? qa . css ( "overflow" , "hidden" ) : qa . css ( "overflow" , "scroll" ) ; Ha = ya . height ( ) / 2 ; var Aa = ya . width ( ) / 2 ; ya . width ( K ) . height ( Q ) ; var fb = Q / 2 , gb = K / 2 , ga = f . updateCanvas ( K , Q ) , zb = gb / Aa ; K = K / 2 - W / 2 ; Q = Q / 2 - ia / 2 ; if ( B ) { B . x += ga . x ; B . y += ga . y } else B = { x : gb + ( Da . x - Aa ) * zb , y : fb + ( Da . y - Ha ) * zb } ; if ( q ) if ( f . contentW > qa . width ( ) ) { qa [ 0 ] . scrollLeft = ga . x - 10 ; qa [ 0 ] . scrollTop = ga . y - 10 } else { qa [ 0 ] . scrollLeft = K ; qa [ 0 ] . scrollTop =
Q } else { qa [ 0 ] . scrollLeft = B . x - W / 2 ; qa [ 0 ] . scrollTop = B . y - ia / 2 } if ( d . showRulers ) { da ( ya , va ) ; qa . scroll ( ) } } , jc = [ ] ; for ( Sa = 0.1 ; Sa < 1E5 ; Sa *= 10 ) { jc . push ( 1 * Sa ) ; jc . push ( 2 * Sa ) ; jc . push ( 5 * Sa ) } Tb ( true ) ; try { var uc = function ( q ) { if ( window . JSON && JSON . stringify ) return JSON . stringify ( q ) ; var B = arguments . callee ; if ( typeof q == "boolean" || typeof q == "number" ) return q + "" ; else if ( typeof q == "string" ) return '"' + q . replace ( /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g ,
function ( W ) { return "\\u" + ( "0000" + W . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) } ) + '"' ; else if ( q . length ) { for ( var K = 0 ; K < q . length ; K ++ ) q [ K ] = B ( q [ K ] ) ; return "[" + q . join ( "," ) + "]" } else { K = [ ] ; for ( var Q in q ) K . push ( B ( Q ) + ":" + B ( q [ Q ] ) ) ; return "{" + K . join ( "," ) + "}" } } ; window . addEventListener ( "message" , function ( q ) { var B = parseInt ( q . data . substr ( 0 , q . data . indexOf ( ";" ) ) ) ; try { q . source . postMessage ( "SVGe" + B + ";" + uc ( eval ( q . data ) ) , "*" ) } catch ( K ) { q . source . postMessage ( "SVGe" + B + ";error:" + K . message , "*" ) } } , false ) } catch ( vc ) { window . embed _error =
vc } a ( function ( ) { window . svgCanvas = f ; f . ready = svgEditor . ready } ) ; c . setLang = function ( q , B ) { a . pref ( "lang" , q ) ; a ( "#lang_select" ) . val ( q ) ; if ( B ) { var K = a ( "#layerlist tr.layersel td.layername" ) . text ( ) == e . common . layer + " 1" ; a . extend ( e , B ) ; f . setUiStrings ( B ) ; oc . setTitles ( ) ; if ( K ) { f . renameCurrentLayer ( e . common . layer + " 1" ) ; Eb ( ) } f . runExtensions ( "langChanged" , q ) ; Nb ( ) ; a . each ( { "#stroke_color" : "#tool_stroke .icon_label, #tool_stroke .color_block" , "#fill_color" : "#tool_fill label, #tool_fill .color_block" , "#linejoin_miter" : "#cur_linejoin" ,
"#linecap_butt" : "#cur_linecap" } , function ( Q , W ) { a ( W ) . attr ( "title" , a ( Q ) [ 0 ] . title ) } ) ; a ( "#multiselected_panel div[id^=tool_align]" ) . each ( function ( ) { a ( "#tool_pos" + this . id . substr ( 10 ) ) [ 0 ] . title = this . title } ) } } } ; var u = [ ] ; c . ready = function ( z ) { m ? z ( ) : u . push ( z ) } ; c . runCallbacks = function ( ) { a . each ( u , function ( ) { this ( ) } ) ; m = true } ; c . loadFromString = function ( z ) { c . ready ( function ( ) { n ( z ) } ) } ; c . disableUI = function ( ) { } ; c . loadFromURL = function ( z , o ) { o || ( o = { } ) ; var L = o . cache , T = o . callback ; c . ready ( function ( ) { a . ajax ( { url : z , dataType : "text" ,
cache : ! ! L , success : function ( N ) { n ( N , T ) } , error : function ( N , J , da ) { N . status != 404 && N . responseText ? n ( N . responseText , T ) : a . alert ( e . notification . URLloadFail + ": \n" + da + "" , T ) } } ) } ) } ; c . loadFromDataURI = function ( z ) { c . ready ( function ( ) { var o = z . substring ( 26 ) ; n ( svgedit . utilities . decode64 ( o ) ) } ) } ; c . addExtension = function ( ) { var z = arguments ; a ( function ( ) { f && f . addExtension . apply ( this , z ) } ) } ; return c } ( jQuery ) ; $ ( svgEditor . init ) } ) ( ) ; svgedit = svgedit || { } ;
( function ( ) { var a = this ; if ( ! svgedit . contextmenu ) svgedit . contextmenu = { } ; a . contextMenuExtensions = { } ; svgEditor . ready ( function ( ) { for ( menuItem in contextMenuExtensions ) { var n = contextMenuExtensions [ menuItem ] ; Object . keys ( a . contextMenuExtensions ) . length == 0 && $ ( "#cmenu_canvas" ) . append ( "<li class='separator'>" ) ; var f = n . shortcut || "" ; $ ( "#cmenu_canvas" ) . append ( "<li class='disabled'><a href='#" + n . id + "'>" + n . label + "<span class='shortcut'>" + f + "</span></a></li>" ) } } ) ; svgedit . contextmenu . resetCustomMenus = function ( ) { a . contextMenuExtensions =
{ } } ; svgedit . contextmenu . add = function ( n ) { if ( n && n . id && n . label && n . action && typeof n . action == "function" ) if ( n . id in a . contextMenuExtensions ) console . error ( 'Cannot add extension "' + n . id + '", an extension by that name already exists"' ) ; else { console . log ( "Registed contextmenu item: {id:" + n . id + ", label:" + n . label + "}" ) ; a . contextMenuExtensions [ n . id ] = n } else console . error ( "Menu items must be defined and have at least properties: id, label, action, where action must be a function" ) } ; svgedit . contextmenu . hasCustomHandler =
function ( n ) { return a . contextMenuExtensions [ n ] && true } ; svgedit . contextmenu . getCustomHandler = function ( n ) { return a . contextMenuExtensions [ n ] . action } } ) ( ) ; var svgEditor = function ( a , n ) { function f ( m , p , b ) { var d = a ( "#svg_editor" ) . parent ( ) , e ; for ( e in p ) { var l = p [ e ] ; l || console . log ( e ) ; if ( b ) e = "#" + e ; if ( d . find ( e ) . length ) { var u = d . find ( e ) [ 0 ] ; switch ( m ) { case "content" : for ( var z = 0 ; z < u . childNodes . length ; z ++ ) { var o = u . childNodes [ z ] ; if ( o . nodeType === 3 && o . textContent . replace ( /\s/g , "" ) ) { o . textContent = l ; break } } break ; case "title" : u . title = l } } else console . log ( "Missing: " + e ) } } var c ; n . readLang = function ( m ) { var p = n . canvas . runExtensions ( "addlangData" , c , true ) ; a . each ( p , function ( T , N ) { if ( N . data ) m =
a . merge ( m , N . data ) } ) ; if ( m . tools ) { var b = m . tools ; p = m . properties ; var d = m . config , e = m . layers , l = m . common , u = m . ui ; f ( "content" , { copyrightLabel : m . misc . powered _by , curve _segments : p . curve _segments , fitToContent : b . fitToContent , fit _to _all : b . fit _to _all , fit _to _canvas : b . fit _to _canvas , fit _to _layer _content : b . fit _to _layer _content , fit _to _sel : b . fit _to _sel , icon _large : d . icon _large , icon _medium : d . icon _medium , icon _small : d . icon _small , icon _xlarge : d . icon _xlarge , image _opt _embed : d . image _opt _embed , image _opt _ref : d . image _opt _ref , includedImages : d . included _images ,
largest _object : b . largest _object , layersLabel : e . layers , page : b . page , relativeToLabel : b . relativeTo , selLayerLabel : e . move _elems _to , selectedPredefined : d . select _predefined , selected _objects : b . selected _objects , smallest _object : b . smallest _object , straight _segments : p . straight _segments , svginfo _bg _url : d . editor _img _url + ":" , svginfo _bg _note : d . editor _bg _note , svginfo _change _background : d . background , svginfo _dim : d . doc _dims , svginfo _editor _prefs : d . editor _prefs , svginfo _height : l . height , svginfo _icons : d . icon _size , svginfo _image _props : d . image _props ,
svginfo _lang : d . language , svginfo _title : d . doc _title , svginfo _width : l . width , tool _docprops _cancel : l . cancel , tool _docprops _save : l . ok , tool _source _cancel : l . cancel , tool _source _save : l . ok , tool _prefs _cancel : l . cancel , tool _prefs _save : l . ok , sidepanel _handle : e . layers . split ( "" ) . join ( " " ) , tool _clear : b . new _doc , tool _docprops : b . docprops , tool _export : b . export _png , tool _import : b . import _doc , tool _imagelib : b . imagelib , tool _open : b . open _doc , tool _save : b . save _doc , svginfo _units _rulers : d . units _and _rulers , svginfo _rulers _onoff : d . show _rulers ,
svginfo _unit : d . base _unit , svginfo _grid _settings : d . grid , svginfo _snap _onoff : d . snapping _onoff , svginfo _snap _step : d . snapping _stepsize } , true ) ; var z = { } , o ; for ( o in m . shape _cats ) z [ '#shape_cats [data-cat="' + o + '"]' ] = m . shape _cats [ o ] ; setTimeout ( function ( ) { f ( "content" , z ) } , 2E3 ) ; var L = { } ; a . each ( [ "cut" , "copy" , "paste" , "paste_in_place" , "delete" , "group" , "ungroup" , "move_front" , "move_up" , "move_down" , "move_back" ] , function ( ) { L [ '#cmenu_canvas a[href="#' + this + '"]' ] = b [ this ] } ) ; a . each ( [ "dupe" , "merge_down" , "merge_all" ] , function ( ) { L [ '#cmenu_layers a[href="#' +
this + '"]' ] = e [ this ] } ) ; L [ '#cmenu_layers a[href="#delete"]' ] = e . del ; f ( "content" , L ) ; f ( "title" , { align _relative _to : b . align _relative _to , circle _cx : p . circle _cx , circle _cy : p . circle _cy , circle _r : p . circle _r , cornerRadiusLabel : p . corner _radius , ellipse _cx : p . ellipse _cx , ellipse _cy : p . ellipse _cy , ellipse _rx : p . ellipse _rx , ellipse _ry : p . ellipse _ry , fill _color : p . fill _color , font _family : p . font _family , idLabel : p . id , image _height : p . image _height , image _url : p . image _url , image _width : p . image _width , layer _delete : e . del , layer _down : e . move _down ,
layer _new : e [ "new" ] , layer _rename : e . rename , layer _moreopts : l . more _opts , layer _up : e . move _up , line _x1 : p . line _x1 , line _x2 : p . line _x2 , line _y1 : p . line _y1 , line _y2 : p . line _y2 , linecap _butt : p . linecap _butt , linecap _round : p . linecap _round , linecap _square : p . linecap _square , linejoin _bevel : p . linejoin _bevel , linejoin _miter : p . linejoin _miter , linejoin _round : p . linejoin _round , main _icon : b . main _menu , mode _connect : b . mode _connect , tools _shapelib _show : b . mode _shapelib , palette : u . palette _info , zoom _panel : u . zoom _level , path _node _x : p . node _x , path _node _y : p . node _y ,
rect _height _tool : p . rect _height , rect _width _tool : p . rect _width , seg _type : p . seg _type , selLayerNames : e . move _selected , selected _x : p . pos _x , selected _y : p . pos _y , stroke _color : p . stroke _color , stroke _style : p . stroke _style , stroke _width : p . stroke _width , svginfo _title : d . doc _title , text : p . text _contents , toggle _stroke _tools : u . toggle _stroke _tools , tool _add _subpath : b . add _subpath , tool _alignbottom : b . align _bottom , tool _aligncenter : b . align _center , tool _alignleft : b . align _left , tool _alignmiddle : b . align _middle , tool _alignright : b . align _right ,
tool _aligntop : b . align _top , tool _angle : p . angle , tool _blur : p . blur , tool _bold : p . bold , tool _circle : b . mode _circle , tool _clone : b . clone , tool _clone _multi : b . clone , tool _delete : b . del , tool _delete _multi : b . del , tool _ellipse : b . mode _ellipse , tool _eyedropper : b . mode _eyedropper , tool _fhellipse : b . mode _fhellipse , tool _fhpath : b . mode _fhpath , tool _fhrect : b . mode _fhrect , tool _font _size : p . font _size , tool _group : b . group , tool _make _link : b . make _link , tool _link _url : b . set _link _url , tool _image : b . mode _image , tool _italic : p . italic , tool _line : b . mode _line ,
tool _move _bottom : b . move _bottom , tool _move _top : b . move _top , tool _node _clone : b . node _clone , tool _node _delete : b . node _delete , tool _node _link : b . node _link , tool _opacity : p . opacity , tool _openclose _path : b . openclose _path , tool _path : b . mode _path , tool _position : b . align _to _page , tool _rect : b . mode _rect , tool _redo : b . redo , tool _reorient : b . reorient _path , tool _select : b . mode _select , tool _source : b . source _save , tool _square : b . mode _square , tool _text : b . mode _text , tool _topath : b . to _path , tool _undo : b . undo , tool _ungroup : b . ungroup , tool _wireframe : b . wireframe _mode ,
view _grid : b . toggle _grid , tool _zoom : b . mode _zoom , url _notice : b . no _embed } , true ) ; n . setLang ( c , m ) } } ; n . putLocale = function ( m , p ) { if ( m ) c = m ; else { c = a . pref ( "lang" ) ; if ( ! c ) { if ( navigator . userLanguage ) c = navigator . userLanguage ; else if ( navigator . language ) c = navigator . language ; if ( c == "" ) return } console . log ( "Lang: " + c ) ; if ( a . inArray ( c , p ) == - 1 && c !== "test" ) c = "en" ; if ( c . indexOf ( "en" ) == 0 ) return } var b = n . curConfig . langPath + "lang." + c + ".js" ; a . getScript ( b , function ( d ) { if ( ! d ) { d = document . createElement ( "script" ) ; d . src = b ; document . querySelector ( "head" ) . appendChild ( d ) } } ) } ;
return n } ( jQuery , svgEditor ) ; ( function ( a , n ) { function f ( m ) { return ! a ( m ) . parents ( ) . andSelf ( ) . filter ( function ( ) { return a . curCSS ( this , "visibility" ) === "hidden" || a . expr . filters . hidden ( this ) } ) . length } function c ( m , p ) { var b = m . nodeName . toLowerCase ( ) ; if ( "area" === b ) { b = m . parentNode ; var d = b . name ; if ( ! m . href || ! d || b . nodeName . toLowerCase ( ) !== "map" ) return false ; b = a ( "img[usemap=#" + d + "]" ) [ 0 ] ; return ! ! b && f ( b ) } return ( /input|select|textarea|button|object/ . test ( b ) ? ! m . disabled : "a" == b ? m . href || p : p ) && f ( m ) } a . ui = a . ui || { } ; a . ui . version || ( a . extend ( a . ui , { version : "1.8.17" ,
keyCode : { ALT : 18 , BACKSPACE : 8 , CAPS _LOCK : 20 , COMMA : 188 , COMMAND : 91 , COMMAND _LEFT : 91 , COMMAND _RIGHT : 93 , CONTROL : 17 , DELETE : 46 , DOWN : 40 , END : 35 , ENTER : 13 , ESCAPE : 27 , HOME : 36 , INSERT : 45 , LEFT : 37 , MENU : 93 , NUMPAD _ADD : 107 , NUMPAD _DECIMAL : 110 , NUMPAD _DIVIDE : 111 , NUMPAD _ENTER : 108 , NUMPAD _MULTIPLY : 106 , NUMPAD _SUBTRACT : 109 , PAGE _DOWN : 34 , PAGE _UP : 33 , PERIOD : 190 , RIGHT : 39 , SHIFT : 16 , SPACE : 32 , TAB : 9 , UP : 38 , WINDOWS : 91 } } ) , a . fn . extend ( { propAttr : a . fn . prop || a . fn . attr , _focus : a . fn . focus , focus : function ( m , p ) { return typeof m == "number" ? this . each ( function ( ) { var b =
this ; setTimeout ( function ( ) { a ( b ) . focus ( ) ; p && p . call ( b ) } , m ) } ) : this . _focus . apply ( this , arguments ) } , scrollParent : function ( ) { var m ; a . browser . msie && /(static|relative)/ . test ( this . css ( "position" ) ) || /absolute/ . test ( this . css ( "position" ) ) ? m = this . parents ( ) . filter ( function ( ) { return /(relative|absolute|fixed)/ . test ( a . curCSS ( this , "position" , 1 ) ) && /(auto|scroll)/ . test ( a . curCSS ( this , "overflow" , 1 ) + a . curCSS ( this , "overflow-y" , 1 ) + a . curCSS ( this , "overflow-x" , 1 ) ) } ) . eq ( 0 ) : m = this . parents ( ) . filter ( function ( ) { return /(auto|scroll)/ . test ( a . curCSS ( this ,
"overflow" , 1 ) + a . curCSS ( this , "overflow-y" , 1 ) + a . curCSS ( this , "overflow-x" , 1 ) ) } ) . eq ( 0 ) ; return /fixed/ . test ( this . css ( "position" ) ) || ! m . length ? a ( document ) : m } , zIndex : function ( m ) { if ( m !== n ) return this . css ( "zIndex" , m ) ; if ( this . length ) { m = a ( this [ 0 ] ) ; for ( var p ; m . length && m [ 0 ] !== document ; ) { p = m . css ( "position" ) ; if ( p === "absolute" || p === "relative" || p === "fixed" ) { p = parseInt ( m . css ( "zIndex" ) , 10 ) ; if ( ! isNaN ( p ) && p !== 0 ) return p } m = m . parent ( ) } } return 0 } , disableSelection : function ( ) { return this . bind ( ( a . support . selectstart ? "selectstart" :
"mousedown" ) + ".ui-disableSelection" , function ( m ) { m . preventDefault ( ) } ) } , enableSelection : function ( ) { return this . unbind ( ".ui-disableSelection" ) } } ) , a . each ( [ "Width" , "Height" ] , function ( m , p ) { function b ( u , z , o , L ) { a . each ( d , function ( ) { z -= parseFloat ( a . curCSS ( u , "padding" + this , true ) ) || 0 ; o && ( z -= parseFloat ( a . curCSS ( u , "border" + this + "Width" , true ) ) || 0 ) ; L && ( z -= parseFloat ( a . curCSS ( u , "margin" + this , true ) ) || 0 ) } ) ; return z } var d = p === "Width" ? [ "Left" , "Right" ] : [ "Top" , "Bottom" ] , e = p . toLowerCase ( ) , l = { innerWidth : a . fn . innerWidth , innerHeight : a . fn . innerHeight ,
outerWidth : a . fn . outerWidth , outerHeight : a . fn . outerHeight } ; a . fn [ "inner" + p ] = function ( u ) { if ( u === n ) return l [ "inner" + p ] . call ( this ) ; return this . each ( function ( ) { a ( this ) . css ( e , b ( this , u ) + "px" ) } ) } ; a . fn [ "outer" + p ] = function ( u , z ) { if ( typeof u != "number" ) return l [ "outer" + p ] . call ( this , u ) ; return this . each ( function ( ) { a ( this ) . css ( e , b ( this , u , true , z ) + "px" ) } ) } } ) , a . extend ( a . expr [ ":" ] , { data : function ( m , p , b ) { return ! ! a . data ( m , b [ 3 ] ) } , focusable : function ( m ) { return c ( m , ! isNaN ( a . attr ( m , "tabindex" ) ) ) } , tabbable : function ( m ) { var p = a . attr ( m ,
"tabindex" ) , b = isNaN ( p ) ; return ( b || p >= 0 ) && c ( m , ! b ) } } ) , a ( function ( ) { var m = document . body , p = m . appendChild ( p = document . createElement ( "div" ) ) ; a . extend ( p . style , { minHeight : "100px" , height : "auto" , padding : 0 , borderWidth : 0 } ) ; a . support . minHeight = p . offsetHeight === 100 ; a . support . selectstart = "onselectstart" in p ; m . removeChild ( p ) . style . display = "none" } ) , a . extend ( a . ui , { plugin : { add : function ( m , p , b ) { m = a . ui [ m ] . prototype ; for ( var d in b ) { m . plugins [ d ] = m . plugins [ d ] || [ ] ; m . plugins [ d ] . push ( [ p , b [ d ] ] ) } } , call : function ( m , p , b ) { if ( ( p = m . plugins [ p ] ) &&
m . element [ 0 ] . parentNode ) for ( var d = 0 ; d < p . length ; d ++ ) m . options [ p [ d ] [ 0 ] ] && p [ d ] [ 1 ] . apply ( m . element , b ) } } , contains : function ( m , p ) { return document . compareDocumentPosition ? m . compareDocumentPosition ( p ) & 16 : m !== p && m . contains ( p ) } , hasScroll : function ( m , p ) { if ( a ( m ) . css ( "overflow" ) === "hidden" ) return false ; var b = p && p === "left" ? "scrollLeft" : "scrollTop" , d = false ; if ( m [ b ] > 0 ) return true ; m [ b ] = 1 ; d = m [ b ] > 0 ; m [ b ] = 0 ; return d } , isOverAxis : function ( m , p , b ) { return m > p && m < p + b } , isOver : function ( m , p , b , d , e , l ) { return a . ui . isOverAxis ( m , b , e ) &&
a . ui . isOverAxis ( p , d , l ) } } ) ) } ) ( jQuery ) ;
( function ( a , n ) { if ( a . cleanData ) { var f = a . cleanData ; a . cleanData = function ( m ) { for ( var p = 0 , b ; ( b = m [ p ] ) != null ; p ++ ) try { a ( b ) . triggerHandler ( "remove" ) } catch ( d ) { } f ( m ) } } else { var c = a . fn . remove ; a . fn . remove = function ( m , p ) { return this . each ( function ( ) { p || ( ! m || a . filter ( m , [ this ] ) . length ) && a ( "*" , this ) . add ( [ this ] ) . each ( function ( ) { try { a ( this ) . triggerHandler ( "remove" ) } catch ( b ) { } } ) ; return c . call ( a ( this ) , m , p ) } ) } } a . widget = function ( m , p , b ) { var d = m . split ( "." ) [ 0 ] , e ; m = m . split ( "." ) [ 1 ] ; e = d + "-" + m ; b || ( b = p , p = a . Widget ) ; a . expr [ ":" ] [ e ] =
function ( l ) { return ! ! a . data ( l , m ) } ; a [ d ] = a [ d ] || { } ; a [ d ] [ m ] = function ( l , u ) { arguments . length && this . _createWidget ( l , u ) } ; p = new p ; p . options = a . extend ( true , { } , p . options ) ; a [ d ] [ m ] . prototype = a . extend ( true , p , { namespace : d , widgetName : m , widgetEventPrefix : a [ d ] [ m ] . prototype . widgetEventPrefix || m , widgetBaseClass : e } , b ) ; a . widget . bridge ( m , a [ d ] [ m ] ) } ; a . widget . bridge = function ( m , p ) { a . fn [ m ] = function ( b ) { var d = typeof b == "string" , e = Array . prototype . slice . call ( arguments , 1 ) , l = this ; b = ! d && e . length ? a . extend . apply ( null , [ true , b ] . concat ( e ) ) :
b ; if ( d && b . charAt ( 0 ) === "_" ) return l ; d ? this . each ( function ( ) { var u = a . data ( this , m ) , z = u && a . isFunction ( u [ b ] ) ? u [ b ] . apply ( u , e ) : u ; if ( z !== u && z !== n ) { l = z ; return false } } ) : this . each ( function ( ) { var u = a . data ( this , m ) ; u ? u . option ( b || { } ) . _init ( ) : a . data ( this , m , new p ( b , this ) ) } ) ; return l } } ; a . Widget = function ( m , p ) { arguments . length && this . _createWidget ( m , p ) } ; a . Widget . prototype = { widgetName : "widget" , widgetEventPrefix : "" , options : { disabled : false } , _createWidget : function ( m , p ) { a . data ( p , this . widgetName , this ) ; this . element = a ( p ) ; this . options =
a . extend ( true , { } , this . options , this . _getCreateOptions ( ) , m ) ; var b = this ; this . element . bind ( "remove." + this . widgetName , function ( ) { b . destroy ( ) } ) ; this . _create ( ) ; this . _trigger ( "create" ) ; this . _init ( ) } , _getCreateOptions : function ( ) { return a . metadata && a . metadata . get ( this . element [ 0 ] ) [ this . widgetName ] } , _create : function ( ) { } , _init : function ( ) { } , destroy : function ( ) { this . element . unbind ( "." + this . widgetName ) . removeData ( this . widgetName ) ; this . widget ( ) . unbind ( "." + this . widgetName ) . removeAttr ( "aria-disabled" ) . removeClass ( this . widgetBaseClass +
"-disabled ui-state-disabled" ) } , widget : function ( ) { return this . element } , option : function ( m , p ) { var b = m ; if ( arguments . length === 0 ) return a . extend ( { } , this . options ) ; if ( typeof m == "string" ) { if ( p === n ) return this . options [ m ] ; b = { } ; b [ m ] = p } this . _setOptions ( b ) ; return this } , _setOptions : function ( m ) { var p = this ; a . each ( m , function ( b , d ) { p . _setOption ( b , d ) } ) ; return this } , _setOption : function ( m , p ) { this . options [ m ] = p ; m === "disabled" && this . widget ( ) [ p ? "addClass" : "removeClass" ] ( this . widgetBaseClass + "-disabled ui-state-disabled" ) . attr ( "aria-disabled" ,
p ) ; return this } , enable : function ( ) { return this . _setOption ( "disabled" , false ) } , disable : function ( ) { return this . _setOption ( "disabled" , true ) } , _trigger : function ( m , p , b ) { var d , e = this . options [ m ] ; b = b || { } ; p = a . Event ( p ) ; p . type = ( m === this . widgetEventPrefix ? m : this . widgetEventPrefix + m ) . toLowerCase ( ) ; p . target = this . element [ 0 ] ; if ( m = p . originalEvent ) for ( d in m ) d in p || ( p [ d ] = m [ d ] ) ; this . element . trigger ( p , b ) ; return ! ( a . isFunction ( e ) && e . call ( this . element [ 0 ] , p , b ) === false || p . isDefaultPrevented ( ) ) } } } ) ( jQuery ) ;
( function ( a ) { var n = false ; a ( document ) . mouseup ( function ( ) { n = false } ) ; a . widget ( "ui.mouse" , { options : { cancel : ":input,option" , distance : 1 , delay : 0 } , _mouseInit : function ( ) { var f = this ; this . element . bind ( "mousedown." + this . widgetName , function ( c ) { return f . _mouseDown ( c ) } ) . bind ( "click." + this . widgetName , function ( c ) { if ( true === a . data ( c . target , f . widgetName + ".preventClickEvent" ) ) { a . removeData ( c . target , f . widgetName + ".preventClickEvent" ) ; c . stopImmediatePropagation ( ) ; return false } } ) ; this . started = false } , _mouseDestroy : function ( ) { this . element . unbind ( "." +
this . widgetName ) } , _mouseDown : function ( f ) { if ( ! n ) { this . _mouseStarted && this . _mouseUp ( f ) ; this . _mouseDownEvent = f ; var c = this , m = f . which == 1 , p = typeof this . options . cancel == "string" && f . target . nodeName ? a ( f . target ) . closest ( this . options . cancel ) . length : false ; if ( ! m || p || ! this . _mouseCapture ( f ) ) return true ; ( this . mouseDelayMet = ! this . options . delay ) || ( this . _mouseDelayTimer = setTimeout ( function ( ) { c . mouseDelayMet = true } , this . options . delay ) ) ; if ( this . _mouseDistanceMet ( f ) && this . _mouseDelayMet ( f ) ) { this . _mouseStarted = this . _mouseStart ( f ) !==
false ; if ( ! this . _mouseStarted ) { f . preventDefault ( ) ; return true } } true === a . data ( f . target , this . widgetName + ".preventClickEvent" ) && a . removeData ( f . target , this . widgetName + ".preventClickEvent" ) ; this . _mouseMoveDelegate = function ( b ) { return c . _mouseMove ( b ) } ; this . _mouseUpDelegate = function ( b ) { return c . _mouseUp ( b ) } ; a ( document ) . bind ( "mousemove." + this . widgetName , this . _mouseMoveDelegate ) . bind ( "mouseup." + this . widgetName , this . _mouseUpDelegate ) ; f . preventDefault ( ) ; return n = true } } , _mouseMove : function ( f ) { if ( a . browser . msie &&
! ( document . documentMode >= 9 ) && ! f . button ) return this . _mouseUp ( f ) ; if ( this . _mouseStarted ) { this . _mouseDrag ( f ) ; return f . preventDefault ( ) } this . _mouseDistanceMet ( f ) && this . _mouseDelayMet ( f ) && ( this . _mouseStarted = this . _mouseStart ( this . _mouseDownEvent , f ) !== false , this . _mouseStarted ? this . _mouseDrag ( f ) : this . _mouseUp ( f ) ) ; return ! this . _mouseStarted } , _mouseUp : function ( f ) { a ( document ) . unbind ( "mousemove." + this . widgetName , this . _mouseMoveDelegate ) . unbind ( "mouseup." + this . widgetName , this . _mouseUpDelegate ) ; this . _mouseStarted &&
( this . _mouseStarted = false , f . target == this . _mouseDownEvent . target && a . data ( f . target , this . widgetName + ".preventClickEvent" , true ) , this . _mouseStop ( f ) ) ; return false } , _mouseDistanceMet : function ( f ) { return Math . max ( Math . abs ( this . _mouseDownEvent . pageX - f . pageX ) , Math . abs ( this . _mouseDownEvent . pageY - f . pageY ) ) >= this . options . distance } , _mouseDelayMet : function ( ) { return this . mouseDelayMet } , _mouseStart : function ( ) { } , _mouseDrag : function ( ) { } , _mouseStop : function ( ) { } , _mouseCapture : function ( ) { return true } } ) } ) ( jQuery ) ;
( function ( a ) { a . widget ( "ui.draggable" , a . ui . mouse , { widgetEventPrefix : "drag" , options : { addClasses : true , appendTo : "parent" , axis : false , connectToSortable : false , containment : false , cursor : "auto" , cursorAt : false , grid : false , handle : false , helper : "original" , iframeFix : false , opacity : false , refreshPositions : false , revert : false , revertDuration : 500 , scope : "default" , scroll : true , scrollSensitivity : 20 , scrollSpeed : 20 , snap : false , snapMode : "both" , snapTolerance : 20 , stack : false , zIndex : false } , _create : function ( ) { this . options . helper == "original" &&
! /^(?:r|a|f)/ . test ( this . element . css ( "position" ) ) && ( this . element [ 0 ] . style . position = "relative" ) ; this . options . addClasses && this . element . addClass ( "ui-draggable" ) ; this . options . disabled && this . element . addClass ( "ui-draggable-disabled" ) ; this . _mouseInit ( ) } , destroy : function ( ) { if ( this . element . data ( "draggable" ) ) { this . element . removeData ( "draggable" ) . unbind ( ".draggable" ) . removeClass ( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ) ; this . _mouseDestroy ( ) ; return this } } , _mouseCapture : function ( n ) { var f = this . options ;
if ( this . helper || f . disabled || a ( n . target ) . is ( ".ui-resizable-handle" ) ) return false ; this . handle = this . _getHandle ( n ) ; if ( ! this . handle ) return false ; f . iframeFix && a ( f . iframeFix === true ? "iframe" : f . iframeFix ) . each ( function ( ) { a ( '<div class="ui-draggable-iframeFix" style="background: #fff;"></div>' ) . css ( { width : this . offsetWidth + "px" , height : this . offsetHeight + "px" , position : "absolute" , opacity : "0.001" , zIndex : 1E3 } ) . css ( a ( this ) . offset ( ) ) . appendTo ( "body" ) } ) ; return true } , _mouseStart : function ( n ) { var f = this . options ; this . helper =
this . _createHelper ( n ) ; this . _cacheHelperProportions ( ) ; a . ui . ddmanager && ( a . ui . ddmanager . current = this ) ; this . _cacheMargins ( ) ; this . cssPosition = this . helper . css ( "position" ) ; this . scrollParent = this . helper . scrollParent ( ) ; this . offset = this . positionAbs = this . element . offset ( ) ; this . offset = { top : this . offset . top - this . margins . top , left : this . offset . left - this . margins . left } ; a . extend ( this . offset , { click : { left : n . pageX - this . offset . left , top : n . pageY - this . offset . top } , parent : this . _getParentOffset ( ) , relative : this . _getRelativeOffset ( ) } ) ;
this . originalPosition = this . position = this . _generatePosition ( n ) ; this . originalPageX = n . pageX ; this . originalPageY = n . pageY ; f . cursorAt && this . _adjustOffsetFromHelper ( f . cursorAt ) ; f . containment && this . _setContainment ( ) ; if ( this . _trigger ( "start" , n ) === false ) { this . _clear ( ) ; return false } this . _cacheHelperProportions ( ) ; a . ui . ddmanager && ! f . dropBehaviour && a . ui . ddmanager . prepareOffsets ( this , n ) ; this . helper . addClass ( "ui-draggable-dragging" ) ; this . _mouseDrag ( n , true ) ; a . ui . ddmanager && a . ui . ddmanager . dragStart ( this , n ) ; return true } ,
_mouseDrag : function ( n , f ) { this . position = this . _generatePosition ( n ) ; this . positionAbs = this . _convertPositionTo ( "absolute" ) ; if ( ! f ) { var c = this . _uiHash ( ) ; if ( this . _trigger ( "drag" , n , c ) === false ) { this . _mouseUp ( { } ) ; return false } this . position = c . position } if ( ! this . options . axis || this . options . axis != "y" ) this . helper [ 0 ] . style . left = this . position . left + "px" ; if ( ! this . options . axis || this . options . axis != "x" ) this . helper [ 0 ] . style . top = this . position . top + "px" ; a . ui . ddmanager && a . ui . ddmanager . drag ( this , n ) ; return false } , _mouseStop : function ( n ) { var f =
false ; a . ui . ddmanager && ! this . options . dropBehaviour && ( f = a . ui . ddmanager . drop ( this , n ) ) ; this . dropped && ( f = this . dropped , this . dropped = false ) ; if ( ( ! this . element [ 0 ] || ! this . element [ 0 ] . parentNode ) && this . options . helper == "original" ) return false ; if ( this . options . revert == "invalid" && ! f || this . options . revert == "valid" && f || this . options . revert === true || a . isFunction ( this . options . revert ) && this . options . revert . call ( this . element , f ) ) { var c = this ; a ( this . helper ) . animate ( this . originalPosition , parseInt ( this . options . revertDuration , 10 ) ,
function ( ) { c . _trigger ( "stop" , n ) !== false && c . _clear ( ) } ) } else this . _trigger ( "stop" , n ) !== false && this . _clear ( ) ; return false } , _mouseUp : function ( n ) { this . options . iframeFix === true && a ( "div.ui-draggable-iframeFix" ) . each ( function ( ) { this . parentNode . removeChild ( this ) } ) ; a . ui . ddmanager && a . ui . ddmanager . dragStop ( this , n ) ; return a . ui . mouse . prototype . _mouseUp . call ( this , n ) } , cancel : function ( ) { this . helper . is ( ".ui-draggable-dragging" ) ? this . _mouseUp ( { } ) : this . _clear ( ) ; return this } , _getHandle : function ( n ) { var f = ! this . options . handle ||
! a ( this . options . handle , this . element ) . length ? true : false ; a ( this . options . handle , this . element ) . find ( "*" ) . andSelf ( ) . each ( function ( ) { this == n . target && ( f = true ) } ) ; return f } , _createHelper : function ( n ) { var f = this . options ; n = a . isFunction ( f . helper ) ? a ( f . helper . apply ( this . element [ 0 ] , [ n ] ) ) : f . helper == "clone" ? this . element . clone ( ) . removeAttr ( "id" ) : this . element ; n . parents ( "body" ) . length || n . appendTo ( f . appendTo == "parent" ? this . element [ 0 ] . parentNode : f . appendTo ) ; n [ 0 ] != this . element [ 0 ] && ! /(fixed|absolute)/ . test ( n . css ( "position" ) ) &&
n . css ( "position" , "absolute" ) ; return n } , _adjustOffsetFromHelper : function ( n ) { typeof n == "string" && ( n = n . split ( " " ) ) ; a . isArray ( n ) && ( n = { left : + n [ 0 ] , top : + n [ 1 ] || 0 } ) ; "left" in n && ( this . offset . click . left = n . left + this . margins . left ) ; "right" in n && ( this . offset . click . left = this . helperProportions . width - n . right + this . margins . left ) ; "top" in n && ( this . offset . click . top = n . top + this . margins . top ) ; "bottom" in n && ( this . offset . click . top = this . helperProportions . height - n . bottom + this . margins . top ) } , _getParentOffset : function ( ) { this . offsetParent =
this . helper . offsetParent ( ) ; var n = this . offsetParent . offset ( ) ; this . cssPosition == "absolute" && this . scrollParent [ 0 ] != document && a . ui . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) && ( n . left += this . scrollParent . scrollLeft ( ) , n . top += this . scrollParent . scrollTop ( ) ) ; if ( this . offsetParent [ 0 ] == document . body || this . offsetParent [ 0 ] . tagName && this . offsetParent [ 0 ] . tagName . toLowerCase ( ) == "html" && a . browser . msie ) n = { top : 0 , left : 0 } ; return { top : n . top + ( parseInt ( this . offsetParent . css ( "borderTopWidth" ) , 10 ) || 0 ) , left : n . left + ( parseInt ( this . offsetParent . css ( "borderLeftWidth" ) ,
10 ) || 0 ) } } , _getRelativeOffset : function ( ) { if ( this . cssPosition == "relative" ) { var n = this . element . position ( ) ; return { top : n . top - ( parseInt ( this . helper . css ( "top" ) , 10 ) || 0 ) + this . scrollParent . scrollTop ( ) , left : n . left - ( parseInt ( this . helper . css ( "left" ) , 10 ) || 0 ) + this . scrollParent . scrollLeft ( ) } } return { top : 0 , left : 0 } } , _cacheMargins : function ( ) { this . margins = { left : parseInt ( this . element . css ( "marginLeft" ) , 10 ) || 0 , top : parseInt ( this . element . css ( "marginTop" ) , 10 ) || 0 , right : parseInt ( this . element . css ( "marginRight" ) , 10 ) || 0 , bottom : parseInt ( this . element . css ( "marginBottom" ) ,
10 ) || 0 } } , _cacheHelperProportions : function ( ) { this . helperProportions = { width : this . helper . outerWidth ( ) , height : this . helper . outerHeight ( ) } } , _setContainment : function ( ) { var n = this . options ; n . containment == "parent" && ( n . containment = this . helper [ 0 ] . parentNode ) ; if ( n . containment == "document" || n . containment == "window" ) this . containment = [ n . containment == "document" ? 0 : a ( window ) . scrollLeft ( ) - this . offset . relative . left - this . offset . parent . left , n . containment == "document" ? 0 : a ( window ) . scrollTop ( ) - this . offset . relative . top - this . offset . parent . top ,
( n . containment == "document" ? 0 : a ( window ) . scrollLeft ( ) ) + a ( n . containment == "document" ? document : window ) . width ( ) - this . helperProportions . width - this . margins . left , ( n . containment == "document" ? 0 : a ( window ) . scrollTop ( ) ) + ( a ( n . containment == "document" ? document : window ) . height ( ) || document . body . parentNode . scrollHeight ) - this . helperProportions . height - this . margins . top ] ; if ( ! /^(document|window|parent)$/ . test ( n . containment ) && n . containment . constructor != Array ) { n = a ( n . containment ) ; var f = n [ 0 ] ; if ( f ) { n . offset ( ) ; var c = a ( f ) . css ( "overflow" ) !=
"hidden" ; this . containment = [ ( parseInt ( a ( f ) . css ( "borderLeftWidth" ) , 10 ) || 0 ) + ( parseInt ( a ( f ) . css ( "paddingLeft" ) , 10 ) || 0 ) , ( parseInt ( a ( f ) . css ( "borderTopWidth" ) , 10 ) || 0 ) + ( parseInt ( a ( f ) . css ( "paddingTop" ) , 10 ) || 0 ) , ( c ? Math . max ( f . scrollWidth , f . offsetWidth ) : f . offsetWidth ) - ( parseInt ( a ( f ) . css ( "borderLeftWidth" ) , 10 ) || 0 ) - ( parseInt ( a ( f ) . css ( "paddingRight" ) , 10 ) || 0 ) - this . helperProportions . width - this . margins . left - this . margins . right , ( c ? Math . max ( f . scrollHeight , f . offsetHeight ) : f . offsetHeight ) - ( parseInt ( a ( f ) . css ( "borderTopWidth" ) ,
10 ) || 0 ) - ( parseInt ( a ( f ) . css ( "paddingBottom" ) , 10 ) || 0 ) - this . helperProportions . height - this . margins . top - this . margins . bottom ] ; this . relative _container = n } } else n . containment . constructor == Array && ( this . containment = n . containment ) } , _convertPositionTo : function ( n , f ) { f || ( f = this . position ) ; var c = n == "absolute" ? 1 : - 1 , m = this . cssPosition == "absolute" && ( this . scrollParent [ 0 ] == document || ! a . ui . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) ) ? this . offsetParent : this . scrollParent , p = /(html|body)/i . test ( m [ 0 ] . tagName ) ; return { top : f . top +
this . offset . relative . top * c + this . offset . parent . top * c - ( a . browser . safari && a . browser . version < 526 && this . cssPosition == "fixed" ? 0 : ( this . cssPosition == "fixed" ? - this . scrollParent . scrollTop ( ) : p ? 0 : m . scrollTop ( ) ) * c ) , left : f . left + this . offset . relative . left * c + this . offset . parent . left * c - ( a . browser . safari && a . browser . version < 526 && this . cssPosition == "fixed" ? 0 : ( this . cssPosition == "fixed" ? - this . scrollParent . scrollLeft ( ) : p ? 0 : m . scrollLeft ( ) ) * c ) } } , _generatePosition : function ( n ) { var f = this . options , c = this . cssPosition == "absolute" &&
( this . scrollParent [ 0 ] == document || ! a . ui . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) ) ? this . offsetParent : this . scrollParent , m = /(html|body)/i . test ( c [ 0 ] . tagName ) , p = n . pageX , b = n . pageY ; if ( this . originalPosition ) { var d ; if ( this . containment ) { if ( this . relative _container ) { d = this . relative _container . offset ( ) ; d = [ this . containment [ 0 ] + d . left , this . containment [ 1 ] + d . top , this . containment [ 2 ] + d . left , this . containment [ 3 ] + d . top ] } else d = this . containment ; n . pageX - this . offset . click . left < d [ 0 ] && ( p = d [ 0 ] + this . offset . click . left ) ;
n . pageY - this . offset . click . top < d [ 1 ] && ( b = d [ 1 ] + this . offset . click . top ) ; n . pageX - this . offset . click . left > d [ 2 ] && ( p = d [ 2 ] + this . offset . click . left ) ; n . pageY - this . offset . click . top > d [ 3 ] && ( b = d [ 3 ] + this . offset . click . top ) } if ( f . grid ) { b = f . grid [ 1 ] ? this . originalPageY + Math . round ( ( b - this . originalPageY ) / f . grid [ 1 ] ) * f . grid [ 1 ] : this . originalPageY ; b = d ? b - this . offset . click . top < d [ 1 ] || b - this . offset . click . top > d [ 3 ] ? b - this . offset . click . top < d [ 1 ] ? b + f . grid [ 1 ] : b - f . grid [ 1 ] : b : b ; p = f . grid [ 0 ] ? this . originalPageX + Math . round ( ( p - this . originalPageX ) /
f . grid [ 0 ] ) * f . grid [ 0 ] : this . originalPageX ; p = d ? p - this . offset . click . left < d [ 0 ] || p - this . offset . click . left > d [ 2 ] ? p - this . offset . click . left < d [ 0 ] ? p + f . grid [ 0 ] : p - f . grid [ 0 ] : p : p } } return { top : b - this . offset . click . top - this . offset . relative . top - this . offset . parent . top + ( a . browser . safari && a . browser . version < 526 && this . cssPosition == "fixed" ? 0 : this . cssPosition == "fixed" ? - this . scrollParent . scrollTop ( ) : m ? 0 : c . scrollTop ( ) ) , left : p - this . offset . click . left - this . offset . relative . left - this . offset . parent . left + ( a . browser . safari && a . browser . version <
526 && this . cssPosition == "fixed" ? 0 : this . cssPosition == "fixed" ? - this . scrollParent . scrollLeft ( ) : m ? 0 : c . scrollLeft ( ) ) } } , _clear : function ( ) { this . helper . removeClass ( "ui-draggable-dragging" ) ; this . helper [ 0 ] != this . element [ 0 ] && ! this . cancelHelperRemoval && this . helper . remove ( ) ; this . helper = null ; this . cancelHelperRemoval = false } , _trigger : function ( n , f , c ) { c = c || this . _uiHash ( ) ; a . ui . plugin . call ( this , n , [ f , c ] ) ; n == "drag" && ( this . positionAbs = this . _convertPositionTo ( "absolute" ) ) ; return a . Widget . prototype . _trigger . call ( this , n , f ,
c ) } , plugins : { } , _uiHash : function ( ) { return { helper : this . helper , position : this . position , originalPosition : this . originalPosition , offset : this . positionAbs } } } ) ; a . extend ( a . ui . draggable , { version : "1.8.17" } ) ; a . ui . plugin . add ( "draggable" , "connectToSortable" , { start : function ( n , f ) { var c = a ( this ) . data ( "draggable" ) , m = c . options , p = a . extend ( { } , f , { item : c . element } ) ; c . sortables = [ ] ; a ( m . connectToSortable ) . each ( function ( ) { var b = a . data ( this , "sortable" ) ; b && ! b . options . disabled && ( c . sortables . push ( { instance : b , shouldRevert : b . options . revert } ) ,
b . refreshPositions ( ) , b . _trigger ( "activate" , n , p ) ) } ) } , stop : function ( n , f ) { var c = a ( this ) . data ( "draggable" ) , m = a . extend ( { } , f , { item : c . element } ) ; a . each ( c . sortables , function ( ) { this . instance . isOver ? ( this . instance . isOver = 0 , c . cancelHelperRemoval = true , this . instance . cancelHelperRemoval = false , this . shouldRevert && ( this . instance . options . revert = true ) , this . instance . _mouseStop ( n ) , this . instance . options . helper = this . instance . options . _helper , c . options . helper == "original" && this . instance . currentItem . css ( { top : "auto" , left : "auto" } ) ) :
( this . instance . cancelHelperRemoval = false , this . instance . _trigger ( "deactivate" , n , m ) ) } ) } , drag : function ( n , f ) { var c = a ( this ) . data ( "draggable" ) , m = this ; a . each ( c . sortables , function ( ) { this . instance . positionAbs = c . positionAbs ; this . instance . helperProportions = c . helperProportions ; this . instance . offset . click = c . offset . click ; this . instance . _intersectsWith ( this . instance . containerCache ) ? ( this . instance . isOver || ( this . instance . isOver = 1 , this . instance . currentItem = a ( m ) . clone ( ) . removeAttr ( "id" ) . appendTo ( this . instance . element ) . data ( "sortable-item" ,
true ) , this . instance . options . _helper = this . instance . options . helper , this . instance . options . helper = function ( ) { return f . helper [ 0 ] } , n . target = this . instance . currentItem [ 0 ] , this . instance . _mouseCapture ( n , true ) , this . instance . _mouseStart ( n , true , true ) , this . instance . offset . click . top = c . offset . click . top , this . instance . offset . click . left = c . offset . click . left , this . instance . offset . parent . left -= c . offset . parent . left - this . instance . offset . parent . left , this . instance . offset . parent . top -= c . offset . parent . top - this . instance . offset . parent . top ,
c . _trigger ( "toSortable" , n ) , c . dropped = this . instance . element , c . currentItem = c . element , this . instance . fromOutside = c ) , this . instance . currentItem && this . instance . _mouseDrag ( n ) ) : this . instance . isOver && ( this . instance . isOver = 0 , this . instance . cancelHelperRemoval = true , this . instance . options . revert = false , this . instance . _trigger ( "out" , n , this . instance . _uiHash ( this . instance ) ) , this . instance . _mouseStop ( n , true ) , this . instance . options . helper = this . instance . options . _helper , this . instance . currentItem . remove ( ) , this . instance . placeholder &&
this . instance . placeholder . remove ( ) , c . _trigger ( "fromSortable" , n ) , c . dropped = false ) } ) } } ) ; a . ui . plugin . add ( "draggable" , "cursor" , { start : function ( ) { var n = a ( "body" ) , f = a ( this ) . data ( "draggable" ) . options ; n . css ( "cursor" ) && ( f . _cursor = n . css ( "cursor" ) ) ; n . css ( "cursor" , f . cursor ) } , stop : function ( ) { var n = a ( this ) . data ( "draggable" ) . options ; n . _cursor && a ( "body" ) . css ( "cursor" , n . _cursor ) } } ) ; a . ui . plugin . add ( "draggable" , "opacity" , { start : function ( n , f ) { var c = a ( f . helper ) , m = a ( this ) . data ( "draggable" ) . options ; c . css ( "opacity" ) && ( m . _opacity =
c . css ( "opacity" ) ) ; c . css ( "opacity" , m . opacity ) } , stop : function ( n , f ) { var c = a ( this ) . data ( "draggable" ) . options ; c . _opacity && a ( f . helper ) . css ( "opacity" , c . _opacity ) } } ) ; a . ui . plugin . add ( "draggable" , "scroll" , { start : function ( ) { var n = a ( this ) . data ( "draggable" ) ; n . scrollParent [ 0 ] != document && n . scrollParent [ 0 ] . tagName != "HTML" && ( n . overflowOffset = n . scrollParent . offset ( ) ) } , drag : function ( n ) { var f = a ( this ) . data ( "draggable" ) , c = f . options , m = false ; if ( f . scrollParent [ 0 ] != document && f . scrollParent [ 0 ] . tagName != "HTML" ) { if ( ! c . axis ||
c . axis != "x" ) f . overflowOffset . top + f . scrollParent [ 0 ] . offsetHeight - n . pageY < c . scrollSensitivity ? f . scrollParent [ 0 ] . scrollTop = m = f . scrollParent [ 0 ] . scrollTop + c . scrollSpeed : n . pageY - f . overflowOffset . top < c . scrollSensitivity && ( f . scrollParent [ 0 ] . scrollTop = m = f . scrollParent [ 0 ] . scrollTop - c . scrollSpeed ) ; if ( ! c . axis || c . axis != "y" ) f . overflowOffset . left + f . scrollParent [ 0 ] . offsetWidth - n . pageX < c . scrollSensitivity ? f . scrollParent [ 0 ] . scrollLeft = m = f . scrollParent [ 0 ] . scrollLeft + c . scrollSpeed : n . pageX - f . overflowOffset . left < c . scrollSensitivity &&
( f . scrollParent [ 0 ] . scrollLeft = m = f . scrollParent [ 0 ] . scrollLeft - c . scrollSpeed ) } else { if ( ! c . axis || c . axis != "x" ) n . pageY - a ( document ) . scrollTop ( ) < c . scrollSensitivity ? m = a ( document ) . scrollTop ( a ( document ) . scrollTop ( ) - c . scrollSpeed ) : a ( window ) . height ( ) - ( n . pageY - a ( document ) . scrollTop ( ) ) < c . scrollSensitivity && ( m = a ( document ) . scrollTop ( a ( document ) . scrollTop ( ) + c . scrollSpeed ) ) ; if ( ! c . axis || c . axis != "y" ) n . pageX - a ( document ) . scrollLeft ( ) < c . scrollSensitivity ? m = a ( document ) . scrollLeft ( a ( document ) . scrollLeft ( ) - c . scrollSpeed ) :
a ( window ) . width ( ) - ( n . pageX - a ( document ) . scrollLeft ( ) ) < c . scrollSensitivity && ( m = a ( document ) . scrollLeft ( a ( document ) . scrollLeft ( ) + c . scrollSpeed ) ) } m !== false && a . ui . ddmanager && ! c . dropBehaviour && a . ui . ddmanager . prepareOffsets ( f , n ) } } ) ; a . ui . plugin . add ( "draggable" , "snap" , { start : function ( ) { var n = a ( this ) . data ( "draggable" ) , f = n . options ; n . snapElements = [ ] ; a ( f . snap . constructor != String ? f . snap . items || ":data(draggable)" : f . snap ) . each ( function ( ) { var c = a ( this ) , m = c . offset ( ) ; this != n . element [ 0 ] && n . snapElements . push ( { item : this ,
width : c . outerWidth ( ) , height : c . outerHeight ( ) , top : m . top , left : m . left } ) } ) } , drag : function ( n , f ) { for ( var c = a ( this ) . data ( "draggable" ) , m = c . options , p = m . snapTolerance , b = f . offset . left , d = b + c . helperProportions . width , e = f . offset . top , l = e + c . helperProportions . height , u = c . snapElements . length - 1 ; u >= 0 ; u -- ) { var z = c . snapElements [ u ] . left , o = z + c . snapElements [ u ] . width , L = c . snapElements [ u ] . top , T = L + c . snapElements [ u ] . height ; if ( z - p < b && b < o + p && L - p < e && e < T + p || z - p < b && b < o + p && L - p < l && l < T + p || z - p < d && d < o + p && L - p < e && e < T + p || z - p < d && d < o + p && L - p < l &&
l < T + p ) { if ( m . snapMode != "inner" ) { var N = Math . abs ( L - l ) <= p , J = Math . abs ( T - e ) <= p , da = Math . abs ( z - d ) <= p , V = Math . abs ( o - b ) <= p ; N && ( f . position . top = c . _convertPositionTo ( "relative" , { top : L - c . helperProportions . height , left : 0 } ) . top - c . margins . top ) ; J && ( f . position . top = c . _convertPositionTo ( "relative" , { top : T , left : 0 } ) . top - c . margins . top ) ; da && ( f . position . left = c . _convertPositionTo ( "relative" , { top : 0 , left : z - c . helperProportions . width } ) . left - c . margins . left ) ; V && ( f . position . left = c . _convertPositionTo ( "relative" , { top : 0 , left : o } ) . left - c . margins . left ) } var O =
N || J || da || V ; if ( m . snapMode != "outer" ) { N = Math . abs ( L - e ) <= p ; J = Math . abs ( T - l ) <= p ; da = Math . abs ( z - b ) <= p ; V = Math . abs ( o - d ) <= p ; N && ( f . position . top = c . _convertPositionTo ( "relative" , { top : L , left : 0 } ) . top - c . margins . top ) ; J && ( f . position . top = c . _convertPositionTo ( "relative" , { top : T - c . helperProportions . height , left : 0 } ) . top - c . margins . top ) ; da && ( f . position . left = c . _convertPositionTo ( "relative" , { top : 0 , left : z } ) . left - c . margins . left ) ; V && ( f . position . left = c . _convertPositionTo ( "relative" , { top : 0 , left : o - c . helperProportions . width } ) . left -
c . margins . left ) } ! c . snapElements [ u ] . snapping && ( N || J || da || V || O ) && c . options . snap . snap && c . options . snap . snap . call ( c . element , n , a . extend ( c . _uiHash ( ) , { snapItem : c . snapElements [ u ] . item } ) ) ; c . snapElements [ u ] . snapping = N || J || da || V || O } else { c . snapElements [ u ] . snapping && c . options . snap . release && c . options . snap . release . call ( c . element , n , a . extend ( c . _uiHash ( ) , { snapItem : c . snapElements [ u ] . item } ) ) ; c . snapElements [ u ] . snapping = false } } } } ) ; a . ui . plugin . add ( "draggable" , "stack" , { start : function ( ) { var n = a ( this ) . data ( "draggable" ) . options ;
n = a . makeArray ( a ( n . stack ) ) . sort ( function ( c , m ) { return ( parseInt ( a ( c ) . css ( "zIndex" ) , 10 ) || 0 ) - ( parseInt ( a ( m ) . css ( "zIndex" ) , 10 ) || 0 ) } ) ; if ( n . length ) { var f = parseInt ( n [ 0 ] . style . zIndex ) || 0 ; a ( n ) . each ( function ( c ) { this . style . zIndex = f + c } ) ; this [ 0 ] . style . zIndex = f + n . length } } } ) ; a . ui . plugin . add ( "draggable" , "zIndex" , { start : function ( n , f ) { var c = a ( f . helper ) , m = a ( this ) . data ( "draggable" ) . options ; c . css ( "zIndex" ) && ( m . _zIndex = c . css ( "zIndex" ) ) ; c . css ( "zIndex" , m . zIndex ) } , stop : function ( n , f ) { var c = a ( this ) . data ( "draggable" ) . options ;
c . _zIndex && a ( f . helper ) . css ( "zIndex" , c . _zIndex ) } } ) } ) ( jQuery ) ;
( function ( a ) { a . widget ( "ui.slider" , a . ui . mouse , { widgetEventPrefix : "slide" , options : { animate : false , distance : 0 , max : 100 , min : 0 , orientation : "horizontal" , range : false , step : 1 , value : 0 , values : null } , _create : function ( ) { var n = this , f = this . options , c = this . element . find ( ".ui-slider-handle" ) . addClass ( "ui-state-default ui-corner-all" ) , m = f . values && f . values . length || 1 , p = [ ] ; this . _mouseSliding = this . _keySliding = false ; this . _animateOff = true ; this . _handleIndex = null ; this . _detectOrientation ( ) ; this . _mouseInit ( ) ; this . element . addClass ( "ui-slider ui-slider-" +
this . orientation + " ui-widget ui-widget-content ui-corner-all" + ( f . disabled ? " ui-slider-disabled ui-disabled" : "" ) ) ; this . range = a ( [ ] ) ; f . range && ( f . range === true && ( f . values || ( f . values = [ this . _valueMin ( ) , this . _valueMin ( ) ] ) , f . values . length && f . values . length !== 2 && ( f . values = [ f . values [ 0 ] , f . values [ 0 ] ] ) ) , this . range = a ( "<div></div>" ) . appendTo ( this . element ) . addClass ( "ui-slider-range ui-widget-header" + ( f . range === "min" || f . range === "max" ? " ui-slider-range-" + f . range : "" ) ) ) ; for ( var b = c . length ; b < m ; b += 1 ) p . push ( "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>" ) ;
this . handles = c . add ( a ( p . join ( "" ) ) . appendTo ( n . element ) ) ; this . handle = this . handles . eq ( 0 ) ; this . handles . add ( this . range ) . filter ( "a" ) . click ( function ( d ) { d . preventDefault ( ) } ) . hover ( function ( ) { f . disabled || a ( this ) . addClass ( "ui-state-hover" ) } , function ( ) { a ( this ) . removeClass ( "ui-state-hover" ) } ) . focus ( function ( ) { f . disabled ? a ( this ) . blur ( ) : ( a ( ".ui-slider .ui-state-focus" ) . removeClass ( "ui-state-focus" ) , a ( this ) . addClass ( "ui-state-focus" ) ) } ) . blur ( function ( ) { a ( this ) . removeClass ( "ui-state-focus" ) } ) ; this . handles . each ( function ( d ) { a ( this ) . data ( "index.ui-slider-handle" ,
d ) } ) ; this . handles . keydown ( function ( d ) { var e = true , l = a ( this ) . data ( "index.ui-slider-handle" ) , u , z , o ; if ( ! n . options . disabled ) { switch ( d . keyCode ) { case a . ui . keyCode . HOME : case a . ui . keyCode . END : case a . ui . keyCode . PAGE _UP : case a . ui . keyCode . PAGE _DOWN : case a . ui . keyCode . UP : case a . ui . keyCode . RIGHT : case a . ui . keyCode . DOWN : case a . ui . keyCode . LEFT : e = false ; if ( ! n . _keySliding ) { n . _keySliding = true ; a ( this ) . addClass ( "ui-state-active" ) ; u = n . _start ( d , l ) ; if ( u === false ) return } } u = n . options . step ; n . options . values && n . options . values . length ?
z = o = n . values ( l ) : z = o = n . value ( ) ; switch ( d . keyCode ) { case a . ui . keyCode . HOME : o = n . _valueMin ( ) ; break ; case a . ui . keyCode . END : o = n . _valueMax ( ) ; break ; case a . ui . keyCode . PAGE _UP : o = n . _trimAlignValue ( z + ( n . _valueMax ( ) - n . _valueMin ( ) ) / 5 ) ; break ; case a . ui . keyCode . PAGE _DOWN : o = n . _trimAlignValue ( z - ( n . _valueMax ( ) - n . _valueMin ( ) ) / 5 ) ; break ; case a . ui . keyCode . UP : case a . ui . keyCode . RIGHT : if ( z === n . _valueMax ( ) ) return ; o = n . _trimAlignValue ( z + u ) ; break ; case a . ui . keyCode . DOWN : case a . ui . keyCode . LEFT : if ( z === n . _valueMin ( ) ) return ; o = n . _trimAlignValue ( z -
u ) } n . _slide ( d , l , o ) ; return e } } ) . keyup ( function ( d ) { var e = a ( this ) . data ( "index.ui-slider-handle" ) ; n . _keySliding && ( n . _keySliding = false , n . _stop ( d , e ) , n . _change ( d , e ) , a ( this ) . removeClass ( "ui-state-active" ) ) } ) ; this . _refreshValue ( ) ; this . _animateOff = false } , destroy : function ( ) { this . handles . remove ( ) ; this . range . remove ( ) ; this . element . removeClass ( "ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all" ) . removeData ( "slider" ) . unbind ( ".slider" ) ; this . _mouseDestroy ( ) ;
return this } , _mouseCapture : function ( n ) { var f = this . options , c , m , p , b , d ; if ( f . disabled ) return false ; this . elementSize = { width : this . element . outerWidth ( ) , height : this . element . outerHeight ( ) } ; this . elementOffset = this . element . offset ( ) ; c = this . _normValueFromMouse ( { x : n . pageX , y : n . pageY } ) ; m = this . _valueMax ( ) - this . _valueMin ( ) + 1 ; b = this ; this . handles . each ( function ( e ) { var l = Math . abs ( c - b . values ( e ) ) ; m > l && ( m = l , p = a ( this ) , d = e ) } ) ; f . range === true && this . values ( 1 ) === f . min && ( d += 1 , p = a ( this . handles [ d ] ) ) ; if ( this . _start ( n , d ) === false ) return false ;
this . _mouseSliding = true ; b . _handleIndex = d ; p . addClass ( "ui-state-active" ) . focus ( ) ; f = p . offset ( ) ; this . _clickOffset = ! a ( n . target ) . parents ( ) . andSelf ( ) . is ( ".ui-slider-handle" ) ? { left : 0 , top : 0 } : { left : n . pageX - f . left - p . width ( ) / 2 , top : n . pageY - f . top - p . height ( ) / 2 - ( parseInt ( p . css ( "borderTopWidth" ) , 10 ) || 0 ) - ( parseInt ( p . css ( "borderBottomWidth" ) , 10 ) || 0 ) + ( parseInt ( p . css ( "marginTop" ) , 10 ) || 0 ) } ; this . handles . hasClass ( "ui-state-hover" ) || this . _slide ( n , d , c ) ; return this . _animateOff = true } , _mouseStart : function ( ) { return true } , _mouseDrag : function ( n ) { var f =
this . _normValueFromMouse ( { x : n . pageX , y : n . pageY } ) ; this . _slide ( n , this . _handleIndex , f ) ; return false } , _mouseStop : function ( n ) { this . handles . removeClass ( "ui-state-active" ) ; this . _mouseSliding = false ; this . _stop ( n , this . _handleIndex ) ; this . _change ( n , this . _handleIndex ) ; this . _clickOffset = this . _handleIndex = null ; return this . _animateOff = false } , _detectOrientation : function ( ) { this . orientation = this . options . orientation === "vertical" ? "vertical" : "horizontal" } , _normValueFromMouse : function ( n ) { var f , c ; this . orientation === "horizontal" ?
( f = this . elementSize . width , c = n . x - this . elementOffset . left - ( this . _clickOffset ? this . _clickOffset . left : 0 ) ) : ( f = this . elementSize . height , c = n . y - this . elementOffset . top - ( this . _clickOffset ? this . _clickOffset . top : 0 ) ) ; n = c / f ; n > 1 && ( n = 1 ) ; n < 0 && ( n = 0 ) ; this . orientation === "vertical" && ( n = 1 - n ) ; f = this . _valueMax ( ) - this . _valueMin ( ) ; return this . _trimAlignValue ( this . _valueMin ( ) + n * f ) } , _start : function ( n , f ) { var c = { handle : this . handles [ f ] , value : this . value ( ) } ; this . options . values && this . options . values . length && ( c . value = this . values ( f ) ,
c . values = this . values ( ) ) ; return this . _trigger ( "start" , n , c ) } , _slide : function ( n , f , c ) { var m , p , b ; this . options . values && this . options . values . length ? ( m = this . values ( f ? 0 : 1 ) , this . options . values . length === 2 && this . options . range === true && ( f === 0 && c > m || f === 1 && c < m ) && ( c = m ) , c !== this . values ( f ) && ( p = this . values ( ) , p [ f ] = c , b = this . _trigger ( "slide" , n , { handle : this . handles [ f ] , value : c , values : p } ) , this . values ( f ? 0 : 1 ) , b !== false && this . values ( f , c , true ) ) ) : c !== this . value ( ) && ( b = this . _trigger ( "slide" , n , { handle : this . handles [ f ] , value : c } ) , b !==
false && this . value ( c ) ) } , _stop : function ( n , f ) { var c = { handle : this . handles [ f ] , value : this . value ( ) } ; this . options . values && this . options . values . length && ( c . value = this . values ( f ) , c . values = this . values ( ) ) ; this . _trigger ( "stop" , n , c ) } , _change : function ( n , f ) { if ( ! this . _keySliding && ! this . _mouseSliding ) { var c = { handle : this . handles [ f ] , value : this . value ( ) } ; this . options . values && this . options . values . length && ( c . value = this . values ( f ) , c . values = this . values ( ) ) ; this . _trigger ( "change" , n , c ) } } , value : function ( n ) { if ( arguments . length ) { this . options . value =
this . _trimAlignValue ( n ) ; this . _refreshValue ( ) ; this . _change ( null , 0 ) } else return this . _value ( ) } , values : function ( n , f ) { var c , m , p ; if ( arguments . length > 1 ) { this . options . values [ n ] = this . _trimAlignValue ( f ) ; this . _refreshValue ( ) ; this . _change ( null , n ) } else { if ( ! arguments . length ) return this . _values ( ) ; if ( ! a . isArray ( arguments [ 0 ] ) ) return this . options . values && this . options . values . length ? this . _values ( n ) : this . value ( ) ; c = this . options . values ; m = arguments [ 0 ] ; for ( p = 0 ; p < c . length ; p += 1 ) { c [ p ] = this . _trimAlignValue ( m [ p ] ) ; this . _change ( null ,
p ) } this . _refreshValue ( ) } } , _setOption : function ( n , f ) { var c , m = 0 ; a . isArray ( this . options . values ) && ( m = this . options . values . length ) ; a . Widget . prototype . _setOption . apply ( this , arguments ) ; switch ( n ) { case "disabled" : f ? ( this . handles . filter ( ".ui-state-focus" ) . blur ( ) , this . handles . removeClass ( "ui-state-hover" ) , this . handles . propAttr ( "disabled" , true ) , this . element . addClass ( "ui-disabled" ) ) : ( this . handles . propAttr ( "disabled" , false ) , this . element . removeClass ( "ui-disabled" ) ) ; break ; case "orientation" : this . _detectOrientation ( ) ;
this . element . removeClass ( "ui-slider-horizontal ui-slider-vertical" ) . addClass ( "ui-slider-" + this . orientation ) ; this . _refreshValue ( ) ; break ; case "value" : this . _animateOff = true ; this . _refreshValue ( ) ; this . _change ( null , 0 ) ; this . _animateOff = false ; break ; case "values" : this . _animateOff = true ; this . _refreshValue ( ) ; for ( c = 0 ; c < m ; c += 1 ) this . _change ( null , c ) ; this . _animateOff = false } } , _value : function ( ) { var n = this . options . value ; return n = this . _trimAlignValue ( n ) } , _values : function ( n ) { var f , c ; if ( arguments . length ) { f = this . options . values [ n ] ;
return f = this . _trimAlignValue ( f ) } f = this . options . values . slice ( ) ; for ( c = 0 ; c < f . length ; c += 1 ) f [ c ] = this . _trimAlignValue ( f [ c ] ) ; return f } , _trimAlignValue : function ( n ) { if ( n <= this . _valueMin ( ) ) return this . _valueMin ( ) ; if ( n >= this . _valueMax ( ) ) return this . _valueMax ( ) ; var f = this . options . step > 0 ? this . options . step : 1 , c = ( n - this . _valueMin ( ) ) % f ; n = n - c ; Math . abs ( c ) * 2 >= f && ( n += c > 0 ? f : - f ) ; return parseFloat ( n . toFixed ( 5 ) ) } , _valueMin : function ( ) { return this . options . min } , _valueMax : function ( ) { return this . options . max } , _refreshValue : function ( ) { var n =
this . options . range , f = this . options , c = this , m = this . _animateOff ? false : f . animate , p , b = { } , d , e , l , u ; this . options . values && this . options . values . length ? this . handles . each ( function ( z ) { p = ( c . values ( z ) - c . _valueMin ( ) ) / ( c . _valueMax ( ) - c . _valueMin ( ) ) * 100 ; b [ c . orientation === "horizontal" ? "left" : "bottom" ] = p + "%" ; a ( this ) . stop ( 1 , 1 ) [ m ? "animate" : "css" ] ( b , f . animate ) ; c . options . range === true && ( c . orientation === "horizontal" ? ( z === 0 && c . range . stop ( 1 , 1 ) [ m ? "animate" : "css" ] ( { left : p + "%" } , f . animate ) , z === 1 && c . range [ m ? "animate" : "css" ] ( { width : p -
d + "%" } , { queue : false , duration : f . animate } ) ) : ( z === 0 && c . range . stop ( 1 , 1 ) [ m ? "animate" : "css" ] ( { bottom : p + "%" } , f . animate ) , z === 1 && c . range [ m ? "animate" : "css" ] ( { height : p - d + "%" } , { queue : false , duration : f . animate } ) ) ) ; d = p } ) : ( e = this . value ( ) , l = this . _valueMin ( ) , u = this . _valueMax ( ) , p = u !== l ? ( e - l ) / ( u - l ) * 100 : 0 , b [ c . orientation === "horizontal" ? "left" : "bottom" ] = p + "%" , this . handle . stop ( 1 , 1 ) [ m ? "animate" : "css" ] ( b , f . animate ) , n === "min" && this . orientation === "horizontal" && this . range . stop ( 1 , 1 ) [ m ? "animate" : "css" ] ( { width : p + "%" } , f . animate ) ,
n === "max" && this . orientation === "horizontal" && this . range [ m ? "animate" : "css" ] ( { width : 100 - p + "%" } , { queue : false , duration : f . animate } ) , n === "min" && this . orientation === "vertical" && this . range . stop ( 1 , 1 ) [ m ? "animate" : "css" ] ( { height : p + "%" } , f . animate ) , n === "max" && this . orientation === "vertical" && this . range [ m ? "animate" : "css" ] ( { height : 100 - p + "%" } , { queue : false , duration : f . animate } ) ) } } ) ; a . extend ( a . ui . slider , { version : "1.8.17" } ) } ) ( jQuery ) ; ( function ( a ) { Math . precision = function ( b , d ) { if ( d === undefined ) d = 0 ; return Math . round ( b * Math . pow ( 10 , d ) ) / Math . pow ( 10 , d ) } ; var n = function ( b , d ) { var e = this , l = b . find ( "img:first" ) , u = 0 , z = 100 , o = 100 , L = 0 , T = 100 , N = 100 , J = 0 , da = 0 , V , O , fa = [ ] , sa = function ( S ) { for ( var U = 0 ; U < fa . length ; U ++ ) fa [ U ] . call ( e , e , S ) } , ja = function ( S ) { var U = b . offset ( ) ; V = { l : U . left | 0 , t : U . top | 0 } ; clearTimeout ( O ) ; O = setTimeout ( function ( ) { qa . call ( e , S ) } , 0 ) ; a ( document ) . bind ( "mousemove" , ca ) . bind ( "mouseup" , ea ) ; S . preventDefault ( ) } , ca = function ( S ) { clearTimeout ( O ) ; O = setTimeout ( function ( ) { qa . call ( e ,
S ) } , 0 ) ; S . stopPropagation ( ) ; S . preventDefault ( ) ; return false } , ea = function ( S ) { a ( document ) . unbind ( "mouseup" , ea ) . unbind ( "mousemove" , ca ) ; S . stopPropagation ( ) ; S . preventDefault ( ) ; return false } , qa = function ( S ) { var U = S . pageX - V . l ; S = S . pageY - V . t ; var ra = b . w , la = b . h ; if ( U < 0 ) U = 0 ; else if ( U > ra ) U = ra ; if ( S < 0 ) S = 0 ; else if ( S > la ) S = la ; pa . call ( e , "xy" , { x : U / ra * o + u , y : S / la * N + L } ) } , pa = function ( S , U , ra ) { if ( U === undefined ) { if ( S === undefined || S == null ) S = "xy" ; switch ( S . toLowerCase ( ) ) { case "x" : return J ; case "y" : return da ; default : return { x : J , y : da } } } if ( ! ( ra !=
null && ra == e ) ) { var la = false , ma , Y ; if ( S == null ) S = "xy" ; switch ( S . toLowerCase ( ) ) { case "x" : ma = U && ( U . x && U . x | 0 || U | 0 ) || 0 ; break ; case "y" : Y = U && ( U . y && U . y | 0 || U | 0 ) || 0 ; break ; default : ma = U && U . x && U . x | 0 || 0 ; Y = U && U . y && U . y | 0 || 0 } if ( ma != null ) { if ( ma < u ) ma = u ; else if ( ma > z ) ma = z ; if ( J != ma ) { J = ma ; la = true } } if ( Y != null ) { if ( Y < L ) Y = L ; else if ( Y > T ) Y = T ; if ( da != Y ) { da = Y ; la = true } } la && sa . call ( e , ra || e ) } } , ba = function ( S ) { a . isFunction ( S ) && fa . push ( S ) } ; a . extend ( true , e , { val : pa , range : function ( S , U ) { if ( U === undefined ) { if ( S === undefined || S == null ) S = "all" ; switch ( S . toLowerCase ( ) ) { case "minx" : return u ;
case "maxx" : return z ; case "rangex" : return { minX : u , maxX : z , rangeX : o } ; case "miny" : return L ; case "maxy" : return T ; case "rangey" : return { minY : L , maxY : T , rangeY : N } ; default : return { minX : u , maxX : z , rangeX : o , minY : L , maxY : T , rangeY : N } } } var ra , la , ma , Y ; if ( S == null ) S = "all" ; switch ( S . toLowerCase ( ) ) { case "minx" : ra = U && ( U . minX && U . minX | 0 || U | 0 ) || 0 ; break ; case "maxx" : la = U && ( U . maxX && U . maxX | 0 || U | 0 ) || 0 ; break ; case "rangex" : ra = U && U . minX && U . minX | 0 || 0 ; la = U && U . maxX && U . maxX | 0 || 0 ; break ; case "miny" : ma = U && ( U . minY && U . minY | 0 || U | 0 ) || 0 ; break ; case "maxy" : Y =
U && ( U . maxY && U . maxY | 0 || U | 0 ) || 0 ; break ; case "rangey" : ma = U && U . minY && U . minY | 0 || 0 ; Y = U && U . maxY && U . maxY | 0 || 0 ; break ; default : ra = U && U . minX && U . minX | 0 || 0 ; la = U && U . maxX && U . maxX | 0 || 0 ; ma = U && U . minY && U . minY | 0 || 0 ; Y = U && U . maxY && U . maxY | 0 || 0 } if ( ra != null && u != ra ) { u = ra ; o = z - u } if ( la != null && z != la ) { z = la ; o = z - u } if ( ma != null && L != ma ) { L = ma ; N = T - L } if ( Y != null && T != Y ) { T = Y ; N = T - L } } , bind : ba , unbind : function ( S ) { if ( a . isFunction ( S ) ) for ( var U ; ( U = a . inArray ( S , fa ) ) != - 1 ; ) fa . splice ( U , 1 ) } , destroy : function ( ) { a ( document ) . unbind ( "mouseup" , ea ) . unbind ( "mousemove" ,
ca ) ; b . unbind ( "mousedown" , ja ) ; fa = l = b = null } } ) ; l . src = d . arrow && d . arrow . image ; l . w = d . arrow && d . arrow . width || l . width ( ) ; l . h = d . arrow && d . arrow . height || l . height ( ) ; b . w = d . map && d . map . width || b . width ( ) ; b . h = d . map && d . map . height || b . height ( ) ; b . bind ( "mousedown" , ja ) ; ba . call ( e , function ( ) { var S = 0 , U = 0 , ra = b . w , la = b . h , ma = l . w , Y = l . h ; setTimeout ( function ( ) { if ( o > 0 ) S = J == z ? ra : J / o * ra | 0 ; if ( N > 0 ) U = da == T ? la : da / N * la | 0 ; if ( ma >= ra ) S = ( ra >> 1 ) - ( ma >> 1 ) ; else S -= ma >> 1 ; if ( Y >= la ) U = ( la >> 1 ) - ( Y >> 1 ) ; else U -= Y >> 1 ; l . css ( { left : S + "px" , top : U + "px" } ) } , 0 ) } ) } , f =
function ( b , d , e , l ) { var u = this ; b = b . find ( "td.Text input" ) ; var z = b . eq ( 3 ) , o = b . eq ( 4 ) , L = b . eq ( 5 ) , T = b . length > 7 ? b . eq ( 6 ) : null , N = b . eq ( 0 ) , J = b . eq ( 1 ) , da = b . eq ( 2 ) , V = b . eq ( b . length > 7 ? 7 : 6 ) , O = b . length > 7 ? b . eq ( 8 ) : null , fa = function ( pa ) { if ( ! ( pa . target . value == "" && pa . target != V . get ( 0 ) && ( e != null && pa . target != e . get ( 0 ) || e == null ) ) ) { if ( ! ca ( pa ) ) return pa ; switch ( pa . target ) { case z . get ( 0 ) : switch ( pa . keyCode ) { case 38 : z . val ( ea . call ( u , ( z . val ( ) << 0 ) + 1 , 0 , 255 ) ) ; d . val ( "r" , z . val ( ) , pa . target ) ; return false ; case 40 : z . val ( ea . call ( u , ( z . val ( ) << 0 ) - 1 , 0 ,
255 ) ) ; d . val ( "r" , z . val ( ) , pa . target ) ; return false } break ; case o . get ( 0 ) : switch ( pa . keyCode ) { case 38 : o . val ( ea . call ( u , ( o . val ( ) << 0 ) + 1 , 0 , 255 ) ) ; d . val ( "g" , o . val ( ) , pa . target ) ; return false ; case 40 : o . val ( ea . call ( u , ( o . val ( ) << 0 ) - 1 , 0 , 255 ) ) ; d . val ( "g" , o . val ( ) , pa . target ) ; return false } break ; case L . get ( 0 ) : switch ( pa . keyCode ) { case 38 : L . val ( ea . call ( u , ( L . val ( ) << 0 ) + 1 , 0 , 255 ) ) ; d . val ( "b" , L . val ( ) , pa . target ) ; return false ; case 40 : L . val ( ea . call ( u , ( L . val ( ) << 0 ) - 1 , 0 , 255 ) ) ; d . val ( "b" , L . val ( ) , pa . target ) ; return false } break ; case T && T . get ( 0 ) : switch ( pa . keyCode ) { case 38 : T . val ( ea . call ( u ,
parseFloat ( T . val ( ) ) + 1 , 0 , 100 ) ) ; d . val ( "a" , Math . precision ( T . val ( ) * 255 / 100 , l ) , pa . target ) ; return false ; case 40 : T . val ( ea . call ( u , parseFloat ( T . val ( ) ) - 1 , 0 , 100 ) ) ; d . val ( "a" , Math . precision ( T . val ( ) * 255 / 100 , l ) , pa . target ) ; return false } break ; case N . get ( 0 ) : switch ( pa . keyCode ) { case 38 : N . val ( ea . call ( u , ( N . val ( ) << 0 ) + 1 , 0 , 360 ) ) ; d . val ( "h" , N . val ( ) , pa . target ) ; return false ; case 40 : N . val ( ea . call ( u , ( N . val ( ) << 0 ) - 1 , 0 , 360 ) ) ; d . val ( "h" , N . val ( ) , pa . target ) ; return false } break ; case J . get ( 0 ) : switch ( pa . keyCode ) { case 38 : J . val ( ea . call ( u , ( J . val ( ) <<
0 ) + 1 , 0 , 100 ) ) ; d . val ( "s" , J . val ( ) , pa . target ) ; return false ; case 40 : J . val ( ea . call ( u , ( J . val ( ) << 0 ) - 1 , 0 , 100 ) ) ; d . val ( "s" , J . val ( ) , pa . target ) ; return false } break ; case da . get ( 0 ) : switch ( pa . keyCode ) { case 38 : da . val ( ea . call ( u , ( da . val ( ) << 0 ) + 1 , 0 , 100 ) ) ; d . val ( "v" , da . val ( ) , pa . target ) ; return false ; case 40 : da . val ( ea . call ( u , ( da . val ( ) << 0 ) - 1 , 0 , 100 ) ) ; d . val ( "v" , da . val ( ) , pa . target ) ; return false } } } } , sa = function ( pa ) { if ( ! ( pa . target . value == "" && pa . target != V . get ( 0 ) && ( e != null && pa . target != e . get ( 0 ) || e == null ) ) ) { if ( ! ca ( pa ) ) return pa ; switch ( pa . target ) { case z . get ( 0 ) : z . val ( ea . call ( u ,
z . val ( ) , 0 , 255 ) ) ; d . val ( "r" , z . val ( ) , pa . target ) ; break ; case o . get ( 0 ) : o . val ( ea . call ( u , o . val ( ) , 0 , 255 ) ) ; d . val ( "g" , o . val ( ) , pa . target ) ; break ; case L . get ( 0 ) : L . val ( ea . call ( u , L . val ( ) , 0 , 255 ) ) ; d . val ( "b" , L . val ( ) , pa . target ) ; break ; case T && T . get ( 0 ) : T . val ( ea . call ( u , T . val ( ) , 0 , 100 ) ) ; d . val ( "a" , Math . precision ( T . val ( ) * 255 / 100 , l ) , pa . target ) ; break ; case N . get ( 0 ) : N . val ( ea . call ( u , N . val ( ) , 0 , 360 ) ) ; d . val ( "h" , N . val ( ) , pa . target ) ; break ; case J . get ( 0 ) : J . val ( ea . call ( u , J . val ( ) , 0 , 100 ) ) ; d . val ( "s" , J . val ( ) , pa . target ) ; break ; case da . get ( 0 ) : da . val ( ea . call ( u ,
da . val ( ) , 0 , 100 ) ) ; d . val ( "v" , da . val ( ) , pa . target ) ; break ; case V . get ( 0 ) : V . val ( V . val ( ) . replace ( /[^a-fA-F0-9]/g , "" ) . toLowerCase ( ) . substring ( 0 , 6 ) ) ; e && e . val ( V . val ( ) ) ; d . val ( "hex" , V . val ( ) != "" ? V . val ( ) : null , pa . target ) ; break ; case e && e . get ( 0 ) : e . val ( e . val ( ) . replace ( /[^a-fA-F0-9]/g , "" ) . toLowerCase ( ) . substring ( 0 , 6 ) ) ; V . val ( e . val ( ) ) ; d . val ( "hex" , e . val ( ) != "" ? e . val ( ) : null , pa . target ) ; break ; case O && O . get ( 0 ) : O . val ( O . val ( ) . replace ( /[^a-fA-F0-9]/g , "" ) . toLowerCase ( ) . substring ( 0 , 2 ) ) ; d . val ( "a" , O . val ( ) != null ? parseInt ( O . val ( ) , 16 ) :
null , pa . target ) } } } , ja = function ( pa ) { if ( d . val ( ) != null ) switch ( pa . target ) { case z . get ( 0 ) : z . val ( d . val ( "r" ) ) ; break ; case o . get ( 0 ) : o . val ( d . val ( "g" ) ) ; break ; case L . get ( 0 ) : L . val ( d . val ( "b" ) ) ; break ; case T && T . get ( 0 ) : T . val ( Math . precision ( d . val ( "a" ) * 100 / 255 , l ) ) ; break ; case N . get ( 0 ) : N . val ( d . val ( "h" ) ) ; break ; case J . get ( 0 ) : J . val ( d . val ( "s" ) ) ; break ; case da . get ( 0 ) : da . val ( d . val ( "v" ) ) ; break ; case V . get ( 0 ) : case e && e . get ( 0 ) : V . val ( d . val ( "hex" ) ) ; e && e . val ( d . val ( "hex" ) ) ; break ; case O && O . get ( 0 ) : O . val ( d . val ( "ahex" ) . substring ( 6 ) ) } } , ca =
function ( pa ) { switch ( pa . keyCode ) { case 9 : case 16 : case 29 : case 37 : case 39 : return false ; case "c" . charCodeAt ( ) : case "v" . charCodeAt ( ) : if ( pa . ctrlKey ) return false } return true } , ea = function ( pa , ba , S ) { if ( pa == "" || isNaN ( pa ) ) return ba ; if ( pa > S ) return S ; if ( pa < ba ) return ba ; return pa } , qa = function ( pa , ba ) { var S = pa . val ( "all" ) ; if ( ba != z . get ( 0 ) ) z . val ( S != null ? S . r : "" ) ; if ( ba != o . get ( 0 ) ) o . val ( S != null ? S . g : "" ) ; if ( ba != L . get ( 0 ) ) L . val ( S != null ? S . b : "" ) ; if ( T && ba != T . get ( 0 ) ) T . val ( S != null ? Math . precision ( S . a * 100 / 255 , l ) : "" ) ; if ( ba != N . get ( 0 ) ) N . val ( S !=
null ? S . h : "" ) ; if ( ba != J . get ( 0 ) ) J . val ( S != null ? S . s : "" ) ; if ( ba != da . get ( 0 ) ) da . val ( S != null ? S . v : "" ) ; if ( ba != V . get ( 0 ) && ( e && ba != e . get ( 0 ) || ! e ) ) V . val ( S != null ? S . hex : "" ) ; if ( e && ba != e . get ( 0 ) && ba != V . get ( 0 ) ) e . val ( S != null ? S . hex : "" ) ; if ( O && ba != O . get ( 0 ) ) O . val ( S != null ? S . ahex . substring ( 6 ) : "" ) } ; a . extend ( true , u , { destroy : function ( ) { z . add ( o ) . add ( L ) . add ( T ) . add ( N ) . add ( J ) . add ( da ) . add ( V ) . add ( e ) . add ( O ) . unbind ( "keyup" , sa ) . unbind ( "blur" , ja ) ; z . add ( o ) . add ( L ) . add ( T ) . add ( N ) . add ( J ) . add ( da ) . unbind ( "keydown" , fa ) ; d . unbind ( qa ) ; O = V = da = J = N = T = L =
o = z = null } } ) ; z . add ( o ) . add ( L ) . add ( T ) . add ( N ) . add ( J ) . add ( da ) . add ( V ) . add ( e ) . add ( O ) . bind ( "keyup" , sa ) . bind ( "blur" , ja ) ; z . add ( o ) . add ( L ) . add ( T ) . add ( N ) . add ( J ) . add ( da ) . bind ( "keydown" , fa ) ; d . bind ( qa ) } ; a . jPicker = { List : [ ] , Color : function ( b ) { var d = this , e , l , u , z , o , L , T , N = [ ] , J = function ( V ) { for ( var O = 0 ; O < N . length ; O ++ ) N [ O ] . call ( d , d , V ) } , da = function ( V , O , fa ) { if ( O === undefined ) { if ( V === undefined || V == null || V == "" ) V = "all" ; if ( e == null ) return null ; switch ( V . toLowerCase ( ) ) { case "ahex" : return p . rgbaToHex ( { r : e , g : l , b : u , a : z } ) ; case "hex" : return da ( "ahex" ) . substring ( 0 ,
6 ) ; case "all" : return { r : e , g : l , b : u , a : z , h : o , s : L , v : T , hex : da . call ( d , "hex" ) , ahex : da . call ( d , "ahex" ) } ; default : O = { } ; for ( var sa = 0 ; sa < V . length ; sa ++ ) switch ( V . charAt ( sa ) ) { case "r" : if ( V . length == 1 ) O = e ; else O . r = e ; break ; case "g" : if ( V . length == 1 ) O = l ; else O . g = l ; break ; case "b" : if ( V . length == 1 ) O = u ; else O . b = u ; break ; case "a" : if ( V . length == 1 ) O = z ; else O . a = z ; break ; case "h" : if ( V . length == 1 ) O = o ; else O . h = o ; break ; case "s" : if ( V . length == 1 ) O = L ; else O . s = L ; break ; case "v" : if ( V . length == 1 ) O = T ; else O . v = T } return O == { } ? da . call ( d , "all" ) : O } } if ( ! ( fa !=
null && fa == d ) ) { var ja = false ; if ( V == null ) V = "" ; if ( O == null ) { if ( e != null ) { e = null ; ja = true } if ( l != null ) { l = null ; ja = true } if ( u != null ) { u = null ; ja = true } if ( z != null ) { z = null ; ja = true } if ( o != null ) { o = null ; ja = true } if ( L != null ) { L = null ; ja = true } if ( T != null ) { T = null ; ja = true } ja && J . call ( d , fa || d ) } else switch ( V . toLowerCase ( ) ) { case "ahex" : case "hex" : O = p . hexToRgba ( O && ( O . ahex || O . hex ) || O || "00000000" ) ; da . call ( d , "rgba" , { r : O . r , g : O . g , b : O . b , a : V == "ahex" ? O . a : z != null ? z : 255 } , fa ) ; break ; default : if ( O && ( O . ahex != null || O . hex != null ) ) { da . call ( d , "ahex" ,
O . ahex || O . hex || "00000000" , fa ) ; break } var ca = { } , ea = false , qa = false ; if ( O . r !== undefined && ! V . indexOf ( "r" ) == - 1 ) V += "r" ; if ( O . g !== undefined && ! V . indexOf ( "g" ) == - 1 ) V += "g" ; if ( O . b !== undefined && ! V . indexOf ( "b" ) == - 1 ) V += "b" ; if ( O . a !== undefined && ! V . indexOf ( "a" ) == - 1 ) V += "a" ; if ( O . h !== undefined && ! V . indexOf ( "h" ) == - 1 ) V += "h" ; if ( O . s !== undefined && ! V . indexOf ( "s" ) == - 1 ) V += "s" ; if ( O . v !== undefined && ! V . indexOf ( "v" ) == - 1 ) V += "v" ; for ( sa = 0 ; sa < V . length ; sa ++ ) switch ( V . charAt ( sa ) ) { case "r" : if ( qa ) continue ; ea = true ; ca . r = O && O . r && O . r | 0 || O && O | 0 || 0 ;
if ( ca . r < 0 ) ca . r = 0 ; else if ( ca . r > 255 ) ca . r = 255 ; if ( e != ca . r ) { e = ca . r ; ja = true } break ; case "g" : if ( qa ) continue ; ea = true ; ca . g = O && O . g && O . g | 0 || O && O | 0 || 0 ; if ( ca . g < 0 ) ca . g = 0 ; else if ( ca . g > 255 ) ca . g = 255 ; if ( l != ca . g ) { l = ca . g ; ja = true } break ; case "b" : if ( qa ) continue ; ea = true ; ca . b = O && O . b && O . b | 0 || O && O | 0 || 0 ; if ( ca . b < 0 ) ca . b = 0 ; else if ( ca . b > 255 ) ca . b = 255 ; if ( u != ca . b ) { u = ca . b ; ja = true } break ; case "a" : ca . a = O && O . a != null ? O . a | 0 : O != null ? O | 0 : 255 ; if ( ca . a < 0 ) ca . a = 0 ; else if ( ca . a > 255 ) ca . a = 255 ; if ( z != ca . a ) { z = ca . a ; ja = true } break ; case "h" : if ( ea ) continue ;
qa = true ; ca . h = O && O . h && O . h | 0 || O && O | 0 || 0 ; if ( ca . h < 0 ) ca . h = 0 ; else if ( ca . h > 360 ) ca . h = 360 ; if ( o != ca . h ) { o = ca . h ; ja = true } break ; case "s" : if ( ea ) continue ; qa = true ; ca . s = O && O . s != null ? O . s | 0 : O != null ? O | 0 : 100 ; if ( ca . s < 0 ) ca . s = 0 ; else if ( ca . s > 100 ) ca . s = 100 ; if ( L != ca . s ) { L = ca . s ; ja = true } break ; case "v" : if ( ea ) continue ; qa = true ; ca . v = O && O . v != null ? O . v | 0 : O != null ? O | 0 : 100 ; if ( ca . v < 0 ) ca . v = 0 ; else if ( ca . v > 100 ) ca . v = 100 ; if ( T != ca . v ) { T = ca . v ; ja = true } } if ( ja ) { if ( ea ) { e = e || 0 ; l = l || 0 ; u = u || 0 ; O = p . rgbToHsv ( { r : e , g : l , b : u } ) ; o = O . h ; L = O . s ; T = O . v } else if ( qa ) { o = o ||
0 ; L = L != null ? L : 100 ; T = T != null ? T : 100 ; O = p . hsvToRgb ( { h : o , s : L , v : T } ) ; e = O . r ; l = O . g ; u = O . b } z = z != null ? z : 255 ; J . call ( d , fa || d ) } } } } ; a . extend ( true , d , { val : da , bind : function ( V ) { a . isFunction ( V ) && N . push ( V ) } , unbind : function ( V ) { if ( a . isFunction ( V ) ) for ( var O ; ( O = a . inArray ( V , N ) ) != - 1 ; ) N . splice ( O , 1 ) } , destroy : function ( ) { N = null } } ) ; if ( b ) if ( b . ahex != null ) da ( "ahex" , b ) ; else if ( b . hex != null ) da ( ( b . a != null ? "a" : "" ) + "hex" , b . a != null ? { ahex : b . hex + p . intToHex ( b . a ) } : b ) ; else if ( b . r != null && b . g != null && b . b != null ) da ( "rgb" + ( b . a != null ? "a" : "" ) , b ) ; else if ( b . h !=
null && b . s != null && b . v != null ) da ( "hsv" + ( b . a != null ? "a" : "" ) , b ) } , ColorMethods : { hexToRgba : function ( b ) { b = this . validateHex ( b ) ; if ( b == "" ) return { r : null , g : null , b : null , a : null } ; var d = "00" , e = "00" , l = "00" , u = "255" ; if ( b . length == 6 ) b += "ff" ; if ( b . length > 6 ) { d = b . substring ( 0 , 2 ) ; e = b . substring ( 2 , 4 ) ; l = b . substring ( 4 , 6 ) ; u = b . substring ( 6 , b . length ) } else { if ( b . length > 4 ) { d = b . substring ( 4 , b . length ) ; b = b . substring ( 0 , 4 ) } if ( b . length > 2 ) { e = b . substring ( 2 , b . length ) ; b = b . substring ( 0 , 2 ) } if ( b . length > 0 ) l = b . substring ( 0 , b . length ) } return { r : this . hexToInt ( d ) ,
g : this . hexToInt ( e ) , b : this . hexToInt ( l ) , a : this . hexToInt ( u ) } } , validateHex : function ( b ) { if ( typeof b == "object" ) return "" ; b = b . toLowerCase ( ) . replace ( /[^a-f0-9]/g , "" ) ; if ( b . length > 8 ) b = b . substring ( 0 , 8 ) ; return b } , rgbaToHex : function ( b ) { return this . intToHex ( b . r ) + this . intToHex ( b . g ) + this . intToHex ( b . b ) + this . intToHex ( b . a ) } , intToHex : function ( b ) { b = ( b | 0 ) . toString ( 16 ) ; if ( b . length == 1 ) b = "0" + b ; return b . toLowerCase ( ) } , hexToInt : function ( b ) { return parseInt ( b , 16 ) } , rgbToHsv : function ( b ) { var d = b . r / 255 , e = b . g / 255 ; b = b . b / 255 ; var l = { h : 0 ,
s : 0 , v : 0 } , u = 0 , z = 0 ; if ( d >= e && d >= b ) { z = d ; u = e > b ? b : e } else if ( e >= b && e >= d ) { z = e ; u = d > b ? b : d } else { z = b ; u = e > d ? d : e } l . v = z ; l . s = z ? ( z - u ) / z : 0 ; if ( l . s ) { u = z - u ; l . h = d == z ? ( e - b ) / u : e == z ? 2 + ( b - d ) / u : 4 + ( d - e ) / u ; l . h = parseInt ( l . h * 60 ) ; if ( l . h < 0 ) l . h += 360 } else l . h = 0 ; l . s = l . s * 100 | 0 ; l . v = l . v * 100 | 0 ; return l } , hsvToRgb : function ( b ) { var d = { r : 0 , g : 0 , b : 0 , a : 100 } , e = b . h , l = b . s ; b = b . v ; if ( l == 0 ) d . r = b == 0 ? d . g = d . b = 0 : d . g = d . b = b * 255 / 100 | 0 ; else { if ( e == 360 ) e = 0 ; e /= 60 ; l /= 100 ; b /= 100 ; var u = e | 0 , z = e - u ; e = b * ( 1 - l ) ; var o = b * ( 1 - l * z ) ; l = b * ( 1 - l * ( 1 - z ) ) ; switch ( u ) { case 0 : d . r = b ; d . g =
l ; d . b = e ; break ; case 1 : d . r = o ; d . g = b ; d . b = e ; break ; case 2 : d . r = e ; d . g = b ; d . b = l ; break ; case 3 : d . r = e ; d . g = o ; d . b = b ; break ; case 4 : d . r = l ; d . g = e ; d . b = b ; break ; case 5 : d . r = b ; d . g = e ; d . b = o } d . r = d . r * 255 | 0 ; d . g = d . g * 255 | 0 ; d . b = d . b * 255 | 0 } return d } } } ; var c = a . jPicker . Color , m = a . jPicker . List , p = a . jPicker . ColorMethods ; a . fn . jPicker = function ( b ) { var d = arguments ; return this . each ( function ( ) { var e = this , l = a . extend ( true , { } , a . fn . jPicker . defaults , b ) ; if ( a ( e ) . get ( 0 ) . nodeName . toLowerCase ( ) == "input" ) { a . extend ( true , l , { window : { bindToInput : true , expandable : true ,
input : a ( e ) } } ) ; if ( a ( e ) . val ( ) == "" ) { l . color . active = new c ( { hex : null } ) ; l . color . current = new c ( { hex : null } ) } else if ( p . validateHex ( a ( e ) . val ( ) ) ) { l . color . active = new c ( { hex : a ( e ) . val ( ) , a : l . color . active . val ( "a" ) } ) ; l . color . current = new c ( { hex : a ( e ) . val ( ) , a : l . color . active . val ( "a" ) } ) } } if ( l . window . expandable ) a ( e ) . after ( '<span class="jPicker"><span class="Icon"><span class="Color"> </span><span class="Alpha"> </span><span class="Image" title="Click To Open Color Picker"> </span><span class="Container"> </span></span></span>' ) ;
else l . window . liveUpdate = false ; var u = parseFloat ( navigator . appVersion . split ( "MSIE" ) [ 1 ] ) < 7 && document . body . filters , z = null , o = null , L = null , T = null , N = null , J = null , da = null , V = null , O = null , fa = null , sa = null , ja = null , ca = null , ea = null , qa = null , pa = null , ba = null , S = null , U = null , ra = null , la = null , ma = null , Y = null , za = null , Ia = null , Qa = null , Ka = null , Ua = null , Wa = function ( M ) { var I = ta . active , X = I . val ( "hex" ) , Ma , Xa ; l . color . mode = M ; switch ( M ) { case "h" : setTimeout ( function ( ) { ab . call ( e , o , "transparent" ) ; Ja . call ( e , T , 0 ) ; Ea . call ( e , T , 100 ) ; Ja . call ( e ,
N , 260 ) ; Ea . call ( e , N , 100 ) ; ab . call ( e , L , "transparent" ) ; Ja . call ( e , da , 0 ) ; Ea . call ( e , da , 100 ) ; Ja . call ( e , V , 260 ) ; Ea . call ( e , V , 100 ) ; Ja . call ( e , O , 260 ) ; Ea . call ( e , O , 100 ) ; Ja . call ( e , fa , 260 ) ; Ea . call ( e , fa , 100 ) ; Ja . call ( e , ja , 260 ) ; Ea . call ( e , ja , 100 ) } , 0 ) ; ca . range ( "all" , { minX : 0 , maxX : 100 , minY : 0 , maxY : 100 } ) ; ea . range ( "rangeY" , { minY : 0 , maxY : 360 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "s" ) , y : 100 - I . val ( "v" ) } , ca ) ; ea . val ( "y" , 360 - I . val ( "h" ) , ea ) ; break ; case "s" : setTimeout ( function ( ) { ab . call ( e , o , "transparent" ) ; Ja . call ( e , T , - 260 ) ;
Ja . call ( e , N , - 520 ) ; Ja . call ( e , da , - 260 ) ; Ja . call ( e , V , - 520 ) ; Ja . call ( e , ja , 260 ) ; Ea . call ( e , ja , 100 ) } , 0 ) ; ca . range ( "all" , { minX : 0 , maxX : 360 , minY : 0 , maxY : 100 } ) ; ea . range ( "rangeY" , { minY : 0 , maxY : 100 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "h" ) , y : 100 - I . val ( "v" ) } , ca ) ; ea . val ( "y" , 100 - I . val ( "s" ) , ea ) ; break ; case "v" : setTimeout ( function ( ) { ab . call ( e , o , "000000" ) ; Ja . call ( e , T , - 780 ) ; Ja . call ( e , N , 260 ) ; ab . call ( e , L , X ) ; Ja . call ( e , da , - 520 ) ; Ja . call ( e , V , 260 ) ; Ea . call ( e , V , 100 ) ; Ja . call ( e , ja , 260 ) ; Ea . call ( e , ja , 100 ) } , 0 ) ; ca . range ( "all" ,
{ minX : 0 , maxX : 360 , minY : 0 , maxY : 100 } ) ; ea . range ( "rangeY" , { minY : 0 , maxY : 100 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "h" ) , y : 100 - I . val ( "s" ) } , ca ) ; ea . val ( "y" , 100 - I . val ( "v" ) , ea ) ; break ; case "r" : Ma = - 1040 ; Xa = - 780 ; ca . range ( "all" , { minX : 0 , maxX : 255 , minY : 0 , maxY : 255 } ) ; ea . range ( "rangeY" , { minY : 0 , maxY : 255 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "b" ) , y : 255 - I . val ( "g" ) } , ca ) ; ea . val ( "y" , 255 - I . val ( "r" ) , ea ) ; break ; case "g" : Ma = - 1560 ; Xa = - 1820 ; ca . range ( "all" , { minX : 0 , maxX : 255 , minY : 0 , maxY : 255 } ) ; ea . range ( "rangeY" ,
{ minY : 0 , maxY : 255 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "b" ) , y : 255 - I . val ( "r" ) } , ca ) ; ea . val ( "y" , 255 - I . val ( "g" ) , ea ) ; break ; case "b" : Ma = - 2080 ; Xa = - 2860 ; ca . range ( "all" , { minX : 0 , maxX : 255 , minY : 0 , maxY : 255 } ) ; ea . range ( "rangeY" , { minY : 0 , maxY : 255 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "r" ) , y : 255 - I . val ( "g" ) } , ca ) ; ea . val ( "y" , 255 - I . val ( "b" ) , ea ) ; break ; case "a" : setTimeout ( function ( ) { ab . call ( e , o , "transparent" ) ; Ja . call ( e , T , - 260 ) ; Ja . call ( e , N , - 520 ) ; Ja . call ( e , da , 260 ) ; Ja . call ( e , V , 260 ) ; Ea . call ( e , V , 100 ) ;
Ja . call ( e , ja , 0 ) ; Ea . call ( e , ja , 100 ) } , 0 ) ; ca . range ( "all" , { minX : 0 , maxX : 360 , minY : 0 , maxY : 100 } ) ; ea . range ( "rangeY" , { minY : 0 , maxY : 255 } ) ; if ( I . val ( "ahex" ) == null ) break ; ca . val ( "xy" , { x : I . val ( "h" ) , y : 100 - I . val ( "v" ) } , ca ) ; ea . val ( "y" , 255 - I . val ( "a" ) , ea ) ; break ; default : throw "Invalid Mode" ; } switch ( M ) { case "s" : case "v" : case "a" : setTimeout ( function ( ) { Ea . call ( e , T , 100 ) ; Ea . call ( e , da , 100 ) ; Ja . call ( e , O , 260 ) ; Ea . call ( e , O , 100 ) ; Ja . call ( e , fa , 260 ) ; Ea . call ( e , fa , 100 ) } , 0 ) ; break ; case "r" : case "g" : case "b" : setTimeout ( function ( ) { ab . call ( e , o ,
"transparent" ) ; ab . call ( e , L , "transparent" ) ; Ea . call ( e , da , 100 ) ; Ea . call ( e , T , 100 ) ; Ja . call ( e , T , Ma ) ; Ja . call ( e , N , Ma - 260 ) ; Ja . call ( e , da , Xa - 780 ) ; Ja . call ( e , V , Xa - 520 ) ; Ja . call ( e , O , Xa ) ; Ja . call ( e , fa , Xa - 260 ) ; Ja . call ( e , ja , 260 ) ; Ea . call ( e , ja , 100 ) } , 0 ) } I . val ( "ahex" ) != null && La . call ( e , I ) } , La = function ( M , I ) { if ( I == null || I != ea && I != ca ) Fa . call ( e , M , I ) ; setTimeout ( function ( ) { Gb . call ( e , M ) ; Nb . call ( e , M ) ; lb . call ( e , M ) } , 0 ) } , Ga = function ( M , I ) { var X = ta . active ; if ( ! ( I != ca && X . val ( ) == null ) ) { var Ma = M . val ( "all" ) ; switch ( l . color . mode ) { case "h" : X . val ( "sv" ,
{ s : Ma . x , v : 100 - Ma . y } , I ) ; break ; case "s" : case "a" : X . val ( "hv" , { h : Ma . x , v : 100 - Ma . y } , I ) ; break ; case "v" : X . val ( "hs" , { h : Ma . x , s : 100 - Ma . y } , I ) ; break ; case "r" : X . val ( "gb" , { g : 255 - Ma . y , b : Ma . x } , I ) ; break ; case "g" : X . val ( "rb" , { r : 255 - Ma . y , b : Ma . x } , I ) ; break ; case "b" : X . val ( "rg" , { r : Ma . x , g : 255 - Ma . y } , I ) } } } , Oa = function ( M , I ) { var X = ta . active ; if ( ! ( I != ea && X . val ( ) == null ) ) switch ( l . color . mode ) { case "h" : X . val ( "h" , { h : 360 - M . val ( "y" ) } , I ) ; break ; case "s" : X . val ( "s" , { s : 100 - M . val ( "y" ) } , I ) ; break ; case "v" : X . val ( "v" , { v : 100 - M . val ( "y" ) } , I ) ; break ;
case "r" : X . val ( "r" , { r : 255 - M . val ( "y" ) } , I ) ; break ; case "g" : X . val ( "g" , { g : 255 - M . val ( "y" ) } , I ) ; break ; case "b" : X . val ( "b" , { b : 255 - M . val ( "y" ) } , I ) ; break ; case "a" : X . val ( "a" , 255 - M . val ( "y" ) , I ) } } , Fa = function ( M , I ) { if ( I != ca ) switch ( l . color . mode ) { case "h" : var X = M . val ( "sv" ) ; ca . val ( "xy" , { x : X != null ? X . s : 100 , y : 100 - ( X != null ? X . v : 100 ) } , I ) ; break ; case "s" : case "a" : X = M . val ( "hv" ) ; ca . val ( "xy" , { x : X && X . h || 0 , y : 100 - ( X != null ? X . v : 100 ) } , I ) ; break ; case "v" : X = M . val ( "hs" ) ; ca . val ( "xy" , { x : X && X . h || 0 , y : 100 - ( X != null ? X . s : 100 ) } , I ) ; break ; case "r" : X =
M . val ( "bg" ) ; ca . val ( "xy" , { x : X && X . b || 0 , y : 255 - ( X && X . g || 0 ) } , I ) ; break ; case "g" : X = M . val ( "br" ) ; ca . val ( "xy" , { x : X && X . b || 0 , y : 255 - ( X && X . r || 0 ) } , I ) ; break ; case "b" : X = M . val ( "rg" ) ; ca . val ( "xy" , { x : X && X . r || 0 , y : 255 - ( X && X . g || 0 ) } , I ) } if ( I != ea ) switch ( l . color . mode ) { case "h" : ea . val ( "y" , 360 - ( M . val ( "h" ) || 0 ) , I ) ; break ; case "s" : X = M . val ( "s" ) ; ea . val ( "y" , 100 - ( X != null ? X : 100 ) , I ) ; break ; case "v" : X = M . val ( "v" ) ; ea . val ( "y" , 100 - ( X != null ? X : 100 ) , I ) ; break ; case "r" : ea . val ( "y" , 255 - ( M . val ( "r" ) || 0 ) , I ) ; break ; case "g" : ea . val ( "y" , 255 - ( M . val ( "g" ) || 0 ) ,
I ) ; break ; case "b" : ea . val ( "y" , 255 - ( M . val ( "b" ) || 0 ) , I ) ; break ; case "a" : X = M . val ( "a" ) ; ea . val ( "y" , 255 - ( X != null ? X : 255 ) , I ) } } , Gb = function ( M ) { try { var I = M . val ( "all" ) ; ra . css ( { backgroundColor : I && "#" + I . hex || "transparent" } ) ; Ea . call ( e , ra , I && Math . precision ( I . a * 100 / 255 , 4 ) || 0 ) } catch ( X ) { } } , Nb = function ( M ) { switch ( l . color . mode ) { case "h" : ab . call ( e , o , ( new c ( { h : M . val ( "h" ) || 0 , s : 100 , v : 100 } ) ) . val ( "hex" ) ) ; break ; case "s" : case "a" : var I = M . val ( "s" ) ; Ea . call ( e , N , 100 - ( I != null ? I : 100 ) ) ; break ; case "v" : I = M . val ( "v" ) ; Ea . call ( e , T , I != null ? I :
100 ) ; break ; case "r" : Ea . call ( e , N , Math . precision ( ( M . val ( "r" ) || 0 ) / 255 * 100 , 4 ) ) ; break ; case "g" : Ea . call ( e , N , Math . precision ( ( M . val ( "g" ) || 0 ) / 255 * 100 , 4 ) ) ; break ; case "b" : Ea . call ( e , N , Math . precision ( ( M . val ( "b" ) || 0 ) / 255 * 100 ) ) } M = M . val ( "a" ) ; Ea . call ( e , J , Math . precision ( ( 255 - ( M || 0 ) ) * 100 / 255 , 4 ) ) } , lb = function ( M ) { switch ( l . color . mode ) { case "h" : var I = M . val ( "a" ) ; Ea . call ( e , sa , Math . precision ( ( 255 - ( I || 0 ) ) * 100 / 255 , 4 ) ) ; break ; case "s" : I = M . val ( "hva" ) ; var X = new c ( { h : I && I . h || 0 , s : 100 , v : I != null ? I . v : 100 } ) ; ab . call ( e , L , X . val ( "hex" ) ) ;
Ea . call ( e , V , 100 - ( I != null ? I . v : 100 ) ) ; Ea . call ( e , sa , Math . precision ( ( 255 - ( I && I . a || 0 ) ) * 100 / 255 , 4 ) ) ; break ; case "v" : I = M . val ( "hsa" ) ; X = new c ( { h : I && I . h || 0 , s : I != null ? I . s : 100 , v : 100 } ) ; ab . call ( e , L , X . val ( "hex" ) ) ; Ea . call ( e , sa , Math . precision ( ( 255 - ( I && I . a || 0 ) ) * 100 / 255 , 4 ) ) ; break ; case "r" : case "g" : case "b" : X = I = 0 ; M = M . val ( "rgba" ) ; if ( l . color . mode == "r" ) { I = M && M . b || 0 ; X = M && M . g || 0 } else if ( l . color . mode == "g" ) { I = M && M . b || 0 ; X = M && M . r || 0 } else if ( l . color . mode == "b" ) { I = M && M . r || 0 ; X = M && M . g || 0 } var Ma = X > I ? I : X ; Ea . call ( e , V , I > X ? Math . precision ( ( I -
X ) / ( 255 - X ) * 100 , 4 ) : 0 ) ; Ea . call ( e , O , X > I ? Math . precision ( ( X - I ) / ( 255 - I ) * 100 , 4 ) : 0 ) ; Ea . call ( e , fa , Math . precision ( Ma / 255 * 100 , 4 ) ) ; Ea . call ( e , sa , Math . precision ( ( 255 - ( M && M . a || 0 ) ) * 100 / 255 , 4 ) ) ; break ; case "a" : I = M . val ( "a" ) ; ab . call ( e , L , M . val ( "hex" ) || "000000" ) ; Ea . call ( e , sa , I != null ? 0 : 100 ) ; Ea . call ( e , ja , I != null ? 100 : 0 ) } } , ab = function ( M , I ) { M . css ( { backgroundColor : I && I . length == 6 && "#" + I || "transparent" } ) } , Sa = function ( M , I ) { if ( u && ( I . indexOf ( "AlphaBar.png" ) != - 1 || I . indexOf ( "Bars.png" ) != - 1 || I . indexOf ( "Maps.png" ) != - 1 ) ) { M . attr ( "pngSrc" ,
I ) ; M . css ( { backgroundImage : "none" , filter : "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + I + "', sizingMethod='scale')" } ) } else M . css ( { backgroundImage : "url('" + I + "')" } ) } , Ja = function ( M , I ) { M . css ( { top : I + "px" } ) } , Ea = function ( M , I ) { M . css ( { visibility : I > 0 ? "visible" : "hidden" } ) ; if ( I > 0 && I < 100 ) if ( u ) { var X = M . attr ( "pngSrc" ) ; X != null && ( X . indexOf ( "AlphaBar.png" ) != - 1 || X . indexOf ( "Bars.png" ) != - 1 || X . indexOf ( "Maps.png" ) != - 1 ) ? M . css ( { filter : "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + X + "', sizingMethod='scale') progid:DXImageTransform.Microsoft.Alpha(opacity=" +
I + ")" } ) : M . css ( { opacity : Math . precision ( I / 100 , 4 ) } ) } else M . css ( { opacity : Math . precision ( I / 100 , 4 ) } ) ; else if ( I == 0 || I == 100 ) if ( u ) { X = M . attr ( "pngSrc" ) ; X != null && ( X . indexOf ( "AlphaBar.png" ) != - 1 || X . indexOf ( "Bars.png" ) != - 1 || X . indexOf ( "Maps.png" ) != - 1 ) ? M . css ( { filter : "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + X + "', sizingMethod='scale')" } ) : M . css ( { opacity : "" } ) } else M . css ( { opacity : "" } ) } , Za = function ( ) { ta . active . val ( "ahex" , ta . current . val ( "ahex" ) ) } , Ra = function ( ) { ta . current . val ( "ahex" , ta . active . val ( "ahex" ) ) } ,
$a = function ( M ) { a ( this ) . parents ( "tbody:first" ) . find ( 'input:radio[value!="' + M . target . value + '"]' ) . removeAttr ( "checked" ) ; Wa . call ( e , M . target . value ) } , Na = function ( ) { Za . call ( e ) } , mb = function ( ) { Za . call ( e ) ; l . window . expandable && Ib . call ( e ) ; a . isFunction ( Cb ) && Cb . call ( e , ta . active , Y ) } , Ab = function ( ) { Ra . call ( e ) ; l . window . expandable && Ib . call ( e ) ; a . isFunction ( Bb ) && Bb . call ( e , ta . active , ma ) } , cb = function ( ) { Kb . call ( e ) } , jb = function ( M ) { var I = M . val ( "hex" ) ; la . css ( { backgroundColor : I && "#" + I || "transparent" } ) ; Ea . call ( e , la , Math . precision ( ( M . val ( "a" ) ||
0 ) * 100 / 255 , 4 ) ) } , kb = function ( M ) { var I = M . val ( "hex" ) ; M = M . val ( "va" ) ; Ia . css ( { backgroundColor : I && "#" + I || "transparent" } ) ; Ea . call ( e , Qa , Math . precision ( ( 255 - ( M && M . a || 0 ) ) * 100 / 255 , 4 ) ) ; if ( l . window . bindToInput && l . window . updateInputColor ) l . window . input . css ( { backgroundColor : I && "#" + I || "transparent" , color : M == null || M . v > 75 ? "#000000" : "#ffffff" } ) } , Ca = function ( M ) { pa = parseInt ( z . css ( "left" ) ) ; ba = parseInt ( z . css ( "top" ) ) ; S = M . pageX ; U = M . pageY ; a ( document ) . bind ( "mousemove" , wb ) . bind ( "mouseup" , nb ) ; M . preventDefault ( ) } , wb = function ( M ) { z . css ( { left : pa -
( S - M . pageX ) + "px" , top : ba - ( U - M . pageY ) + "px" } ) ; l . window . expandable && ! a . support . boxModel && z . prev ( ) . css ( { left : z . css ( "left" ) , top : z . css ( "top" ) } ) ; M . stopPropagation ( ) ; M . preventDefault ( ) ; return false } , nb = function ( M ) { a ( document ) . unbind ( "mousemove" , wb ) . unbind ( "mouseup" , nb ) ; M . stopPropagation ( ) ; M . preventDefault ( ) ; return false } , yb = function ( M ) { M . preventDefault ( ) ; M . stopPropagation ( ) ; ta . active . val ( "ahex" , a ( this ) . attr ( "title" ) || null , M . target ) ; return false } , Bb = a . isFunction ( d [ 1 ] ) && d [ 1 ] || null , ob = a . isFunction ( d [ 2 ] ) && d [ 2 ] ||
null , Cb = a . isFunction ( d [ 3 ] ) && d [ 3 ] || null , Kb = function ( ) { ta . current . val ( "ahex" , ta . active . val ( "ahex" ) ) ; var M = function ( ) { if ( ! ( ! l . window . expandable || a . support . boxModel ) ) { var I = z . find ( "table:first" ) ; z . before ( "<iframe/>" ) ; z . prev ( ) . css ( { width : I . width ( ) , height : z . height ( ) , opacity : 0 , position : "absolute" , left : z . css ( "left" ) , top : z . css ( "top" ) } ) } } ; if ( l . window . expandable ) { a ( document . body ) . children ( "div.jPicker.Container" ) . css ( { zIndex : 10 } ) ; z . css ( { zIndex : 20 } ) } switch ( l . window . effects . type ) { case "fade" : z . fadeIn ( l . window . effects . speed . show ,
M ) ; break ; case "slide" : z . slideDown ( l . window . effects . speed . show , M ) ; break ; default : z . show ( l . window . effects . speed . show , M ) } } , Ib = function ( ) { var M = function ( ) { l . window . expandable && z . css ( { zIndex : 10 } ) ; ! l . window . expandable || a . support . boxModel || z . prev ( ) . remove ( ) } ; switch ( l . window . effects . type ) { case "fade" : z . fadeOut ( l . window . effects . speed . hide , M ) ; break ; case "slide" : z . slideUp ( l . window . effects . speed . hide , M ) ; break ; default : z . hide ( l . window . effects . speed . hide , M ) } } , Rb = function ( ) { var M = l . window , I = M . expandable ? a ( e ) . next ( ) . find ( ".Container:first" ) :
null ; z = M . expandable ? a ( "<div/>" ) : a ( e ) ; z . addClass ( "jPicker Container" ) ; M . expandable && z . hide ( ) ; z . get ( 0 ) . onselectstart = function ( Lb ) { if ( Lb . target . nodeName . toLowerCase ( ) !== "input" ) return false } ; var X = ta . active . val ( "all" ) ; if ( M . alphaPrecision < 0 ) M . alphaPrecision = 0 ; else if ( M . alphaPrecision > 2 ) M . alphaPrecision = 2 ; var Ma = '<table class="jPicker" cellpadding="0" cellspacing="0"><tbody>' + ( M . expandable ? '<tr><td class="Move" colspan="5"> </td></tr>' : "" ) + '<tr><td rowspan="9"><h2 class="Title">' + ( M . title || Z . text . title ) +
'</h2><div class="Map"><span class="Map1"> </span><span class="Map2"> </span><span class="Map3"> </span><img src="' + na . clientPath + na . colorMap . arrow . file + '" class="Arrow"/></div></td><td rowspan="9"><div class="Bar"><span class="Map1"> </span><span class="Map2"> </span><span class="Map3"> </span><span class="Map4"> </span><span class="Map5"> </span><span class="Map6"> </span><img src="' + na . clientPath + na . colorBar . arrow . file + '" class="Arrow"/></div></td><td colspan="2" class="Preview"><div class="prev_div">' +
Z . text . newColor + '<div class="color_preview"><span class="Active" title="' + Z . tooltips . colors . newColor + '"> </span><span class="Current" title="' + Z . tooltips . colors . currentColor + '"> </span></div></div>' + Z . text . currentColor + '</td><td rowspan="9" class="Button"><input type="button" class="Ok" value="' + Z . text . ok + '" title="' + Z . tooltips . buttons . ok + '"/><input type="button" class="Cancel" value="' + Z . text . cancel + '" title="' + Z . tooltips . buttons . cancel + '"/><div class="Grid"> </div></td></tr><tr class="Hue"><td class="Radio"><label title="' +
Z . tooltips . hue . radio + '"><input type="radio" value="h"' + ( l . color . mode == "h" ? ' checked="checked"' : "" ) + '/>H:</label></td><td class="Text"><input type="text" maxlength="3" value="' + ( X != null ? X . h : "" ) + '" title="' + Z . tooltips . hue . textbox + '"/> \u00ba</td></tr><tr class="Saturation"><td class="Radio"><label title="' + Z . tooltips . saturation . radio + '"><input type="radio" value="s"' + ( l . color . mode == "s" ? ' checked="checked"' : "" ) + '/>S:</label></td><td class="Text"><input type="text" maxlength="3" value="' + ( X != null ?
X . s : "" ) + '" title="' + Z . tooltips . saturation . textbox + '"/> %</td></tr><tr class="Value"><td class="Radio"><label title="' + Z . tooltips . value . radio + '"><input type="radio" value="v"' + ( l . color . mode == "v" ? ' checked="checked"' : "" ) + '/>V:</label></td><td class="Text"><input type="text" maxlength="3" value="' + ( X != null ? X . v : "" ) + '" title="' + Z . tooltips . value . textbox + '"/> %<br/><br/></td></tr><tr class="Red"><td class="Radio"><label title="' + Z . tooltips . red . radio + '"><input type="radio" value="r"' + ( l . color . mode ==
"r" ? ' checked="checked"' : "" ) + '/>R:</label></td><td class="Text"><input type="text" maxlength="3" value="' + ( X != null ? X . r : "" ) + '" title="' + Z . tooltips . red . textbox + '"/></td></tr><tr class="Green"><td class="Radio"><label title="' + Z . tooltips . green . radio + '"><input type="radio" value="g"' + ( l . color . mode == "g" ? ' checked="checked"' : "" ) + '/>G:</label></td><td class="Text"><input type="text" maxlength="3" value="' + ( X != null ? X . g : "" ) + '" title="' + Z . tooltips . green . textbox + '"/></td></tr><tr class="Blue"><td class="Radio"><label title="' +
Z . tooltips . blue . radio + '"><input type="radio" value="b"' + ( l . color . mode == "b" ? ' checked="checked"' : "" ) + '/>B:</label></td><td class="Text"><input type="text" maxlength="3" value="' + ( X != null ? X . b : "" ) + '" title="' + Z . tooltips . blue . textbox + '"/></td></tr><tr class="Alpha"><td class="Radio">' + ( M . alphaSupport ? '<label title="' + Z . tooltips . alpha . radio + '"><input type="radio" value="a"' + ( l . color . mode == "a" ? ' checked="checked"' : "" ) + "/>A:</label>" : " " ) + '</td><td class="Text">' + ( M . alphaSupport ? '<input type="text" maxlength="' +
( 3 + M . alphaPrecision ) + '" value="' + ( X != null ? Math . precision ( X . a * 100 / 255 , M . alphaPrecision ) : "" ) + '" title="' + Z . tooltips . alpha . textbox + '"/> %' : " " ) + '</td></tr><tr class="Hex"><td colspan="2" class="Text"><label title="' + Z . tooltips . hex . textbox + '">#:<input type="text" maxlength="6" class="Hex" value="' + ( X != null ? X . hex : "" ) + '"/></label>' + ( M . alphaSupport ? '<input type="text" maxlength="2" class="AHex" value="' + ( X != null ? X . ahex . substring ( 6 ) : "" ) + '" title="' + Z . tooltips . hex . alpha + '"/></td>' : " " ) + "</tr></tbody></table>" ;
if ( M . expandable ) { z . html ( Ma ) ; a ( document . body ) . children ( "div.jPicker.Container" ) . length == 0 ? a ( document . body ) . prepend ( z ) : a ( document . body ) . children ( "div.jPicker.Container:last" ) . after ( z ) ; z . mousedown ( function ( ) { a ( document . body ) . children ( "div.jPicker.Container" ) . css ( { zIndex : 10 } ) ; z . css ( { zIndex : 20 } ) } ) ; z . css ( { left : M . position . x == "left" ? I . offset ( ) . left - 530 - ( M . position . y == "center" ? 25 : 0 ) + "px" : M . position . x == "center" ? I . offset ( ) . left - 260 + "px" : M . position . x == "right" ? I . offset ( ) . left - 10 + ( M . position . y == "center" ? 25 : 0 ) +
"px" : M . position . x == "screenCenter" ? ( a ( document ) . width ( ) >> 1 ) - 260 + "px" : I . offset ( ) . left + parseInt ( M . position . x ) + "px" , position : "absolute" , top : M . position . y == "top" ? I . offset ( ) . top - 312 + "px" : M . position . y == "center" ? I . offset ( ) . top - 156 + "px" : M . position . y == "bottom" ? I . offset ( ) . top + 25 + "px" : I . offset ( ) . top + parseInt ( M . position . y ) + "px" } ) } else { z = a ( e ) ; z . html ( Ma ) } Ma = z . find ( "tbody:first" ) ; o = Ma . find ( "div.Map:first" ) ; L = Ma . find ( "div.Bar:first" ) ; var Xa = o . find ( "span" ) , db = L . find ( "span" ) ; T = Xa . filter ( ".Map1:first" ) ; N = Xa . filter ( ".Map2:first" ) ;
J = Xa . filter ( ".Map3:first" ) ; da = db . filter ( ".Map1:first" ) ; V = db . filter ( ".Map2:first" ) ; O = db . filter ( ".Map3:first" ) ; fa = db . filter ( ".Map4:first" ) ; sa = db . filter ( ".Map5:first" ) ; ja = db . filter ( ".Map6:first" ) ; ca = new n ( o , { map : { width : na . colorMap . width , height : na . colorMap . height } , arrow : { image : na . clientPath + na . colorMap . arrow . file , width : na . colorMap . arrow . width , height : na . colorMap . arrow . height } } ) ; ca . bind ( Ga ) ; ea = new n ( L , { map : { width : na . colorBar . width , height : na . colorBar . height } , arrow : { image : na . clientPath + na . colorBar . arrow . file ,
width : na . colorBar . arrow . width , height : na . colorBar . arrow . height } } ) ; ea . bind ( Oa ) ; qa = new f ( Ma , ta . active , M . expandable && M . bindToInput ? M . input : null , M . alphaPrecision ) ; Xa = X != null ? X . hex : null ; var tb = Ma . find ( ".Preview" ) ; db = Ma . find ( ".Button" ) ; ra = tb . find ( ".Active:first" ) . css ( { backgroundColor : Xa && "#" + Xa || "transparent" } ) ; la = tb . find ( ".Current:first" ) . css ( { backgroundColor : Xa && "#" + Xa || "transparent" } ) . bind ( "click" , Na ) ; Ea . call ( e , la , Math . precision ( ta . current . val ( "a" ) * 100 ) / 255 , 4 ) ; ma = db . find ( ".Ok:first" ) . bind ( "click" , Ab ) ;
Y = db . find ( ".Cancel:first" ) . bind ( "click" , mb ) ; za = db . find ( ".Grid:first" ) ; setTimeout ( function ( ) { Sa . call ( e , T , na . clientPath + "Maps.png" ) ; Sa . call ( e , N , na . clientPath + "Maps.png" ) ; Sa . call ( e , J , na . clientPath + "map-opacity.png" ) ; Sa . call ( e , da , na . clientPath + "Bars.png" ) ; Sa . call ( e , V , na . clientPath + "Bars.png" ) ; Sa . call ( e , O , na . clientPath + "Bars.png" ) ; Sa . call ( e , fa , na . clientPath + "Bars.png" ) ; Sa . call ( e , sa , na . clientPath + "bar-opacity.png" ) ; Sa . call ( e , ja , na . clientPath + "AlphaBar.png" ) ; Sa . call ( e , tb . find ( "div:last" ) , na . clientPath + "preview-opacity.png" ) } ,
0 ) ; Ma . find ( "td.Radio input" ) . bind ( "click" , $a ) ; if ( ta . quickList && ta . quickList . length > 0 ) { db = "" ; for ( i = 0 ; i < ta . quickList . length ; i ++ ) { if ( ( typeof ta . quickList [ i ] ) . toString ( ) . toLowerCase ( ) == "string" ) ta . quickList [ i ] = new c ( { hex : ta . quickList [ i ] } ) ; var xb = ta . quickList [ i ] . val ( "a" ) , Hb = ta . quickList [ i ] . val ( "ahex" ) ; if ( ! M . alphaSupport && Hb ) Hb = Hb . substring ( 0 , 6 ) + "ff" ; var pb = ta . quickList [ i ] . val ( "hex" ) ; db += '<span class="QuickColor"' + ( Hb && ' title="#' + Hb + '"' || "" ) + ' style="background-color:' + ( pb && "#" + pb || "" ) + ";" + ( pb ? "" : "background-image:url(" +
na . clientPath + "NoColor.png)" ) + ( M . alphaSupport && xb && xb < 255 ? ";opacity:" + Math . precision ( xb / 255 , 4 ) + ";filter:Alpha(opacity=" + Math . precision ( xb / 2.55 , 4 ) + ")" : "" ) + '"> </span>' } Sa . call ( e , za , na . clientPath + "bar-opacity.png" ) ; za . html ( db ) ; za . find ( ".QuickColor" ) . click ( yb ) } Wa . call ( e , l . color . mode ) ; ta . active . bind ( La ) ; a . isFunction ( ob ) && ta . active . bind ( ob ) ; ta . current . bind ( jb ) ; if ( M . expandable ) { e . icon = I . parents ( ".Icon:first" ) ; Ia = e . icon . find ( ".Color:first" ) . css ( { backgroundColor : Xa && "#" + Xa || "transparent" } ) ; Qa = e . icon . find ( ".Alpha:first" ) ;
Sa . call ( e , Qa , na . clientPath + "bar-opacity.png" ) ; Ea . call ( e , Qa , Math . precision ( ( 255 - ( X != null ? X . a : 0 ) ) * 100 / 255 , 4 ) ) ; Ka = e . icon . find ( ".Image:first" ) . css ( { backgroundImage : "url('" + na . clientPath + na . picker . file + "')" } ) . bind ( "click" , cb ) ; if ( M . bindToInput && M . updateInputColor ) M . input . css ( { backgroundColor : Xa && "#" + Xa || "transparent" , color : X == null || X . v > 75 ? "#000000" : "#ffffff" } ) ; Ua = Ma . find ( ".Move:first" ) . bind ( "mousedown" , Ca ) ; ta . active . bind ( kb ) } else Kb . call ( e ) } , na = l . images , Z = l . localization , ta = { active : ( typeof l . color . active ) . toString ( ) . toLowerCase ( ) ==
"string" ? new c ( { ahex : ! l . window . alphaSupport && l . color . active ? l . color . active . substring ( 0 , 6 ) + "ff" : l . color . active } ) : new c ( { ahex : ! l . window . alphaSupport && l . color . active . val ( "ahex" ) ? l . color . active . val ( "ahex" ) . substring ( 0 , 6 ) + "ff" : l . color . active . val ( "ahex" ) } ) , current : ( typeof l . color . active ) . toString ( ) . toLowerCase ( ) == "string" ? new c ( { ahex : ! l . window . alphaSupport && l . color . active ? l . color . active . substring ( 0 , 6 ) + "ff" : l . color . active } ) : new c ( { ahex : ! l . window . alphaSupport && l . color . active . val ( "ahex" ) ? l . color . active . val ( "ahex" ) . substring ( 0 ,
6 ) + "ff" : l . color . active . val ( "ahex" ) } ) , quickList : l . color . quickList } ; a . extend ( true , e , { commitCallback : Bb , liveCallback : ob , cancelCallback : Cb , color : ta , show : Kb , hide : Ib , destroy : function ( ) { z . find ( "td.Radio input" ) . unbind ( "click" , $a ) ; la . unbind ( "click" , Na ) ; Y . unbind ( "click" , mb ) ; ma . unbind ( "click" , Ab ) ; if ( l . window . expandable ) { Ka . unbind ( "click" , cb ) ; Ua . unbind ( "mousedown" , Ca ) ; e . icon = null } z . find ( ".QuickColor" ) . unbind ( "click" , yb ) ; ja = sa = fa = O = V = da = J = N = T = L = o = null ; ca . destroy ( ) ; ca = null ; ea . destroy ( ) ; ea = null ; qa . destroy ( ) ; ob =
Cb = Bb = za = Y = ma = la = ra = qa = null ; z . html ( "" ) ; for ( i = 0 ; i < m . length ; i ++ ) m [ i ] == e && m . splice ( i , 1 ) } } ) ; m . push ( e ) ; setTimeout ( function ( ) { Rb . call ( e ) } , 0 ) } ) } ; a . fn . jPicker . defaults = { window : { title : null , effects : { type : "slide" , speed : { show : "slow" , hide : "fast" } } , position : { x : "screenCenter" , y : "top" } , expandable : false , liveUpdate : true , alphaSupport : false , alphaPrecision : 0 , updateInputColor : true } , color : { mode : "h" , active : new c ( { ahex : "#ffcc00ff" } ) , quickList : [ new c ( { h : 360 , s : 33 , v : 100 } ) , new c ( { h : 360 , s : 66 , v : 100 } ) , new c ( { h : 360 , s : 100 , v : 100 } ) ,
new c ( { h : 360 , s : 100 , v : 75 } ) , new c ( { h : 360 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 100 } ) , new c ( { h : 30 , s : 33 , v : 100 } ) , new c ( { h : 30 , s : 66 , v : 100 } ) , new c ( { h : 30 , s : 100 , v : 100 } ) , new c ( { h : 30 , s : 100 , v : 75 } ) , new c ( { h : 30 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 90 } ) , new c ( { h : 60 , s : 33 , v : 100 } ) , new c ( { h : 60 , s : 66 , v : 100 } ) , new c ( { h : 60 , s : 100 , v : 100 } ) , new c ( { h : 60 , s : 100 , v : 75 } ) , new c ( { h : 60 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 80 } ) , new c ( { h : 90 , s : 33 , v : 100 } ) , new c ( { h : 90 , s : 66 , v : 100 } ) , new c ( { h : 90 , s : 100 , v : 100 } ) , new c ( { h : 90 , s : 100 , v : 75 } ) , new c ( { h : 90 , s : 100 , v : 50 } ) ,
new c ( { h : 180 , s : 0 , v : 70 } ) , new c ( { h : 120 , s : 33 , v : 100 } ) , new c ( { h : 120 , s : 66 , v : 100 } ) , new c ( { h : 120 , s : 100 , v : 100 } ) , new c ( { h : 120 , s : 100 , v : 75 } ) , new c ( { h : 120 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 60 } ) , new c ( { h : 150 , s : 33 , v : 100 } ) , new c ( { h : 150 , s : 66 , v : 100 } ) , new c ( { h : 150 , s : 100 , v : 100 } ) , new c ( { h : 150 , s : 100 , v : 75 } ) , new c ( { h : 150 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 50 } ) , new c ( { h : 180 , s : 33 , v : 100 } ) , new c ( { h : 180 , s : 66 , v : 100 } ) , new c ( { h : 180 , s : 100 , v : 100 } ) , new c ( { h : 180 , s : 100 , v : 75 } ) , new c ( { h : 180 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 40 } ) , new c ( { h : 210 ,
s : 33 , v : 100 } ) , new c ( { h : 210 , s : 66 , v : 100 } ) , new c ( { h : 210 , s : 100 , v : 100 } ) , new c ( { h : 210 , s : 100 , v : 75 } ) , new c ( { h : 210 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 30 } ) , new c ( { h : 240 , s : 33 , v : 100 } ) , new c ( { h : 240 , s : 66 , v : 100 } ) , new c ( { h : 240 , s : 100 , v : 100 } ) , new c ( { h : 240 , s : 100 , v : 75 } ) , new c ( { h : 240 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 20 } ) , new c ( { h : 270 , s : 33 , v : 100 } ) , new c ( { h : 270 , s : 66 , v : 100 } ) , new c ( { h : 270 , s : 100 , v : 100 } ) , new c ( { h : 270 , s : 100 , v : 75 } ) , new c ( { h : 270 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 10 } ) , new c ( { h : 300 , s : 33 , v : 100 } ) , new c ( { h : 300 , s : 66 , v : 100 } ) ,
new c ( { h : 300 , s : 100 , v : 100 } ) , new c ( { h : 300 , s : 100 , v : 75 } ) , new c ( { h : 300 , s : 100 , v : 50 } ) , new c ( { h : 180 , s : 0 , v : 0 } ) , new c ( { h : 330 , s : 33 , v : 100 } ) , new c ( { h : 330 , s : 66 , v : 100 } ) , new c ( { h : 330 , s : 100 , v : 100 } ) , new c ( { h : 330 , s : 100 , v : 75 } ) , new c ( { h : 330 , s : 100 , v : 50 } ) , new c ] } , images : { clientPath : "/jPicker/images/" , colorMap : { width : 256 , height : 256 , arrow : { file : "mappoint.gif" , width : 15 , height : 15 } } , colorBar : { width : 20 , height : 256 , arrow : { file : "rangearrows.gif" , width : 20 , height : 7 } } , picker : { file : "picker.gif" , width : 25 , height : 24 } } , localization : { text : { title : "Drag Markers To Pick A Color" ,
newColor : "new" , currentColor : "current" , ok : "OK" , cancel : "Cancel" } , tooltips : { colors : { newColor : "New Color - Press “OK” To Commit" , currentColor : "Click To Revert To Original Color" } , buttons : { ok : "Commit To This Color Selection" , cancel : "Cancel And Revert To Original Color" } , hue : { radio : "Set To “Hue” Color Mode" , textbox : "Enter A “Hue” Value (0-360°)" } , saturation : { radio : "Set To “Saturation” Color Mode" , textbox : "Enter A “Saturation” Value (0-100%)" } ,
value : { radio : "Set To “Value” Color Mode" , textbox : "Enter A “Value” Value (0-100%)" } , red : { radio : "Set To “Red” Color Mode" , textbox : "Enter A “Red” Value (0-255)" } , green : { radio : "Set To “Green” Color Mode" , textbox : "Enter A “Green” Value (0-255)" } , blue : { radio : "Set To “Blue” Color Mode" , textbox : "Enter A “Blue” Value (0-255)" } , alpha : { radio : "Set To “Alpha” Color Mode" , textbox : "Enter A “Alpha” Value (0-100)" } ,
hex : { textbox : "Enter A “Hex” Color Value (#000000-#ffffff)" , alpha : "Enter A “Alpha” Value (#00-#ff)" } } } } } ) ( jQuery , "1.1.6" ) ;