2012-06-11 13:35:16 +00:00
var Guid = function ( ) { var c = 0 ; return { guid : function ( ) { return c += 1 } } } ( ) , Data = function ( ) { var c = function ( ) { var a = function ( a ) { a . replace ( '"' , """ ) ; a . replace ( "&" , "&" ) ; a . replace ( "'" , "'" ) ; a . replace ( "<" , "<" ) ; a . replace ( ">" , ">" ) ; return a } ; return { toText : function ( c ) { if ( "string" === typeof c ) return c ; for ( var b = [ ] ; "Cons" === c [ 0 ] ; ) b . push ( c [ 1 ] ) , c = c [ 2 ] ; return a ( b . join ( "" ) ) } , properEscape : a } } ( ) , a = function ( ) { return { fromCode : function ( a ) { return String . fromCharCode ( a ) } , toCode : function ( a ) { return a . charCodeAt ( 0 ) } ,
toUpper : function ( a ) { return a . toUpperCase ( ) } , toLower : function ( a ) { return a . toLowerCase ( ) } , toLocaleUpper : function ( a ) { return a . toLocaleUpperCase ( ) } , toLocaleLower : function ( a ) { return a . toLocaleLowerCase ( ) } } } ( ) ; return { String : c , Char : a } } ( ) , Value = function ( ) { var c = function ( a ) { if ( "boolean" === typeof a ) return a ? "True" : "False" ; if ( "number" !== typeof a && a [ 0 ] ) { if ( "Tuple" === a [ 0 ] . substring ( 0 , 5 ) ) { for ( var d = "" , e = a . length ; -- e ; ) d = "," + c ( a [ e ] ) + d ; "," === d [ 0 ] && ( d = d . substring ( 1 ) ) ; return "(" + d + ")" } if ( "Cons" === a [ 0 ] ) for ( var e = "string" ===
typeof a [ 1 ] ? '"' : "]" , b = "string" === typeof a [ 1 ] ? "" : "," , d = ( "string" === typeof a [ 1 ] ? '"' : "[" ) + c ( a [ 1 ] ) , a = a [ 2 ] ; ; ) if ( "Cons" === a [ 0 ] ) d += b + c ( a [ 1 ] ) , a = a [ 2 ] ; else return d + e ; else { if ( "Nil" === a [ 0 ] ) return "[]" ; d = "" ; for ( e = a . length ; -- e ; ) d = " " + c ( a [ e ] ) + d ; d = a [ 0 ] + d ; return 1 < a . length ? "(" + d + ")" : d } } return a + "" } ; return { show : function ( a ) { return Text . monospace ( Data . String . properEscape ( c ( a ) ) ) } , Tuple : function ( ) { var a = arguments . length , d = Array ( a + 1 ) ; for ( d [ 0 ] = "Tuple" + arguments . length ; a -- ; ) d [ a + 1 ] = arguments [ a ] ; return d } , append : function ( a ,
d ) { if ( "string" === typeof a && "string" === typeof d ) return a . concat ( d ) ; if ( "Nil" === a [ 0 ] ) return d ; for ( var c = [ "Cons" , a [ 1 ] , [ "Nil" ] ] , b = c , a = a [ 2 ] ; "Cons" === a [ 0 ] ; ) b [ 2 ] = [ "Cons" , a [ 1 ] , [ "Nil" ] ] , a = a [ 2 ] , b = b [ 2 ] ; b [ 2 ] = d ; return c } } } ( ) , Color = function ( ) { var c = function ( a , c , e , b ) { return { r : Math . round ( 255 * a ) , g : Math . round ( 255 * c ) , b : Math . round ( 255 * e ) , a : b } } ; return { black : c ( 0 , 0 , 0 , 1 ) , white : c ( 1 , 1 , 1 , 1 ) , red : c ( 1 , 0 , 0 , 1 ) , green : c ( 0 , 1 , 0 , 1 ) , blue : c ( 0 , 0 , 1 , 1 ) , rgba : function ( a ) { return function ( d ) { return function ( e ) { return function ( b ) { return c ( a , d ,
e , b ) } } } } , rgb : function ( a ) { return function ( d ) { return function ( e ) { return c ( a , d , e , 1 ) } } } , Internal : { extract : function ( a ) { return 1 === a . a ? "rgb(" + a . r + "," + a . g + "," + a . b + ")" : "rgba(" + a . r + "," + a . g + "," + a . b + "," + a . a + ")" } } } } ( ) , Element = function ( ) { var c = function ( a ) { a = document . createElement ( a ) ; a . id = Guid . guid ( ) ; return a } , a = function ( a ) { var f = c ( "div" ) ; f . appendChild ( a ) ; return f } , d = function ( a ) { return function ( f ) { return function ( d ) { var b = c ( "div" ) ; b . isElmText = ! 0 ; b . innerHTML = d ; b . style . textAlign = f ; 0 < a && ( b . style . width = a + "px" ) ; b . isElmLeaf =
! 0 ; b . style . visibility = "hidden" ; b . style . styleFloat = "left" ; b . style . cssFloat = "left" ; document . body . appendChild ( b ) ; d = window . getComputedStyle ( b ) ; 0 >= a && ( b . style . width = d . getPropertyValue ( "width" ) ) ; b . style . height = d . getPropertyValue ( "height" ) ; document . body . removeChild ( b ) ; b . style . visibility = "visible" ; b . style . styleFloat = "none" ; b . style . cssFloat = "none" ; return b } } } , e = d ( 0 ) ( "left" ) , b = d ( 0 ) ( "justify" ) , g = d ( 0 ) ( "center" ) , h = function ( c ) { return "DIV" === c . tagName ? c : a ( c ) } , j = function ( a ) { a . style . styleFloat = "left" ; a . style . cssFloat =
"left" ; return a } , k = function ( a ) { a . style . position = "absolute" ; return a } , i = function ( a , f , d ) { for ( var b = c ( "div" ) , e = d . length ; e -- ; ) { var g = f ( d [ e ] ) ; b . appendChild ( g ) } b . elmFlowDirection = a ; return b } , m = function ( a ) { return function ( f ) { for ( var c = [ ] ; "Cons" === f [ 0 ] ; ) c . push ( f [ 1 ] ) , f = f [ 2 ] ; 3 <= a && c . reverse ( ) ; f = a % 3 ; if ( 0 == f ) return i ( "Y" , h , c ) ; if ( 1 == f ) return i ( "X" , j , c ) ; if ( 2 == f ) return i ( "Z" , k , c ) } } , n = function ( a ) { return function ( f ) { if ( "A" === f . tagName ) return n ( a ) ( f . firstChild ) , f ; if ( f . hasOwnProperty ( "isElmText" ) ) { var c = d ( a ) ( f . style . textAlign ) ( f . innerHTML ) ;
f . style . height = c . style . height } f . style . width = a + "px" ; return f } } ; return { text : e , image : function ( a ) { var f = c ( "img" ) ; f . isElmLeaf = ! 0 ; f . onload = function ( ) { "" === f . style . width && 0 < this . width && ( f . style . width = f . width = this . width + "px" ) ; "" === f . style . height && 0 < this . height && ( f . style . height = f . height = this . height + "px" ) ; Dispatcher . adjust ( ) } ; f . src = Data . String . toText ( a ) ; f . name = f . src ; return f } , fittedImage : function ( a ) { return function ( f ) { return function ( d ) { var b = c ( "canvas" ) ; b . style . width = a + "px" ; b . style . height = f + "px" ; b . width = a ;
b . height = f ; b . innerHTML = "Your browser does not support the canvas element." ; b . isElmLeaf = ! 0 ; var e = c ( "img" ) ; e . onload = function ( ) { if ( b . getContext ) { var c = b . getContext ( "2d" ) , d = 0 , q = 0 , g = this . width , i = this . height ; a / f > this . width / this . height ? ( i = this . width * f / a , q = ( this . height - i ) / 2 ) : ( g = this . height * a / f , d = ( this . width - g ) / 2 ) ; c . drawImage ( e , d , q , g , i , 0 , 0 , b . width , b . height ) } } ; e . src = Data . String . toText ( d ) ; return b } } } , video : function ( a ) { var a = Data . String . toText ( a ) , f = c ( "video" ) ; f . controls = "controls" ; var b = c ( "source" ) ; b . src = a ; b . type =
"video/" + a . substring ( a . length - 3 , a . length ) ; f . appendChild ( b ) ; f . isElmLeaf = ! 0 ; return f } , audio : function ( a ) { var a = Data . String . toString ( a ) , f = c ( "video" ) ; f . controls = "controls" ; var b = c ( "source" ) ; b . src = a ; b . type = "audio/" + a . substring ( a . length - 3 , a . length ) ; f . appendChild ( b ) ; f . isElmLeaf = ! 0 ; return f } , collage : function ( a ) { return function ( f ) { return function ( b ) { var d = c ( "canvas" ) ; d . style . width = a + "px" ; d . style . height = f + "px" ; d . width = a ; d . height = f ; if ( d . getContext ) { var e = d . getContext ( "2d" ) ; for ( e . clearRect ( 0 , 0 , d . width , d . height ) ; "Cons" ===
b [ 0 ] ; ) e = b [ 1 ] ( e ) , b = b [ 2 ] ; return d } d . innerHTML = "Your browser does not support the canvas element." ; d . isElmLeaf = ! 0 ; return d } } } , flow : m , layers : m ( 2 ) , beside : function ( a ) { return function ( f ) { return m ( 4 ) ( [ "Cons" , a , [ "Cons" , f , [ "Nil" ] ] ] ) } } , above : function ( a ) { return function ( f ) { return m ( 3 ) ( [ "Cons" , a , [ "Cons" , f , [ "Nil" ] ] ] ) } } , below : function ( a ) { return function ( f ) { return m ( 0 ) ( [ "Cons" , a , [ "Cons" , f , [ "Nil" ] ] ] ) } } , box : function ( a ) { return function ( f ) { f . style . position = "absolute" ; f . style . margin = "auto" ; var b = ( a - 1 ) % 3 , d = ( a - 1 ) / 3 ; 2 > b &&
( f . style . left = 0 ) ; 0 < b && ( f . style . right = 0 ) ; 2 > d && ( f . style . top = 0 ) ; 0 < d && ( f . style . bottom = 0 ) ; b = c ( "div" ) ; b . style . position = "relative" ; b . appendChild ( f ) ; return b } } , width : n , height : function ( a ) { return function ( f ) { ( "A" === f . tagName ? f . firstChild : f ) . style . height = a + "px" ; return f } } , size : function ( a ) { return function ( f ) { return function ( b ) { var d = "A" === b . tagName ? b . firstChild : b ; d . style . width = a + "px" ; d . style . height = f + "px" ; return b } } } , color : function ( a ) { return function ( f ) { f . style . backgroundColor = Color . Internal . extract ( a ) ; return f } } ,
opacity : function ( a ) { return function ( f ) { f . style . opacity = a ; return f } } , link : function ( b ) { return function ( f ) { var d = c ( "a" ) ; d . href = Text . fromString ( b ) ; d . appendChild ( f ) ; return a ( d ) } } , asText : function ( a ) { return d ( 0 ) ( "left" ) ( Value . show ( a ) ) } , plainText : function ( a ) { return d ( 0 ) ( "left" ) ( Data . String . toText ( a ) ) } , justifiedText : b , centeredText : g , up : 0 , left : 1 , inward : 2 , down : 3 , right : 4 , outward : 5 } } ( ) , Text = function ( ) { var c = function ( a ) { if ( "string" === typeof a ) return a ; for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; return Data . String . properEscape ( b . join ( "" ) ) } ,
a = function ( a ) { return function ( b ) { return "<" + a + ">" + b + "</" + a + ">" } } , d = function ( a , b ) { return function ( d ) { return "<span style='" + a + ":" + b + "'>" + d + "</span>" } } , e = a ( "h1" ) , b = d ( "font-style" , "italic" ) , a = a ( "b" ) , g = d ( "text-decoration" , "underline" ) , h = d ( "text-decoration" , "overline" ) , j = d ( "text-decoration" , "line-through" ) ; return { fromString : c , toText : c , header : e , height : function ( a ) { return d ( "font-size" , a + "em" ) } , italic : b , bold : a , underline : g , overline : h , strikeThrough : j , monospace : d ( "font-family" , "monospace" ) , color : function ( a ) { return d ( "color" ,
Color . Internal . extract ( a ) ) } , link : function ( a ) { return function ( b ) { return "<a href='" + c ( a ) + "'>" + b + "</a>" } } } } ( ) , Shape = function ( ) { var c = function ( a , c , b , g ) { return { center : a , points : c , theta : b , scale : g } } , a = function ( a ) { return function ( c ) { return function ( b ) { return function ( g ) { g . save ( ) ; g . translate ( b . center [ 0 ] , b . center [ 1 ] ) ; g . rotate ( b . theta ) ; g . scale ( b . scale , b . scale ) ; g . beginPath ( ) ; var h = b . points ; g . moveTo ( h [ 0 ] [ 0 ] , h [ 0 ] [ 1 ] ) ; for ( var j = h . length ; j -- ; ) g . lineTo ( h [ j ] [ 0 ] , h [ j ] [ 1 ] ) ; g . closePath ( ) ; a ? ( g . fillStyle = Color . Internal . extract ( c ) ,
g . fill ( ) ) : ( g . strokeStyle = Color . Internal . extract ( c ) , g . stroke ( ) ) ; g . restore ( ) ; return g } } } } ; return { polygon : function ( a ) { return function ( e ) { for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( [ a [ 1 ] [ 1 ] , a [ 1 ] [ 2 ] ] ) , a = a [ 2 ] ; e = [ e [ 1 ] , e [ 2 ] ] ; return c ( e , b , 0 , 1 ) } } , ngon : function ( a ) { return function ( e ) { return function ( b ) { for ( var g = [ ] , h = a ; h -- ; ) g . push ( [ e * Math . cos ( 2 * Math . PI * h / a ) , e * Math . sin ( 2 * Math . PI * h / a ) ] ) ; b = [ b [ 1 ] , b [ 2 ] ] ; return c ( b , g , 0 , 1 ) } } } , rect : function ( a ) { return function ( e ) { return function ( b ) { var g = [ [ - a / 2 , - e / 2 ] , [ a / 2 , - e / 2 ] , [ a / 2 , e / 2 ] , [ - a /
2 , e / 2 ] ] , b = [ b [ 1 ] , b [ 2 ] ] ; return c ( b , g , 0 , 1 ) } } } , oval : function ( a ) { return function ( e ) { return function ( b ) { for ( var g = [ ] , h = 2 * Math . PI ; 0 < h ; h -= Math . PI / 50 ) g . push ( [ a / 2 * Math . cos ( h ) , e / 2 * Math . sin ( h ) ] ) ; b = [ b [ 1 ] , b [ 2 ] ] ; return c ( b , g , 0 , 1 ) } } } , move : function ( a ) { return function ( e ) { return function ( b ) { return c ( [ a + b . center [ 0 ] , e + b . center [ 1 ] ] , b . points , b . theta , b . scale ) } } } , rotate : function ( a ) { return function ( e ) { return c ( e . center , e . points , e . theta + 2 * Math . PI * a , e . scale ) } } , scale : function ( a ) { return function ( e ) { return c ( e . center , e . points ,
e . theta , e . scale * a ) } } , filled : a ( ! 0 ) , outlined : a ( ! 1 ) , customOutline : function ( a ) { return function ( c ) { return function ( b ) { b . points . push ( b . points [ 0 ] ) ; return Line . customLine ( a ) ( c ) ( b ) } } } } } ( ) , Line = function ( ) { var c = function ( a ) { return function ( c ) { return function ( e ) { if ( "string" === typeof a [ 0 ] ) { for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; a = b } 0 === a . length && ( a = [ 8 , 4 ] ) ; return function ( b ) { b . save ( ) ; b . beginPath ( ) ; b . translate ( e . center [ 0 ] , e . center [ 1 ] ) ; b . rotate ( e . theta ) ; b . scale ( e . scale , e . scale ) ; var h = a , j = e . points , k = j . length -
1 , i = j [ k ] [ 0 ] , m = j [ k ] [ 1 ] , n = 0 , l = 0 , f = 0 , o = 0 , p = 0 , r = 0 , t = h . length , s = ! 0 , q = h [ 0 ] ; for ( b . moveTo ( i , m ) ; k -- ; ) { n = j [ k ] [ 0 ] ; l = j [ k ] [ 1 ] ; f = n - i ; o = l - m ; for ( p = Math . sqrt ( f * f + o * o ) ; q <= p ; ) i += f * q / p , m += o * q / p , b [ s ? "lineTo" : "moveTo" ] ( i , m ) , f = n - i , o = l - m , p = Math . sqrt ( f * f + o * o ) , s = ! s , r = ( r + 1 ) % t , q = h [ r ] ; 0 < p && ( b [ s ? "lineTo" : "moveTo" ] ( n , l ) , q -= p ) ; i = n ; m = l } b . strokeStyle = Color . Internal . extract ( c ) ; b . stroke ( ) ; b . restore ( ) ; return b } } } } ; return { line : function ( a ) { for ( var c = [ ] ; "Cons" === a [ 0 ] ; ) c . push ( [ a [ 1 ] [ 1 ] , a [ 1 ] [ 2 ] ] ) , a = a [ 2 ] ; return { center : [ 0 , 0 ] , points : c , theta : 0 ,
scale : 1 } } , customLine : c , solid : function ( a ) { return function ( c ) { return function ( e ) { e . save ( ) ; e . beginPath ( ) ; e . translate ( c . center [ 0 ] , c . center [ 1 ] ) ; e . rotate ( c . theta ) ; e . scale ( c . scale , c . scale ) ; var b = c . points , g = b . length ; for ( e . moveTo ( b [ g - 1 ] [ 0 ] , b [ g - 1 ] [ 1 ] ) ; g -- ; ) e . lineTo ( b [ g ] [ 0 ] , b [ g ] [ 1 ] ) ; e . strokeStyle = Color . Internal . extract ( a ) ; e . stroke ( ) ; e . restore ( ) ; return e } } } , dashed : c ( [ 8 , 4 ] ) , dotted : c ( [ 3 , 3 ] ) } } ( ) , Elm = function ( ) { var c = function ( a , c , d ) { for ( var e = a . length ; e -- ; ) a [ e ] . recv ( c , d ) } , a = function ( a ) { this . id = Guid . guid ( ) ; this . value =
a ; this . kids = [ ] ; this . recv = function ( a , b , d ) { if ( b = b === this . id ) this . value = d ; c ( this . kids , a , b ) } ; Dispatcher . inputs . push ( this ) } , d = function ( a , d ) { this . id = Guid . guid ( ) ; this . value = null ; this . kids = [ ] ; this . inbox = { } ; d . reverse ( ) ; this . recalc = function ( ) { for ( var c = a , e = d . length ; e -- ; ) c = c ( d [ e ] . value ) ; this . value = c } ; this . recalc ( ) ; this . recv = function ( a , b ) { this . inbox . hasOwnProperty ( a ) || ( this . inbox [ a ] = { changed : ! 1 , count : 0 } ) ; var e = this . inbox [ a ] ; e . count += 1 ; b && ( e . changed = ! 0 ) ; e . count == d . length && ( e . changed && this . recalc ( ) , c ( this . kids ,
a , e . changed ) , delete this . inbox [ a ] ) } ; for ( var e = d . length ; e -- ; ) d [ e ] . kids . push ( this ) } , e = function ( a , d , e ) { this . id = Guid . guid ( ) ; this . value = d ; this . kids = [ ] ; this . recv = function ( d , g ) { g && ( this . value = a ( e . value ) ( this . value ) ) ; c ( this . kids , d , g ) } ; e . kids . push ( this ) } ; return { Input : function ( b ) { return new a ( b ) } , Lift : function ( a , c ) { return new d ( a , c ) } , Fold : function ( a , c , d ) { return new e ( a , c , d ) } } } ( ) , Dispatcher = function ( ) { var c = null , a = 0 , d = [ ] , e = function ( a ) { var c = a . childNodes , d = c . length ; if ( a . hasOwnProperty ( "isElmLeaf" ) ) { var c = "" ===
a . style . width ? 0 : a . style . width . slice ( 0 , - 2 ) - 0 , j = "" === a . style . height ? 0 : a . style . height . slice ( 0 , - 2 ) - 0 ; return [ c , j ] } if ( 1 === d ) { var k = e ( c [ 0 ] ) ; "" !== a . style . width && ( k [ 0 ] = a . style . width . slice ( 0 , - 2 ) - 0 ) ; "" !== a . style . height && ( k [ 1 ] = a . style . height . slice ( 0 , - 2 ) - 0 ) ; 0 !== k [ 0 ] && ( a . style . width = k [ 0 ] + "px" ) ; 0 !== k [ 1 ] && ( a . style . height = k [ 1 ] + "px" ) ; return k } for ( var i = 0 , m = j = 0 , n = 0 , l = ! 0 , f = ! 0 ; d -- ; ) k = e ( c [ d ] ) , i = Math . max ( i , k [ 0 ] ) , j = Math . max ( j , k [ 1 ] ) , m += k [ 0 ] , n += k [ 1 ] , l = l && 0 < k [ 0 ] , f = f && 0 < k [ 1 ] ; c = i ; d = a . elmFlowDirection ; "X" === d && ( c = l ? m : 0 ) ; "Y" ===
d && ( j = f ? n : 0 ) ; 0 < c && ( a . style . width = c + "px" ) ; 0 < j && ( a . style . height = j + "px" ) ; return [ c , j ] } ; return { initialize : function ( ) { try { c = main ( ) } catch ( a ) { throw document . body . innerHTML = monospace ( "Runtime Error:<br>JavaScript " + a ) , a ; } c . hasOwnProperty ( "recv" ) || ( c = Elm . Input ( c ) ) ; var d = document . getElementById ( "content" ) ; d . appendChild ( c . value ) ; e ( d ) ; d = document . getElementById ( "widthChecker" ) . offsetWidth ; d !== window . innerWidth && Dispatcher . notify ( Window . dimensions . id , Value . Tuple ( d , window . innerHeight ) ) ; c = Elm . Lift ( function ( a ) { var c =
document . getElementById ( "content" ) ; c . replaceChild ( a , c . children [ 0 ] ) ; e ( c ) ; return a } , [ c ] ) } , notify : function ( c , e ) { a += 1 ; for ( var h = d . length ; h -- ; ) d [ h ] . recv ( a , c , e ) } , adjust : function ( ) { var a = document . getElementById ( "content" ) ; e ( a ) } , inputs : d } } ( ) , Signal = function ( ) { function c ( a ) { for ( var c = [ "Nil" ] , b = a . length ; b -- ; ) c = [ "Cons" , a [ b ] , c ] ; return c } var a = function ( ) { return document . addEventListener ? function ( a , c , b ) { a . addEventListener ( c , b , ! 1 ) } : function ( a , c , b ) { a . attachEvent ( "on" + c , b ) } } ( ) , d = function ( ) { function c ( a ) { var b = 0 , d =
0 ; a || ( a = window . event ) ; if ( a . pageX || a . pageY ) b = a . pageX , d = a . pageY ; else if ( a . clientX || a . clientY ) b = a . clientX + document . body . scrollLeft + document . documentElement . scrollLeft , d = a . clientY + document . body . scrollTop + document . documentElement . scrollTop ; return Value . Tuple ( b , d ) } var b = Elm . Input ( Value . Tuple ( 0 , 0 ) ) , d = Elm . Input ( ! 1 ) , e = Elm . Input ( ! 1 ) ; a ( document , "click" , function ( ) { Dispatcher . notify ( e . id , ! 0 ) ; Dispatcher . notify ( e . id , ! 1 ) } ) ; a ( document , "mousedown" , function ( ) { Dispatcher . notify ( d . id , ! 0 ) } ) ; a ( document , "mouseup" , function ( ) { Dispatcher . notify ( d . id ,
! 1 ) } ) ; a ( document , "mousemove" , function ( a ) { Dispatcher . notify ( b . id , c ( a ) ) } ) ; return { position : b , x : Elm . Lift ( function ( a ) { return a [ 1 ] } , [ b ] ) , y : Elm . Lift ( function ( a ) { return a [ 2 ] } , [ b ] ) , isClicked : e , isDown : d , clickedOn : function ( c ) { var b = Elm . Input ( ! 1 ) ; a ( c , "click" , function ( ) { Dispatcher . notify ( b . id , ! 0 ) ; Dispatcher . notify ( b . id , ! 1 ) } ) ; return Value . Tuple ( c , b ) } } } ( ) , e = function ( ) { return { every : function ( a ) { var a = 1E3 * a , c = Elm . Input ( 0 ) , b = 0 ; setInterval ( function ( ) { b += a ; Dispatcher . notify ( c . id , b / 1E3 ) } , a ) ; return c } , after : function ( a ) { var a =
1E3 * a , c = Elm . Input ( ! 1 ) ; setTimeout ( function ( ) { Dispatcher . notify ( c . id , ! 0 ) } , a ) ; return c } , before : function ( a ) { var a = 1E3 * a , c = Elm . Input ( ! 0 ) ; setTimeout ( function ( ) { Dispatcher . notify ( c . id , ! 1 ) } , a ) ; return c } } } ( ) , b = function ( ) { var c = Elm . Input ( Value . Tuple ( window . innerWidth , window . innerHeight ) ) ; a ( window , "resize" , function ( ) { var a = document . getElementById ( "widthChecker" ) . offsetWidth ; Dispatcher . notify ( c . id , Value . Tuple ( a , window . innerHeight ) ) } ) ; return { dimensions : c , width : Elm . Lift ( function ( a ) { return a [ 1 ] } , [ c ] ) , height : Elm . Lift ( function ( a ) { return a [ 2 ] } ,
[ c ] ) } } ( ) , g = { Raw : function ( ) { function c ( a , b ) { return "Nil" === b [ 0 ] ? b : b [ 1 ] === a ? b [ 2 ] : [ "Cons" , b [ 1 ] , c ( a , b [ 2 ] ) ] } var b = Elm . Input ( [ "Nil" ] ) , d = Elm . Input ( [ "Nothing" ] ) ; a ( document , "keydown" , function ( a ) { var c ; a : { for ( c = b . value ; "Nil" !== c [ 0 ] ; ) { if ( c [ 1 ] === a . keyCode ) { c = ! 0 ; break a } c = c [ 2 ] } c = ! 1 } c || Dispatcher . notify ( b . id , [ "Cons" , a . keyCode , b . value ] ) } ) ; a ( document , "keyup" , function ( a ) { a = c ( a . keyCode , b . value ) ; Dispatcher . notify ( b . id , a ) } ) ; a ( window , "blur" , function ( ) { Dispatcher . notify ( b . id , [ "Nil" ] ) } ) ; a ( document , "keypress" , function ( a ) { Dispatcher . notify ( d . id ,
[ "Just" , a . charCode || a . keyCode ] ) ; Dispatcher . notify ( d . id , [ "Nothing" ] ) } ) ; return { keysDown : b , charPressed : d } } ( ) } , h = function ( ) { var a = function ( a ) { return function ( b ) { var d = Elm . Input ( [ "Waiting" ] ) , e = { } ; window . XMLHttpRequest ? e = new XMLHttpRequest : window . ActiveXObject && ( e = new ActiveXObject ( "Microsoft.XMLHTTP" ) ) ; e . onreadystatechange = function ( ) { 4 === e . readyState && Dispatcher . notify ( d . id , 200 === e . status ? [ "Success" , c ( e . responseText ) ] : [ "Failure" , e . status , c ( e . statusText ) ] ) } ; e . open ( a , Data . String . toText ( b ) , ! 0 ) ; e . send ( null ) ;
return d } } , b = function ( a ) { return function ( b ) { var d = Elm . Input ( [ "Nothing" ] ) , b = Elm . Lift ( function ( b ) { if ( "Just" !== b [ 0 ] ) { try { Dispatcher . notify ( d . id , [ "Nothing" ] ) } catch ( e ) { } return [ ] } try { Dispatcher . notify ( d . id , [ "Just" , [ "Waiting" ] ] ) } catch ( g ) { d . value = [ "Just" , [ "Waiting" ] ] } var l = { } ; window . XMLHttpRequest ? l = new XMLHttpRequest : window . ActiveXObject && ( l = new ActiveXObject ( "Microsoft.XMLHTTP" ) ) ; l . onreadystatechange = function ( ) { 4 === l . readyState && Dispatcher . notify ( d . id , [ "Just" , 200 === l . status ? [ "Success" , c ( l . responseText ) ] :
[ "Failure" , l . status , c ( l . statusText ) ] ] ) } ; l . open ( a , Data . String . toText ( b [ 1 ] ) , ! 0 ) ; l . send ( null ) ; return [ ] } , [ b ] ) ; return Elm . Lift ( function ( a ) { return function ( ) { return a } } , [ d , b ] ) } } ; return { get : a ( "GET" ) , post : a ( "POST" ) , gets : b ( "GET" ) , posts : b ( "POST" ) } } ( ) , j = function ( ) { return { inRange : function ( a ) { return function ( c ) { return Elm . Input ( Math . floor ( Math . random ( ) * ( c - a + 1 ) ) + a ) } } , randomize : function ( a ) { return function ( c ) { return function ( b ) { return Elm . Lift ( function ( ) { return Math . floor ( Math . random ( ) * ( c - a + 1 ) ) + a } , [ b ] ) } } } } } ( ) , k =
function ( ) { var b = function ( b ) { b . isElmLeaf = ! 0 ; var d = Elm . Input ( [ "Nil" ] ) ; a ( b , "keyup" , function ( ) { Dispatcher . notify ( d . id , c ( b . value ) ) ; b . focus ( ) } ) ; return Value . Tuple ( b , d ) } , d = function ( a ) { a = document . createElement ( a ) ; a . id = Guid . guid ( ) ; return a } , e = function ( c ) { for ( var b = d ( "select" ) , e = [ ] ; "Cons" === c [ 0 ] ; ) { var g = d ( "option" ) , h = Text . toText ( c [ 1 ] [ 1 ] ) ; g . value = h ; g . innerHTML = h ; b . appendChild ( g ) ; e . push ( c [ 1 ] [ 2 ] ) ; c = c [ 2 ] } var i = Elm . Input ( e [ 0 ] ) ; a ( b , "change" , function ( ) { Dispatcher . notify ( i . id , e [ b . selectedIndex ] ) } ) ; return Value . Tuple ( b ,
i ) } ; return { textArea : function ( a ) { return function ( c ) { var e = d ( "textarea" ) ; e . rows = c ; e . cols = a ; return b ( e , "" ) } } , textField : function ( a ) { var c = d ( "input" ) ; c . type = "text" ; return b ( c , a ) } , password : function ( a ) { var c = d ( "input" ) ; c . type = "password" ; return b ( c , a ) } , checkbox : function ( c ) { var b = d ( "input" ) ; b . type = "checkbox" ; b . checked = c ; var e = Elm . Input ( c ) ; a ( b , "change" , function ( ) { Dispatcher . notify ( e . id , b . checked ) } ) ; return Value . Tuple ( b , e ) } , dropDown : e , stringDropDown : function ( a ) { return e ( List . map ( function ( a ) { return Value . Tuple ( a ,
a ) } ) ( a ) ) } , button : function ( c ) { var b = d ( "input" ) ; b . type = "button" ; b . value = Text . toText ( c ) ; var e = Elm . Input ( ! 1 ) ; a ( b , "click" , function ( ) { Dispatcher . notify ( e . id , ! 0 ) ; Dispatcher . notify ( e . id , ! 1 ) } ) ; return Value . Tuple ( b , e ) } } } ( ) ; return { Mouse : d , Keyboard : g , Time : e , Window : b , HTTP : h , Random : j , Input : k } } ( ) , List = function ( ) { function c ( a ) { return function ( c ) { if ( "Nil" === c [ 0 ] ) return c ; "Cons" !== c [ 0 ] && i ( ) ; for ( var b = [ "Cons" , a ( c [ 1 ] ) , [ "Nil" ] ] , d = b , c = c [ 2 ] ; "Cons" === c [ 0 ] ; ) d [ 2 ] = [ "Cons" , a ( c [ 1 ] ) , [ "Nil" ] ] , c = c [ 2 ] , d = d [ 2 ] ; return b } } function a ( a ) { return function ( c ) { return function ( b ) { var d =
c ; if ( "Nil" === b [ 0 ] ) return d ; for ( "Cons" !== b [ 0 ] && i ( ) ; "Cons" === b [ 0 ] ; ) d = a ( b [ 1 ] ) ( d ) , b = b [ 2 ] ; return d } } } function d ( a ) { return function ( c ) { return function ( b ) { var d = c ; if ( "Nil" === b [ 0 ] ) return d ; "Cons" !== b [ 0 ] && i ( ) ; for ( var e = [ ] ; "Cons" === b [ 0 ] ; ) e . push ( b [ 1 ] ) , b = b [ 2 ] ; for ( b = e . length ; b -- ; ) d = a ( e [ b ] ) ( d ) ; return d } } } function e ( c ) { return function ( b ) { var d ; "Cons" !== b [ 0 ] ? d = void 0 : ( d = b [ 1 ] , b = b [ 2 ] , d = a ( c ) ( d ) ( b ) ) ; return d } } function b ( a ) { return function ( c ) { return function ( b ) { if ( "Nil" === b [ 0 ] ) return [ "Cons" , c , [ "Nil" ] ] ; "Cons" !== b [ 0 ] &&
i ( ) ; for ( var d = [ c ] ; "Cons" === b [ 0 ] ; ) c = a ( b [ 1 ] ) ( c ) , d . push ( c ) , b = b [ 2 ] ; for ( var b = [ "Nil" ] , e = d . length ; e -- ; ) b = [ "Cons" , d [ e ] , b ] ; return b } } } function g ( a ) { return function ( b ) { return function ( ) { for ( var c = [ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Tuple2" , [ "Nil" ] , [ "Nil" ] ] } , function ( b ) { if ( "Cons" === b [ 0 ] ) { var c = b [ 1 ] , b = b [ 2 ] ; var d = g ( a ) ( b ) ; "Tuple2" !== d [ 0 ] ? c = void 0 : ( b = d [ 1 ] , d = d [ 2 ] , c = a ( c ) ? [ "Tuple2" , [ "Cons" , c , b ] , d ] : [ "Tuple2" , b , [ "Cons" , c , d ] ] ) ; return c } } ] , d = c . length ; d -- ; ) { var e = c [ d ] ( b ) ; if ( void 0 !== e ) return e } } ( ) } } function h ( a ) { return function ( ) { for ( var b =
[ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Tuple2" , [ "Nil" ] , [ "Nil" ] ] } , function ( a ) { if ( "Cons" !== a [ 0 ] ) a = void 0 ; else if ( a = [ "Tuple2" , a [ 1 ] , h ( a [ 2 ] ) ] , "Tuple2" !== a [ 0 ] || "Tuple2" !== a [ 1 ] [ 0 ] ) a = void 0 ; else var b = a [ 1 ] [ 1 ] , c = a [ 1 ] [ 2 ] , a = "Tuple2" !== a [ 2 ] [ 0 ] ? void 0 : [ "Tuple2" , [ "Cons" , b , a [ 2 ] [ 1 ] ] , [ "Cons" , c , a [ 2 ] [ 2 ] ] ] ; return a } ] , c = b . length ; c -- ; ) { var d = b [ c ] ( a ) ; if ( void 0 !== d ) return d } } ( ) } function j ( a ) { return function ( b ) { return function ( ) { for ( var c = [ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Nil" ] } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var b =
a [ 1 ] ; return "Nil" !== a [ 2 ] [ 0 ] ? void 0 : [ "Cons" , b , [ "Nil" ] ] } } , function ( b ) { if ( "Cons" === b [ 0 ] ) { var c = b [ 1 ] ; if ( "Cons" === b [ 2 ] [ 0 ] ) { var d = b [ 2 ] [ 1 ] , b = b [ 2 ] [ 2 ] ; return [ "Cons" , c , [ "Cons" , a , j ( a ) ( [ "Cons" , d , b ] ) ] ] } } } ] , d = c . length ; d -- ; ) { var e = c [ d ] ( b ) ; if ( void 0 !== e ) return e } } ( ) } } function k ( a ) { return function ( b ) { return function ( ) { for ( var c = [ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Nil" ] } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var b = a [ 1 ] ; return "Nil" !== a [ 2 ] [ 0 ] ? void 0 : b } } , function ( b ) { if ( "Cons" === b [ 0 ] ) { var c = b [ 1 ] ; if ( "Cons" === b [ 2 ] [ 0 ] ) { var d =
b [ 2 ] [ 1 ] , b = b [ 2 ] [ 2 ] ; return Value . append ( c , Value . append ( a , k ( a ) ( [ "Cons" , d , b ] ) ) ) } } } ] , d = c . length ; d -- ; ) { var e = c [ d ] ( b ) ; if ( void 0 !== e ) return e } } ( ) } } var i = function ( ) { throw "Function expecting a list!" ; } , m = a ( function ( a ) { return function ( b ) { return [ "Cons" , a , b ] } } ) ( [ "Nil" ] ) , n = d ( function ( a ) { return function ( b ) { return Value . append ( a , b ) } } ) ( [ "Nil" ] ) , l = a ( function ( a ) { return function ( b ) { return a && b } } ) ( ! 0 ) , f = a ( function ( a ) { return function ( b ) { return a || b } } ) ( ! 1 ) , o = a ( function ( a ) { return function ( b ) { return a + b } } ) ( 0 ) , p = a ( function ( a ) { return function ( b ) { return a *
b } } ) ( 1 ) , r = e ( function ( a ) { return function ( b ) { return Math . max ( a , b ) } } ) , t = e ( function ( a ) { return function ( b ) { return Math . min ( a , b ) } } ) ; return { head : function ( a ) { if ( "Cons" !== a [ 0 ] ) throw "Error: 'head' only accepts lists of length greater than one." ; return a [ 1 ] } , tail : function ( a ) { if ( "Cons" !== a [ 0 ] ) throw "Error: 'tail' only accepts lists of length greater than one." ; return a [ 2 ] } , map : c , foldl : a , foldr : d , foldl1 : e , foldr1 : function ( a ) { return function ( b ) { var c ; "Cons" !== b [ 0 ] ? c = void 0 : ( c = b [ 1 ] , b = b [ 2 ] , c = d ( a ) ( c ) ( b ) ) ; return c } } ,
scanl : b , scanl1 : function ( a ) { return function ( c ) { if ( "Cons" !== c [ 0 ] ) throw "Error: 'scanl1' requires a list of at least length 1." ; return b ( a ) ( c [ 1 ] ) ( c [ 2 ] ) } } , filter : function ( a ) { return function ( b ) { if ( "Nil" === b [ 0 ] ) return b ; "Cons" !== b [ 0 ] && i ( ) ; for ( var c = [ ] ; "Cons" === b [ 0 ] ; ) a ( b [ 1 ] ) && c . push ( b [ 1 ] ) , b = b [ 2 ] ; for ( var b = [ "Nil" ] , d = c . length ; d -- ; ) b = [ "Cons" , c [ d ] , b ] ; return b } } , length : function ( a ) { for ( var b = 0 ; "Cons" === a [ 0 ] ; ) b += 1 , a = a [ 2 ] ; return b } , reverse : m , concat : n , concatMap : function ( a ) { return function ( b ) { return n ( c ( a ) ( b ) ) } } , and : l ,
or : f , forall : function ( b ) { return a ( function ( a ) { return function ( c ) { return c && b ( a ) } } ) ( ! 0 ) } , exists : function ( b ) { return a ( function ( a ) { return function ( c ) { return c || b ( a ) } } ) ( ! 1 ) } , sum : o , product : p , maximum : r , minimum : t , partition : g , zipWith : function ( a ) { return function ( b ) { return function ( c ) { if ( "Nil" === b [ 0 ] || "Nil" === c [ 0 ] ) return b ; ( "Cons" !== b [ 0 ] || "Cons" !== c [ 0 ] ) && i ( ) ; for ( var d = [ ] ; "Cons" === b [ 0 ] && "Cons" === c [ 0 ] ; ) d . push ( a ( b [ 1 ] ) ( c [ 1 ] ) ) , b = b [ 2 ] , c = c [ 2 ] ; for ( var c = [ "Nil" ] , e = d . length ; e -- ; ) c = [ "Cons" , d [ e ] , c ] ; return c } } } , zip : function ( a ) { return function ( b ) { if ( "Nil" ===
a [ 0 ] || "Nil" === b [ 0 ] ) return a ; ( "Cons" !== a [ 0 ] || "Cons" !== b [ 0 ] ) && i ( ) ; for ( var c = [ ] ; "Cons" === a [ 0 ] && "Cons" === b [ 0 ] ; ) c . push ( [ "Tuple2" , a [ 1 ] , b [ 1 ] ] ) , a = a [ 2 ] , b = b [ 2 ] ; for ( var b = [ "Nil" ] , d = c . length ; d -- ; ) b = [ "Cons" , c [ d ] , b ] ; return b } } , unzip : h , intersperse : j , intercalate : k , sort : function ( a ) { if ( "Nil" === a [ 0 ] ) return a ; "Cons" !== a [ 0 ] && i ( ) ; for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; b . sort ( function ( a , b ) { return a - b } ) ; for ( var a = [ "Nil" ] , c = b . length ; c -- ; ) a = [ "Cons" , b [ c ] , a ] ; return a } } } ( ) , id = function ( c ) { return c } , not = function ( c ) { return ! c } ,
sqrt = function ( c ) { return Math . sqrt ( c ) } , rem = function ( c ) { return function ( a ) { return c % a } } , mod = function ( c ) { return function ( a ) { var d = c % a , d = 0 == c ? 0 : 0 < a ? 0 <= c ? d : d + a : - mod ( - c ) ( - a ) ; return d == a ? 0 : d } } , abs = function ( c ) { return Math . abs ( c ) } , logBase = function ( c ) { return function ( a ) { return Math . log ( a ) / Math . log ( c ) } } , min = function ( c ) { return function ( a ) { return Math . min ( c , a ) } } , max = function ( c ) { return function ( a ) { return Math . max ( c , a ) } } , clamp = function ( c ) { return function ( a ) { return function ( d ) { return Math . min ( a , Math . max ( c , d ) ) } } } ,
sin = Math . sin , cos = Math . cos , tan = Math . tan , asin = Math . asin , acos = Math . acos , atan = Math . atan , flip = function ( c ) { return function ( a ) { return function ( d ) { return c ( d ) ( a ) } } } , Just = function ( c ) { return [ "Just" , c ] } , Nothing = [ "Nothing" ] , eq = function ( c , a ) { if ( "object" === typeof c ) { if ( c === a ) return ! 0 ; if ( c . length !== a . length ) return ! 1 ; for ( var d = c . length ; d -- ; ) if ( ! eq ( c [ d ] , a [ d ] ) ) return ! 1 ; return ! 0 } return c === a } ; function constant ( c ) { return Elm . Input ( c ) } function lift ( c ) { return function ( a ) { return Elm . Lift ( c , [ a ] ) } }
function lift2 ( c ) { return function ( a ) { return function ( d ) { return Elm . Lift ( c , [ a , d ] ) } } } function lift3 ( c ) { return function ( a ) { return function ( d ) { return function ( e ) { return Elm . Lift ( c , [ a , d , e ] ) } } } } function lift4 ( c ) { return function ( a ) { return function ( d ) { return function ( e ) { return function ( b ) { return Elm . Lift ( c , [ a , d , e , b ] ) } } } } } function foldp ( c ) { return function ( a ) { return function ( d ) { return Elm . Fold ( c , a , d ) } } } var includeGlobal = this ;
( function ( ) { var c = function ( a ) { for ( var c in a ) if ( "Internal" !== c ) try { includeGlobal [ c ] = a [ c ] } catch ( b ) { "length" === c && ( includeGlobal . execScript ( "var length;" ) , length = a [ c ] ) } } , a = function ( a ) { return function ( c ) { includeGlobal [ a ] = includeGlobal [ a ] || { } ; for ( var b in c ) "Internal" !== b && ( includeGlobal [ a ] [ b ] = c [ b ] ) } } ; c ( Element ) ; c ( Text ) ; color = Element . color ; height = Element . height ; show = Value . show ; a ( "Time" ) ( Signal . Time ) ; a ( "Mouse" ) ( Signal . Mouse ) ; a ( "Keyboard" ) ( Signal . Keyboard ) ; a ( "Window" ) ( Signal . Window ) ; a ( "HTTP" ) ( Signal . HTTP ) ;
a ( "Input" ) ( Signal . Input ) ; a ( "Random" ) ( Signal . Random ) ; c ( Color ) ; c ( Shape ) ; c ( Line ) } ) ( ) ;