From d33996647d25f7ea91544cb8bce87de0bb673ea5 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Mon, 18 Mar 2013 21:14:05 +0000 Subject: [PATCH] Extra resources for State of the Map 2012 site --- register/.DS_Store | Bin 0 -> 6148 bytes register/090601/css/reset.css | 49 + register/090601/css/sotm.css | 230 + register/090601/images/and.gif | Bin 0 -> 1251 bytes register/090601/images/arrows.gif | Bin 0 -> 1500 bytes register/090601/images/banner_corners.jpg | Bin 0 -> 540 bytes register/090601/images/bg.gif | Bin 0 -> 1452 bytes register/090601/images/bullet.gif | Bin 0 -> 102 bytes register/090601/images/button.jpg | Bin 0 -> 30060 bytes register/090601/images/cloudmade.gif | Bin 0 -> 2265 bytes register/090601/images/footer_corners.gif | Bin 0 -> 365 bytes register/090601/images/footer_line.gif | Bin 0 -> 52 bytes register/090601/images/header_corners.gif | Bin 0 -> 316 bytes register/090601/images/ito.gif | Bin 0 -> 1228 bytes register/090601/images/kfb.gif | Bin 0 -> 2091 bytes register/090601/images/logo.jpg | Bin 0 -> 27573 bytes register/090601/images/muki_photo.jpg | Bin 0 -> 6145 bytes register/090601/images/nestoria.gif | Bin 0 -> 1529 bytes register/090601/images/photos/andy_allan.jpg | Bin 0 -> 5394 bytes .../090601/images/photos/andy_robinson.jpg | Bin 0 -> 8561 bytes register/090601/images/photos/ed_parsons.jpg | Bin 0 -> 4580 bytes .../090601/images/photos/jordan_hatcher.jpg | Bin 0 -> 5915 bytes register/090601/images/photos/mikel_maron.jpg | Bin 0 -> 5379 bytes register/090601/images/photos/muki_haklay.jpg | Bin 0 -> 6145 bytes .../images/photos/richard_fairhurst.jpg | Bin 0 -> 5508 bytes register/090601/images/photos/sean_gorman.jpg | Bin 0 -> 5205 bytes register/090601/images/photos/sean_phelan.jpg | Bin 0 -> 7078 bytes register/090601/images/photos/steve_coast.jpg | Bin 0 -> 5747 bytes register/090601/images/speaker_block.gif | Bin 0 -> 979 bytes register/090601/images/steve_photo.jpg | Bin 0 -> 5747 bytes register/090601/images/tagzania.gif | Bin 0 -> 2533 bytes register/090601/index.html | 162 + register/090601/javascript/prototype.js | 4221 +++++++++++++++++ .../javascript/scriptaculous/builder.js | 136 + .../javascript/scriptaculous/controls.js | 965 ++++ .../javascript/scriptaculous/dragdrop.js | 974 ++++ .../javascript/scriptaculous/effects.js | 1122 +++++ .../javascript/scriptaculous/scriptaculous.js | 58 + .../090601/javascript/scriptaculous/slider.js | 275 ++ .../090601/javascript/scriptaculous/sound.js | 55 + .../javascript/scriptaculous/unittest.js | 568 +++ register/090625/css/reset.css | 49 + register/090625/css/sotm.css | 200 + register/090625/images/and.gif | Bin 0 -> 1251 bytes register/090625/images/banner_corners.jpg | Bin 0 -> 540 bytes register/090625/images/bg.gif | Bin 0 -> 1452 bytes register/090625/images/bullet.gif | Bin 0 -> 102 bytes register/090625/images/button.jpg | Bin 0 -> 30060 bytes register/090625/images/cloudmade.gif | Bin 0 -> 2265 bytes register/090625/images/footer_corners.gif | Bin 0 -> 365 bytes register/090625/images/footer_line.gif | Bin 0 -> 52 bytes register/090625/images/header_corners.gif | Bin 0 -> 316 bytes register/090625/images/ito.gif | Bin 0 -> 1228 bytes register/090625/images/kfb.gif | Bin 0 -> 2091 bytes register/090625/images/logo.jpg | Bin 0 -> 27573 bytes register/090625/images/nestoria.gif | Bin 0 -> 1529 bytes register/090625/images/photos/andy_allan.jpg | Bin 0 -> 5394 bytes .../090625/images/photos/andy_robinson.jpg | Bin 0 -> 8561 bytes register/090625/images/photos/ed_parsons.jpg | Bin 0 -> 4580 bytes .../090625/images/photos/jordan_hatcher.jpg | Bin 0 -> 5915 bytes register/090625/images/photos/mikel_maron.jpg | Bin 0 -> 5379 bytes register/090625/images/photos/muki_haklay.jpg | Bin 0 -> 6145 bytes .../images/photos/richard_fairhurst.jpg | Bin 0 -> 5508 bytes register/090625/images/photos/sean_gorman.jpg | Bin 0 -> 5205 bytes register/090625/images/photos/sean_phelan.jpg | Bin 0 -> 7078 bytes register/090625/images/photos/steve_coast.jpg | Bin 0 -> 5747 bytes register/090625/images/speaker_block.gif | Bin 0 -> 1232 bytes register/090625/images/tagzania.gif | Bin 0 -> 2533 bytes register/090625/index.html | 137 + register/090625/javascript/prototype.js | 4221 +++++++++++++++++ register/090625/javascript/speakers_board.js | 47 + register/business-day.html | 112 + register/css/business-day.css | 158 + register/css/reset.css | 49 + register/css/sotm.css | 200 + register/images/Thumbs.db | Bin 0 -> 34304 bytes register/images/and.gif | Bin 0 -> 1251 bytes register/images/banner_corners.jpg | Bin 0 -> 540 bytes register/images/bg.gif | Bin 0 -> 1452 bytes register/images/bullet.gif | Bin 0 -> 102 bytes register/images/bullet_grey.gif | Bin 0 -> 56 bytes register/images/button.jpg | Bin 0 -> 30060 bytes register/images/button_now.jpg | Bin 0 -> 41970 bytes register/images/cloudmade.gif | Bin 0 -> 2265 bytes register/images/footer_corners.gif | Bin 0 -> 365 bytes register/images/footer_line.gif | Bin 0 -> 52 bytes register/images/header_corners.gif | Bin 0 -> 316 bytes register/images/info_panel.gif | Bin 0 -> 1930 bytes register/images/ito.gif | Bin 0 -> 1228 bytes register/images/kfb.gif | Bin 0 -> 2091 bytes register/images/logo.jpg | Bin 0 -> 27573 bytes register/images/nestoria.gif | Bin 0 -> 1529 bytes register/images/photos/Thumbs.db | Bin 0 -> 8704 bytes register/images/photos/andy_allan.jpg | Bin 0 -> 5394 bytes register/images/photos/andy_robinson.jpg | Bin 0 -> 8561 bytes register/images/photos/ed_parsons.jpg | Bin 0 -> 4580 bytes register/images/photos/jordan_hatcher.jpg | Bin 0 -> 5915 bytes register/images/photos/mikel_maron.jpg | Bin 0 -> 5379 bytes register/images/photos/muki_haklay.jpg | Bin 0 -> 6145 bytes register/images/photos/richard_fairhurst.jpg | Bin 0 -> 5508 bytes register/images/photos/sean_gorman.jpg | Bin 0 -> 5205 bytes register/images/photos/sean_phelan.jpg | Bin 0 -> 7078 bytes register/images/photos/small/muki_haklay.jpg | Bin 0 -> 11983 bytes register/images/photos/small/peter_batty.jpg | Bin 0 -> 9443 bytes register/images/photos/small/steve_coast.jpg | Bin 0 -> 12135 bytes register/images/photos/steve_coast.jpg | Bin 0 -> 5747 bytes register/images/speaker_block.gif | Bin 0 -> 1232 bytes register/images/speaker_block_small.gif | Bin 0 -> 814 bytes register/images/speaker_block_smallest.gif | Bin 0 -> 672 bytes register/images/sponsors.gif | Bin 0 -> 15326 bytes register/images/tagzania.gif | Bin 0 -> 2533 bytes register/index.html | 72 + register/javascript/prototype.js | 4221 +++++++++++++++++ register/javascript/speakers_board.js | 47 + 114 files changed, 18328 insertions(+) create mode 100644 register/.DS_Store create mode 100755 register/090601/css/reset.css create mode 100755 register/090601/css/sotm.css create mode 100755 register/090601/images/and.gif create mode 100755 register/090601/images/arrows.gif create mode 100755 register/090601/images/banner_corners.jpg create mode 100755 register/090601/images/bg.gif create mode 100755 register/090601/images/bullet.gif create mode 100755 register/090601/images/button.jpg create mode 100755 register/090601/images/cloudmade.gif create mode 100755 register/090601/images/footer_corners.gif create mode 100755 register/090601/images/footer_line.gif create mode 100755 register/090601/images/header_corners.gif create mode 100755 register/090601/images/ito.gif create mode 100755 register/090601/images/kfb.gif create mode 100755 register/090601/images/logo.jpg create mode 100644 register/090601/images/muki_photo.jpg create mode 100755 register/090601/images/nestoria.gif create mode 100755 register/090601/images/photos/andy_allan.jpg create mode 100755 register/090601/images/photos/andy_robinson.jpg create mode 100755 register/090601/images/photos/ed_parsons.jpg create mode 100755 register/090601/images/photos/jordan_hatcher.jpg create mode 100755 register/090601/images/photos/mikel_maron.jpg create mode 100755 register/090601/images/photos/muki_haklay.jpg create mode 100755 register/090601/images/photos/richard_fairhurst.jpg create mode 100755 register/090601/images/photos/sean_gorman.jpg create mode 100755 register/090601/images/photos/sean_phelan.jpg create mode 100755 register/090601/images/photos/steve_coast.jpg create mode 100755 register/090601/images/speaker_block.gif create mode 100644 register/090601/images/steve_photo.jpg create mode 100755 register/090601/images/tagzania.gif create mode 100755 register/090601/index.html create mode 100755 register/090601/javascript/prototype.js create mode 100644 register/090601/javascript/scriptaculous/builder.js create mode 100644 register/090601/javascript/scriptaculous/controls.js create mode 100644 register/090601/javascript/scriptaculous/dragdrop.js create mode 100755 register/090601/javascript/scriptaculous/effects.js create mode 100755 register/090601/javascript/scriptaculous/scriptaculous.js create mode 100644 register/090601/javascript/scriptaculous/slider.js create mode 100644 register/090601/javascript/scriptaculous/sound.js create mode 100644 register/090601/javascript/scriptaculous/unittest.js create mode 100644 register/090625/css/reset.css create mode 100644 register/090625/css/sotm.css create mode 100644 register/090625/images/and.gif create mode 100644 register/090625/images/banner_corners.jpg create mode 100644 register/090625/images/bg.gif create mode 100644 register/090625/images/bullet.gif create mode 100644 register/090625/images/button.jpg create mode 100644 register/090625/images/cloudmade.gif create mode 100644 register/090625/images/footer_corners.gif create mode 100644 register/090625/images/footer_line.gif create mode 100644 register/090625/images/header_corners.gif create mode 100644 register/090625/images/ito.gif create mode 100644 register/090625/images/kfb.gif create mode 100644 register/090625/images/logo.jpg create mode 100644 register/090625/images/nestoria.gif create mode 100644 register/090625/images/photos/andy_allan.jpg create mode 100644 register/090625/images/photos/andy_robinson.jpg create mode 100644 register/090625/images/photos/ed_parsons.jpg create mode 100644 register/090625/images/photos/jordan_hatcher.jpg create mode 100644 register/090625/images/photos/mikel_maron.jpg create mode 100644 register/090625/images/photos/muki_haklay.jpg create mode 100644 register/090625/images/photos/richard_fairhurst.jpg create mode 100644 register/090625/images/photos/sean_gorman.jpg create mode 100644 register/090625/images/photos/sean_phelan.jpg create mode 100644 register/090625/images/photos/steve_coast.jpg create mode 100644 register/090625/images/speaker_block.gif create mode 100644 register/090625/images/tagzania.gif create mode 100644 register/090625/index.html create mode 100644 register/090625/javascript/prototype.js create mode 100644 register/090625/javascript/speakers_board.js create mode 100644 register/business-day.html create mode 100644 register/css/business-day.css create mode 100644 register/css/reset.css create mode 100644 register/css/sotm.css create mode 100644 register/images/Thumbs.db create mode 100644 register/images/and.gif create mode 100644 register/images/banner_corners.jpg create mode 100644 register/images/bg.gif create mode 100644 register/images/bullet.gif create mode 100644 register/images/bullet_grey.gif create mode 100644 register/images/button.jpg create mode 100644 register/images/button_now.jpg create mode 100644 register/images/cloudmade.gif create mode 100644 register/images/footer_corners.gif create mode 100644 register/images/footer_line.gif create mode 100644 register/images/header_corners.gif create mode 100644 register/images/info_panel.gif create mode 100644 register/images/ito.gif create mode 100644 register/images/kfb.gif create mode 100644 register/images/logo.jpg create mode 100644 register/images/nestoria.gif create mode 100644 register/images/photos/Thumbs.db create mode 100644 register/images/photos/andy_allan.jpg create mode 100644 register/images/photos/andy_robinson.jpg create mode 100644 register/images/photos/ed_parsons.jpg create mode 100644 register/images/photos/jordan_hatcher.jpg create mode 100644 register/images/photos/mikel_maron.jpg create mode 100644 register/images/photos/muki_haklay.jpg create mode 100644 register/images/photos/richard_fairhurst.jpg create mode 100644 register/images/photos/sean_gorman.jpg create mode 100644 register/images/photos/sean_phelan.jpg create mode 100644 register/images/photos/small/muki_haklay.jpg create mode 100644 register/images/photos/small/peter_batty.jpg create mode 100644 register/images/photos/small/steve_coast.jpg create mode 100644 register/images/photos/steve_coast.jpg create mode 100644 register/images/speaker_block.gif create mode 100644 register/images/speaker_block_small.gif create mode 100644 register/images/speaker_block_smallest.gif create mode 100644 register/images/sponsors.gif create mode 100644 register/images/tagzania.gif create mode 100644 register/index.html create mode 100644 register/javascript/prototype.js create mode 100644 register/javascript/speakers_board.js diff --git a/register/.DS_Store b/register/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f091321269b921cfc74c4085b7d2f0088fd68df5 GIT binary patch literal 6148 zcmeHK%}T>S5Z-NT-ByKq5IruQi=@$31P>up@F=v^D0T6au&q5gGsa+gu$cl zE$)<^c*!z$y@iV0c*z7J${t416zs9d9)&?Nxo;h&Y1eAY(_Yq=X~(vEZFzoXXIY~m z8vDE{4vtSQuZLdxls&&_{x~ifWlzJpeO+5*5Cg;jF+dCu0~;7H2Z`9(kV7G2fEf6n z4B-ACK@lB;xkj~hK%<@jfHiO{0UO^ESR)NO26K%N0pYq7P?vJ^#NfId{LJbCPz#n6P*ZPCL z3m;|9)^DGOXRQQ%07b#P91Re#3zq=s;68Gsf;ukIhCIh$t`SE;zbXf$i-0188e-rF G82A9(ra=Y( literal 0 HcmV?d00001 diff --git a/register/090601/css/reset.css b/register/090601/css/reset.css new file mode 100755 index 0000000..e2b31ea --- /dev/null +++ b/register/090601/css/reset.css @@ -0,0 +1,49 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + font-family: arial; + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + font-weight: normal; + vertical-align: baseline; + background: transparent; +} +body { + /*line-height: 1;*/ +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +:focus { + outline: 0; +} + +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/register/090601/css/sotm.css b/register/090601/css/sotm.css new file mode 100755 index 0000000..82a22ea --- /dev/null +++ b/register/090601/css/sotm.css @@ -0,0 +1,230 @@ +body { + padding-top: 15px; + background: #f4ffff url(../images/bg.gif) left top repeat-x; +} +#wrapper { + width: 960px; + margin: 0 auto 15px; + background: #fff; +} +/*Header*/ +#header { + position: relative; + height: 245px; + padding-right: 40px; + text-align: right; + background: url(../images/logo.jpg) left top no-repeat; +} +#header .left { + left: -1px; + background: url(../images/header_corners.gif) 0px 0px no-repeat; +} +#header .right { + right: -2px; + background: url(../images/header_corners.gif) -10px 0px no-repeat; +} +#content, #header { + border: 1px solid #a1cde1; + border-top: none; + border-bottom: none; +} +#header h1 { + padding: 38px 0 0 0; + text-align: right; + font: bold 41px "Arial black"; + text-transform: uppercase; +} +#header h2 { + text-align: right; + font: 23px "Arial"; + color: #666; +} +#header h2 b { + color: #000; + font-weight: bold; + font-family: "Arial black"; +} +#header h3 { + padding-top: 20px; + width: 495px; + float: right; + text-align: right; + font: bold 24px "Arial"; + color: #008dcf; +} +/*Content*/ +.first { + padding: 10px 0; + color: #4b5052; + font-size: 13px; +} +.first em { + font-style: normal; + font-weight: bold; + color: #000; +} +#content h3, #content p, #content ol, .banner, .themes, .bulleted, .sponsors { + margin: 0 40px; +} +/*Banner*/ +.banner { + height: 74px; + position: relative; + background: #ddf2f9; +} +.banner span { + position: absolute; + top: 0px; + display: block; + width: 14px; + height: 74px; +} +.banner .left { + left: 0px; + background: url(../images/banner_corners.jpg) 0px 0px no-repeat; +} +.banner .right { + right: 0px; + background: url(../images/banner_corners.jpg) -14px 0px no-repeat; +} +#content .banner p { + font: bold 23px arial; + line-height: 74px; + margin: 0 25px; +} +.banner a { + position: absolute; + top: 6px; + right: 6px; + display: block; + width: 331px; + height: 62px; + text-indent: -11000px; + background: url(../images/button.jpg) 0 0 no-repeat; +} +.banner a:hover {background: url(../images/button.jpg) 0 -62px no-repeat;} +.banner a:active {background: url(../images/button.jpg) 0 -124px no-repeat;} + + +#content h3 { + padding-top: 25px; + font: bold 16px arial; + color: #5c6568; +} + +/*Speakers*/ +.speakers { + position: relative; + clear: both; + height: 124px; + padding: 8px 35px; + background: #ddf2f9; +} +.speakers a { + position: absolute; + top: 55px; + display: block; + width: 16px; + height: 27px; + cursor: pointer; +} +.speakers .left { + left: 10px; + background: url(../images/arrows.gif) 0 0 no-repeat; +} +.speakers .right { + right: 10px; + background: url(../images/arrows.gif) -16px 0 no-repeat; +} +.speakers:hover a.left {background: url(../images/arrows.gif) 0 -28px no-repeat;} +.speakers:hover a.right {background: url(../images/arrows.gif) -16px -28px no-repeat;} +.speakers:active a.left {background: url(../images/arrows.gif) 0 -55px no-repeat;} +.speakers:active a.right {background: url(../images/arrows.gif) -16px -55px no-repeat;} +#scroller { + position: absolute; + display: block; + width: 880px; + height: 124px; + overflow: hidden; +} +#scroll_content{ + position: relative; + left: 0; + width: 5304px; +} +.speakers .speaker { + float: left; + display: block; + width: 437px; + height: 124px; + margin-right: 5px; + background: url(../images/speaker_block.gif) 0 0 no-repeat; +} +.speakers img { + float: left; + margin: 9px 20px 8px 10px; +} +#content .speakers h4 { + margin: 10px 0px 5px 0; + font: bold 24px arial; +} +#content .speakers p { + margin: 0; + font: bold 13px arial; +} + +/*Themes*/ +.themes { + margin-top: 8px; + font: 13px arial; + color: #3e4446; +} +.themes li { + line-height: 20px; +} +.themes em { + color: #000; + font-style: normal; + font-weight: bold; +} + +/*Bulletes*/ +.bulleted { + padding: 10px 0 0 24px; +} +.bulleted li { + padding-left: 12px; + height: 18px; + background: url(../images/bullet.gif) left center no-repeat; + font: 12px arial; + color: #585d5f; +} + +/*Sponsors*/ +.sponsors { + padding: 15px 0 10px 0; +} +.sponsors a {margin-right: 14px;} + + +/*Footer*/ +#footer { + position: relative; + height: 14px; + background: url(../images/footer_line.gif) repeat-x; +} +#footer span, #header span { + position: absolute; + top: 0px; + display: block; + width: 11px; + height: 14px; +} +#footer .left { + left: -1px; + background: url(../images/footer_corners.gif) 0px 0px no-repeat; +} +#footer .right { + right: -1px; + background: url(../images/footer_corners.gif) -12px 0px no-repeat; +} diff --git a/register/090601/images/and.gif b/register/090601/images/and.gif new file mode 100755 index 0000000000000000000000000000000000000000..885175bd87860d8c0c69617623744669a331b7d0 GIT binary patch literal 1251 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 literal 0 HcmV?d00001 diff --git a/register/090601/images/bg.gif b/register/090601/images/bg.gif new file mode 100755 index 0000000000000000000000000000000000000000..9a8a2d57e97d1dd06c4d691311e687f99ba8a061 GIT binary patch literal 1452 zcmdUu=}(gf0Ea=)fH>!YODCYi0fIwege|Dk2s(!j4IbOXIR`kwz+A)_b&HE~2rcEl z1O=%SImF2&GNtq`EjN?`Ep2K0_P*Qq?cKNS=KhQQK0KeFJjw5y6UP(wXLx%x_*lKX z3Pw35k0&3;hTNVa!ivG=RybT;tNMpTZU0V1fsU2Q1IaE$p{k(k6U}I>lTG-7u zJB=>)tidL?!wW`x8AC)?nIA1ES~;3-fq`dsOzUkph3Rh@L{(e*#o)6QZ83>QQCkKj z;FBd4lDevKx>%sSVgev4&6Shlr)Y5qpgw9IWScFz*F`3uK z)q-vh8*-p%t6a0AZcbJ^E32B4;FV^k(LQgqEkX8W$ll0OYGK!~6dIC3D4O7{3@XI0 zl#h#^^K?iGziL`CrMEUMDj$-#-2(l*!L|%JXlhFdnKz}gVpge&uP|3liHk|x1<>BSr1tt>E!6J&pKtVgzW;=mpT{far}anrFo}i3>mn~PQbQX{ zKHQ(&%9`t{7~9HdR$@9%J&C`mYVTL) z&$b@^z%S%L{MoP_$+ZO+CIXAfI#aLWauSDf0{kxwW=_|2pWB_39*PY4>T zg~{86CBrukDJBw!byXvG>54^e*L)e_LH0{T%H6d+vB=F(8m_~*{fnx_Ys_111JbRj zak&vo*um_0%zV-M`i@(V4|QGdx;%;V$;Kc$(S?k z_&)<}5Y~@GxR1QtdT$H;K^`JQn2!uoj1~OWC=?b(;6g<~PwxUJHz2YQK3jutCya;f zDvE6LORl@NYfn!)1}H_e3juUgGnrf#KX8Lop0LU$R(u5}kSdS35u~bP8>6Vz$*N}( z@02e&zpPC??l1kcGAvzM{{tQ)ZHSo@g@?ozMMZ3ALk=*Ser|8d+Vblgf5wyg^INFR zx6WpCwxA^Y8Bfzpob1m}`R=(E^tL}MOgl3ue;s{_`uv(S5kdF0TsVL@gAYOADydoo1v4x@Xw?* NZy(~v;7wi!{{i1pG)4db literal 0 HcmV?d00001 diff --git a/register/090601/images/bullet.gif b/register/090601/images/bullet.gif new file mode 100755 index 0000000000000000000000000000000000000000..cb18d25647df75a5c251c237b66c10b321a56ae5 GIT binary patch literal 102 zcmZ?wbhEHbWMg1s*v!C?f8veD&gc7{eY^4DSIyaXq5EDW9e(xc*WagK|8!n@|NsAg s>n%?ikbvS(7BEi-M1ssjIHgZWyFIW-EiQ~9u}NZPp$mgG09;-tPXGV_ literal 0 HcmV?d00001 diff --git a/register/090601/images/button.jpg b/register/090601/images/button.jpg new file mode 100755 index 0000000000000000000000000000000000000000..df76135cf1055faa27546c4afcc8f886ba7fad39 GIT binary patch literal 30060 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 CW9(x9 literal 0 HcmV?d00001 diff --git a/register/090601/images/cloudmade.gif b/register/090601/images/cloudmade.gif new file mode 100755 index 0000000000000000000000000000000000000000..b440ab45b0422acd907197a92f4c2aefbcdd1903 GIT binary patch literal 2265 zcmd6k`!`hk0>Hm}&mJ?z4BL!n4faH%({TlySw}Q`}_L(?%cVvu(0s?^XHnHnhzg7)Ya8JeE5(g z$p;S}3=IuEdi3bir%xY0e!PGG{`~xWV`HOQt=8#uU0q!-Uc49?8EI%}(ChX0?%jLx z^FZEfx3Cc>sp9~~WS zZ*LzS9`5Mq7#kbw?d`3osOaqMeEIUFwzYM^Xl!k3yL#EfSG(MMh@UiR_${Kjxmw`;YSUnX~!l&i{1bV!@@t%U7HtqFN@C2Gfx%p0VqxvT z&t9{ZV`&j?y>95;`$$ua#YRz0Cd18%WfjSzrKJ#|tDa^35N4*7019diS@%6 zEm>f|R52(N80&RfDZSbIH^x80u&r8vI+%y_5Y@$MWVyAK0F{hyGIjM`{H^WshA}Y| z?CI!5N-|n-81^c}v2i#LjdaiG_Nj??cCkHT9*qUbGuZe=^OQ5eAblykS(0pYQPZs% z+*=_U%84v72$%xV*JwFxQH0=d@l4~8ojW%%Rjn7(QZwLsf&O|*f)jpKXe%yIX7WhF z+m@|ReyEc(giiY#QxY83UqOWV4{|c+b2>S&k_;FXLmj^VmMqg8GtN+jbee6|yoQN| z$r?;dlgkMUdH_zs4putE)HGk9hBgX9G_-i@%EGjVDC#bgClNH#@nr zDQq-ng?-mvwqk>96gUAe%yBH7(tyTae%iN~K)0LD0DdK|VZ;n8nqaxEKp}HBD&7K{ zjTY&^It|5szhpEqYfz^FNu@Z!m^jUkNnXCWFAB-^ zI{_^G{uG_VIAM|%X)gTG;%h;`pyZHT>~)DE7N`+XfGQZ_(1UIkMkeaupG|tCmw>ef zS0Ci#;MTdLA>bOeRLG-W&5#g~z#J`CUasf?`vX8hkVp^ABSz zJ7k#UV8YOjqJDlsEb!#^Z@3;VNTJk4NC(z1mgLtqo}q84-+R21H58w)gV6;LhPK?B z=1!L>V38JwsDb3}48XaqCpoScln~->FaY|2t9GNjZq_Ehv8BwpxQfmO*tdO<9R$Yw zd=3S5M0ox9Ay^=!HL}|Rc`kxkw_k_^VQT5VBt?{@fyt`pYZ)-Ei(9-q!r2yF&s|Qy z=BN<|Q1bax@yiaH9f8L}tfDu(jF|drHrS)+^M|%Jw6&GDu zxS1om9pjC?DB0kheb*uP?~y8q#Z^L#>wKCSNy1rzbW4n+@KHI%gOHb&=%MJjywlpG zHC8KEf-6TNXpD+7lO$$9JV)AMVkx)rf*>j#@z#)?(+p~e46uQ)PBdv5UV@|S?;$od)QqqIG z&++o7g&nq--B^HjY}-o5A)bUFmK?W?T6a`#=JvU4>E$VTq;ZhS?*@=NwwI2EztG7`+YKf>l`ftVgp_jw8%ij*> z^tcZ8i1z;6lROv0W%ZC$kwCnol%wPAQROOB>0l?8VZT92;gjSJZvuw!e3YhxLLGQ@ zc{f5-a+%8I$~=nsMei-tk2ojC$~mX!P1)&N>3+_Dw!M;?Qq=_~;+4I2eFd-)thdua zY#o3@aU6m#1t3g!IJ}@CzUGH)rpv#ik2wvNc|^LeW${{}06&Xshd!O(4CvX@7q~Le z&lrUa4kR|zKHL@13Rx--^CDz~1*U=mr*6xyk`%ooL|>%`K9CeB?3Flm{cZvj065p9 r_R%_AP0y3ht)0xYc;G(P^c} zd9>0}kG4O1sQ3H*Q;@hXZJt7atH|By`TYG;khjX->R61kTaL6hb)#{t%*o#CONg>d zh_T7v>+AIR?e+O^ug`h4)Mu#5S(dv(f2%fhqj9g#c(v4Vt<71LyMn#gg1y;+yx9N$ z{{R30A^8LV00000EC2ui02crb000Jxz#YOzEE(192cKFz`;BUGB*t~4KX+h L!p+Xl&_Mt@%5AVV literal 0 HcmV?d00001 diff --git a/register/090601/images/footer_line.gif b/register/090601/images/footer_line.gif new file mode 100755 index 0000000000000000000000000000000000000000..ce091ad7c0c9a7dcbaebd67bc16f304436ad29c0 GIT binary patch literal 52 zcmZ?wbhEHbWMtrDn8?7;wD)HEic|Wz^Zx(;ulSRN0R(hF1W2BNiFHoDG9xR4H2|Y< B4PXEO literal 0 HcmV?d00001 diff --git a/register/090601/images/header_corners.gif b/register/090601/images/header_corners.gif new file mode 100755 index 0000000000000000000000000000000000000000..8165fe7f124c32fc30e7a9fe138f459142e6e407 GIT binary patch literal 316 zcmZ?wbhEHb6k*_FxXQq=_vZ8WzyJRG|NqzDf3Lp(`tbAj+h2d){QUjk)3*=bf4%$t z=l##$&p-e8`1jxUKYu^|{C(i|i+wkr|M~at;rp-0?!UhH{KM~m|L%YIcIo*CpeYCM zytx12>+uJ#fkr<1@O9s<=bwQ_|NqZGGobjB1#Gqshy?kGfi2QuLV-ktg^uEJC4(G3 z=@!QfFIfR8zl94G7F0PmH65(1s5!szc;g9&#gaZ3)E?V;>nR*v()Ue6fU_o@lS3k? gDNa^YCblC^M5-@dKz>r3Aj7l}hMBVz85|j`0qM$u`2YX_ literal 0 HcmV?d00001 diff --git a/register/090601/images/ito.gif b/register/090601/images/ito.gif new file mode 100755 index 0000000000000000000000000000000000000000..7ac3bf1564bfcc83d8d62109dfc168c3e640ff0e GIT binary patch literal 1228 zcmdUs`A?g50EfTt+k>{W>}|QqDA+QJiOXhC2X4xA3Pv>L zzFir|T*kC4+eCtnAsFRs%T?}j-%!eZ6(~2Dp!2`*^TYGg^TU&T0s=4kp1=i@)M|B0 zOUwNHd{Utecur&g<7Utizc+%y;rD=RD0)6=7)qpPc{Yinx<2M68V-7_;Y zwRLsF!^4x4lhxJLJv}|UySuZqbH~TWM@L6>b@d$`9ksRpDs}bs^$iUTDwXQw>V2IWmmTGm}p9VZM(t$1w%hjyZQ{(at_g^dw?1 z#v&jHEt9~s=8!DRGiY45R3_O5e$D)xl`$lQ$W*E@Ql?NzlFV#Vox(^cOco$Q06i(z zWI2&XrU0&M|tLxHQvfHO!X6d-ty z$YkKnatkp=I8#{sQU6VWXLLErO>Zv{n-j0{E^B@+6DA}4Ep39)Q@4}LDkQARF&M*D z5SZ5HFZ+ey6=X_K`RNGFElw37>d$qZ%s5-X%)bPlX?ooF$oAdAeo5AnHVN6RWt7^zY@kP)JdgcadAp`vyU2Y2Psh3lpq

U_!os11S;t8eDVe^A zGyphh=7g5E$TRjEVTVsRZdzCfd)oAY0*?#@jvQS0OMk4$7wJRT3MUfPUhdsQ`jD3LX5eKu#!aTm23cAR(sldpU?%ZSq zVzI>}s{@53Jlcj`@*>#60KJ5rq+*CtB=5PvVmXrV{zYsICTH_-v^qwp5;irTccGbh z!OH41HF#*}SQPW4v$u@OOEfaQP9?+WT@Am=*8c-(9-6p;yIofoO)W? zqjP>QL>fCd6C6hw7bYm15F~(T++RXeRKTd9$f8j}QBmW*^t80oKce@;{dzy#Pjj*o zmlRvU0`LHU!-o&IwY9ahv>ZBg$ZEAVH#fJpx3{*oK701;>C>lPulLB2BQ~4u$&)8e zr}O2@m*eB(&!0bk{P^+Pw{JT-I*uPd{_fqo4<9}pJ9cbhVxqgd`}OPBcDuc^v-8@u zYj57XnVOnvYHAu77wDlE?&HN;lhPWmo5zt4^K``Ub%AR>eZ_^Z{Bpf z-J_$Ur%s)6xm+JVemr^d)O9qB%LtXhU6>U3G4-Em|ghNBpg{F@Yi=YTa(jeInR{itK`KNB?}Hl{ zO2$O_-F{lT0-Ja_i9aM0RFY@^+#R75iCinNY}**5BMI9u->!_9qt+Dide16=$)fWp zji>f|g|B@{@E21~oK(eZF8AttgyO7h+`<%3RuaLc4drgeA>P4?q_H+j=~a2iruSu_ zfy09WN_EYU&!Xm2u3`pNPxVGA2~$Wi$f-mz%Ema;(-BNE^JO8$zGJyLt53gtMd#PT zfZ3=bTFA27MPy?&sRO3lmHD{@T^f_IokuUv`Zx0RABuhZiT$RHDg@OMB@^4@!zu-t zekG>O@yZ^*EmaF6vcdXvta6Wz*k~yU#1wH=R>B?x4S`!GxBaLi5OKP{>8tljPgdk? zlsr)<4E=IV(?$qQSwxbq{HZCYdS2~XDiPjAOvF;n;(<&_gmkC^4UDmT+m z!jxIKG#?e@lME?(r(b<H>|P0|pG`ZRZ5DS$;1w+X`JEcS9W%Yo-|%FM@zG7+IPX zg_@%fJdNlaB~mB@n8Aczh^0&WZ2rWw3LsR!)$5eagBBKxGRd{R(e5VJH(&ABKb9J& z=JCEhL1pQ}mF~;|grN%HI#IL6X&6Q<23laZWl|w(w*zSZdkzcH@LDXczsv<>8V4sw ztu}!e=mC%xQQYSuk;QZ0H<;Et1Cju*1)oxJTZQ-P`E-9=%>r3bMx9m?ugc-9qCzh# z6R;j_U78MZ5^^&zf?TM9k_8lVE+7h+Q9*JFUr{eF_40ngLY@^=_A>llnMSj2{~J1r zHJ|KT4s0-B$NmJg*OrOOH$hZDX7e0KG||iaaw&7h42`95oG5`Xb25Pqq5z+Oh%1Hy zNSDs8bCJ=M8O4K)(8(m4M!{bckj_A&+zb#dK6oBri*#3~$^K6YfHY~R+u&cBR)Eut zQOC(L=EGKUv3#RTsyyXExnKF>R210t(o(!b5NkZ=}>l z396Pl3Vli~4nH|=fl}1WI64%C78LW@v`;HT>pej1OKA~ItceAZXw!FFF(NUR6&>vI zxELP*+QpGJy_SpwcUdHn?u@|v6KMnKp7dJDSe6DLEP&amKaQMG0KQB;Wy_e6 zm#p_x_yyxeP8lKB0nwi>1RJnG=q>bH#&{t~QJ%A)pp;kAJi{RnmC#xw*bO9kEh;fT zd@0vbk?&&>q}Kc*nD_~i%UNO(jgoO?adI;#%4S%y25_X;5}sCy2vZ_WV=FwkxF$!K zsDYGQ58~s04_4YL(6t~biE)4wSTV=q5oCIy=Ep;^gt0|L6-JZ`_LcV+Ewgvo_RXEEU8S!J zXW7rfH3o46oHJL`pTEJo*S~NICp1$yO>?V+vykIsEE>l422&PXX;Sg=iE-`!qMECN zA92Z1WyXvp1F=6ST@!2J0;K#pD0`C!2s84nDIR^C6RpewoFd|UTj0+kRZCTh`RiRcAs7x)(qApd7B3I{F$6r!x1%QBR5XG Y?Y3=i+pzAl(UFn2NA0UK7yy$01Bs&?7ytkO literal 0 HcmV?d00001 diff --git a/register/090601/images/logo.jpg b/register/090601/images/logo.jpg new file mode 100755 index 0000000000000000000000000000000000000000..65e6d7cb531e325f5b7cbe6c8a326c604a99a804 GIT binary patch literal 27573 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≪ID(pHRIEfGdkGT& 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 literal 0 HcmV?d00001 diff --git a/register/090601/images/muki_photo.jpg b/register/090601/images/muki_photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93dc610271a10c202f00ec4da1192f76698341fe GIT binary patch literal 6145 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 z zg+&$BZKUCTvK2kUeZ*MQY{D)Y4Sl?xpU|C@cR&XjhZ$!mp>O3)%1Q!7-71hYWh34r z(?i`$4;n!TPVY26hXJL*M?I1J)7yZSoHsvn0w90vOdL?$g$A{M)bICf9=WY^d^~|% z@J}C%<((eRa`p)@6MH}0&4jwr>~ya|QF;4^!gdAE`|^g`ADV;%7oPx_e!AnIaE84C zDBq1f0Y;?-k5iriB9$W7)^`wZ|K3Tz8U)3(>yJ~HAex$+mh%M0BMBdGfrz!Biw@>{ z&)EAeG4c6;Z>^^9SN!CGUh$WLe_!u!cg0*i0p=EuBX@_;Q_t}i{>@G;%~!1tZQmym QFYylRUeV05Q9mvJ7pwy?YXATM literal 0 HcmV?d00001 diff --git a/register/090601/images/photos/ed_parsons.jpg b/register/090601/images/photos/ed_parsons.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8b8f5b2e1e7f489f1e9da41a4c9fd32f2399b420 GIT binary patch literal 4580 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 R1wN%&zOw%1((r?K^7l_p6sp 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 H<@~<@Di#)x literal 0 HcmV?d00001 diff --git a/register/090601/images/photos/muki_haklay.jpg b/register/090601/images/photos/muki_haklay.jpg new file mode 100755 index 0000000000000000000000000000000000000000..93dc610271a10c202f00ec4da1192f76698341fe GIT binary patch literal 6145 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 ac<>Zhb`d^0dr|?Jq^fzO6{Wm7o%t_PkW%IV literal 0 HcmV?d00001 diff --git a/register/090601/images/photos/sean_gorman.jpg b/register/090601/images/photos/sean_gorman.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6d93c8ab02d451c5514207c5fd73febc476d88ae GIT binary patch literal 5205 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 literal 0 HcmV?d00001 diff --git a/register/090601/images/photos/steve_coast.jpg b/register/090601/images/photos/steve_coast.jpg new file mode 100755 index 0000000000000000000000000000000000000000..eafdd996c8e55a9c52d6921c105e9cacf019150d GIT binary patch literal 5747 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 IAR9CLUqz_$)Bpeg literal 0 HcmV?d00001 diff --git a/register/090601/images/speaker_block.gif b/register/090601/images/speaker_block.gif new file mode 100755 index 0000000000000000000000000000000000000000..6ffffb1c173907bef25779e01a2a8ccc72677a55 GIT binary patch literal 979 zcmb`C`%}^f0KmTpA`u!ljaIYHa?_ny?zXF$T^!3Yv2@t*l5ClXJL~+;thJAkc{P?;1oW#XNAHMh;R18c4 zz}TEgwd@`cjg8NnWd@7Vx+*uXC@c>5`i9QBVt0G&?lqgsqp~{P8{R?j1Y4$%o9#<> zhtlR68kcjYRWlan!ir0(Gc2t*-pm>JO6`(kRi@FI><-?{TfN05(`Z*c>!xLg!D8dh zXxBEp!2icyH{`!q9^}FOV^Lcl*49z$ z8yaa(inpRbzFV5w80{TTJDERh@r4F=_5Rh@KQNdX428g6uwQeAxuq}&ctj+YNV#BO zR5m#^T@Osil`6I7hTo=yqO!}7p{Ye5cQ*}Z1Vv>jGtr?Vl#tk)2wV@oxhm`oW1X1)hp_r>FN=x`{8CsO zeO)c$2hK}28?a}*h=ico(WdyQJ&A%K?RZP_HVi3YQX^xWwWNs!+tpK@7bZ&lPob3Z zp3Lt0L?KF{=*^|PB%S(Nt{fobsl>wRN%gDS3w*@s8ij^kesFh^$Tg! z71Ue_kchsSoRiQr#Q}+_V*NN>NKGQ$I+#7)`7M#WzwR@$qUM^erK9NcS@o-(;B90= zbRL^a0Vj1*qwMp9#@JSLNsQ7s^(I3~Esdn=>#sLZ+a8=FEY zz?3vOEnqRTF?`b-z2O&<=o6ry_#UcFx$p~mKaZ9S!|-Z}?>#tv@z=N$<$H5>U5&P$ zyR%0D%_#3D#qYZo*5EpKHv&GAac}q~EHwX9N#A+Wp_n`0k;lxu&>I*pA+7RQ)=7Mo zYIntlgoFc!(;p_)`dxZtNW^_ql#=dFf1D~9xm4`{ArUpj6~GV>TFI~W10!ia*WSF0 z#X>&71L0{qbC6$vz+Z*1>aXCES%5Dj7l0xQ03RB@3h4uRKll?42>b}k0{h?@h8Aj} z(a=gOi!jogA7>fc=q(H*qodboZ13VmEOyW_Se73+K7kV{$kZ(|hoERv7YCJX>gI*D fn|eft7EOPS#-Yv6WGUI^=i=VW*eAyzAmGTqnw<7( literal 0 HcmV?d00001 diff --git a/register/090601/images/steve_photo.jpg b/register/090601/images/steve_photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eafdd996c8e55a9c52d6921c105e9cacf019150d GIT binary patch literal 5747 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 IAR9CLUqz_$)Bpeg literal 0 HcmV?d00001 diff --git a/register/090601/images/tagzania.gif b/register/090601/images/tagzania.gif new file mode 100755 index 0000000000000000000000000000000000000000..ca8c02f8ff5bb881fcc965fdfe0ccbbf306fbdd3 GIT binary patch literal 2533 zcmd6k=~q*C0ziK+?`2QOBWyuHU&10N3L# z0GLcBqtV#h+$F){J}{ris}Ki<1{udA!;-Me?so;|yI z_3E8FcW&Icar^e|j*gD0sj0!i!S?p{fq{Yk{{A;_-rT%-(_*o7c6N@Aj`sESUB7<) z#fuk1Lqn63lh2<&Z)Nnw~Z_H#amiG`F-E42G7Lmf6`^@PCi+1MJxc17K?VW_H2Q}G1?**H_za6hK6jnx^ib2 zqM$*STMg*4eEN-i4ZJ z#vz1i=blaD!~uw7((Gh>{zBF(ZwrOTm-_XV(AV z8Z~J(UR%Z6A+6K9Ln1Ek+{q^;j=e001+#o#+`ejIP?&#Q2o{^B`SxtCeO*%{L&>B% z3cS-$`N@$JRM+DR0o3>(*B@fD%9qX#14NgQ9vmgo==J zmwIX|VdQT;YfQidSlRwKp@#~Ya(E3MKwxd4bE$ho+u|ccHtgjf!~katnCrt?bvS+l zbt8mC@#{U2(#(S_#$dcg%fTXyJwW6gTUara18xcDx4u#&r zOqAIz@AoUd6EZ?!2v!FQaC){Bf1t^!C3ry4q#1i*_>O1Pw4h3U_T=2>QJL_wer zuRq_*@Hv|Q@8t0V-)xT@DWpUzQUEU`iNY(OP8vl$L94;3{1EvNwVkh0Z)Pe$7cD1E zOy=46>jiK?^klIx&@$#GqWLcebdPv#CAPOU1xkjx6vS*3AoMRT=Ts=%`F>d_2`&dE z!AJpA2Qh_u5YKnlU>7(pi-V85|BC|tDSSu6B>Yj!TRlb;WX163pk#9vJcCCISp?cg zUAxDT4BhaPfBi9yG?HL1Y?0P8zTR4P`uA*nD1r0(0QyRFFv^R=TbbbhHQ&cIF#&wf zSNz!c>S}ol)nMrwMr*KK z5={vyLpU-;TbRg(^!EAn#0RgA*>Tk$MK%Rz*>83W7bV>JE)UV%?l4$3`5Eu~rb)lt z6*1zPxns_7*Fa4Kp=2f@9|0s^uc&T!7JW0`q3n|BiAyW#5uX}LR8h-A+fb`xq=LxT zAG+$1rc3@cojgR7tpq5`x7uU_Ue0F}My7s-FurV*UAQ2*QUSyz1U+X=WwNdKRYkgP z*88iuDSlpNcZ7BG{O1`Ql86)=$2_bQr%aM+t|}Q15pyM0?3Z!x;oZwuF*aMnk?<+P zh7f~u4x^M!QO?|AdH8dC0J478uy!lTfAg%QNdPUeh*X|{tki6*RP7oV;6dt8zpBTf z@A}kVcqPtK-ws0&G+Pyflk`olu8f0Aqa+4mi<7K?m!&u-k;}Ju%ID7e87LE%iQr{@ zBRs^Yk{9XY^9dzKDu*|g5D*7c@(y(pm4!Pf+%cSdxT|>z&7N2bgo{>v79b;#f#Tf*Ph~VjxhH9usKIPmb|k{;+Y=P4((#I zd~7fXTx8DU%Df%U%mnCmU$pbG(u1SS$N5^kY+W%voVufB-{p&Tv0-7%v^u~Rk1c}_ zOQ`G3$}G&dd!K?7IaL6mjzP~~G zkjGmE^ORC_Yxc`!8cwPlI1QdV;N8&$JHr^JpkgvSX;1{-R}`kTvKIA`~np5BDM;0GWfX*0hc4#L+$7y z{~=sLVddeli{S@Od6@oLR z52K-=2@SL&jL#OAA}hc6#&)q-!rIVq&!rkCGuN1qdu1BOj45bm{}Oh*Ugc^zOI + + + State Of The Map 2009 - Register + + + + + + + + +

+ +
+

The State of the Map 2009 will feature talks and workshops from the leading members of the OpenStreetMap community. You'll have the opportunity to hear at first hand from the people who make the maps, write the code and lead the rapidly growing community of worldwide mappers.

+
+

Previous speakers have included:

+
+ + +
+
+
+ Steve Coast +

Steve Coast

+

Founder of OpenStreetMap
Chairman of the OpenStreetMap Foundation

+
+
+ Mikel Maron +

Mikel Maron

+

OpenStreetMap Foundation
Freelance Geo Warrior

+
+
+ Muki Haklay +

Muki Haklay

+

Department of Civil, Environmental
and Geomatic Engineering,
University College London

+
+
+ Ed Parsons +

Ed Parsons

+

Geospatial Evangelist
Google Inc

+
+
+ Sean Phelan +

Sean Phelan

+

Founder, Multimap

+
+
+ Sean Gorman +

Sean Gorman

+

CEO, FortiusOne

+
+
+ Jordan Hatcher +

Jordan Hatcher

+

Open Data Commons,
Open Knowledge Foundation

+
+
+ Richard Fairhurst +

Richard Fairhurst

+

Cartographer and OSM Developer

+
+
+ Andy Allan +

Andy Allan

+

OpenCycleMap Founder,
OSM Server Developer

+
+
+ Andy Robinson +

Andy Robinson

+

OpenStreetMap Foundation Board

+
+
+ Steve Coast +

Steve Coast

+

Founder of OpenStreetMap
Chairman of the OpenStreetMap Foundation

+
+
+ Mikel Maron +

Mikel Maron

+

OpenStreetMap Foundation
Freelance Geo Warrior

+
+
+
+
+

This year's conference themes:

+
    +
  • OSM 2011 — How do we take OpenStreetMap from 100,000 to 1,000,000 contributors?
  • +
  • New Mapping Frontiers — Learn how OpenStreetMap is expanding into new communities, new regions and mapping new features.
  • +
  • OpenStreetMap Application Development — Hear about the latest and greatest applications developed by the OpenStreetMap community.
  • +
  • Tools Tips and Techniques — Get expert advice from the people who created the tools! Learn about editors, map renderers and more.
  • +
+
    +
  • Find out about the latest developments in the OpenStreetMap world
  • +
  • Get tips on using OpenStreetMap data and tools in your projects
  • +
  • Relax and socialize in a friendly atmosphere with like minded mappers from around the world
  • +
+

State of the Map Sponsors:

+

+ CloudMade + AND + Knowledge for business + ITO + Nestoria + Tagzania Services +

+
+ +
+ + + + + diff --git a/register/090601/javascript/prototype.js b/register/090601/javascript/prototype.js new file mode 100755 index 0000000..6385503 --- /dev/null +++ b/register/090601/javascript/prototype.js @@ -0,0 +1,4221 @@ +/* Prototype JavaScript framework, version 1.6.0.2 + * (c) 2005-2008 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.6.0.2', + + Browser: { + IE: !!(window.attachEvent && !window.opera), + Opera: !!window.opera, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div').__proto__ && + document.createElement('div').__proto__ !== + document.createElement('form').__proto__ + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + + +/* Based on Alex Arnell's inheritance implementation. */ +var Class = { + create: function() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + var subclass = function() { }; + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0; i < properties.length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + + return klass; + } +}; + +Class.Methods = { + addMethods: function(source) { + var ancestor = this.superclass && this.superclass.prototype; + var properties = Object.keys(source); + + if (!Object.keys({ toString: true }).length) + properties.push("toString", "valueOf"); + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames().first() == "$super") { + var method = value, value = Object.extend((function(m) { + return function() { return ancestor[m].apply(this, arguments) }; + })(property).wrap(method), { + valueOf: function() { return method }, + toString: function() { return method.toString() } + }); + } + this.prototype[property] = value; + } + + return this; + } +}; + +var Abstract = { }; + +Object.extend = function(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; +}; + +Object.extend(Object, { + inspect: function(object) { + try { + if (Object.isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + toJSON: function(object) { + var type = typeof object; + switch (type) { + case 'undefined': + case 'function': + case 'unknown': return; + case 'boolean': return object.toString(); + } + + if (object === null) return 'null'; + if (object.toJSON) return object.toJSON(); + if (Object.isElement(object)) return; + + var results = []; + for (var property in object) { + var value = Object.toJSON(object[property]); + if (!Object.isUndefined(value)) + results.push(property.toJSON() + ': ' + value); + } + + return '{' + results.join(', ') + '}'; + }, + + toQueryString: function(object) { + return $H(object).toQueryString(); + }, + + toHTML: function(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({ }, object); + }, + + isElement: function(object) { + return object && object.nodeType == 1; + }, + + isArray: function(object) { + return object != null && typeof object == "object" && + 'splice' in object && 'join' in object; + }, + + isHash: function(object) { + return object instanceof Hash; + }, + + isFunction: function(object) { + return typeof object == "function"; + }, + + isString: function(object) { + return typeof object == "string"; + }, + + isNumber: function(object) { + return typeof object == "number"; + }, + + isUndefined: function(object) { + return typeof object == "undefined"; + } +}); + +Object.extend(Function.prototype, { + argumentNames: function() { + var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); + return names.length == 1 && !names[0] ? [] : names; + }, + + bind: function() { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } + }, + + bindAsEventListener: function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + } + }, + + curry: function() { + if (!arguments.length) return this; + var __method = this, args = $A(arguments); + return function() { + return __method.apply(this, args.concat($A(arguments))); + } + }, + + delay: function() { + var __method = this, args = $A(arguments), timeout = args.shift() * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + }, + + wrap: function(wrapper) { + var __method = this; + return function() { + return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); + } + }, + + methodize: function() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + return __method.apply(null, [this].concat($A(arguments))); + }; + } +}); + +Function.prototype.defer = Function.prototype.delay.curry(0.01); + +Date.prototype.toJSON = function() { + return '"' + this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z"'; +}; + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + } finally { + this.currentlyExecuting = false; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var self = arguments.callee; + self.text.data = this; + return self.div.innerHTML; + }, + + unescapeHTML: function() { + var div = new Element('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()); + var value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + times: function(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { + var character = String.specialChar[match[0]]; + return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + }, + + toJSON: function() { + return this.inspect(true); + }, + + unfilterJSON: function(filter) { + return this.sub(filter || Prototype.JSONFilter, '#{1}'); + }, + + isJSON: function() { + var str = this; + if (str.blank()) return false; + str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); + }, + + evalJSON: function(sanitize) { + var json = this.unfilterJSON(); + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + }, + + include: function(pattern) { + return this.indexOf(pattern) > -1; + }, + + startsWith: function(pattern) { + return this.indexOf(pattern) === 0; + }, + + endsWith: function(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.lastIndexOf(pattern) === d; + }, + + empty: function() { + return this == ''; + }, + + blank: function() { + return /^\s*$/.test(this); + }, + + interpolate: function(object, pattern) { + return new Template(this, pattern).evaluate(object); + } +}); + +if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { + escapeHTML: function() { + return this.replace(/&/g,'&').replace(//g,'>'); + }, + unescapeHTML: function() { + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +}; + +String.prototype.parseQuery = String.prototype.toQueryParams; + +Object.extend(String.prototype.escapeHTML, { + div: document.createElement('div'), + text: document.createTextNode('') +}); + +with (String.prototype.escapeHTML) div.appendChild(text); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return ''; + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3]; + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = { + each: function(iterator, context) { + var index = 0; + iterator = iterator.bind(context); + try { + this._each(function(value) { + iterator(value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + }, + + all: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator(value, index)); + }); + return results; + }, + + detect: function(iterator, context) { + iterator = iterator.bind(context); + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(filter, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(filter); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator(value, index)); + }); + return results; + }, + + include: function(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator, context) { + iterator = iterator.bind(context); + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == null || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == null || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator, context) { + iterator = iterator.bind(context); + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +}; + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + filter: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray, + every: Enumerable.all, + some: Enumerable.any +}); +function $A(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + +if (Prototype.Browser.WebKit) { + $A = function(iterable) { + if (!iterable) return []; + if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && + iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; + }; +} + +Array.from = $A; + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(Object.isArray(value) ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + }, + + intersect: function(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + }, + + toJSON: function() { + var results = []; + this.each(function(object) { + var value = Object.toJSON(object); + if (!Object.isUndefined(value)) results.push(value); + }); + return '[' + results.join(', ') + ']'; + } +}); + +// use native browser JS 1.6 implementation if available +if (Object.isFunction(Array.prototype.forEach)) + Array.prototype._each = Array.prototype.forEach; + +if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; +}; + +if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; +}; + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if (Prototype.Browser.Opera){ + Array.prototype.concat = function() { + var array = []; + for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for (var i = 0, length = arguments.length; i < length; i++) { + if (Object.isArray(arguments[i])) { + for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + }; +} +Object.extend(Number.prototype, { + toColorPart: function() { + return this.toPaddedString(2, 16); + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + }, + + toPaddedString: function(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + }, + + toJSON: function() { + return isFinite(this) ? this.toString() : 'null'; + } +}); + +$w('abs round ceil floor').each(function(method){ + Number.prototype[method] = Math[method].methodize(); +}); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + return { + initialize: function(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + }, + + _each: function(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + set: function(key, value) { + return this._object[key] = value; + }, + + get: function(key) { + return this._object[key]; + }, + + unset: function(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + }, + + toObject: function() { + return Object.clone(this._object); + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + index: function(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + }, + + merge: function(object) { + return this.clone().update(object); + }, + + update: function(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + }, + + toQueryString: function() { + return this.map(function(pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return values.map(toQueryPair.curry(key)).join('&'); + } + return toQueryPair(key, values); + }).join('&'); + }, + + inspect: function() { + return '#'; + }, + + toJSON: function() { + return Object.toJSON(this.toObject()); + }, + + clone: function() { + return new Hash(this); + } + } +})()); + +Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; +Hash.from = $H; +var ObjectRange = Class.create(Enumerable, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); + +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isString(this.options.parameters)) + this.options.parameters = this.options.parameters.toQueryParams(); + else if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); + +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.clone(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + this.parameters = params; + + if (params = Object.toQueryString(params)) { + // when GET, append parameters to URL + if (this.method == 'get') + this.url += (this.url.include('?') ? '&' : '?') + params; + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + params += '&_='; + } + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300); + }, + + getStatus: function() { + try { + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if(readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + // DOM level 2 ECMAScript Language Binding + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + +(function() { + var element = this.Element; + this.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + if (Prototype.Browser.IE && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); + }; + Object.extend(this.Element, element || { }); +}).call(window); + +Element.cache = { }; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + content = Object.toHTML(content); + element.innerHTML = content.stripScripts(); + content.evalScripts.bind(content).defer(); + return element; + }, + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, insert, tagName, childNodes; + + for (var position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + insert = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + insert(element, content); + continue; + } + + content = Object.toHTML(content); + + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position == 'top' || position == 'after') childNodes.reverse(); + childNodes.each(insert.curry(element)); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $(element).select("*"); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (Object.isString(selector)) + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = element.ancestors(); + return Object.isNumber(expression) ? ancestors[expression] : + Selector.findElement(ancestors, expression, index); + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? element.descendants()[expression] : + element.select(expression)[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); + var previousSiblings = element.previousSiblings(); + return Object.isNumber(expression) ? previousSiblings[expression] : + Selector.findElement(previousSiblings, expression, index); + }, + + next: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); + var nextSiblings = element.nextSiblings(); + return Object.isNumber(expression) ? nextSiblings[expression] : + Selector.findElement(nextSiblings, expression, index); + }, + + select: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + adjacent: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element.parentNode, args).without(element); + }, + + identify: function(element) { + element = $(element); + var id = element.readAttribute('id'), self = arguments.callee; + if (id) return id; + do { id = 'anonymous_element_' + self.counter++ } while ($(id)); + element.writeAttribute('id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = Object.isUndefined(value) ? true : value; + + for (var attr in attributes) { + name = t.names[attr] || attr; + value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!element.hasClassName(className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return element[element.hasClassName(className) ? + 'removeClassName' : 'addClassName'](className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + var originalAncestor = ancestor; + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (element.sourceIndex && !Prototype.Browser.Opera) { + var e = element.sourceIndex, a = ancestor.sourceIndex, + nextAncestor = ancestor.nextSibling; + if (!nextAncestor) { + do { ancestor = ancestor.parentNode; } + while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); + } + if (nextAncestor && nextAncestor.sourceIndex) + return (e > a && e < nextAncestor.sourceIndex); + } + + while (element = element.parentNode) + if (element == originalAncestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = element.cumulativeOffset(); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (element.tagName == 'BODY') break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + absolutize: function(element) { + element = $(element); + if (element.getStyle('position') == 'absolute') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + var offsets = element.positionedOffset(); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + return element; + }, + + relativize: function(element) { + element = $(element); + if (element.getStyle('position') == 'relative') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + return element; + }, + + cumulativeScrollOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + getOffsetParent: function(element) { + if (element.offsetParent) return $(element.offsetParent); + if (element == document.body) return $(element); + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return $(element); + + return $(document.body); + }, + + viewportOffset: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && + Element.getStyle(element, 'position') == 'absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!Prototype.Browser.Opera || element.tagName == 'BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return Element._returnOffset(valueL, valueT); + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + // find page position of source + source = $(source); + var p = source.viewportOffset(); + + // find coordinate system to use + element = $(element); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { + parent = element.getOffsetParent(); + delta = parent.viewportOffset(); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Element.Methods.identify.counter = 1; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (Prototype.Browser.Opera) { + Element.Methods.getStyle = Element.Methods.getStyle.wrap( + function(proceed, element, style) { + switch (style) { + case 'left': case 'top': case 'right': case 'bottom': + if (proceed(element, 'position') === 'static') return null; + case 'height': case 'width': + // returns '0px' for hidden elements; we want it to return null + if (!Element.visible(element)) return null; + + // returns the border-box dimensions rather than the content-box + // dimensions, so we subtract padding and borders from the value + var dim = parseInt(proceed(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + var properties; + if (style === 'height') { + properties = ['border-top-width', 'padding-top', + 'padding-bottom', 'border-bottom-width']; + } + else { + properties = ['border-left-width', 'padding-left', + 'padding-right', 'border-right-width']; + } + return properties.inject(dim, function(memo, property) { + var val = proceed(element, property); + return val === null ? memo : memo - parseInt(val, 10); + }) + 'px'; + default: return proceed(element, style); + } + } + ); + + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( + function(proceed, element, attribute) { + if (attribute === 'title') return element.title; + return proceed(element, attribute); + } + ); +} + +else if (Prototype.Browser.IE) { + // IE doesn't report offsets correctly for static elements, so we change them + // to "relative" to get the values, then change them back. + Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + $w('positionedOffset viewportOffset').each(function(method) { + Element.Methods[method] = Element.Methods[method].wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + // Trigger hasLayout on the offset parent so that IE6 reports + // accurate offsetTop and offsetLeft values for position: fixed. + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + offsetParent.setStyle({ zoom: 1 }); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + }); + + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = { + read: { + names: { + 'class': 'className', + 'for': 'htmlFor' + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: function(element, attribute) { + attribute = element.getAttribute(attribute); + return attribute ? attribute.toString().slice(23, -2) : null; + }, + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + + Element._attributeTranslations.write = { + names: Object.extend({ + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr, + src: v._getAttr, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if(element.tagName == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; + + // Safari returns margins on body which is incorrect if the child is absolutely + // positioned. For performance reasons, redefine Element#cumulativeOffset for + // KHTML/WebKit only. + Element.Methods.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return Element._returnOffset(valueL, valueT); + }; +} + +if (Prototype.Browser.IE || Prototype.Browser.Opera) { + // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements + Element.Methods.update = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName in Element._insertionTranslations.tags) { + $A(element.childNodes).each(function(node) { element.removeChild(node) }); + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { element.appendChild(node) }); + } + else element.innerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +if ('outerHTML' in document.createElement('div')) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(); + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html) { + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + if (t) { + div.innerHTML = t[0] + html + t[1]; + t[2].times(function() { div = div.firstChild }); + } else div.innerHTML = html; + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + tags: { + TABLE: ['', '
', 1], + TBODY: ['', '
', 2], + TR: ['', '
', 3], + TD: ['
', '
', 4], + SELECT: ['', 1] + } +}; + +(function() { + Object.extend(this.tags, { + THEAD: this.tags.TBODY, + TFOOT: this.tags.TBODY, + TH: this.tags.TD + }); +}).call(Element._insertionTranslations); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return node && node.specified; + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +if (!Prototype.BrowserFeatures.ElementExtensions && + document.createElement('div').__proto__) { + window.HTMLElement = { }; + window.HTMLElement.prototype = document.createElement('div').__proto__; + Prototype.BrowserFeatures.ElementExtensions = true; +} + +Element.extend = (function() { + if (Prototype.BrowserFeatures.SpecificElementExtensions) + return Prototype.K; + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || element._extendedByPrototype || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName, property, value; + + // extend methods for specific tags + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + for (property in methods) { + value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + // extend methods for all tags (Safari doesn't need this) + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +Element.hasAttribute = function(element, attribute) { + if (element.hasAttribute) return element.hasAttribute(attribute); + return Element.Methods.Simulated.hasAttribute(element, attribute); +}; + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + window[klass] = { }; + window[klass].prototype = document.createElement(tagName).__proto__; + return window[klass]; + } + + if (F.ElementExtensions) { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + +document.viewport = { + getDimensions: function() { + var dimensions = { }; + var B = Prototype.Browser; + $w('width height').each(function(d) { + var D = d.capitalize(); + dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] : + (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D]; + }); + return dimensions; + }, + + getWidth: function() { + return this.getDimensions().width; + }, + + getHeight: function() { + return this.getDimensions().height; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; +/* Portions of the Selector class are derived from Jack Slocum’s DomQuery, + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style + * license. Please see http://www.yui-ext.com/ for more information. */ + +var Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + this.compileMatcher(); + }, + + shouldUseXPath: function() { + if (!Prototype.BrowserFeatures.XPath) return false; + + var e = this.expression; + + // Safari 3 chokes on :*-of-type and :empty + if (Prototype.Browser.WebKit && + (e.include("-of-type") || e.include(":empty"))) + return false; + + // XPath can't do namespaced attributes, nor can it read + // the "checked" property from DOM nodes + if ((/(\[[\w-]*?:|:checked)/).test(this.expression)) + return false; + + return true; + }, + + compileMatcher: function() { + if (this.shouldUseXPath()) + return this.compileXPathMatcher(); + + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, + c = Selector.criteria, le, p, m; + + if (Selector._cache[e]) { + this.matcher = Selector._cache[e]; + return; + } + + this.matcher = ["this.matcher = function(root) {", + "var r = root, h = Selector.handlers, c = false, n;"]; + + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : + new Template(c[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.matcher.push("return h.unique(n);\n}"); + eval(this.matcher.join('\n')); + Selector._cache[this.expression] = this.matcher; + }, + + compileXPathMatcher: function() { + var e = this.expression, ps = Selector.patterns, + x = Selector.xpath, le, m; + + if (Selector._cache[e]) { + this.xpath = Selector._cache[e]; return; + } + + this.matcher = ['.//*']; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + if (m = e.match(ps[i])) { + this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : + new Template(x[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.xpath = this.matcher.join(''); + Selector._cache[this.expression] = this.xpath; + }, + + findElements: function(root) { + root = root || document; + if (this.xpath) return document._getElementsByXPath(this.xpath, root); + return this.matcher(root); + }, + + match: function(element) { + this.tokens = []; + + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; + var le, p, m; + + while (e && le !== e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + // use the Selector.assertions methods unless the selector + // is too complex. + if (as[i]) { + this.tokens.push([i, Object.clone(m)]); + e = e.replace(m[0], ''); + } else { + // reluctantly do a document-wide search + // and look for a match in the array + return this.findElements(document).include(element); + } + } + } + } + + var match = true, name, matches; + for (var i = 0, token; token = this.tokens[i]; i++) { + name = token[0], matches = token[1]; + if (!Selector.assertions[name](element, matches)) { + match = false; break; + } + } + + return match; + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } +}); + +Object.extend(Selector, { + _cache: { }, + + xpath: { + descendant: "//*", + child: "/*", + adjacent: "/following-sibling::*[1]", + laterSibling: '/following-sibling::*', + tagName: function(m) { + if (m[1] == '*') return ''; + return "[local-name()='" + m[1].toLowerCase() + + "' or local-name()='" + m[1].toUpperCase() + "']"; + }, + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", + id: "[@id='#{1}']", + attrPresence: function(m) { + m[1] = m[1].toLowerCase(); + return new Template("[@#{1}]").evaluate(m); + }, + attr: function(m) { + m[1] = m[1].toLowerCase(); + m[3] = m[5] || m[6]; + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); + }, + pseudo: function(m) { + var h = Selector.xpath.pseudos[m[1]]; + if (!h) return ''; + if (Object.isFunction(h)) return h(m); + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); + }, + operators: { + '=': "[@#{1}='#{3}']", + '!=': "[@#{1}!='#{3}']", + '^=': "[starts-with(@#{1}, '#{3}')]", + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", + '*=': "[contains(@#{1}, '#{3}')]", + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" + }, + pseudos: { + 'first-child': '[not(preceding-sibling::*)]', + 'last-child': '[not(following-sibling::*)]', + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', + 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", + 'checked': "[@checked]", + 'disabled': "[@disabled]", + 'enabled': "[not(@disabled)]", + 'not': function(m) { + var e = m[6], p = Selector.patterns, + x = Selector.xpath, le, v; + + var exclusion = []; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in p) { + if (m = e.match(p[i])) { + v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); + e = e.replace(m[0], ''); + break; + } + } + } + return "[not(" + exclusion.join(" and ") + ")]"; + }, + 'nth-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); + }, + 'nth-last-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); + }, + 'nth-of-type': function(m) { + return Selector.xpath.pseudos.nth("position() ", m); + }, + 'nth-last-of-type': function(m) { + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); + }, + 'first-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); + }, + 'last-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); + }, + 'only-of-type': function(m) { + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); + }, + nth: function(fragment, m) { + var mm, formula = m[6], predicate; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + if (mm = formula.match(/^(\d+)$/)) // digit only + return '[' + fragment + "= " + mm[1] + ']'; + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (mm[1] == "-") mm[1] = -1; + var a = mm[1] ? Number(mm[1]) : 1; + var b = mm[2] ? Number(mm[2]) : 0; + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + + "((#{fragment} - #{b}) div #{a} >= 0)]"; + return new Template(predicate).evaluate({ + fragment: fragment, a: a, b: b }); + } + } + } + }, + + criteria: { + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', + className: 'n = h.className(n, r, "#{1}", c); c = false;', + id: 'n = h.id(n, r, "#{1}", c); c = false;', + attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', + attr: function(m) { + m[3] = (m[5] || m[6]); + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); + }, + pseudo: function(m) { + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); + }, + descendant: 'c = "descendant";', + child: 'c = "child";', + adjacent: 'c = "adjacent";', + laterSibling: 'c = "laterSibling";' + }, + + patterns: { + // combinators must be listed first + // (and descendant needs to be last combinator) + laterSibling: /^\s*~\s*/, + child: /^\s*>\s*/, + adjacent: /^\s*\+\s*/, + descendant: /^\s/, + + // selectors follow + tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, + id: /^#([\w\-\*]+)(\b|$)/, + className: /^\.([\w\-\*]+)(\b|$)/, + pseudo: +/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, + attrPresence: /^\[([\w]+)\]/, + attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ + }, + + // for Selector.match and Element#match + assertions: { + tagName: function(element, matches) { + return matches[1].toUpperCase() == element.tagName.toUpperCase(); + }, + + className: function(element, matches) { + return Element.hasClassName(element, matches[1]); + }, + + id: function(element, matches) { + return element.id === matches[1]; + }, + + attrPresence: function(element, matches) { + return Element.hasAttribute(element, matches[1]); + }, + + attr: function(element, matches) { + var nodeValue = Element.readAttribute(element, matches[1]); + return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); + } + }, + + handlers: { + // UTILITY FUNCTIONS + // joins two collections + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + a.push(node); + return a; + }, + + // marks an array of nodes for counting + mark: function(nodes) { + var _true = Prototype.emptyFunction; + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = _true; + return nodes; + }, + + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = undefined; + return nodes; + }, + + // mark each child node with its position (for nth calls) + // "ofType" flag indicates whether we're indexing for nth-of-type + // rather than nth-child + index: function(parentNode, reverse, ofType) { + parentNode._countedByPrototype = Prototype.emptyFunction; + if (reverse) { + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { + var node = nodes[i]; + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + } else { + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + }, + + // filters out duplicates and extends all nodes + unique: function(nodes) { + if (nodes.length == 0) return nodes; + var results = [], n; + for (var i = 0, l = nodes.length; i < l; i++) + if (!(n = nodes[i])._countedByPrototype) { + n._countedByPrototype = Prototype.emptyFunction; + results.push(Element.extend(n)); + } + return Selector.handlers.unmark(results); + }, + + // COMBINATOR FUNCTIONS + descendant: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName('*')); + return results; + }, + + child: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) { + for (var j = 0, child; child = node.childNodes[j]; j++) + if (child.nodeType == 1 && child.tagName != '!') results.push(child); + } + return results; + }, + + adjacent: function(nodes) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + var next = this.nextElementSibling(node); + if (next) results.push(next); + } + return results; + }, + + laterSibling: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, Element.nextSiblings(node)); + return results; + }, + + nextElementSibling: function(node) { + while (node = node.nextSibling) + if (node.nodeType == 1) return node; + return null; + }, + + previousElementSibling: function(node) { + while (node = node.previousSibling) + if (node.nodeType == 1) return node; + return null; + }, + + // TOKEN FUNCTIONS + tagName: function(nodes, root, tagName, combinator) { + var uTagName = tagName.toUpperCase(); + var results = [], h = Selector.handlers; + if (nodes) { + if (combinator) { + // fastlane for ordinary descendant combinators + if (combinator == "descendant") { + for (var i = 0, node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName(tagName)); + return results; + } else nodes = this[combinator](nodes); + if (tagName == "*") return nodes; + } + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName.toUpperCase() === uTagName) results.push(node); + return results; + } else return root.getElementsByTagName(tagName); + }, + + id: function(nodes, root, id, combinator) { + var targetNode = $(id), h = Selector.handlers; + if (!targetNode) return []; + if (!nodes && root == document) return [targetNode]; + if (nodes) { + if (combinator) { + if (combinator == 'child') { + for (var i = 0, node; node = nodes[i]; i++) + if (targetNode.parentNode == node) return [targetNode]; + } else if (combinator == 'descendant') { + for (var i = 0, node; node = nodes[i]; i++) + if (Element.descendantOf(targetNode, node)) return [targetNode]; + } else if (combinator == 'adjacent') { + for (var i = 0, node; node = nodes[i]; i++) + if (Selector.handlers.previousElementSibling(targetNode) == node) + return [targetNode]; + } else nodes = h[combinator](nodes); + } + for (var i = 0, node; node = nodes[i]; i++) + if (node == targetNode) return [targetNode]; + return []; + } + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; + }, + + className: function(nodes, root, className, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + return Selector.handlers.byClassName(nodes, root, className); + }, + + byClassName: function(nodes, root, className) { + if (!nodes) nodes = Selector.handlers.descendant([root]); + var needle = ' ' + className + ' '; + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { + nodeClassName = node.className; + if (nodeClassName.length == 0) continue; + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) + results.push(node); + } + return results; + }, + + attrPresence: function(nodes, root, attr, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (Element.hasAttribute(node, attr)) results.push(node); + return results; + }, + + attr: function(nodes, root, attr, value, operator, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var handler = Selector.operators[operator], results = []; + for (var i = 0, node; node = nodes[i]; i++) { + var nodeValue = Element.readAttribute(node, attr); + if (nodeValue === null) continue; + if (handler(nodeValue, value)) results.push(node); + } + return results; + }, + + pseudo: function(nodes, name, value, root, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + if (!nodes) nodes = root.getElementsByTagName("*"); + return Selector.pseudos[name](nodes, value, root); + } + }, + + pseudos: { + 'first-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.previousElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'last-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.nextElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'only-child': function(nodes, value, root) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) + results.push(node); + return results; + }, + 'nth-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root); + }, + 'nth-last-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true); + }, + 'nth-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, false, true); + }, + 'nth-last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true, true); + }, + 'first-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, false, true); + }, + 'last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, true, true); + }, + 'only-of-type': function(nodes, formula, root) { + var p = Selector.pseudos; + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); + }, + + // handles the an+b logic + getIndices: function(a, b, total) { + if (a == 0) return b > 0 ? [b] : []; + return $R(1, total).inject([], function(memo, i) { + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); + return memo; + }); + }, + + // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type + nth: function(nodes, formula, root, reverse, ofType) { + if (nodes.length == 0) return []; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + var h = Selector.handlers, results = [], indexed = [], m; + h.mark(nodes); + for (var i = 0, node; node = nodes[i]; i++) { + if (!node.parentNode._countedByPrototype) { + h.index(node.parentNode, reverse, ofType); + indexed.push(node.parentNode); + } + } + if (formula.match(/^\d+$/)) { // just a number + formula = Number(formula); + for (var i = 0, node; node = nodes[i]; i++) + if (node.nodeIndex == formula) results.push(node); + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (m[1] == "-") m[1] = -1; + var a = m[1] ? Number(m[1]) : 1; + var b = m[2] ? Number(m[2]) : 0; + var indices = Selector.pseudos.getIndices(a, b, nodes.length); + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { + for (var j = 0; j < l; j++) + if (node.nodeIndex == indices[j]) results.push(node); + } + } + h.unmark(nodes); + h.unmark(indexed); + return results; + }, + + 'empty': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + // IE treats comments as element nodes + if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue; + results.push(node); + } + return results; + }, + + 'not': function(nodes, selector, root) { + var h = Selector.handlers, selectorType, m; + var exclusions = new Selector(selector).findElements(root); + h.mark(exclusions); + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node._countedByPrototype) results.push(node); + h.unmark(exclusions); + return results; + }, + + 'enabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node.disabled) results.push(node); + return results; + }, + + 'disabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.disabled) results.push(node); + return results; + }, + + 'checked': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.checked) results.push(node); + return results; + } + }, + + operators: { + '=': function(nv, v) { return nv == v; }, + '!=': function(nv, v) { return nv != v; }, + '^=': function(nv, v) { return nv.startsWith(v); }, + '$=': function(nv, v) { return nv.endsWith(v); }, + '*=': function(nv, v) { return nv.include(v); }, + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, + '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } + }, + + split: function(expression) { + var expressions = []; + expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { + expressions.push(m[1].strip()); + }); + return expressions; + }, + + matchElements: function(elements, expression) { + var matches = $$(expression), h = Selector.handlers; + h.mark(matches); + for (var i = 0, results = [], element; element = elements[i]; i++) + if (element._countedByPrototype) results.push(element); + h.unmark(matches); + return results; + }, + + findElement: function(elements, expression, index) { + if (Object.isNumber(expression)) { + index = expression; expression = false; + } + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + expressions = Selector.split(expressions.join(',')); + var results = [], h = Selector.handlers; + for (var i = 0, l = expressions.length, selector; i < l; i++) { + selector = new Selector(expressions[i].strip()); + h.concat(results, selector.findElements(element)); + } + return (l > 1) ? h.unique(results) : results; + } +}); + +if (Prototype.Browser.IE) { + Object.extend(Selector.handlers, { + // IE returns comment nodes on getElementsByTagName("*"). + // Filter them out. + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + if (node.tagName !== "!") a.push(node); + return a; + }, + + // IE improperly serializes _countedByPrototype in (inner|outer)HTML. + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node.removeAttribute('_countedByPrototype'); + return nodes; + } + }); +} + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit; + + var data = elements.inject({ }, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + if (key in result) { + // a key is already present; construct an array of values + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return options.hash ? data : Object.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.blur(); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element, value); + default: + return Form.Element.Serializers.textarea(element, value); + } + }, + + inputSelector: function(element, value) { + if (Object.isUndefined(value)) return element.checked ? element.value : null; + else element.checked = !!value; + }, + + textarea: function(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + }, + + select: function(element, index) { + if (Object.isUndefined(index)) + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + else { + var opt, value, single = !Object.isArray(index); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + value = this.optionValue(opt); + if (single) { + if (value == index) { + opt.selected = true; + return; + } + } + else opt.selected = index.include(value); + } + } + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +}; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) var Event = { }; + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: { }, + + relatedTarget: function(event) { + var element; + switch(event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } +}); + +Event.Methods = (function() { + var isButton; + + if (Prototype.Browser.IE) { + var buttonMap = { 0: 1, 1: 4, 2: 2 }; + isButton = function(event, code) { + return event.button == buttonMap[code]; + }; + + } else if (Prototype.Browser.WebKit) { + isButton = function(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 1 && event.metaKey; + default: return false; + } + }; + + } else { + isButton = function(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + }; + } + + return { + isLeftClick: function(event) { return isButton(event, 0) }, + isMiddleClick: function(event) { return isButton(event, 1) }, + isRightClick: function(event) { return isButton(event, 2) }, + + element: function(event) { + var node = Event.extend(event).target; + return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); + }, + + findElement: function(event, expression) { + var element = Event.element(event); + if (!expression) return element; + var elements = [element].concat(element.ancestors()); + return Selector.findElement(elements, expression, 0); + }, + + pointer: function(event) { + return { + x: event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)), + y: event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)) + }; + }, + + pointerX: function(event) { return Event.pointer(event).x }, + pointerY: function(event) { return Event.pointer(event).y }, + + stop: function(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + event.stopped = true; + } + }; +})(); + +Event.extend = (function() { + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (Prototype.Browser.IE) { + Object.extend(methods, { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return "[object Event]" } + }); + + return function(event) { + if (!event) return false; + if (event._extendedByPrototype) return event; + + event._extendedByPrototype = Prototype.emptyFunction; + var pointer = Event.pointer(event); + Object.extend(event, { + target: event.srcElement, + relatedTarget: Event.relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + return Object.extend(event, methods); + }; + + } else { + Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; + Object.extend(Event.prototype, methods); + return Prototype.K; + } +})(); + +Object.extend(Event, (function() { + var cache = Event.cache; + + function getEventID(element) { + if (element._prototypeEventID) return element._prototypeEventID[0]; + arguments.callee.id = arguments.callee.id || 1; + return element._prototypeEventID = [++arguments.callee.id]; + } + + function getDOMEventName(eventName) { + if (eventName && eventName.include(':')) return "dataavailable"; + return eventName; + } + + function getCacheForID(id) { + return cache[id] = cache[id] || { }; + } + + function getWrappersForEventName(id, eventName) { + var c = getCacheForID(id); + return c[eventName] = c[eventName] || []; + } + + function createWrapper(element, eventName, handler) { + var id = getEventID(element); + var c = getWrappersForEventName(id, eventName); + if (c.pluck("handler").include(handler)) return false; + + var wrapper = function(event) { + if (!Event || !Event.extend || + (event.eventName && event.eventName != eventName)) + return false; + + Event.extend(event); + handler.call(element, event); + }; + + wrapper.handler = handler; + c.push(wrapper); + return wrapper; + } + + function findWrapper(id, eventName, handler) { + var c = getWrappersForEventName(id, eventName); + return c.find(function(wrapper) { return wrapper.handler == handler }); + } + + function destroyWrapper(id, eventName, handler) { + var c = getCacheForID(id); + if (!c[eventName]) return false; + c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); + } + + function destroyCache() { + for (var id in cache) + for (var eventName in cache[id]) + cache[id][eventName] = null; + } + + if (window.attachEvent) { + window.attachEvent("onunload", destroyCache); + } + + return { + observe: function(element, eventName, handler) { + element = $(element); + var name = getDOMEventName(eventName); + + var wrapper = createWrapper(element, eventName, handler); + if (!wrapper) return element; + + if (element.addEventListener) { + element.addEventListener(name, wrapper, false); + } else { + element.attachEvent("on" + name, wrapper); + } + + return element; + }, + + stopObserving: function(element, eventName, handler) { + element = $(element); + var id = getEventID(element), name = getDOMEventName(eventName); + + if (!handler && eventName) { + getWrappersForEventName(id, eventName).each(function(wrapper) { + element.stopObserving(eventName, wrapper.handler); + }); + return element; + + } else if (!eventName) { + Object.keys(getCacheForID(id)).each(function(eventName) { + element.stopObserving(eventName); + }); + return element; + } + + var wrapper = findWrapper(id, eventName, handler); + if (!wrapper) return element; + + if (element.removeEventListener) { + element.removeEventListener(name, wrapper, false); + } else { + element.detachEvent("on" + name, wrapper); + } + + destroyWrapper(id, eventName, handler); + + return element; + }, + + fire: function(element, eventName, memo) { + element = $(element); + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent("HTMLEvents"); + event.initEvent("dataavailable", true, true); + } else { + event = document.createEventObject(); + event.eventType = "ondataavailable"; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) { + element.dispatchEvent(event); + } else { + element.fireEvent(event.eventType, event); + } + + return Event.extend(event); + } + }; +})()); + +Object.extend(Event, Event.Methods); + +Element.addMethods({ + fire: Event.fire, + observe: Event.observe, + stopObserving: Event.stopObserving +}); + +Object.extend(document, { + fire: Element.Methods.fire.methodize(), + observe: Element.Methods.observe.methodize(), + stopObserving: Element.Methods.stopObserving.methodize(), + loaded: false +}); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards and John Resig. */ + + var timer; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (timer) window.clearInterval(timer); + document.fire("dom:loaded"); + document.loaded = true; + } + + if (document.addEventListener) { + if (Prototype.Browser.WebKit) { + timer = window.setInterval(function() { + if (/loaded|complete/.test(document.readyState)) + fireContentLoadedEvent(); + }, 0); + + Event.observe(window, "load", fireContentLoadedEvent); + + } else { + document.addEventListener("DOMContentLoaded", + fireContentLoadedEvent, false); + } + + } else { + document.write(" + + + +
+ +
+

The State of the Map 2009 will feature talks and workshops from the leading members of the OpenStreetMap community. You'll have the opportunity to hear at first hand from the people who make the maps, write the code and lead the rapidly growing community of worldwide mappers.

+ +

Previous speakers have included:

+
+ + +
+
+
+ +

Steve Coast

+

Founder of OpenStreetMap
Chairman of the OpenStreetMap Foundation

+
+
+ +

Muki Haklay

+

Department of Civil, Environmental
and Geomatic Engineering,
University College London

+
+
+ +

Muki Haklay

+

Department of Civil, Environmental
and Geomatic Engineering,
University College London

+
+
+ +

Steve Coast

+

Founder of OpenStreetMap
Chairman of the OpenStreetMap Foundation

+
+
+ +

Muki Haklay

+

Department of Civil, Environmental
and Geomatic Engineering,
University College London

+
+
+ +

Steve Coast

+

Founder of OpenStreetMap
Chairman of the OpenStreetMap Foundation

+
+
+ +

Muki Haklay

+

Department of Civil, Environmental
and Geomatic Engineering,
University College London

+
+
+
+
+

This year's conference themes:

+
    +
  • OSM 2011 — How do we take OpenStreetMap from 100,000 to 1,000,000 contributors?
  • +
  • New Mapping Frontiers — Learn how OpenStreetMap is expanding into new communities, new regions and mapping new features.
  • +
  • OpenStreetMap Application Development — Hear about the latest and greatest applications developed by the OpenStreetMap community.
  • +
  • Tools Tips and Techniques — Get expert advice from the people who created the tools! Learn about editors, map renderers and more.
  • +
+
    +
  • Find out about the latest developments in the OpenStreetMap world
  • +
  • Get tips on using OpenStreetMap data and tools in your projects
  • +
  • Relax and socialize in a friendly atmosphere with like minded mappers from around the world
  • +
+

State of the Map Sponsors:

+

+ + + + + + +

+
+ +
+ + + + + diff --git a/register/090625/javascript/prototype.js b/register/090625/javascript/prototype.js new file mode 100644 index 0000000..6385503 --- /dev/null +++ b/register/090625/javascript/prototype.js @@ -0,0 +1,4221 @@ +/* Prototype JavaScript framework, version 1.6.0.2 + * (c) 2005-2008 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.6.0.2', + + Browser: { + IE: !!(window.attachEvent && !window.opera), + Opera: !!window.opera, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div').__proto__ && + document.createElement('div').__proto__ !== + document.createElement('form').__proto__ + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + + +/* Based on Alex Arnell's inheritance implementation. */ +var Class = { + create: function() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + var subclass = function() { }; + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0; i < properties.length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + + return klass; + } +}; + +Class.Methods = { + addMethods: function(source) { + var ancestor = this.superclass && this.superclass.prototype; + var properties = Object.keys(source); + + if (!Object.keys({ toString: true }).length) + properties.push("toString", "valueOf"); + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames().first() == "$super") { + var method = value, value = Object.extend((function(m) { + return function() { return ancestor[m].apply(this, arguments) }; + })(property).wrap(method), { + valueOf: function() { return method }, + toString: function() { return method.toString() } + }); + } + this.prototype[property] = value; + } + + return this; + } +}; + +var Abstract = { }; + +Object.extend = function(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; +}; + +Object.extend(Object, { + inspect: function(object) { + try { + if (Object.isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + toJSON: function(object) { + var type = typeof object; + switch (type) { + case 'undefined': + case 'function': + case 'unknown': return; + case 'boolean': return object.toString(); + } + + if (object === null) return 'null'; + if (object.toJSON) return object.toJSON(); + if (Object.isElement(object)) return; + + var results = []; + for (var property in object) { + var value = Object.toJSON(object[property]); + if (!Object.isUndefined(value)) + results.push(property.toJSON() + ': ' + value); + } + + return '{' + results.join(', ') + '}'; + }, + + toQueryString: function(object) { + return $H(object).toQueryString(); + }, + + toHTML: function(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({ }, object); + }, + + isElement: function(object) { + return object && object.nodeType == 1; + }, + + isArray: function(object) { + return object != null && typeof object == "object" && + 'splice' in object && 'join' in object; + }, + + isHash: function(object) { + return object instanceof Hash; + }, + + isFunction: function(object) { + return typeof object == "function"; + }, + + isString: function(object) { + return typeof object == "string"; + }, + + isNumber: function(object) { + return typeof object == "number"; + }, + + isUndefined: function(object) { + return typeof object == "undefined"; + } +}); + +Object.extend(Function.prototype, { + argumentNames: function() { + var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); + return names.length == 1 && !names[0] ? [] : names; + }, + + bind: function() { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } + }, + + bindAsEventListener: function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + } + }, + + curry: function() { + if (!arguments.length) return this; + var __method = this, args = $A(arguments); + return function() { + return __method.apply(this, args.concat($A(arguments))); + } + }, + + delay: function() { + var __method = this, args = $A(arguments), timeout = args.shift() * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + }, + + wrap: function(wrapper) { + var __method = this; + return function() { + return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); + } + }, + + methodize: function() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + return __method.apply(null, [this].concat($A(arguments))); + }; + } +}); + +Function.prototype.defer = Function.prototype.delay.curry(0.01); + +Date.prototype.toJSON = function() { + return '"' + this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z"'; +}; + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + } finally { + this.currentlyExecuting = false; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var self = arguments.callee; + self.text.data = this; + return self.div.innerHTML; + }, + + unescapeHTML: function() { + var div = new Element('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()); + var value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + times: function(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { + var character = String.specialChar[match[0]]; + return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + }, + + toJSON: function() { + return this.inspect(true); + }, + + unfilterJSON: function(filter) { + return this.sub(filter || Prototype.JSONFilter, '#{1}'); + }, + + isJSON: function() { + var str = this; + if (str.blank()) return false; + str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); + }, + + evalJSON: function(sanitize) { + var json = this.unfilterJSON(); + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + }, + + include: function(pattern) { + return this.indexOf(pattern) > -1; + }, + + startsWith: function(pattern) { + return this.indexOf(pattern) === 0; + }, + + endsWith: function(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.lastIndexOf(pattern) === d; + }, + + empty: function() { + return this == ''; + }, + + blank: function() { + return /^\s*$/.test(this); + }, + + interpolate: function(object, pattern) { + return new Template(this, pattern).evaluate(object); + } +}); + +if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { + escapeHTML: function() { + return this.replace(/&/g,'&').replace(//g,'>'); + }, + unescapeHTML: function() { + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +}; + +String.prototype.parseQuery = String.prototype.toQueryParams; + +Object.extend(String.prototype.escapeHTML, { + div: document.createElement('div'), + text: document.createTextNode('') +}); + +with (String.prototype.escapeHTML) div.appendChild(text); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return ''; + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3]; + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = { + each: function(iterator, context) { + var index = 0; + iterator = iterator.bind(context); + try { + this._each(function(value) { + iterator(value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + }, + + all: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator(value, index)); + }); + return results; + }, + + detect: function(iterator, context) { + iterator = iterator.bind(context); + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(filter, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(filter); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator(value, index)); + }); + return results; + }, + + include: function(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator, context) { + iterator = iterator.bind(context); + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == null || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == null || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator, context) { + iterator = iterator.bind(context); + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +}; + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + filter: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray, + every: Enumerable.all, + some: Enumerable.any +}); +function $A(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + +if (Prototype.Browser.WebKit) { + $A = function(iterable) { + if (!iterable) return []; + if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && + iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; + }; +} + +Array.from = $A; + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(Object.isArray(value) ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + }, + + intersect: function(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + }, + + toJSON: function() { + var results = []; + this.each(function(object) { + var value = Object.toJSON(object); + if (!Object.isUndefined(value)) results.push(value); + }); + return '[' + results.join(', ') + ']'; + } +}); + +// use native browser JS 1.6 implementation if available +if (Object.isFunction(Array.prototype.forEach)) + Array.prototype._each = Array.prototype.forEach; + +if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; +}; + +if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; +}; + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if (Prototype.Browser.Opera){ + Array.prototype.concat = function() { + var array = []; + for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for (var i = 0, length = arguments.length; i < length; i++) { + if (Object.isArray(arguments[i])) { + for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + }; +} +Object.extend(Number.prototype, { + toColorPart: function() { + return this.toPaddedString(2, 16); + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + }, + + toPaddedString: function(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + }, + + toJSON: function() { + return isFinite(this) ? this.toString() : 'null'; + } +}); + +$w('abs round ceil floor').each(function(method){ + Number.prototype[method] = Math[method].methodize(); +}); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + return { + initialize: function(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + }, + + _each: function(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + set: function(key, value) { + return this._object[key] = value; + }, + + get: function(key) { + return this._object[key]; + }, + + unset: function(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + }, + + toObject: function() { + return Object.clone(this._object); + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + index: function(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + }, + + merge: function(object) { + return this.clone().update(object); + }, + + update: function(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + }, + + toQueryString: function() { + return this.map(function(pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return values.map(toQueryPair.curry(key)).join('&'); + } + return toQueryPair(key, values); + }).join('&'); + }, + + inspect: function() { + return '#'; + }, + + toJSON: function() { + return Object.toJSON(this.toObject()); + }, + + clone: function() { + return new Hash(this); + } + } +})()); + +Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; +Hash.from = $H; +var ObjectRange = Class.create(Enumerable, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); + +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isString(this.options.parameters)) + this.options.parameters = this.options.parameters.toQueryParams(); + else if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); + +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.clone(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + this.parameters = params; + + if (params = Object.toQueryString(params)) { + // when GET, append parameters to URL + if (this.method == 'get') + this.url += (this.url.include('?') ? '&' : '?') + params; + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + params += '&_='; + } + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300); + }, + + getStatus: function() { + try { + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if(readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + // DOM level 2 ECMAScript Language Binding + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + +(function() { + var element = this.Element; + this.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + if (Prototype.Browser.IE && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); + }; + Object.extend(this.Element, element || { }); +}).call(window); + +Element.cache = { }; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + content = Object.toHTML(content); + element.innerHTML = content.stripScripts(); + content.evalScripts.bind(content).defer(); + return element; + }, + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, insert, tagName, childNodes; + + for (var position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + insert = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + insert(element, content); + continue; + } + + content = Object.toHTML(content); + + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position == 'top' || position == 'after') childNodes.reverse(); + childNodes.each(insert.curry(element)); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $(element).select("*"); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (Object.isString(selector)) + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = element.ancestors(); + return Object.isNumber(expression) ? ancestors[expression] : + Selector.findElement(ancestors, expression, index); + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? element.descendants()[expression] : + element.select(expression)[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); + var previousSiblings = element.previousSiblings(); + return Object.isNumber(expression) ? previousSiblings[expression] : + Selector.findElement(previousSiblings, expression, index); + }, + + next: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); + var nextSiblings = element.nextSiblings(); + return Object.isNumber(expression) ? nextSiblings[expression] : + Selector.findElement(nextSiblings, expression, index); + }, + + select: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + adjacent: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element.parentNode, args).without(element); + }, + + identify: function(element) { + element = $(element); + var id = element.readAttribute('id'), self = arguments.callee; + if (id) return id; + do { id = 'anonymous_element_' + self.counter++ } while ($(id)); + element.writeAttribute('id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = Object.isUndefined(value) ? true : value; + + for (var attr in attributes) { + name = t.names[attr] || attr; + value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!element.hasClassName(className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return element[element.hasClassName(className) ? + 'removeClassName' : 'addClassName'](className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + var originalAncestor = ancestor; + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (element.sourceIndex && !Prototype.Browser.Opera) { + var e = element.sourceIndex, a = ancestor.sourceIndex, + nextAncestor = ancestor.nextSibling; + if (!nextAncestor) { + do { ancestor = ancestor.parentNode; } + while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); + } + if (nextAncestor && nextAncestor.sourceIndex) + return (e > a && e < nextAncestor.sourceIndex); + } + + while (element = element.parentNode) + if (element == originalAncestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = element.cumulativeOffset(); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (element.tagName == 'BODY') break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + absolutize: function(element) { + element = $(element); + if (element.getStyle('position') == 'absolute') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + var offsets = element.positionedOffset(); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + return element; + }, + + relativize: function(element) { + element = $(element); + if (element.getStyle('position') == 'relative') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + return element; + }, + + cumulativeScrollOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + getOffsetParent: function(element) { + if (element.offsetParent) return $(element.offsetParent); + if (element == document.body) return $(element); + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return $(element); + + return $(document.body); + }, + + viewportOffset: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && + Element.getStyle(element, 'position') == 'absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!Prototype.Browser.Opera || element.tagName == 'BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return Element._returnOffset(valueL, valueT); + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + // find page position of source + source = $(source); + var p = source.viewportOffset(); + + // find coordinate system to use + element = $(element); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { + parent = element.getOffsetParent(); + delta = parent.viewportOffset(); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Element.Methods.identify.counter = 1; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (Prototype.Browser.Opera) { + Element.Methods.getStyle = Element.Methods.getStyle.wrap( + function(proceed, element, style) { + switch (style) { + case 'left': case 'top': case 'right': case 'bottom': + if (proceed(element, 'position') === 'static') return null; + case 'height': case 'width': + // returns '0px' for hidden elements; we want it to return null + if (!Element.visible(element)) return null; + + // returns the border-box dimensions rather than the content-box + // dimensions, so we subtract padding and borders from the value + var dim = parseInt(proceed(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + var properties; + if (style === 'height') { + properties = ['border-top-width', 'padding-top', + 'padding-bottom', 'border-bottom-width']; + } + else { + properties = ['border-left-width', 'padding-left', + 'padding-right', 'border-right-width']; + } + return properties.inject(dim, function(memo, property) { + var val = proceed(element, property); + return val === null ? memo : memo - parseInt(val, 10); + }) + 'px'; + default: return proceed(element, style); + } + } + ); + + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( + function(proceed, element, attribute) { + if (attribute === 'title') return element.title; + return proceed(element, attribute); + } + ); +} + +else if (Prototype.Browser.IE) { + // IE doesn't report offsets correctly for static elements, so we change them + // to "relative" to get the values, then change them back. + Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + $w('positionedOffset viewportOffset').each(function(method) { + Element.Methods[method] = Element.Methods[method].wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + // Trigger hasLayout on the offset parent so that IE6 reports + // accurate offsetTop and offsetLeft values for position: fixed. + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + offsetParent.setStyle({ zoom: 1 }); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + }); + + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = { + read: { + names: { + 'class': 'className', + 'for': 'htmlFor' + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: function(element, attribute) { + attribute = element.getAttribute(attribute); + return attribute ? attribute.toString().slice(23, -2) : null; + }, + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + + Element._attributeTranslations.write = { + names: Object.extend({ + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr, + src: v._getAttr, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if(element.tagName == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; + + // Safari returns margins on body which is incorrect if the child is absolutely + // positioned. For performance reasons, redefine Element#cumulativeOffset for + // KHTML/WebKit only. + Element.Methods.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return Element._returnOffset(valueL, valueT); + }; +} + +if (Prototype.Browser.IE || Prototype.Browser.Opera) { + // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements + Element.Methods.update = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName in Element._insertionTranslations.tags) { + $A(element.childNodes).each(function(node) { element.removeChild(node) }); + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { element.appendChild(node) }); + } + else element.innerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +if ('outerHTML' in document.createElement('div')) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(); + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html) { + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + if (t) { + div.innerHTML = t[0] + html + t[1]; + t[2].times(function() { div = div.firstChild }); + } else div.innerHTML = html; + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + tags: { + TABLE: ['', '
', 1], + TBODY: ['', '
', 2], + TR: ['', '
', 3], + TD: ['
', '
', 4], + SELECT: ['', 1] + } +}; + +(function() { + Object.extend(this.tags, { + THEAD: this.tags.TBODY, + TFOOT: this.tags.TBODY, + TH: this.tags.TD + }); +}).call(Element._insertionTranslations); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return node && node.specified; + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +if (!Prototype.BrowserFeatures.ElementExtensions && + document.createElement('div').__proto__) { + window.HTMLElement = { }; + window.HTMLElement.prototype = document.createElement('div').__proto__; + Prototype.BrowserFeatures.ElementExtensions = true; +} + +Element.extend = (function() { + if (Prototype.BrowserFeatures.SpecificElementExtensions) + return Prototype.K; + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || element._extendedByPrototype || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName, property, value; + + // extend methods for specific tags + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + for (property in methods) { + value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + // extend methods for all tags (Safari doesn't need this) + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +Element.hasAttribute = function(element, attribute) { + if (element.hasAttribute) return element.hasAttribute(attribute); + return Element.Methods.Simulated.hasAttribute(element, attribute); +}; + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + window[klass] = { }; + window[klass].prototype = document.createElement(tagName).__proto__; + return window[klass]; + } + + if (F.ElementExtensions) { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + +document.viewport = { + getDimensions: function() { + var dimensions = { }; + var B = Prototype.Browser; + $w('width height').each(function(d) { + var D = d.capitalize(); + dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] : + (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D]; + }); + return dimensions; + }, + + getWidth: function() { + return this.getDimensions().width; + }, + + getHeight: function() { + return this.getDimensions().height; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; +/* Portions of the Selector class are derived from Jack Slocum’s DomQuery, + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style + * license. Please see http://www.yui-ext.com/ for more information. */ + +var Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + this.compileMatcher(); + }, + + shouldUseXPath: function() { + if (!Prototype.BrowserFeatures.XPath) return false; + + var e = this.expression; + + // Safari 3 chokes on :*-of-type and :empty + if (Prototype.Browser.WebKit && + (e.include("-of-type") || e.include(":empty"))) + return false; + + // XPath can't do namespaced attributes, nor can it read + // the "checked" property from DOM nodes + if ((/(\[[\w-]*?:|:checked)/).test(this.expression)) + return false; + + return true; + }, + + compileMatcher: function() { + if (this.shouldUseXPath()) + return this.compileXPathMatcher(); + + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, + c = Selector.criteria, le, p, m; + + if (Selector._cache[e]) { + this.matcher = Selector._cache[e]; + return; + } + + this.matcher = ["this.matcher = function(root) {", + "var r = root, h = Selector.handlers, c = false, n;"]; + + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : + new Template(c[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.matcher.push("return h.unique(n);\n}"); + eval(this.matcher.join('\n')); + Selector._cache[this.expression] = this.matcher; + }, + + compileXPathMatcher: function() { + var e = this.expression, ps = Selector.patterns, + x = Selector.xpath, le, m; + + if (Selector._cache[e]) { + this.xpath = Selector._cache[e]; return; + } + + this.matcher = ['.//*']; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + if (m = e.match(ps[i])) { + this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : + new Template(x[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.xpath = this.matcher.join(''); + Selector._cache[this.expression] = this.xpath; + }, + + findElements: function(root) { + root = root || document; + if (this.xpath) return document._getElementsByXPath(this.xpath, root); + return this.matcher(root); + }, + + match: function(element) { + this.tokens = []; + + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; + var le, p, m; + + while (e && le !== e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + // use the Selector.assertions methods unless the selector + // is too complex. + if (as[i]) { + this.tokens.push([i, Object.clone(m)]); + e = e.replace(m[0], ''); + } else { + // reluctantly do a document-wide search + // and look for a match in the array + return this.findElements(document).include(element); + } + } + } + } + + var match = true, name, matches; + for (var i = 0, token; token = this.tokens[i]; i++) { + name = token[0], matches = token[1]; + if (!Selector.assertions[name](element, matches)) { + match = false; break; + } + } + + return match; + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } +}); + +Object.extend(Selector, { + _cache: { }, + + xpath: { + descendant: "//*", + child: "/*", + adjacent: "/following-sibling::*[1]", + laterSibling: '/following-sibling::*', + tagName: function(m) { + if (m[1] == '*') return ''; + return "[local-name()='" + m[1].toLowerCase() + + "' or local-name()='" + m[1].toUpperCase() + "']"; + }, + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", + id: "[@id='#{1}']", + attrPresence: function(m) { + m[1] = m[1].toLowerCase(); + return new Template("[@#{1}]").evaluate(m); + }, + attr: function(m) { + m[1] = m[1].toLowerCase(); + m[3] = m[5] || m[6]; + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); + }, + pseudo: function(m) { + var h = Selector.xpath.pseudos[m[1]]; + if (!h) return ''; + if (Object.isFunction(h)) return h(m); + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); + }, + operators: { + '=': "[@#{1}='#{3}']", + '!=': "[@#{1}!='#{3}']", + '^=': "[starts-with(@#{1}, '#{3}')]", + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", + '*=': "[contains(@#{1}, '#{3}')]", + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" + }, + pseudos: { + 'first-child': '[not(preceding-sibling::*)]', + 'last-child': '[not(following-sibling::*)]', + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', + 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", + 'checked': "[@checked]", + 'disabled': "[@disabled]", + 'enabled': "[not(@disabled)]", + 'not': function(m) { + var e = m[6], p = Selector.patterns, + x = Selector.xpath, le, v; + + var exclusion = []; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in p) { + if (m = e.match(p[i])) { + v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); + e = e.replace(m[0], ''); + break; + } + } + } + return "[not(" + exclusion.join(" and ") + ")]"; + }, + 'nth-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); + }, + 'nth-last-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); + }, + 'nth-of-type': function(m) { + return Selector.xpath.pseudos.nth("position() ", m); + }, + 'nth-last-of-type': function(m) { + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); + }, + 'first-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); + }, + 'last-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); + }, + 'only-of-type': function(m) { + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); + }, + nth: function(fragment, m) { + var mm, formula = m[6], predicate; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + if (mm = formula.match(/^(\d+)$/)) // digit only + return '[' + fragment + "= " + mm[1] + ']'; + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (mm[1] == "-") mm[1] = -1; + var a = mm[1] ? Number(mm[1]) : 1; + var b = mm[2] ? Number(mm[2]) : 0; + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + + "((#{fragment} - #{b}) div #{a} >= 0)]"; + return new Template(predicate).evaluate({ + fragment: fragment, a: a, b: b }); + } + } + } + }, + + criteria: { + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', + className: 'n = h.className(n, r, "#{1}", c); c = false;', + id: 'n = h.id(n, r, "#{1}", c); c = false;', + attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', + attr: function(m) { + m[3] = (m[5] || m[6]); + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); + }, + pseudo: function(m) { + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); + }, + descendant: 'c = "descendant";', + child: 'c = "child";', + adjacent: 'c = "adjacent";', + laterSibling: 'c = "laterSibling";' + }, + + patterns: { + // combinators must be listed first + // (and descendant needs to be last combinator) + laterSibling: /^\s*~\s*/, + child: /^\s*>\s*/, + adjacent: /^\s*\+\s*/, + descendant: /^\s/, + + // selectors follow + tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, + id: /^#([\w\-\*]+)(\b|$)/, + className: /^\.([\w\-\*]+)(\b|$)/, + pseudo: +/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, + attrPresence: /^\[([\w]+)\]/, + attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ + }, + + // for Selector.match and Element#match + assertions: { + tagName: function(element, matches) { + return matches[1].toUpperCase() == element.tagName.toUpperCase(); + }, + + className: function(element, matches) { + return Element.hasClassName(element, matches[1]); + }, + + id: function(element, matches) { + return element.id === matches[1]; + }, + + attrPresence: function(element, matches) { + return Element.hasAttribute(element, matches[1]); + }, + + attr: function(element, matches) { + var nodeValue = Element.readAttribute(element, matches[1]); + return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); + } + }, + + handlers: { + // UTILITY FUNCTIONS + // joins two collections + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + a.push(node); + return a; + }, + + // marks an array of nodes for counting + mark: function(nodes) { + var _true = Prototype.emptyFunction; + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = _true; + return nodes; + }, + + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = undefined; + return nodes; + }, + + // mark each child node with its position (for nth calls) + // "ofType" flag indicates whether we're indexing for nth-of-type + // rather than nth-child + index: function(parentNode, reverse, ofType) { + parentNode._countedByPrototype = Prototype.emptyFunction; + if (reverse) { + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { + var node = nodes[i]; + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + } else { + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + }, + + // filters out duplicates and extends all nodes + unique: function(nodes) { + if (nodes.length == 0) return nodes; + var results = [], n; + for (var i = 0, l = nodes.length; i < l; i++) + if (!(n = nodes[i])._countedByPrototype) { + n._countedByPrototype = Prototype.emptyFunction; + results.push(Element.extend(n)); + } + return Selector.handlers.unmark(results); + }, + + // COMBINATOR FUNCTIONS + descendant: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName('*')); + return results; + }, + + child: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) { + for (var j = 0, child; child = node.childNodes[j]; j++) + if (child.nodeType == 1 && child.tagName != '!') results.push(child); + } + return results; + }, + + adjacent: function(nodes) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + var next = this.nextElementSibling(node); + if (next) results.push(next); + } + return results; + }, + + laterSibling: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, Element.nextSiblings(node)); + return results; + }, + + nextElementSibling: function(node) { + while (node = node.nextSibling) + if (node.nodeType == 1) return node; + return null; + }, + + previousElementSibling: function(node) { + while (node = node.previousSibling) + if (node.nodeType == 1) return node; + return null; + }, + + // TOKEN FUNCTIONS + tagName: function(nodes, root, tagName, combinator) { + var uTagName = tagName.toUpperCase(); + var results = [], h = Selector.handlers; + if (nodes) { + if (combinator) { + // fastlane for ordinary descendant combinators + if (combinator == "descendant") { + for (var i = 0, node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName(tagName)); + return results; + } else nodes = this[combinator](nodes); + if (tagName == "*") return nodes; + } + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName.toUpperCase() === uTagName) results.push(node); + return results; + } else return root.getElementsByTagName(tagName); + }, + + id: function(nodes, root, id, combinator) { + var targetNode = $(id), h = Selector.handlers; + if (!targetNode) return []; + if (!nodes && root == document) return [targetNode]; + if (nodes) { + if (combinator) { + if (combinator == 'child') { + for (var i = 0, node; node = nodes[i]; i++) + if (targetNode.parentNode == node) return [targetNode]; + } else if (combinator == 'descendant') { + for (var i = 0, node; node = nodes[i]; i++) + if (Element.descendantOf(targetNode, node)) return [targetNode]; + } else if (combinator == 'adjacent') { + for (var i = 0, node; node = nodes[i]; i++) + if (Selector.handlers.previousElementSibling(targetNode) == node) + return [targetNode]; + } else nodes = h[combinator](nodes); + } + for (var i = 0, node; node = nodes[i]; i++) + if (node == targetNode) return [targetNode]; + return []; + } + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; + }, + + className: function(nodes, root, className, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + return Selector.handlers.byClassName(nodes, root, className); + }, + + byClassName: function(nodes, root, className) { + if (!nodes) nodes = Selector.handlers.descendant([root]); + var needle = ' ' + className + ' '; + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { + nodeClassName = node.className; + if (nodeClassName.length == 0) continue; + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) + results.push(node); + } + return results; + }, + + attrPresence: function(nodes, root, attr, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (Element.hasAttribute(node, attr)) results.push(node); + return results; + }, + + attr: function(nodes, root, attr, value, operator, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var handler = Selector.operators[operator], results = []; + for (var i = 0, node; node = nodes[i]; i++) { + var nodeValue = Element.readAttribute(node, attr); + if (nodeValue === null) continue; + if (handler(nodeValue, value)) results.push(node); + } + return results; + }, + + pseudo: function(nodes, name, value, root, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + if (!nodes) nodes = root.getElementsByTagName("*"); + return Selector.pseudos[name](nodes, value, root); + } + }, + + pseudos: { + 'first-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.previousElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'last-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.nextElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'only-child': function(nodes, value, root) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) + results.push(node); + return results; + }, + 'nth-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root); + }, + 'nth-last-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true); + }, + 'nth-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, false, true); + }, + 'nth-last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true, true); + }, + 'first-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, false, true); + }, + 'last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, true, true); + }, + 'only-of-type': function(nodes, formula, root) { + var p = Selector.pseudos; + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); + }, + + // handles the an+b logic + getIndices: function(a, b, total) { + if (a == 0) return b > 0 ? [b] : []; + return $R(1, total).inject([], function(memo, i) { + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); + return memo; + }); + }, + + // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type + nth: function(nodes, formula, root, reverse, ofType) { + if (nodes.length == 0) return []; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + var h = Selector.handlers, results = [], indexed = [], m; + h.mark(nodes); + for (var i = 0, node; node = nodes[i]; i++) { + if (!node.parentNode._countedByPrototype) { + h.index(node.parentNode, reverse, ofType); + indexed.push(node.parentNode); + } + } + if (formula.match(/^\d+$/)) { // just a number + formula = Number(formula); + for (var i = 0, node; node = nodes[i]; i++) + if (node.nodeIndex == formula) results.push(node); + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (m[1] == "-") m[1] = -1; + var a = m[1] ? Number(m[1]) : 1; + var b = m[2] ? Number(m[2]) : 0; + var indices = Selector.pseudos.getIndices(a, b, nodes.length); + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { + for (var j = 0; j < l; j++) + if (node.nodeIndex == indices[j]) results.push(node); + } + } + h.unmark(nodes); + h.unmark(indexed); + return results; + }, + + 'empty': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + // IE treats comments as element nodes + if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue; + results.push(node); + } + return results; + }, + + 'not': function(nodes, selector, root) { + var h = Selector.handlers, selectorType, m; + var exclusions = new Selector(selector).findElements(root); + h.mark(exclusions); + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node._countedByPrototype) results.push(node); + h.unmark(exclusions); + return results; + }, + + 'enabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node.disabled) results.push(node); + return results; + }, + + 'disabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.disabled) results.push(node); + return results; + }, + + 'checked': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.checked) results.push(node); + return results; + } + }, + + operators: { + '=': function(nv, v) { return nv == v; }, + '!=': function(nv, v) { return nv != v; }, + '^=': function(nv, v) { return nv.startsWith(v); }, + '$=': function(nv, v) { return nv.endsWith(v); }, + '*=': function(nv, v) { return nv.include(v); }, + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, + '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } + }, + + split: function(expression) { + var expressions = []; + expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { + expressions.push(m[1].strip()); + }); + return expressions; + }, + + matchElements: function(elements, expression) { + var matches = $$(expression), h = Selector.handlers; + h.mark(matches); + for (var i = 0, results = [], element; element = elements[i]; i++) + if (element._countedByPrototype) results.push(element); + h.unmark(matches); + return results; + }, + + findElement: function(elements, expression, index) { + if (Object.isNumber(expression)) { + index = expression; expression = false; + } + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + expressions = Selector.split(expressions.join(',')); + var results = [], h = Selector.handlers; + for (var i = 0, l = expressions.length, selector; i < l; i++) { + selector = new Selector(expressions[i].strip()); + h.concat(results, selector.findElements(element)); + } + return (l > 1) ? h.unique(results) : results; + } +}); + +if (Prototype.Browser.IE) { + Object.extend(Selector.handlers, { + // IE returns comment nodes on getElementsByTagName("*"). + // Filter them out. + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + if (node.tagName !== "!") a.push(node); + return a; + }, + + // IE improperly serializes _countedByPrototype in (inner|outer)HTML. + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node.removeAttribute('_countedByPrototype'); + return nodes; + } + }); +} + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit; + + var data = elements.inject({ }, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + if (key in result) { + // a key is already present; construct an array of values + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return options.hash ? data : Object.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.blur(); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element, value); + default: + return Form.Element.Serializers.textarea(element, value); + } + }, + + inputSelector: function(element, value) { + if (Object.isUndefined(value)) return element.checked ? element.value : null; + else element.checked = !!value; + }, + + textarea: function(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + }, + + select: function(element, index) { + if (Object.isUndefined(index)) + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + else { + var opt, value, single = !Object.isArray(index); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + value = this.optionValue(opt); + if (single) { + if (value == index) { + opt.selected = true; + return; + } + } + else opt.selected = index.include(value); + } + } + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +}; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) var Event = { }; + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: { }, + + relatedTarget: function(event) { + var element; + switch(event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } +}); + +Event.Methods = (function() { + var isButton; + + if (Prototype.Browser.IE) { + var buttonMap = { 0: 1, 1: 4, 2: 2 }; + isButton = function(event, code) { + return event.button == buttonMap[code]; + }; + + } else if (Prototype.Browser.WebKit) { + isButton = function(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 1 && event.metaKey; + default: return false; + } + }; + + } else { + isButton = function(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + }; + } + + return { + isLeftClick: function(event) { return isButton(event, 0) }, + isMiddleClick: function(event) { return isButton(event, 1) }, + isRightClick: function(event) { return isButton(event, 2) }, + + element: function(event) { + var node = Event.extend(event).target; + return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); + }, + + findElement: function(event, expression) { + var element = Event.element(event); + if (!expression) return element; + var elements = [element].concat(element.ancestors()); + return Selector.findElement(elements, expression, 0); + }, + + pointer: function(event) { + return { + x: event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)), + y: event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)) + }; + }, + + pointerX: function(event) { return Event.pointer(event).x }, + pointerY: function(event) { return Event.pointer(event).y }, + + stop: function(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + event.stopped = true; + } + }; +})(); + +Event.extend = (function() { + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (Prototype.Browser.IE) { + Object.extend(methods, { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return "[object Event]" } + }); + + return function(event) { + if (!event) return false; + if (event._extendedByPrototype) return event; + + event._extendedByPrototype = Prototype.emptyFunction; + var pointer = Event.pointer(event); + Object.extend(event, { + target: event.srcElement, + relatedTarget: Event.relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + return Object.extend(event, methods); + }; + + } else { + Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; + Object.extend(Event.prototype, methods); + return Prototype.K; + } +})(); + +Object.extend(Event, (function() { + var cache = Event.cache; + + function getEventID(element) { + if (element._prototypeEventID) return element._prototypeEventID[0]; + arguments.callee.id = arguments.callee.id || 1; + return element._prototypeEventID = [++arguments.callee.id]; + } + + function getDOMEventName(eventName) { + if (eventName && eventName.include(':')) return "dataavailable"; + return eventName; + } + + function getCacheForID(id) { + return cache[id] = cache[id] || { }; + } + + function getWrappersForEventName(id, eventName) { + var c = getCacheForID(id); + return c[eventName] = c[eventName] || []; + } + + function createWrapper(element, eventName, handler) { + var id = getEventID(element); + var c = getWrappersForEventName(id, eventName); + if (c.pluck("handler").include(handler)) return false; + + var wrapper = function(event) { + if (!Event || !Event.extend || + (event.eventName && event.eventName != eventName)) + return false; + + Event.extend(event); + handler.call(element, event); + }; + + wrapper.handler = handler; + c.push(wrapper); + return wrapper; + } + + function findWrapper(id, eventName, handler) { + var c = getWrappersForEventName(id, eventName); + return c.find(function(wrapper) { return wrapper.handler == handler }); + } + + function destroyWrapper(id, eventName, handler) { + var c = getCacheForID(id); + if (!c[eventName]) return false; + c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); + } + + function destroyCache() { + for (var id in cache) + for (var eventName in cache[id]) + cache[id][eventName] = null; + } + + if (window.attachEvent) { + window.attachEvent("onunload", destroyCache); + } + + return { + observe: function(element, eventName, handler) { + element = $(element); + var name = getDOMEventName(eventName); + + var wrapper = createWrapper(element, eventName, handler); + if (!wrapper) return element; + + if (element.addEventListener) { + element.addEventListener(name, wrapper, false); + } else { + element.attachEvent("on" + name, wrapper); + } + + return element; + }, + + stopObserving: function(element, eventName, handler) { + element = $(element); + var id = getEventID(element), name = getDOMEventName(eventName); + + if (!handler && eventName) { + getWrappersForEventName(id, eventName).each(function(wrapper) { + element.stopObserving(eventName, wrapper.handler); + }); + return element; + + } else if (!eventName) { + Object.keys(getCacheForID(id)).each(function(eventName) { + element.stopObserving(eventName); + }); + return element; + } + + var wrapper = findWrapper(id, eventName, handler); + if (!wrapper) return element; + + if (element.removeEventListener) { + element.removeEventListener(name, wrapper, false); + } else { + element.detachEvent("on" + name, wrapper); + } + + destroyWrapper(id, eventName, handler); + + return element; + }, + + fire: function(element, eventName, memo) { + element = $(element); + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent("HTMLEvents"); + event.initEvent("dataavailable", true, true); + } else { + event = document.createEventObject(); + event.eventType = "ondataavailable"; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) { + element.dispatchEvent(event); + } else { + element.fireEvent(event.eventType, event); + } + + return Event.extend(event); + } + }; +})()); + +Object.extend(Event, Event.Methods); + +Element.addMethods({ + fire: Event.fire, + observe: Event.observe, + stopObserving: Event.stopObserving +}); + +Object.extend(document, { + fire: Element.Methods.fire.methodize(), + observe: Element.Methods.observe.methodize(), + stopObserving: Element.Methods.stopObserving.methodize(), + loaded: false +}); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards and John Resig. */ + + var timer; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (timer) window.clearInterval(timer); + document.fire("dom:loaded"); + document.loaded = true; + } + + if (document.addEventListener) { + if (Prototype.Browser.WebKit) { + timer = window.setInterval(function() { + if (/loaded|complete/.test(document.readyState)) + fireContentLoadedEvent(); + }, 0); + + Event.observe(window, "load", fireContentLoadedEvent); + + } else { + document.addEventListener("DOMContentLoaded", + fireContentLoadedEvent, false); + } + + } else { + document.write(" + + + + + diff --git a/register/css/business-day.css b/register/css/business-day.css new file mode 100644 index 0000000..c4e40a3 --- /dev/null +++ b/register/css/business-day.css @@ -0,0 +1,158 @@ +/*Header*/ +#header {margin-bottom:-50px;} +#header h2 { + margin-left: 350px; + text-align: left; + font-weight: bold; + font-size: 15px; + line-height: 20px; +} +#header .large { + font-size: 22px; + padding-bottom:10px; + font-weight: normal; +} +#header .large strong { + font-weight: bold; + color: #000; +} +#header .large strong em { + font-style: normal; + font-weight: bold; + font-size: 16px; +} +#header h2 b { + font-family: "Arial"; +} +/*Content*/ +#content { + position: relative; +} +#content .adv h3 { + color: #000; + padding: 20px 0 0 0; +} +.adv .links { + position: absolute; + top: 20px; + right: 0px; + text-align: center; +} +.adv .button { + display: block; + width: 261px; + height: 62px; + text-indent: -11000px; + background: url(../images/button_now.jpg) 0 0 no-repeat; +} +.adv a.button:hover {background: url(../images/button_now.jpg) 0 -62px no-repeat;} +.adv a.button:active {background: url(../images/button_now.jpg) 0 -124px no-repeat;} +.adv a { + margin: 10px 0; + font-size: 12px; +} +.adv ul { + width: 510px; + padding-left: 12px; +} +.adv ul li { + font-size: 12px; + height: auto; + line-height: 18px; + background-position: 0px 6px; +} +#content h3 { + padding-bottom: 10px; +} +.selected { + background: #bee3f1; + color: #5c6568; + font: bold 15px arial; + padding: 6px 42px; +} +/*Speakers*/ +.speakers {padding: 0px 9px; height: 225px;} +.speakers div { + margin: 4px 4px 0 0; + width: 262px; + height: 113px; + background-image: url(../images/speaker_block_small.gif); +} +/*info panel*/ +.speakers .info { + float: right; + width: 141px; + height: 210px; + background-image: url(../images/info_panel.gif); + margin: 4px 0 0 0; +} +.speakers .info h5 { + padding: 8px 0 0 38px; + font: bold 12px arial; + color: #3a3934; +} +.speakers .info ul { + padding: 4px 2px 0 2px; + font-size: 11px; +} +.speakers .info ul li { + background: url(../images/bullet_grey.gif) 0 5px no-repeat; + padding-left: 10px; + margin: 0 0 6px 4px; + color: #5c6568; + line-height: 14px; +} +/*speaker panel*/ +.speakers img { + margin: 8px 7px 0px 8px; +} +#content .speakers h4 { + font: bold 23px arial; + margin: 6px 0 1px 0; +} +#content .speakers p { + padding-right: 0px; + font: normal 12px arial; + color: #71797c; + line-height: 16px; +} +#content .speakers p strong { + color: #000; +} +/*small speaker panel*/ +.speakers .small { + width: 156px; + height: 87px; + margin: 9px 3px 0 0; + background-image: url(../images/speaker_block_smallest.gif); +} +#content .speakers .small h4 { + margin: 6px 6px 2px 8px; + font: bold 17px arial; + color: #555d60; +} +#content .speakers .small p { + margin: 0 2px 0 8px; + line-height: 12px; + font-size: 11px; +} +/*sponsors*/ +#content .sponsors { + height: 50px; + padding: 0; + margin: 0; + background: url(../images/sponsors.gif) left top no-repeat; +} +.sponsors a { + display: block; + float:left; + height: 50px; + margin: 0 8px 0 0; + text-indent: -11000px; +} +.sponsors .cloudmade {margin-left: 20px;} +.cloudmade, .ds, .kfb, .tagzania, .off_iphone {width: 120px;} +.and {width: 50px;} +.ito {width: 45px;} +.nestoria {width: 90px;} +.gps {width: 70px;} \ No newline at end of file diff --git a/register/css/reset.css b/register/css/reset.css new file mode 100644 index 0000000..e2b31ea --- /dev/null +++ b/register/css/reset.css @@ -0,0 +1,49 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + font-family: arial; + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + font-weight: normal; + vertical-align: baseline; + background: transparent; +} +body { + /*line-height: 1;*/ +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +:focus { + outline: 0; +} + +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/register/css/sotm.css b/register/css/sotm.css new file mode 100644 index 0000000..04adf0c --- /dev/null +++ b/register/css/sotm.css @@ -0,0 +1,200 @@ +body { + padding-top: 15px; + background: #f4ffff url(../images/bg.gif) left bottom repeat-x; +} +a {color: #008DCF} +#wrapper { + width: 960px; + margin: 0 auto 15px; + background: #fff; +} +/*Header*/ +#header { + position: relative; + height: 245px; + padding-right: 40px; + text-align: right; + background: url(../images/logo.jpg) left top no-repeat; +} +#header .left { + left: -1px; + background: url(../images/header_corners.gif) 0px 0px no-repeat; +} +#header .right { + right: -2px; + background: url(../images/header_corners.gif) -10px 0px no-repeat; +} +#content, #header { + border: 1px solid #a1cde1; + border-top: none; + border-bottom: none; +} +#header h1 { + padding: 38px 0 0 0; + text-align: right; + font: bold 41px "Arial black"; + text-transform: uppercase; +} +#header h2 { + text-align: right; + font: 23px "Arial"; + color: #666; +} +#header h2 b { + color: #000; + font-weight: bold; + font-family: "Arial black"; +} +#header h3 { + padding-top: 20px; + width: 495px; + float: right; + text-align: left; + font: bold 24px "Arial"; + color: #008dcf; +} +/*Content*/ +.first { + padding: 10px 0; + color: #4b5052; + font-size: 13px; +} +.first em { + font-style: normal; + font-weight: bold; + color: #000; +} +#content h3, #content p, #content ol, .banner, .themes, .bulleted, .sponsors { + margin: 0 40px; +} +/*Banner*/ +.banner { + height: 74px; + position: relative; + background: #ddf2f9; +} +.banner span { + position: absolute; + top: 0px; + display: block; + width: 14px; + height: 74px; +} +.banner .left { + left: 0px; + background: url(../images/banner_corners.jpg) 0px 0px no-repeat; +} +.banner .right { + right: 0px; + background: url(../images/banner_corners.jpg) -14px 0px no-repeat; +} +#content .banner p { + font: bold 23px arial; + line-height: 74px; + margin: 0 25px; +} +.banner a { + position: absolute; + top: 6px; + right: 6px; + display: block; + width: 331px; + height: 62px; + text-indent: -11000px; + background: url(../images/button.jpg) 0 0 no-repeat; +} +.banner a:hover {background: url(../images/button.jpg) 0 -62px no-repeat;} +.banner a:active {background: url(../images/button.jpg) 0 -124px no-repeat;} + + +#content h3 { + padding-top: 25px; + font: bold 16px arial; + color: #5c6568; +} + +/*Speakers*/ +.speakers { + position: relative; + clear: both; + height: 272px; + padding: 0 32px 0 40px; + background: #ddf2f9; +} +.speakers div { + float: left; + display: block; + width: 434px; + height: 124px; + margin: 8px 8px 0 0; + background: url(../images/speaker_block.gif) 0 0 no-repeat; +} +.speakers img { + float: left; + margin: 9px 20px 8px 10px; +} +#content .speakers h4 { + margin: 10px 0px 5px 0; + font: bold 24px arial; +} +#content .speakers p { + margin: 0; + font: bold 13px arial; +} + +/*Themes*/ +.themes { + margin-top: 8px; + font: 13px arial; + color: #3e4446; +} +.themes li { + line-height: 20px; +} +.themes em { + color: #000; + font-style: normal; + font-weight: bold; +} + +/*Bulletes*/ +.bulleted { + padding: 10px 0 0 24px; +} +.bulleted li { + padding-left: 12px; + height: 18px; + background: url(../images/bullet.gif) left center no-repeat; + font: 13px arial; + color: #585d5f; +} +.bulleted .no-bullet {background: none;} + +/*Sponsors*/ +.sponsors { + padding: 15px 0 10px 0; +} +.sponsors a {margin-right: 14px;} + + +/*Footer*/ +#footer { + position: relative; + height: 14px; + background: url(../images/footer_line.gif) repeat-x; +} +#footer span, #header span { + position: absolute; + top: 0px; + display: block; + width: 11px; + height: 14px; +} +#footer .left { + left: -1px; + background: url(../images/footer_corners.gif) 0px 0px no-repeat; +} +#footer .right { + right: -1px; + background: url(../images/footer_corners.gif) -12px 0px no-repeat; +} diff --git a/register/images/Thumbs.db b/register/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..856ed600da9bbac157abc2a53ca69bcf5083caff GIT binary patch literal 34304 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 Z^T~3?LjlW-PzZ1=g8csb`ft@8{~r+wev|+J literal 0 HcmV?d00001 diff --git a/register/images/and.gif b/register/images/and.gif new file mode 100644 index 0000000000000000000000000000000000000000..885175bd87860d8c0c69617623744669a331b7d0 GIT binary patch literal 1251 zcmdUs=}(h)0Dyme`%+q3Zjf@!z3l`l0Y|qu(4nceIB=RUwgrfSlx<284BPm?)JW-D zK(L57XTc7AsT08i%6+szOQE!!B~UH_OC{q*jv~jlu(zkXKtE#FR8yg!M8k(A#3x3jaex3{;iuWxj8bZcvCXlQ74b#-ZJX<%TWySsa4W=1ZT_w@9b&F1m( z@wK(Jsi~=jg$0wz)Ya8BKR>V2>6Vw5XJ==Jhlf=v)!5kB+qZ8gCMNWHy;iGTSy|cG z*qEN4o}8Q<92{(t%iq0wr&g;gD=UpgV}E~tMMZ^7CR<-$Z*Om(o13ext=-$(tE;O6 z|0`%a@PEC&@BRJ>u-xNw1gJ10GwWt{&Mi^y?YukrcYnQ?9V{*=d?5L~=;0$Q6MOu} zlagTR(`V10l)b2s6_!`lJg*kB8=KgVnhNC2ieTl-j0bGWK4%1B`n5^e@L<6pOw>z; zU%_kupfO23+v%9M_d$aWd6$16V|p9WYPMv2bvJg$iiqqLR=r7et{4_tc z4`?x|2)#~c;c{6#lP6HJ+hI1tVB&fyo{+K{;;{mJ%28Q*QBZ=5rx&!uxM{6;86^ak zRs!hid~fPlg5Zu!9dHNo=RDlV4J{#Nio{<=d_;i+Y2{0%vzBNn!U~kqSv+)rahPa% zoEpoDu!uA+SnYG8CmezfB@F@_wo($%Z(@}n z%S#h%p$l%;qDZ%2fGeRH9?zZagCbMK^*H`HP(#}PHG}RLWK54Dd-4#N5;Q`_!?WSA z%8sJe*^xOwrMCSvObG?^2W?oj9N#4}OOcH&I)BV5dv#G6K!&q{D)8>7mz# jpL)bE&XD7oug-V(_(YgC`dOBKWR-tZb|xz{bJG4g_o*9GqNST$~&{V890g0&u{{ z%)-LP#>T_J!6U@S!zUyHk`WOE%L_s%0VoC6gTnZKfI*Oh!HYqLnNg5|Nsy6Qkn#T! z29UFv85tRY?t}qGpu3njfkHrWm>7r#x`35Q0O)gOR(4i|1kfNRAw$PR7FNZB!pjGF}+f$EuAn32>8GBF!E3O5QV87U@;{J+J(!^{YD2eTl9J;Sfmm9O&ly*X=Y zbn41#-q~8MuX2y~DcQyBxw$ND;$oYfGhZ&Bo0fHJZc4~rk^EB19n1)r3?lKF7nsjXY{ZcqR9r_lKE)$R7{?#A4@wY&FR d(6gC$yuaQ)d$%*pSN!3(+pCuv>^lGdCIC&fiY@>E literal 0 HcmV?d00001 diff --git a/register/images/bg.gif b/register/images/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a8a2d57e97d1dd06c4d691311e687f99ba8a061 GIT binary patch literal 1452 zcmdUu=}(gf0Ea=)fH>!YODCYi0fIwege|Dk2s(!j4IbOXIR`kwz+A)_b&HE~2rcEl z1O=%SImF2&GNtq`EjN?`Ep2K0_P*Qq?cKNS=KhQQK0KeFJjw5y6UP(wXLx%x_*lKX z3Pw35k0&3;hTNVa!ivG=RybT;tNMpTZU0V1fsU2Q1IaE$p{k(k6U}I>lTG-7u zJB=>)tidL?!wW`x8AC)?nIA1ES~;3-fq`dsOzUkph3Rh@L{(e*#o)6QZ83>QQCkKj z;FBd4lDevKx>%sSVgev4&6Shlr)Y5qpgw9IWScFz*F`3uK z)q-vh8*-p%t6a0AZcbJ^E32B4;FV^k(LQgqEkX8W$ll0OYGK!~6dIC3D4O7{3@XI0 zl#h#^^K?iGziL`CrMEUMDj$-#-2(l*!L|%JXlhFdnKz}gVpge&uP|3liHk|x1<>BSr1tt>E!6J&pKtVgzW;=mpT{far}anrFo}i3>mn~PQbQX{ zKHQ(&%9`t{7~9HdR$@9%J&C`mYVTL) z&$b@^z%S%L{MoP_$+ZO+CIXAfI#aLWauSDf0{kxwW=_|2pWB_39*PY4>T zg~{86CBrukDJBw!byXvG>54^e*L)e_LH0{T%H6d+vB=F(8m_~*{fnx_Ys_111JbRj zak&vo*um_0%zV-M`i@(V4|QGdx;%;V$;Kc$(S?k z_&)<}5Y~@GxR1QtdT$H;K^`JQn2!uoj1~OWC=?b(;6g<~PwxUJHz2YQK3jutCya;f zDvE6LORl@NYfn!)1}H_e3juUgGnrf#KX8Lop0LU$R(u5}kSdS35u~bP8>6Vz$*N}( z@02e&zpPC??l1kcGAvzM{{tQ)ZHSo@g@?ozMMZ3ALk=*Ser|8d+Vblgf5wyg^INFR zx6WpCwxA^Y8Bfzpob1m}`R=(E^tL}MOgl3ue;s{_`uv(S5kdF0TsVL@gAYOADydoo1v4x@Xw?* NZy(~v;7wi!{{i1pG)4db literal 0 HcmV?d00001 diff --git a/register/images/bullet.gif b/register/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb18d25647df75a5c251c237b66c10b321a56ae5 GIT binary patch literal 102 zcmZ?wbhEHbWMg1s*v!C?f8veD&gc7{eY^4DSIyaXq5EDW9e(xc*WagK|8!n@|NsAg s>n%?ikbvS(7BEi-M1ssjIHgZWyFIW-EiQ~9u}NZPp$mgG09;-tPXGV_ literal 0 HcmV?d00001 diff --git a/register/images/bullet_grey.gif b/register/images/bullet_grey.gif new file mode 100644 index 0000000000000000000000000000000000000000..65e20981226a10ca988be7b090eb7a2dc7758d86 GIT binary patch literal 56 zcmZ?wbhEHbWMyDwn8?8J^3B@?Yd0M@ac0(vwTeGk7(hS=M1bTOm^fRM%&M(lT=HaP Gum%7L_Yiyl literal 0 HcmV?d00001 diff --git a/register/images/button.jpg b/register/images/button.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df76135cf1055faa27546c4afcc8f886ba7fad39 GIT binary patch literal 30060 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 CW9(x9 literal 0 HcmV?d00001 diff --git a/register/images/button_now.jpg b/register/images/button_now.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40f6e2e871b30df089762e9dad9f9c00b5a5471f GIT binary patch literal 41970 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 z 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 r_R%_AP0y3ht)0xYc;G(P^c} zd9>0}kG4O1sQ3H*Q;@hXZJt7atH|By`TYG;khjX->R61kTaL6hb)#{t%*o#CONg>d zh_T7v>+AIR?e+O^ug`h4)Mu#5S(dv(f2%fhqj9g#c(v4Vt<71LyMn#gg1y;+yx9N$ z{{R30A^8LV00000EC2ui02crb000Jxz#YOzEE(192cKFz`;BUGB*t~4KX+h L!p+Xl&_Mt@%5AVV literal 0 HcmV?d00001 diff --git a/register/images/footer_line.gif b/register/images/footer_line.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce091ad7c0c9a7dcbaebd67bc16f304436ad29c0 GIT binary patch literal 52 zcmZ?wbhEHbWMtrDn8?7;wD)HEic|Wz^Zx(;ulSRN0R(hF1W2BNiFHoDG9xR4H2|Y< B4PXEO literal 0 HcmV?d00001 diff --git a/register/images/header_corners.gif b/register/images/header_corners.gif new file mode 100644 index 0000000000000000000000000000000000000000..8165fe7f124c32fc30e7a9fe138f459142e6e407 GIT binary patch literal 316 zcmZ?wbhEHb6k*_FxXQq=_vZ8WzyJRG|NqzDf3Lp(`tbAj+h2d){QUjk)3*=bf4%$t z=l##$&p-e8`1jxUKYu^|{C(i|i+wkr|M~at;rp-0?!UhH{KM~m|L%YIcIo*CpeYCM zytx12>+uJ#fkr<1@O9s<=bwQ_|NqZGGobjB1#Gqshy?kGfi2QuLV-ktg^uEJC4(G3 z=@!QfFIfR8zl94G7F0PmH65(1s5!szc;g9&#gaZ3)E?V;>nR*v()Ue6fU_o@lS3k? gDNa^YCblC^M5-@dKz>r3Aj7l}hMBVz85|j`0qM$u`2YX_ literal 0 HcmV?d00001 diff --git a/register/images/info_panel.gif b/register/images/info_panel.gif new file mode 100644 index 0000000000000000000000000000000000000000..5db38d67522ff78eef22afcbccd92c91b9f417f9 GIT binary patch literal 1930 zcma)(S6fpF0)`KvOA!VKr86`E8zoW(hzPs1QQ=VsWz-SH0_q|NHdZmzp-4x;5Fj*h zK#(S(1dJ$z&_ftX>LED^MG{CM2|;Cd_807T@m{^pd-M4R`nkDZ$pNMTE&z}?YZ4(% zCZ=y~GQLVdx^Sy!j1=5T-IjuK2~#SfNkw$Ign=Y*wk6C>Ayp!z$~PGj5p9~wlZhF$ z4QW^>eM92kiME6EUw z1pU@YC$L$Q?3E1xNE1i}BCvOyoI1=IATQ82L=b<8y1qHj6A@{P&qq0zu#8wdODF~l zCLp00S{H&hdcpE(XnAE}Xm;UF|KjTE!ph1#etLdM@P$MnpKhn+jX}5j7RMn*Xa|ii z1RG}=(oL{x2I^t3=RnH!Uhp%E^~VT@!<~)l1Ap&gT<&6^r=j9WXbxNuiNS$I7HNT8 zGy%yZ;N1_bZaTY%!4hv!KZ2}b>S8~Wg$G#`WN4Vm${B-%>r{v{yD6Z4m4Vw*Ch&jn zr!A%bxd;E|-=6@gJ4of^l+?8JKQc12vY+SV=H+J`^7B-SDJgx0Dnpl7RAQ>CYiiMI zo_>eYoJ{JP-?g;1wVODlz?<58dU1UZ4$Nt#a&P4?w-wq@1KVU41Cm3 z3s$rY+H+oKCe6{*Fp@S8sAOuOZL*Bj-&OB7v30R;jWJKl&)FY;$0D$u>t2LDTzkiX zgPg2X4T|(sa4H(Fv5Jk(sxGLT)QUxa?Z6bI+SH!6wjZCdtl5qEg%u9i$A9)c5k^*7 z^T#w@z*_9UVP3%fPZx9S84dKZ^(H1({JrNJ3ICb)2@wYeF(vQV50iIPa-Y;Bk?T1_ zut8F|KbwI0>z@*juoyq9xT6{6qqWChOjbpd7-{XpFOQTwZJ7O9)P57&mO`lFb&4+! zq$lw!8cQ8x7F#p1NBOSNDKm{ptTZipYdlP>lVNtOKXa}!WHd_lxGpJ7NcSzO3`Tf< z6I?@CNM89^qP7G{56qrQv>qkt8@@o6svE|}C?FMnb^)I#YcCI+(o#zrR0zvxEik+^ zwYMr&FV}z4BRC&W^f$^e_t|GTlrfRHfecqs4TrZV?>XCL&d%dbsX_UGdLUFF-IodN z6!L6|P?0kX;1sX81#*f)fA7Bb@;6iB^%CDib#C6(T!V;LH~cbgpae}soA~H{gNx{U zLw+~QG4#y(hy;H3xyr=X%8{7!BsRWETgTA2T6(K>1g|-cyEVqeO(MQ{I*oeQ zh~h{~#yRosK}YED>EOL4N2kt6FCLvZH;2AIb^&|PNjdyXi`f0j8SgwGQp2IsJxU|y z0p)fHSwf8@m=I_{$G=<|350Q1T4Mc4EG4PNOU6iE(vnf0&0XrEW_e6JVm%Fxegvgn z(0W2I=r1!SPO=c3hl7C!!XNI)c1`*IH&JGWkb{l8 z5!)Qam_!=Xdj#=qW%L8$JMYU5VnzLqFhGs{$7xu z2(LBMRUhtBFEqWI0U52?5M8}b7Zw*o)|Rh`0nzuC3S%3g{T@+)z}dp$8qGSJlbM0P zCKSFv$6vP#wi`X$e6qMjiF4>&;OM3PwvvcX)(#~$W1;eUFNZX__M`bHuKKlU0i}Qr zDia@#q9m8K_zBMhKj^hiWf7J?yP@$00SYM^wJ?yxx=Uu4FWWf$6Ei zbh*UIM7gMvVdbM^6Osf=4Oez_OEv;VrqX|gqeEprnxQ($$5X>$w`~VBH1VX|1aXbI z)}I0XLDPjOajosisDR5Msm>=b)v4!IT$hiNQ55lOxA8wuJscrd$i?;E<905`LPCx! I!2pl{0C+MFKmY&$ literal 0 HcmV?d00001 diff --git a/register/images/ito.gif b/register/images/ito.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ac3bf1564bfcc83d8d62109dfc168c3e640ff0e GIT binary patch literal 1228 zcmdUs`A?g50EfTt+k>{W>}|QqDA+QJiOXhC2X4xA3Pv>L zzFir|T*kC4+eCtnAsFRs%T?}j-%!eZ6(~2Dp!2`*^TYGg^TU&T0s=4kp1=i@)M|B0 zOUwNHd{Utecur&g<7Utizc+%y;rD=RD0)6=7)qpPc{Yinx<2M68V-7_;Y zwRLsF!^4x4lhxJLJv}|UySuZqbH~TWM@L6>b@d$`9ksRpDs}bs^$iUTDwXQw>V2IWmmTGm}p9VZM(t$1w%hjyZQ{(at_g^dw?1 z#v&jHEt9~s=8!DRGiY45R3_O5e$D)xl`$lQ$W*E@Ql?NzlFV#Vox(^cOco$Q06i(z zWI2&XrU0&M|tLxHQvfHO!X6d-ty z$YkKnatkp=I8#{sQU6VWXLLErO>Zv{n-j0{E^B@+6DA}4Ep39)Q@4}LDkQARF&M*D z5SZ5HFZ+ey6=X_K`RNGFElw37>d$qZ%s5-X%)bPlX?ooF$oAdAeo5AnHVN6RWt7^zY@kP)JdgcadAp`vyU2Y2Psh3lpq

U_!os11S;t8eDVe^A zGyphh=7g5E$TRjEVTVsRZdzCfd)oAY0*?#@jvQS0OMk4$7wJRT3MUfPUhdsQ`jD3LX5eKu#!aTm23cAR(sldpU?%ZSq zVzI>}s{@53Jlcj`@*>#60KJ5rq+*CtB=5PvVmXrV{zYsICTH_-v^qwp5;irTccGbh z!OH41HF#*}SQPW4v$u@OOEfaQP9?+WT@Am=*8c-(9-6p;yIofoO)W? zqjP>QL>fCd6C6hw7bYm15F~(T++RXeRKTd9$f8j}QBmW*^t80oKce@;{dzy#Pjj*o zmlRvU0`LHU!-o&IwY9ahv>ZBg$ZEAVH#fJpx3{*oK701;>C>lPulLB2BQ~4u$&)8e zr}O2@m*eB(&!0bk{P^+Pw{JT-I*uPd{_fqo4<9}pJ9cbhVxqgd`}OPBcDuc^v-8@u zYj57XnVOnvYHAu77wDlE?&HN;lhPWmo5zt4^K``Ub%AR>eZ_^Z{Bpf z-J_$Ur%s)6xm+JVemr^d)O9qB%LtXhU6>U3G4-Em|ghNBpg{F@Yi=YTa(jeInR{itK`KNB?}Hl{ zO2$O_-F{lT0-Ja_i9aM0RFY@^+#R75iCinNY}**5BMI9u->!_9qt+Dide16=$)fWp zji>f|g|B@{@E21~oK(eZF8AttgyO7h+`<%3RuaLc4drgeA>P4?q_H+j=~a2iruSu_ zfy09WN_EYU&!Xm2u3`pNPxVGA2~$Wi$f-mz%Ema;(-BNE^JO8$zGJyLt53gtMd#PT zfZ3=bTFA27MPy?&sRO3lmHD{@T^f_IokuUv`Zx0RABuhZiT$RHDg@OMB@^4@!zu-t zekG>O@yZ^*EmaF6vcdXvta6Wz*k~yU#1wH=R>B?x4S`!GxBaLi5OKP{>8tljPgdk? zlsr)<4E=IV(?$qQSwxbq{HZCYdS2~XDiPjAOvF;n;(<&_gmkC^4UDmT+m z!jxIKG#?e@lME?(r(b<H>|P0|pG`ZRZ5DS$;1w+X`JEcS9W%Yo-|%FM@zG7+IPX zg_@%fJdNlaB~mB@n8Aczh^0&WZ2rWw3LsR!)$5eagBBKxGRd{R(e5VJH(&ABKb9J& z=JCEhL1pQ}mF~;|grN%HI#IL6X&6Q<23laZWl|w(w*zSZdkzcH@LDXczsv<>8V4sw ztu}!e=mC%xQQYSuk;QZ0H<;Et1Cju*1)oxJTZQ-P`E-9=%>r3bMx9m?ugc-9qCzh# z6R;j_U78MZ5^^&zf?TM9k_8lVE+7h+Q9*JFUr{eF_40ngLY@^=_A>llnMSj2{~J1r zHJ|KT4s0-B$NmJg*OrOOH$hZDX7e0KG||iaaw&7h42`95oG5`Xb25Pqq5z+Oh%1Hy zNSDs8bCJ=M8O4K)(8(m4M!{bckj_A&+zb#dK6oBri*#3~$^K6YfHY~R+u&cBR)Eut zQOC(L=EGKUv3#RTsyyXExnKF>R210t(o(!b5NkZ=}>l z396Pl3Vli~4nH|=fl}1WI64%C78LW@v`;HT>pej1OKA~ItceAZXw!FFF(NUR6&>vI zxELP*+QpGJy_SpwcUdHn?u@|v6KMnKp7dJDSe6DLEP&amKaQMG0KQB;Wy_e6 zm#p_x_yyxeP8lKB0nwi>1RJnG=q>bH#&{t~QJ%A)pp;kAJi{RnmC#xw*bO9kEh;fT zd@0vbk?&&>q}Kc*nD_~i%UNO(jgoO?adI;#%4S%y25_X;5}sCy2vZ_WV=FwkxF$!K zsDYGQ58~s04_4YL(6t~biE)4wSTV=q5oCIy=Ep;^gt0|L6-JZ`_LcV+Ewgvo_RXEEU8S!J zXW7rfH3o46oHJL`pTEJo*S~NICp1$yO>?V+vykIsEE>l422&PXX;Sg=iE-`!qMECN zA92Z1WyXvp1F=6ST@!2J0;K#pD0`C!2s84nDIR^C6RpewoFd|UTj0+kRZCTh`RiRcAs7x)(qApd7B3I{F$6r!x1%QBR5XG Y?Y3=i+pzAl(UFn2NA0UK7yy$01Bs&?7ytkO literal 0 HcmV?d00001 diff --git a/register/images/logo.jpg b/register/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65e6d7cb531e325f5b7cbe6c8a326c604a99a804 GIT binary patch literal 27573 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≪ID(pHRIEfGdkGT& zhimgs2ZEeyJ8mCDCX&F8r#nEZ&2|Xn>D`GHAIiK50ZwbR$NUjj-uZbWk&?rKHq|*{LxfC-i?2h?EnkBpVr> z8oBXGu4E+JTRwAWu?YaXN~6YcXm(VH5RQct_louJf><9;3j7dt$Y3#_M3jz|aBjD! zo(MN=#wbsk^2c+jnP=?I1&ICwV(odght1zWtfK~=sFIJT%A)3iK3R8lq)g8s$ci%>to0^~YHD*H)t{a{ZOIvFC3Z?w8noXm2M-%s z@RR}yZwOv>z0a`yL~8#1P4}c=%ahGfM}F(0DKtwVyoWGl4S+)~v`l$F1t#E#JtY|=*yH*oYO5;Fp%t1d;5SimWhfSQR zX}nhjMyWQLdg1AWHaMOIEkEH9mjMm{^jH&(7bwepS;mtk_H0Tn6=cp+L}We0S$TOa zzB-6wy=Gdn4t2asCdB#6eWA4D6uf2J|7_>{E35of8nO!Kc4hPj?v z1B#Zh@XhMAh>mE^2O$pBr9s3lMJ0&R)$+|Z@W8dHt=bLj#Uqj?Rxgy+T#T=*k{>L=<%zv?`sYIe*pmkm$ zEA&A%XR}?I&wB?6K0sS>QyE}o{~LP>e@2+N!Kw{Nu9b1tRKI*rBpE;L z-Plh$UTVReNYjV0quju83#>z|mN|@ng(E(<>GdYNi?tY?Dr~~h%PlAs+S|%V&sCdc zkkHT(Xi{xNcLR$xCo@3dH*gmYiJy%La!cRMHB29RF-ulxrJ8ljnWxM`c`rcLiH3mZ ziSOw>XFLU{<2s1Ux&(BcQ-H|5yaePV(6 zHo;9_S`FiN>iRAMon=MqpJ|d%2yfgFtHQ^ofa&h{m`j{FL9`m-w+aT2NrBFd%-*m_ zU+K2@RM&NrLKy$y4g8YK?4(P^Ek{?%l$g9k>&IOtS3W^|R5&6qPV(T@)%YkWoT9Ds zAj`y?zoZDlDIi*xP{PZS^S+A_uZS*maE-(F2^B%q`z!e{K0a?hUpd3CVw-Bw1*QF4 zZ+$2>+1*z^7abop=}^>=Oh;YXhfzhIqF7$bFS37h2#TN2k(@AX(TrbInXq@-6o*xu z_^TN-1x{%(jJCbARN9~@Au+zr=TG+Lq2kiey@hTwyQhwyc$b+fo2Mz}Vkl)Mnv$%) zKk@uXJ$@?YstDL+Gqx4^GwD0BknK5*cU>YFLEk9NX=smtnC;A&k3l4_`@b{Xbr$<1 zE>W%CsjUZ#3Q^|Qu9I~mB#;fRe>aFs#JdgjhRP&+JV<<_b^R8cQ4D^2FIIsDG2 z=LeD*k%)~N%UclQ>-rqkMEzhs(K6{wVwa^p7&ZvHRR5WHSuHT;L)2!4y({P{>0ulOqkl8 zQR^>>3}N33_#ak`=klmG;w?`I7^cdc7CNppy40gAA>^+v-KRO1)Q)dQezEvm!qeU5 zDD}A8jtMDH9X&qyxpDQxI_iLe;1xVKHgetYWU>J4RB z;^HL;!_(tp#(L78nZoQpj*KMVjY=j4v{wx+KtwwA6>25#N&H;uJbC_X9!jZeRIdXczy3yB$i9E7>vFlN8m zX#gA@ufF?YB_;s&cF^zZUR+d=2d2ZiY05%VUST){5&6tEe7krjjfDX!aHi&f;Aou6q(6yBAbvqUaHLu-dE_;gMAyFo%;Ee_P zl0SOvpH86W7ea#Wye575+6v9B@3{V zB+q609^)3DQ<^r-^$pAZa95MWbhbyj&$QAp2#~L+HcfOKNw6UL>*)J>pb&trF~q+P z9h-9(O-x|cHQssuM1#R17E6_cg+1a?zs;io!LVb-agI^m%-}vHM<}K$9k>4eQl3gr{H^8+vFB8R)YD{F- zLC~ea<`J;5jqpXAA!x~^=`rO?2ZMFek`Af_;Y(Qz#}pZHqeQvgYyzq&bz-{%TL4r! ztw{a|o|bhKy64KtpYj1*Lwy5Q%JHw(c$iB zkT#0GgI8!ajwGY-W_dipu?=&Z^B2{WaWI8pPI~d_?SKpP95J_dYg})SdFW$JEkRVA zBj=OeK`pQ4E+bApQ?{-(M%$Klo}4_z5#SY# z1vq~}>Evf#_GtV2BRLd*N#y15zoP?=6aFoEk~B$iu@~NXMpkYoVTlP0nTmoAn9< z$|wTSzjB8;huxm+sFgUTW?kJ(Bh z&Fv*GbHqlO4fJ6WETvqfe>mc-xO-$`TsK;+D?FOP8)OYN40MkM=LajHWTm|_)~M(& z%X3OzmH|JfKN?ayZE`Y89wgXm(7{Z;qIR&s2|ly_RU{?ZMQ<)n4+RD1qz>E3_VAW) zPqe;Fn|_{qi4zm}`SVBGz@s<@5%YlOt{s|@ZX9Qh9BkljrYu?e6r4Rn%4g?#3F{iQFa+y*?9S>_6*hH#^Mo$xs4hS;f2nFWUL4OcnNliO19On$^Vt@XOZH9pFw z+ft_I^~4Hd7QwH*WMyD8KtICda}u^YZNqbOay9`;b!^|P1N%o>Fvyl`^7QF_Cr-x{ z2?XrlT~oy9E6)kCh&;8-cRtG;Oj)Z0*ZxaJ6t6g%Ouy@c-yZd(h7aLmz{NoD?cYlg7ewe5~ ziYe?8-ts!BVv`zw!cC%KV&EowBS)3xxUf6b2AaA~aWdg{l50{sw{5S50Wx|<1 z>I%&|q!)!V;%7qOBSboBkq~!qL}Fe_Y|p~VLy-dT>4(4*KWjDbHDshL@w>Z?Ype1a zgPl><0YXV*(}*}8J{S0W9HI3|K+tqnA>PUT+^`O{9|zS&Ka&d7?=7bw?&UBjmHnJi z`*7$nUntUQ&n7bAhIp(Q2q=hdoa>#gKLYjXIf?(;30MiFbT;M^JBeBqGkgpw_kG$R z1y=hw4HDUIh_{xEvtNjY3=Y-$BA+FiOZ#RQ(pWB;paz$V8^Jn_Y&VOlr}0C7ZppTh zk7olrPubY8QvOAma#=%L=JDyMQ2qGxz+ufL#}!kVE24$~!IjC*1$}9(QLBLZ1Zi{K z`p5Ds8#DKMk)7EMtDu?ijce`hnZ@#Lm5|+l&5U_AK(znzq0eOtk>-V5^rMQV{wIR+Sp=t#Yi&Oj?JwBjU1Hr#TKj*$>X`S$*n}7kw4vU^ z0#DZ6pF#_66XEgo^h4X<8N$`-?J`vu@2HGV^N{z34;<`#RyUHnP9Tto8}q52vy_-G zx_3_U#j<|M$2;X7p_UYCh<#Iylk=8&X74LUprnku$LYIjv*S=Z(igRt(iLitMX(Ug zM#k4GoU&(*j}H(XeO?&ISHL}onmmp3(DcqR8^$wd7(YK%B~z>Mk2kjb zy~TLDSOzin^slbHXBluQ;?nAFt*P?N(_E?@u-APj%bdaICOK zvP{NN1|^vGCWORdiH2W=K6jf|rL8KFmLP_0h*a{TPZL@Er7G)bM{uX+jz3=pay3qS zNe2XIKeaWpWca9G;$oF5AdXC$S-Gd!7(qx3Vx>`y-e2^dLyteqXf`K6IF47o>KYsB z++b6&5eT`|0Ee3g%4&`eK$v+CC}mySwp`vNULt;G7>zXlN-+@Cd6W-b#+aSu

r|jAaG*gW~PnEhNISWP6UtKaDX+Qcx+9#oo%GlpY+%mG~0wxX=5vxI$ zHY<8CXe|Hq&#&{5QTo1&`M&1yRb7hcYxQWps*}2k7w`M6?f~tbRO4CkmJ2O-K*Ehf z%^J<6<}z$_tRo?LjfSi1pzv%`34@`tsb97XLoSjK7X!e-dDN1IeYt9GKOYmK!wQbs zAKT1ICFpq@63hQBU|yCGdMIS;C_Aj@A5-uPFj;-LCu6v6+OT0fyujh%T%|qg?LU99 z`I5ylYo>R$MYi0$Jg>p`0WU8y^ze5@{lWF~indViG9>D2>6zX)g|svW+emwUL1U`r zfbE8=2j=rO@bR{}T@S>3X3G|n?eS$(het#tA7S~ipG@jGGj&G|4e3KF6odXSU#tld z`26!LE%MYsTi2##%F9VCW1A7WuQjfm|gR}v-tJEb0_v^4K zR(Bij;4@G9i?24sYq`PdQd(TGq0tOw^q%@d;WX2f5EqT>Qp;hAV2XbK@xu~~Pix(s zv+mKUyMmt#o?030J-$MSvDEQP5HRuZ5STFO(%r;8)Lf%ULX4?cyEJnQZKnq}4p)di zC0glmPvTM&;t*f7wpZ8ua8j-T*eT8DqD`AeFlyg1(T;wcEw#d4uii`+q>sNR zi1)&Ud=ZuK8&TKw!R42g7WOuLhx0{ds-+a=e_JOr(6ix4(LJaqdc-@GF%m8| zuy3rc+N%M~wtbq+-~-Xrv|W$wjZo?wCs{dp_c$oEI%``i-_mYrr+f}vCZ#I&Y~^!L zURnmQu%ykF^(9G|6!p1)mtRAU*pguQoaw*@iFJd$%dw%MjVtUIgz%HtQ;7qYIU7SV ze34Y;>cR13if1^mem2+G((7DjY5W2ovyILd*4Qyd83(sjE*=(ui9>>evS`1xU2DQ< zVND&YT*-|B-1uo?gZQ;3!6<)%{Z=TX>M5TO)*Gv1wX1;Zdp;z~{DbIDXdOCi8D^6rwQ`jGZC5)&|fR25=_Sf2do*^`+*WTt1Eqj`acf@u* zz>`K(s~J;m5DgRxX5;Fur+PYXw6jIF#Jn!{Jf9B7TqHD&r5&mz_ozwTx6x$W3rEH* zyQlxgBD0(%xf)RW8CI z`jb^N=P8>GaZ;x)VnW%YP?R)ioLu^jqJzQopD(Qo*lGeba#{A%js58u1T~Kt(2>8g@M$U;9Yg=&ckwm()n6y^ zbYim(qO^wny!(5JWrkh$1@ z4)zIeTTJ*=K8fj&N{p3N1MK5^TO(uQoMpclFQ4;)i`Ud>G3nSdfh2Go7C2ZUIgG=pmwsrKb=}D|1rW*1aL`_1kXqAdrNZ92!XF z58)wPaq1cxDX}}6`l}sj(Hvc5Wo=Q93=UrUf%iVTXoaV?XK4VaX6^8~id!>r*Cz5+ zcVb^jug?*swNoElAJIEFpy_y@7E>kZkPx#t57@;k&KRRH!|jv-8#(Dq8???GphEQM zsflmTEN*j}OPQ7`+~XKC-acPm8FAyIO)P_wyn`4<;{J_$LCw%ZayF@`GVrweVt%1o z&+*7o2J1Jnz^K{X-mlNaXn>BAZwr*@xY;^rugYdgm ze7{4WE-PCc%2F*NV6Q9GvUhV*#x?t@7;%PFoT|7|y+A%;>Ky~3NU9lb-R*V@R$bpM z(oZO)rYF0YQEf+y0DZ&C3rCv-sZgK#w!LFt}?$+%ziEliJ+BpXB`fV&AQAs7~Xf=N}e<8 zJHG05*;Dg7a4U19gnFL6aNf#R+?>BED`d3ST67D;yOT0ntxwJrZ6}0NRePhG%_9ro z`uG8-^Ps1Ruo?ajiIup+CpM5GvoG-*XQ z9QcKsS6+WWK98f4p%v;kpQT zQYOArs>1PVyk`F|kNn@s|LP&7Wf$uYGtspCJM76l0{AQHbQZSjN zNlpyZ5R-zR#Is9>(-U^gJmRSl2=|UZ98g~bvJg>8h_Kg`iaD)d zZQj@{^OfqQN19kxpZ%!gR%BE(wtIB<`HhO_(;HROTb>|u5hmDpwt?)wuJE7F>wj_Z z|8~5+zopeOZ8sL0Yg!_g_~ts&GiMRbMb|1^++Sn>=G+J=PE>SF-ldy9__*45JrL

<_!sDA%EaIK$|E0O0gaYl-{cvI3!G3@TiwYj8PP;eJG#E(20`_@ z%^803!6IkVM*`c^KCZ`1uH=~khX&CjAE;yOz($vO>=qNhebiUwW1%ld32~JWz0wWb zrIuB}@@Y2Q?NsF?Xj7KjvqahaCw{c`^r)cLj)AH56Fo9^UCU20?BhCias|KQfm^he zP+}pXR&%_6%Q*i8%w)AAabhu)g9h&xo5(-Vs#HSUNbuM0oU->D52@XeGBjcB{dz1s zGy{d_R-Et1B#-JRA_mp;1xOD0>d83#YiOoaT%ML|qK}r*#aGv1NN2d4b>_5|sCR(g z9$tNXEB!Wqw(hKl>qaz7B7e6Br)6AWH<81{{9n3QM2y(6iteC*Da%HkwVlxhQXq%jOQ= zEZTdlP0s(90Q#T){NKu2-BpNwY+|2apJK!jakOXHV5LQydFkjr11-xF%ldw;+~=!F z_I&I}-WI~j6`R@q zY1Ss}dSxh6bL6+Bu8pqHfl!`)l(xU`Oco=?eKRGj@4_L&(Q%=iU%* w#fMjiPDA_i1!)>z_3RmnM%&Xd4OvR8dvgA7Y6=Md^YQ)9c>Q;S75+^BFK9@wi~s-t literal 0 HcmV?d00001 diff --git a/register/images/nestoria.gif b/register/images/nestoria.gif new file mode 100644 index 0000000000000000000000000000000000000000..57738ca513e4f486c5ecf7290c35a23aec616b42 GIT binary patch literal 1529 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 z zg+&$BZKUCTvK2kUeZ*MQY{D)Y4Sl?xpU|C@cR&XjhZ$!mp>O3)%1Q!7-71hYWh34r z(?i`$4;n!TPVY26hXJL*M?I1J)7yZSoHsvn0w90vOdL?$g$A{M)bICf9=WY^d^~|% z@J}C%<((eRa`p)@6MH}0&4jwr>~ya|QF;4^!gdAE`|^g`ADV;%7oPx_e!AnIaE84C zDBq1f0Y;?-k5iriB9$W7)^`wZ|K3Tz8U)3(>yJ~HAex$+mh%M0BMBdGfrz!Biw@>{ z&)EAeG4c6;Z>^^9SN!CGUh$WLe_!u!cg0*i0p=EuBX@_;Q_t}i{>@G;%~!1tZQmym QFYylRUeV05Q9mvJ7pwy?YXATM literal 0 HcmV?d00001 diff --git a/register/images/photos/ed_parsons.jpg b/register/images/photos/ed_parsons.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b8f5b2e1e7f489f1e9da41a4c9fd32f2399b420 GIT binary patch literal 4580 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 R1wN%&zOw%1((r?K^7l_p6sp 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 H<@~<@Di#)x literal 0 HcmV?d00001 diff --git a/register/images/photos/muki_haklay.jpg b/register/images/photos/muki_haklay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93dc610271a10c202f00ec4da1192f76698341fe GIT binary patch literal 6145 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 ac<>Zhb`d^0dr|?Jq^fzO6{Wm7o%t_PkW%IV literal 0 HcmV?d00001 diff --git a/register/images/photos/sean_gorman.jpg b/register/images/photos/sean_gorman.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d93c8ab02d451c5514207c5fd73febc476d88ae GIT binary patch literal 5205 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 literal 0 HcmV?d00001 diff --git a/register/images/photos/small/muki_haklay.jpg b/register/images/photos/small/muki_haklay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06ffa0ef3e366f85ef833540963b047cf61ae26d GIT binary patch literal 11983 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 GYySsSe|9hc literal 0 HcmV?d00001 diff --git a/register/images/photos/small/peter_batty.jpg b/register/images/photos/small/peter_batty.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfc64b73c90b24e5542ac8ca61a9288597921d5f GIT binary patch literal 9443 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

;Pqly>w)Y)7tEHeq)VuZG^lWXI$ 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 literal 0 HcmV?d00001 diff --git a/register/images/photos/steve_coast.jpg b/register/images/photos/steve_coast.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eafdd996c8e55a9c52d6921c105e9cacf019150d GIT binary patch literal 5747 zcmY*dbyU>P+x^fXwZuw_lr%^S2uRB!ARtS_mvHHpZbYPGDM67&x?^cX8c|BRcNgjI z+L!O|jdR{R=gc$b-e=Ca&zbq-nZe9pRsaf!ikb?5g$)4K_XEJ}03an#D+gZy3%~^c zK>eQD1IXm9T`b=M)?N1u7G@p@2XL_e#r=$fhl7KIhlh)UgNuic_b>1X@d@sMPe@2a zOiWBfNb(<${R@i!0~QW0EA%9*m!>31iSUSlzOoSaj3+-8!Q}bTx} zGq&o^CW?QcBSKwE1IEk&Bsf_2W#E7SIpFwwopYUcU|Hx+dDtV!C9N6JfM`xVn6XLi zB#NuwlZ~ZNH0#}kV0Y=o8Ah>ZxrWq1J_s8W*v{!0jy*2(BqnW|B&uGknf z9L7KWdSL-sp~TI9n4NO-Vf9YeX5_h3R!bMUyg*IIU(FEwBBJBVpxGdsb8I|u^-LUy z<_((+4F+(6`D1{*`QUWU+b0?09OQzY6ss@>8jmkSbE`YE;I$*=2pryUh5g#Fehb|O z%{imdH>HL@UE+QABc2*8^ryQHT@Ker9R}zqMW_+?`N#Ft_H;ehfaFyNZYX-~mXh=edgmafIf)m0ks!OxAt+4ww}Yp=6RM< zg@VA>gAB9J=Gc-0%>+r8Qz{IMH{+-tsN0;uPr69(SL z>H0fuUt)1yHL1(+2W^VC3I>Qd>B4a(%gNeMcfIz}NAQ5_zJIm23_s9InW++8brNBe zwS3$Tf9p`xsJ0OSP1XBd)E8Pxe7)g4+HNnvUY}Lx=7r(cKWn;~SF7XCNI;w95RARRcgWi%{FPmq z;cM?MG`f}{r~z`Zpc{Fn$VB{%*GIN{KLPgb?{p)`%y8ApkTuMPlxF1T{CC0~(I;gK zUD>sSY=K0{o+_ei!z9uIx@EJ($8^8cMlRLeo!@k?9oZ|Bwo6;Z%Kcz;%i96rI1Ypy%b)XBl6|{J0F30!aXU;0)iyTO z4_fJ|rHsG(1cCtN5(INnwnXAfg|{(k{11$g8&3TEloJPcUu;8qX&3lyxn$!&cC5y! zic^~3VNpo%wkR1LXH$|QTMx2fEOe%f`*Ga6yopg$_Tr)B+tnqiZsc>{P}C<+7-FrA zsg1Ibsi+%eFz7hpWZs-=CUA8+b4p*|o&IX!nT&SK9(0>VfcvEGH_{N~Z12N-Vki@10O5tA6c#}a(fBVAL(+=JY#{dj(5x1Sv zwV7Pk6RYvcIeEzn1!UR#8~%eQTMUuY8M!thjPK*!91WU>>Xi8+jTn5`1VzXicFcp` zhue?fR&wz~UU-izJ)lc83DWFSCnTj1+e(F57?4I7;$mvx;KETID!nTxsv33*P7h z{?-`xt-~m&B)GwLR;}`{j-k_HbO4>kXTnRJv{ThgP9sHXSf=nm?4GIIVie!@*BHU zI>hMfay_iw-7h<9@_H&P?}HL86z`bWpA^IP<|lc5IAc1@#XJ*XEN)@kpuk#)e=ETs z?T(Paw8)ySrm}!A)F*OwNaKH||>hiJi#dAU;OpcnZDm$O9`CR*kCk3$1tQIWg4K@L7j!D6%AKQ?toypydL|VhWt7!XOzGz zML~+8ZmsV|f%IvM1Cvq6fr;BML&0KsHv>tRlzd_HSq<8g{?bvU$Ba#9-e6%k_?_(_ zld`JmyYUoTMfbTB6W_!OgdS?@P}POLuHQxG&%`imH*55gHpAXLv|I|>Ql!shjve76 z@Knby*&J+aU44GgPoLzF9I{~iTT#ub$`2u@avdl|zjGloia2Yr-mK$Gpga;o!wXaU zUF<0y=oT|;!g+F|A$(lx&W@K_99fMD$wuKM9AI3`cll_B8HW#)#3q(!5L#E{={I;bxD@lmfeL{z?|%XFo|(3r|l#Mk;k`!34%W| z#8%E|mw4W;PNfS5!OMo7q@R6Jz{X}h#pVecQpcm2arPtCUvf4IGj2rcb=fqdYAu9y zjWzr0g>q%P-YK!X(KF4W)m>d!y9=OpwPJ+ycDJNmi!BFx{nbpd?a>!yOMAY&&Y65< z)sHBWxC*^hWH2)|{ccN#^MSLYR*Y}~_~>*h@k(a_KHkaItU`0>cl}-~((xueZK=S8BTG&7UPbBkFRwm%imMcax|5ygn;sLVyY6yV!G zA{Bn$(w&0nmdPyCf53?)g52=4_gMgS*$rFl?(-Mcw??XwbN|boG{&FgO6xZ*fZT9iV-Zjv3sH8!5n?F{GH9=pd8zvZb1TpnJIO7?Ut(O_s6WZ8q2SnYGVdj=StWWu6C=7Xys;hSQ9 zuuN^KSAR(H=d2zj{p#lNWOyQ}m9MT?%J`LV(P4K=QCDl6HFGiWMSdAQ*IDu&{a3zd zZ4Rgz6*_sg_cQ7&F7!t`-ILC8s)flht1$fQJ^?S1H(cAMCP>SL&qmsGW~)mz<-Ns& zkbty~>FR`^L8NHIFDB1FhrU&Aw4n@ikhZh9{wB|C5iXqkVz{Y?@Tz6o%A<+5@k;l3 z)H#vLUw!&LDB{u?dRSOHJSUU7LuS!Yn?hlkA#TxG+cI44?S$ySkDv>(w&#zbatZ{+ znO8r%_*kdTLp3J!Yd8+=WC5Pi?`4HS-{9U>dp#z1&VT3Vt!|>Y^f1iy;0q`7ucMOB z{GNm0O<|wy_EmqpIBAQ=dqfrf5nFcih|2P7Yb*Diyr~qdU(M3mu}B`Zr~atljGaUS z#^zQ`dl!3lMgd^u{vJKMEn^Lh@X=(ITNYIY@s`_k`#`}zYmWY~0O4Ive)f*STUTp( zgYMHw!p7X3QoA2U()e=m|A0D}z9!iFj;Vn+H0c*2Z}Gi94;UR|77R z&ro1r!@D51A(~}pYxjf{>*JiDiC*TnIo-b)fWOYZrn+TWq9EvekK>pOv{pWYILvLZ z9ThIGpfoj+);<24LH9xaW{Udiw5oU4E0;MhA)D$~o&PVW`mI`HGylUHY;vLFCG~;1 z@g?@J6(Qh_i(Ptx}SoOlVq4A#c;9!;Mke zQe?z>ImIysNbg`C5q3v~$)qWu^{7~!=fU#Ilq?rUSuzn{7j@1Z?Zno9c%J%6Ud04W z2l1GhAa*y=+q`EkJ#E*K>jmAY8V`!_NI@%=rBDqNq~au=bojKuky#cOBjsXXgW0{8dNVRT z-zkCz?62ztziM^m?Ny;(GOq_5M;;VCV2(Os2AtjcMBG!`>e38!7#uPd+KO91sk~*n$(uUk`y?2T+p2fqcAZh=gqjr>&3!ebG zwmm}KA(FP>?3hiJ-BGG6Kcp+cjhGkObbS3FnsbDETkp4)n-|9<0*PN0l=`!%RB<9B^{K-n?Q zF%JLG!B0(nroL5or$d92Oc7Dlf^@2?e^SdXbIzi7WLiL%$yd5Le35kH`V9f^*vWJnJSzy!>4zWv@|d!np1(f$2kD_i1@1_Ig3@_rYy)q3*`EPi2j3 z%;el3)*L0BYuNtGcSZw<;>{*>Wl6378`wgHl-#brUq){KUOYE%OVu87n?LA5n$LBj z+d2BiL&PSjhc(^*S`uzBiDe{VSK4&+lE82lxfp)M0WP?pr(JI1^6XP994IxZ8}jPV zKjQes+q<>z*HPGj0oW-RVi<5^13cdBi=*@y%ga!tgu)R0B?EC`Ij3_E9T$>D{O69oFSvr)dp3F1{KEj< z5;`2d9W90d`mcxkT5=_>T!INk0wCPUp{r`Fsq~U;Fhe$1z0{P^5&~CwYN=t)lHJBr z+E&$0oe$}h%lr~V#~dH2J2KVWo;NZS_28ImJ{b7?2QJWVXprc+5m(5u7SKe!U>+*w zQ_zp5%h#RhD&HKX8f6|XF{Bh-SUpUqQcMz0GU1V{A}^yKuuKeKk3X;t>~YcXBx7U` zWf#)gF$&55R`Qf06f+8KIta$khj;rk|n#X7r``UyvS;*($W1OL1Tm5tcB8`W@Y15We1nx_dDa~ zsomAHW*WVhrWK2A+~+frd0&?tkT_H7YPlq1?Zi909lc&+dbc+ zY0M$2Q895=PSt6a-LqDFj@_dLRfiDzlrq0m_G`b5^cs4m%Df#P6n1<6gp6AL=IN+r zmTGJSfnbBM3?fxOqTS!FT0P!+EoJvZqjAg0 zgUA=l`bJ5EG4^wSdQ0Xlfyt?&gNhyo_#Dh!#3|{3ax}4U^wkPJjaJEp@|7#pIf`GS z3$oR{x2YC{ZpvC5f7{=2E_BY+pw(_hF+c)2Y^fXJ=T}wI$^Uyq7DuRC*u-+{j?E>o z=Ti2W$)rxwFn368_NeQY{8^Y-TeBNv0oGg;(CVb4AuG=*v^gmC8|xM=Re8(3e-6rz z)Xa^`iG7;S!qkJMJ>f1kuBo3tAslq+f*3mp# z(ccXxHc2o?)i6dx@njaf-brW>T_vzwicmka_22^Em~z=jmAq%~sG0 z1MS32e_NHGGPf%A+NpXzbhEwRRGVqq4sSYOhhqKl5Pd;^`}74rRf1+=Xi!07$=$0O z5v9Amy?t1jf2CXoam9q7KY<$t(BcsZ)*L?xVt5~XX63tmH;e(IKHiDf+>)FI-s3k|@0C&i2mj zgjpvZYNv#o+55k#Ya5+IT1m8=U-wygCSU6B&%cD2*AGr_E6zSE9;D1mn`xUKo}llrA820#l1zrX;sb1ohjfR;3&xFK_x IAR9CLUqz_$)Bpeg literal 0 HcmV?d00001 diff --git a/register/images/speaker_block.gif b/register/images/speaker_block.gif new file mode 100644 index 0000000000000000000000000000000000000000..c57c61a1043de9d776799022130c3e7cc192b31c GIT binary patch literal 1232 zcmd6k=Tnmh0Eb@`AxLB>!-XOR8K%g2y%VcNDR&4cs92Q>N+W_ODE4|TMnJ>fOEySF zh$cb8-UOsF5`hwi5Hc`G1Vi?GlQ(Z#`&ab$;koDIbN4&#>+OCF-J%x{Z~=fR0jF0t zdOl3kRyQD6$5*HrBBe$PgOGNH%h$m0+`4dqFJp>Tb6-WX-&`sKHFTkz#^ozO%^Z7$ zB~ow%5}sVem&ljbcmf3|1J#Q{#ga%tVXrQURf_^S2ti6n%MdE~N;OL;BTs+i$&>=Q z^4%=GcVY(A!a}KB1M38Gg;E2lVI4!PoaC(W6yWFrYi3PAWpim?_1#5T z3eu{zFz~`vfr5B>~T{$tkI6=^2?>**Up+`2~eV#m`Gh%gQS%tE!)E zJ9iRw;Z=PD?)4iyf!O%AiPYTE+ScCD+11_C+t)up`p&_}HpR-EJT^|Dewdh?`g@wz zi1=Y2)_(8I5`)QNFMr~6A$HmT2A(Ut4Zc7q61$ooG(b9wLA3_b!g#|93p5EBB4ZId zTtd>b(+jp3?eweiX}0s)v}Ze#G}c@?E1L8ZUCXIKSODu%24#cCiJutF>XG z5^;;e7;kkvUhRS1YC}glP1pGp(T?ET-pt@Gl>J=o*N&UT2etO};oAvUazn_OHkE(a z`?o~SNQ?;`jluV$b!> z;EE6%*`zN&*y`$j4Qt|Ih)$;Z`+WM{>biSK z>TY-hoz|Ox;M}##bq~%sIFNcHlh8QEx$QdOel`0D#yc#hl9|2|{-ePC*E|mogPZwT z+k8Kxz4sjp(iQp{jNB|r_{qp2Y~4Sjw)iqFCA=j6(zrunFlO;`*^NMMc)6q?gBx_` zZN_5xJ^aUrs;d*ej<@c!oNKCM1K!_yQM+pN`eC98{+B;f3lB!Vq#dBFozL~iq`xe5 zvA$h@;##J2RPjBRs)m|*{X4Ho5B%`=>T2+Tcswnl#Iw-^2W;JZHs6!@&KVfqVsygx zFTF0ccarH@6!6sKus&f)&(2<~r*D8f?`2Gxdw_4RHN#UpzkZHPy0(@>Hz`_gF1xD$>jp`bc9BviLil=Oqc%JM11Hsp2$aQq(| Cgn+dG literal 0 HcmV?d00001 diff --git a/register/images/speaker_block_small.gif b/register/images/speaker_block_small.gif new file mode 100644 index 0000000000000000000000000000000000000000..30840ff747c6ddba857f52a47f64142b7797610c GIT binary patch literal 814 zcmZ?wbhEHbWMeF3xXQqA@#&jgXD;6T^z+iQw^v@izw_byt@mGVy#4a?&);`nzMg;l za`)NGC+|GE`{CQ?pTBEKOTSha{E0{!S8op zzkmGk`_9K7SMEQ0`TpaT`;SlDe)#?OpEsYrp1A$!&F8N#-hce{_a6iGfZ|UUuwgnN z667Zaw*L-|6OwP*_?%c$bTY?k{)H7KUTdS)-&j*tU7MpLvv9}6hqKPV*iv;iFWZ>c z@Yut3x8MKRBlr3M2bXwtQ*%peTc|iIyHtB`U;l(`DRvf)iPLAyoaM>E!aRGy!bR20 z42zeqSQ*2xY}LB;8@$(S+_H7~=50H7P2912-~Oh(2M!;}Idt^I$;jiU&Ytr>bNh;+`s=g zU4#o3IO?+UYpt17u+Uk9SKe#N)vQHFbp`dk&aAkoc)X9xzR5(RXvu*|YJV5{tjt&S zuGWh`)vbA1_Ux=zd5=t%7cbxOf1cf5M&4Dq8iCnv{Xwf&d`Y^r?Cd6}ww8iFJ-}L{)qNPjAba!sfd%v}Jb(UUiNx}Pln^%X6+~4=+6O-Nd z@`7cD+8%QH{oyry?A|ATIa=pu)RR-KddbJ!D?b~bo%gkY@9cWx%vH;!XZx)!HGREq zefO?D+cLA<&D)pvp7Xt6_C8{F{rXS3cS1irI^Cgse7DTakI#6fI`e<6*)`?WHAS!U zbrsg-NAG91UvI75GwIW_i5oUekqhHsV0PKk?wZ8V$niPeRUx3!vFXoBl>-i}tUL?{ zSs40^7+IJ_6dD-0JU%#ba%MepWEav%XpmszG4N($C z)NOD~<8hD4HHpVeA`J!y+LHb_dTOp=(R?z&MJ)5lL=Ux#qZsZru6!%=}qz;G#`H6w; zze7WThmKVLi6uoRbFAiHSn=_bM~KIbHD#yYR_%YVp~6RR_RgtC9tV{eocpk&#&3PK zWMAU4#P`4dHx%(oGB67^c64@i2r{z@bx)i$IYo$-g=5OB*|RuUnC2{8)XAj0c=?JF z|Bo?8wLoE2 z6I=C0uNirY&SiY^`?@s(<&JiJ)k`|Eyzue9KDob*Jdy<}o=s~0ay~1A621HM3l)2Q zrmLN`Gs`ziURfM;ZtuLJI;P%Z#VeE+x}8?=jasX5ImK`OuSl)0+*en{u1mVRs5E=~ zin!(`UhgSu&TmYcy2$tTl-!M5^A48qT3^q;yS9Aev$eazv+ggipSkXoi1>sKK_(Fq zwj~Y>jQrjI8x$HG4>z7Da-#=Jy Mt(OqxA;4e_0FWtDQUCw| literal 0 HcmV?d00001 diff --git a/register/images/sponsors.gif b/register/images/sponsors.gif new file mode 100644 index 0000000000000000000000000000000000000000..26efb212b3a0bf35cbb31e01f0927a78741e02c0 GIT binary patch literal 15326 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 literal 0 HcmV?d00001 diff --git a/register/images/tagzania.gif b/register/images/tagzania.gif new file mode 100644 index 0000000000000000000000000000000000000000..ca8c02f8ff5bb881fcc965fdfe0ccbbf306fbdd3 GIT binary patch literal 2533 zcmd6k=~q*C0ziK+?`2QOBWyuHU&10N3L# z0GLcBqtV#h+$F){J}{ris}Ki<1{udA!;-Me?so;|yI z_3E8FcW&Icar^e|j*gD0sj0!i!S?p{fq{Yk{{A;_-rT%-(_*o7c6N@Aj`sESUB7<) z#fuk1Lqn63lh2<&Z)Nnw~Z_H#amiG`F-E42G7Lmf6`^@PCi+1MJxc17K?VW_H2Q}G1?**H_za6hK6jnx^ib2 zqM$*STMg*4eEN-i4ZJ z#vz1i=blaD!~uw7((Gh>{zBF(ZwrOTm-_XV(AV z8Z~J(UR%Z6A+6K9Ln1Ek+{q^;j=e001+#o#+`ejIP?&#Q2o{^B`SxtCeO*%{L&>B% z3cS-$`N@$JRM+DR0o3>(*B@fD%9qX#14NgQ9vmgo==J zmwIX|VdQT;YfQidSlRwKp@#~Ya(E3MKwxd4bE$ho+u|ccHtgjf!~katnCrt?bvS+l zbt8mC@#{U2(#(S_#$dcg%fTXyJwW6gTUara18xcDx4u#&r zOqAIz@AoUd6EZ?!2v!FQaC){Bf1t^!C3ry4q#1i*_>O1Pw4h3U_T=2>QJL_wer zuRq_*@Hv|Q@8t0V-)xT@DWpUzQUEU`iNY(OP8vl$L94;3{1EvNwVkh0Z)Pe$7cD1E zOy=46>jiK?^klIx&@$#GqWLcebdPv#CAPOU1xkjx6vS*3AoMRT=Ts=%`F>d_2`&dE z!AJpA2Qh_u5YKnlU>7(pi-V85|BC|tDSSu6B>Yj!TRlb;WX163pk#9vJcCCISp?cg zUAxDT4BhaPfBi9yG?HL1Y?0P8zTR4P`uA*nD1r0(0QyRFFv^R=TbbbhHQ&cIF#&wf zSNz!c>S}ol)nMrwMr*KK z5={vyLpU-;TbRg(^!EAn#0RgA*>Tk$MK%Rz*>83W7bV>JE)UV%?l4$3`5Eu~rb)lt z6*1zPxns_7*Fa4Kp=2f@9|0s^uc&T!7JW0`q3n|BiAyW#5uX}LR8h-A+fb`xq=LxT zAG+$1rc3@cojgR7tpq5`x7uU_Ue0F}My7s-FurV*UAQ2*QUSyz1U+X=WwNdKRYkgP z*88iuDSlpNcZ7BG{O1`Ql86)=$2_bQr%aM+t|}Q15pyM0?3Z!x;oZwuF*aMnk?<+P zh7f~u4x^M!QO?|AdH8dC0J478uy!lTfAg%QNdPUeh*X|{tki6*RP7oV;6dt8zpBTf z@A}kVcqPtK-ws0&G+Pyflk`olu8f0Aqa+4mi<7K?m!&u-k;}Ju%ID7e87LE%iQr{@ zBRs^Yk{9XY^9dzKDu*|g5D*7c@(y(pm4!Pf+%cSdxT|>z&7N2bgo{>v79b;#f#Tf*Ph~VjxhH9usKIPmb|k{;+Y=P4((#I zd~7fXTx8DU%Df%U%mnCmU$pbG(u1SS$N5^kY+W%voVufB-{p&Tv0-7%v^u~Rk1c}_ zOQ`G3$}G&dd!K?7IaL6mjzP~~G zkjGmE^ORC_Yxc`!8cwPlI1QdV;N8&$JHr^JpkgvSX;1{-R}`kTvKIA`~np5BDM;0GWfX*0hc4#L+$7y z{~=sLVddeli{S@Od6@oLR z52K-=2@SL&jL#OAA}hc6#&)q-!rIVq&!rkCGuN1qdu1BOj45bm{}Oh*Ugc^zOI + + + State Of The Map 2010 - Register + + + + + + + + +

+ +
+

The State of the Map 2010 will feature talks and workshops from the leading members of the OpenStreetMap community. You'll have the opportunity to hear at first hand from the people who make the maps, write the code and lead the rapidly growing community of worldwide mappers.

+
+

Previous speakers have included:

+
+

This year's conference themes:

+
    +
  • Living the Map — Maps have long been a source of power, control and wealth in the world. How is OpenStreetMap's free map changing the communities that you live in or work with? What are the social implications of a free and open map in different countries around the world? How can OpenStreetMap help make the world a better place
  • +
  • Mapping for the Masses — OpenStreetMap has come a long way in the last 5 years. But how can we make sure OpenStreetMap continues to grow and thrive for the next 5 years? "Mapping for the Masses" invites speakers to present about their thoughts, opinions, projects or tools that will help OpenStreetMap grow and help its open map become the richest and most detailed in the world.
  • +
  • OpenStreetMap Tech Talk — + OpenStreetMap has a vibrant community of hackers, systems administrators and app developers whose work keeps OpenStreetMap going and growing. Maybe you are working on a new OpenStreetMap editor, plugin, renderer, API or application that you'd like to share with everyone. If you hang out on OSM-Dev, dream in bash syntax and know OpenStreetMap's API structure off by heart, this is the place for you to share your knowledge and ideas.
  • +
  • Powered by OpenStreetMap — In the last 12 months, OpenStreetMap powered apps have appeared in app stores and on the web like never before. More organisations from governments to universities, NGOs, navigation providers and web portals are using OpenStreetMap than every before. This session invites any users of OpenStreetMap to share their experiences creating OpenStreetMap powered applications and services.
  • +
+
    +
  • Find out about the latest developments in the OpenStreetMap world
  • +
  • Get tips on using OpenStreetMap data and tools in your projects
  • +
  • Relax and socialize in a friendly atmosphere with like minded mappers from around the world
  • +
  • Find out more about the State of the Map
  • +
+
+ +
+ + + + + + + + diff --git a/register/javascript/prototype.js b/register/javascript/prototype.js new file mode 100644 index 0000000..6385503 --- /dev/null +++ b/register/javascript/prototype.js @@ -0,0 +1,4221 @@ +/* Prototype JavaScript framework, version 1.6.0.2 + * (c) 2005-2008 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.6.0.2', + + Browser: { + IE: !!(window.attachEvent && !window.opera), + Opera: !!window.opera, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div').__proto__ && + document.createElement('div').__proto__ !== + document.createElement('form').__proto__ + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + + +/* Based on Alex Arnell's inheritance implementation. */ +var Class = { + create: function() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + var subclass = function() { }; + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0; i < properties.length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + + return klass; + } +}; + +Class.Methods = { + addMethods: function(source) { + var ancestor = this.superclass && this.superclass.prototype; + var properties = Object.keys(source); + + if (!Object.keys({ toString: true }).length) + properties.push("toString", "valueOf"); + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames().first() == "$super") { + var method = value, value = Object.extend((function(m) { + return function() { return ancestor[m].apply(this, arguments) }; + })(property).wrap(method), { + valueOf: function() { return method }, + toString: function() { return method.toString() } + }); + } + this.prototype[property] = value; + } + + return this; + } +}; + +var Abstract = { }; + +Object.extend = function(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; +}; + +Object.extend(Object, { + inspect: function(object) { + try { + if (Object.isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + toJSON: function(object) { + var type = typeof object; + switch (type) { + case 'undefined': + case 'function': + case 'unknown': return; + case 'boolean': return object.toString(); + } + + if (object === null) return 'null'; + if (object.toJSON) return object.toJSON(); + if (Object.isElement(object)) return; + + var results = []; + for (var property in object) { + var value = Object.toJSON(object[property]); + if (!Object.isUndefined(value)) + results.push(property.toJSON() + ': ' + value); + } + + return '{' + results.join(', ') + '}'; + }, + + toQueryString: function(object) { + return $H(object).toQueryString(); + }, + + toHTML: function(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({ }, object); + }, + + isElement: function(object) { + return object && object.nodeType == 1; + }, + + isArray: function(object) { + return object != null && typeof object == "object" && + 'splice' in object && 'join' in object; + }, + + isHash: function(object) { + return object instanceof Hash; + }, + + isFunction: function(object) { + return typeof object == "function"; + }, + + isString: function(object) { + return typeof object == "string"; + }, + + isNumber: function(object) { + return typeof object == "number"; + }, + + isUndefined: function(object) { + return typeof object == "undefined"; + } +}); + +Object.extend(Function.prototype, { + argumentNames: function() { + var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); + return names.length == 1 && !names[0] ? [] : names; + }, + + bind: function() { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } + }, + + bindAsEventListener: function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + } + }, + + curry: function() { + if (!arguments.length) return this; + var __method = this, args = $A(arguments); + return function() { + return __method.apply(this, args.concat($A(arguments))); + } + }, + + delay: function() { + var __method = this, args = $A(arguments), timeout = args.shift() * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + }, + + wrap: function(wrapper) { + var __method = this; + return function() { + return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); + } + }, + + methodize: function() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + return __method.apply(null, [this].concat($A(arguments))); + }; + } +}); + +Function.prototype.defer = Function.prototype.delay.curry(0.01); + +Date.prototype.toJSON = function() { + return '"' + this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z"'; +}; + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + } finally { + this.currentlyExecuting = false; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var self = arguments.callee; + self.text.data = this; + return self.div.innerHTML; + }, + + unescapeHTML: function() { + var div = new Element('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()); + var value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + times: function(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { + var character = String.specialChar[match[0]]; + return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + }, + + toJSON: function() { + return this.inspect(true); + }, + + unfilterJSON: function(filter) { + return this.sub(filter || Prototype.JSONFilter, '#{1}'); + }, + + isJSON: function() { + var str = this; + if (str.blank()) return false; + str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); + }, + + evalJSON: function(sanitize) { + var json = this.unfilterJSON(); + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + }, + + include: function(pattern) { + return this.indexOf(pattern) > -1; + }, + + startsWith: function(pattern) { + return this.indexOf(pattern) === 0; + }, + + endsWith: function(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.lastIndexOf(pattern) === d; + }, + + empty: function() { + return this == ''; + }, + + blank: function() { + return /^\s*$/.test(this); + }, + + interpolate: function(object, pattern) { + return new Template(this, pattern).evaluate(object); + } +}); + +if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { + escapeHTML: function() { + return this.replace(/&/g,'&').replace(//g,'>'); + }, + unescapeHTML: function() { + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +}; + +String.prototype.parseQuery = String.prototype.toQueryParams; + +Object.extend(String.prototype.escapeHTML, { + div: document.createElement('div'), + text: document.createTextNode('') +}); + +with (String.prototype.escapeHTML) div.appendChild(text); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return ''; + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3]; + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = { + each: function(iterator, context) { + var index = 0; + iterator = iterator.bind(context); + try { + this._each(function(value) { + iterator(value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + }, + + all: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator(value, index)); + }); + return results; + }, + + detect: function(iterator, context) { + iterator = iterator.bind(context); + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(filter, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(filter); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator(value, index)); + }); + return results; + }, + + include: function(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator, context) { + iterator = iterator.bind(context); + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == null || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == null || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator, context) { + iterator = iterator.bind(context); + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +}; + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + filter: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray, + every: Enumerable.all, + some: Enumerable.any +}); +function $A(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + +if (Prototype.Browser.WebKit) { + $A = function(iterable) { + if (!iterable) return []; + if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && + iterable.toArray) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; + }; +} + +Array.from = $A; + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(Object.isArray(value) ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + }, + + intersect: function(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + }, + + toJSON: function() { + var results = []; + this.each(function(object) { + var value = Object.toJSON(object); + if (!Object.isUndefined(value)) results.push(value); + }); + return '[' + results.join(', ') + ']'; + } +}); + +// use native browser JS 1.6 implementation if available +if (Object.isFunction(Array.prototype.forEach)) + Array.prototype._each = Array.prototype.forEach; + +if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; +}; + +if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; +}; + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if (Prototype.Browser.Opera){ + Array.prototype.concat = function() { + var array = []; + for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for (var i = 0, length = arguments.length; i < length; i++) { + if (Object.isArray(arguments[i])) { + for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + }; +} +Object.extend(Number.prototype, { + toColorPart: function() { + return this.toPaddedString(2, 16); + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + }, + + toPaddedString: function(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + }, + + toJSON: function() { + return isFinite(this) ? this.toString() : 'null'; + } +}); + +$w('abs round ceil floor').each(function(method){ + Number.prototype[method] = Math[method].methodize(); +}); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + return { + initialize: function(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + }, + + _each: function(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + set: function(key, value) { + return this._object[key] = value; + }, + + get: function(key) { + return this._object[key]; + }, + + unset: function(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + }, + + toObject: function() { + return Object.clone(this._object); + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + index: function(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + }, + + merge: function(object) { + return this.clone().update(object); + }, + + update: function(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + }, + + toQueryString: function() { + return this.map(function(pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return values.map(toQueryPair.curry(key)).join('&'); + } + return toQueryPair(key, values); + }).join('&'); + }, + + inspect: function() { + return '#'; + }, + + toJSON: function() { + return Object.toJSON(this.toObject()); + }, + + clone: function() { + return new Hash(this); + } + } +})()); + +Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; +Hash.from = $H; +var ObjectRange = Class.create(Enumerable, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); + +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isString(this.options.parameters)) + this.options.parameters = this.options.parameters.toQueryParams(); + else if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); + +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.clone(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + this.parameters = params; + + if (params = Object.toQueryString(params)) { + // when GET, append parameters to URL + if (this.method == 'get') + this.url += (this.url.include('?') ? '&' : '?') + params; + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + params += '&_='; + } + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300); + }, + + getStatus: function() { + try { + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if(readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + // DOM level 2 ECMAScript Language Binding + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + +(function() { + var element = this.Element; + this.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + if (Prototype.Browser.IE && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); + }; + Object.extend(this.Element, element || { }); +}).call(window); + +Element.cache = { }; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + content = Object.toHTML(content); + element.innerHTML = content.stripScripts(); + content.evalScripts.bind(content).defer(); + return element; + }, + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, insert, tagName, childNodes; + + for (var position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + insert = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + insert(element, content); + continue; + } + + content = Object.toHTML(content); + + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position == 'top' || position == 'after') childNodes.reverse(); + childNodes.each(insert.curry(element)); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $(element).select("*"); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (Object.isString(selector)) + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = element.ancestors(); + return Object.isNumber(expression) ? ancestors[expression] : + Selector.findElement(ancestors, expression, index); + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? element.descendants()[expression] : + element.select(expression)[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); + var previousSiblings = element.previousSiblings(); + return Object.isNumber(expression) ? previousSiblings[expression] : + Selector.findElement(previousSiblings, expression, index); + }, + + next: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); + var nextSiblings = element.nextSiblings(); + return Object.isNumber(expression) ? nextSiblings[expression] : + Selector.findElement(nextSiblings, expression, index); + }, + + select: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + adjacent: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element.parentNode, args).without(element); + }, + + identify: function(element) { + element = $(element); + var id = element.readAttribute('id'), self = arguments.callee; + if (id) return id; + do { id = 'anonymous_element_' + self.counter++ } while ($(id)); + element.writeAttribute('id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = Object.isUndefined(value) ? true : value; + + for (var attr in attributes) { + name = t.names[attr] || attr; + value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!element.hasClassName(className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return element[element.hasClassName(className) ? + 'removeClassName' : 'addClassName'](className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + var originalAncestor = ancestor; + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (element.sourceIndex && !Prototype.Browser.Opera) { + var e = element.sourceIndex, a = ancestor.sourceIndex, + nextAncestor = ancestor.nextSibling; + if (!nextAncestor) { + do { ancestor = ancestor.parentNode; } + while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); + } + if (nextAncestor && nextAncestor.sourceIndex) + return (e > a && e < nextAncestor.sourceIndex); + } + + while (element = element.parentNode) + if (element == originalAncestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = element.cumulativeOffset(); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (element.tagName == 'BODY') break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + absolutize: function(element) { + element = $(element); + if (element.getStyle('position') == 'absolute') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + var offsets = element.positionedOffset(); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + return element; + }, + + relativize: function(element) { + element = $(element); + if (element.getStyle('position') == 'relative') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + return element; + }, + + cumulativeScrollOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + getOffsetParent: function(element) { + if (element.offsetParent) return $(element.offsetParent); + if (element == document.body) return $(element); + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return $(element); + + return $(document.body); + }, + + viewportOffset: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && + Element.getStyle(element, 'position') == 'absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!Prototype.Browser.Opera || element.tagName == 'BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return Element._returnOffset(valueL, valueT); + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + // find page position of source + source = $(source); + var p = source.viewportOffset(); + + // find coordinate system to use + element = $(element); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { + parent = element.getOffsetParent(); + delta = parent.viewportOffset(); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Element.Methods.identify.counter = 1; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (Prototype.Browser.Opera) { + Element.Methods.getStyle = Element.Methods.getStyle.wrap( + function(proceed, element, style) { + switch (style) { + case 'left': case 'top': case 'right': case 'bottom': + if (proceed(element, 'position') === 'static') return null; + case 'height': case 'width': + // returns '0px' for hidden elements; we want it to return null + if (!Element.visible(element)) return null; + + // returns the border-box dimensions rather than the content-box + // dimensions, so we subtract padding and borders from the value + var dim = parseInt(proceed(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + var properties; + if (style === 'height') { + properties = ['border-top-width', 'padding-top', + 'padding-bottom', 'border-bottom-width']; + } + else { + properties = ['border-left-width', 'padding-left', + 'padding-right', 'border-right-width']; + } + return properties.inject(dim, function(memo, property) { + var val = proceed(element, property); + return val === null ? memo : memo - parseInt(val, 10); + }) + 'px'; + default: return proceed(element, style); + } + } + ); + + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( + function(proceed, element, attribute) { + if (attribute === 'title') return element.title; + return proceed(element, attribute); + } + ); +} + +else if (Prototype.Browser.IE) { + // IE doesn't report offsets correctly for static elements, so we change them + // to "relative" to get the values, then change them back. + Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + $w('positionedOffset viewportOffset').each(function(method) { + Element.Methods[method] = Element.Methods[method].wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + // Trigger hasLayout on the offset parent so that IE6 reports + // accurate offsetTop and offsetLeft values for position: fixed. + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + offsetParent.setStyle({ zoom: 1 }); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + }); + + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = { + read: { + names: { + 'class': 'className', + 'for': 'htmlFor' + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: function(element, attribute) { + attribute = element.getAttribute(attribute); + return attribute ? attribute.toString().slice(23, -2) : null; + }, + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + + Element._attributeTranslations.write = { + names: Object.extend({ + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr, + src: v._getAttr, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if(element.tagName == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; + + // Safari returns margins on body which is incorrect if the child is absolutely + // positioned. For performance reasons, redefine Element#cumulativeOffset for + // KHTML/WebKit only. + Element.Methods.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return Element._returnOffset(valueL, valueT); + }; +} + +if (Prototype.Browser.IE || Prototype.Browser.Opera) { + // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements + Element.Methods.update = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName in Element._insertionTranslations.tags) { + $A(element.childNodes).each(function(node) { element.removeChild(node) }); + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { element.appendChild(node) }); + } + else element.innerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +if ('outerHTML' in document.createElement('div')) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(); + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html) { + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + if (t) { + div.innerHTML = t[0] + html + t[1]; + t[2].times(function() { div = div.firstChild }); + } else div.innerHTML = html; + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + tags: { + TABLE: ['', '
', 1], + TBODY: ['', '
', 2], + TR: ['', '
', 3], + TD: ['
', '
', 4], + SELECT: ['', 1] + } +}; + +(function() { + Object.extend(this.tags, { + THEAD: this.tags.TBODY, + TFOOT: this.tags.TBODY, + TH: this.tags.TD + }); +}).call(Element._insertionTranslations); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return node && node.specified; + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +if (!Prototype.BrowserFeatures.ElementExtensions && + document.createElement('div').__proto__) { + window.HTMLElement = { }; + window.HTMLElement.prototype = document.createElement('div').__proto__; + Prototype.BrowserFeatures.ElementExtensions = true; +} + +Element.extend = (function() { + if (Prototype.BrowserFeatures.SpecificElementExtensions) + return Prototype.K; + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || element._extendedByPrototype || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName, property, value; + + // extend methods for specific tags + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + for (property in methods) { + value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + // extend methods for all tags (Safari doesn't need this) + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +Element.hasAttribute = function(element, attribute) { + if (element.hasAttribute) return element.hasAttribute(attribute); + return Element.Methods.Simulated.hasAttribute(element, attribute); +}; + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + window[klass] = { }; + window[klass].prototype = document.createElement(tagName).__proto__; + return window[klass]; + } + + if (F.ElementExtensions) { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + +document.viewport = { + getDimensions: function() { + var dimensions = { }; + var B = Prototype.Browser; + $w('width height').each(function(d) { + var D = d.capitalize(); + dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] : + (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D]; + }); + return dimensions; + }, + + getWidth: function() { + return this.getDimensions().width; + }, + + getHeight: function() { + return this.getDimensions().height; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; +/* Portions of the Selector class are derived from Jack Slocum’s DomQuery, + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style + * license. Please see http://www.yui-ext.com/ for more information. */ + +var Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + this.compileMatcher(); + }, + + shouldUseXPath: function() { + if (!Prototype.BrowserFeatures.XPath) return false; + + var e = this.expression; + + // Safari 3 chokes on :*-of-type and :empty + if (Prototype.Browser.WebKit && + (e.include("-of-type") || e.include(":empty"))) + return false; + + // XPath can't do namespaced attributes, nor can it read + // the "checked" property from DOM nodes + if ((/(\[[\w-]*?:|:checked)/).test(this.expression)) + return false; + + return true; + }, + + compileMatcher: function() { + if (this.shouldUseXPath()) + return this.compileXPathMatcher(); + + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, + c = Selector.criteria, le, p, m; + + if (Selector._cache[e]) { + this.matcher = Selector._cache[e]; + return; + } + + this.matcher = ["this.matcher = function(root) {", + "var r = root, h = Selector.handlers, c = false, n;"]; + + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : + new Template(c[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.matcher.push("return h.unique(n);\n}"); + eval(this.matcher.join('\n')); + Selector._cache[this.expression] = this.matcher; + }, + + compileXPathMatcher: function() { + var e = this.expression, ps = Selector.patterns, + x = Selector.xpath, le, m; + + if (Selector._cache[e]) { + this.xpath = Selector._cache[e]; return; + } + + this.matcher = ['.//*']; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + if (m = e.match(ps[i])) { + this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : + new Template(x[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.xpath = this.matcher.join(''); + Selector._cache[this.expression] = this.xpath; + }, + + findElements: function(root) { + root = root || document; + if (this.xpath) return document._getElementsByXPath(this.xpath, root); + return this.matcher(root); + }, + + match: function(element) { + this.tokens = []; + + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; + var le, p, m; + + while (e && le !== e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + // use the Selector.assertions methods unless the selector + // is too complex. + if (as[i]) { + this.tokens.push([i, Object.clone(m)]); + e = e.replace(m[0], ''); + } else { + // reluctantly do a document-wide search + // and look for a match in the array + return this.findElements(document).include(element); + } + } + } + } + + var match = true, name, matches; + for (var i = 0, token; token = this.tokens[i]; i++) { + name = token[0], matches = token[1]; + if (!Selector.assertions[name](element, matches)) { + match = false; break; + } + } + + return match; + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } +}); + +Object.extend(Selector, { + _cache: { }, + + xpath: { + descendant: "//*", + child: "/*", + adjacent: "/following-sibling::*[1]", + laterSibling: '/following-sibling::*', + tagName: function(m) { + if (m[1] == '*') return ''; + return "[local-name()='" + m[1].toLowerCase() + + "' or local-name()='" + m[1].toUpperCase() + "']"; + }, + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", + id: "[@id='#{1}']", + attrPresence: function(m) { + m[1] = m[1].toLowerCase(); + return new Template("[@#{1}]").evaluate(m); + }, + attr: function(m) { + m[1] = m[1].toLowerCase(); + m[3] = m[5] || m[6]; + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); + }, + pseudo: function(m) { + var h = Selector.xpath.pseudos[m[1]]; + if (!h) return ''; + if (Object.isFunction(h)) return h(m); + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); + }, + operators: { + '=': "[@#{1}='#{3}']", + '!=': "[@#{1}!='#{3}']", + '^=': "[starts-with(@#{1}, '#{3}')]", + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", + '*=': "[contains(@#{1}, '#{3}')]", + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" + }, + pseudos: { + 'first-child': '[not(preceding-sibling::*)]', + 'last-child': '[not(following-sibling::*)]', + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', + 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", + 'checked': "[@checked]", + 'disabled': "[@disabled]", + 'enabled': "[not(@disabled)]", + 'not': function(m) { + var e = m[6], p = Selector.patterns, + x = Selector.xpath, le, v; + + var exclusion = []; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in p) { + if (m = e.match(p[i])) { + v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); + e = e.replace(m[0], ''); + break; + } + } + } + return "[not(" + exclusion.join(" and ") + ")]"; + }, + 'nth-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); + }, + 'nth-last-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); + }, + 'nth-of-type': function(m) { + return Selector.xpath.pseudos.nth("position() ", m); + }, + 'nth-last-of-type': function(m) { + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); + }, + 'first-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); + }, + 'last-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); + }, + 'only-of-type': function(m) { + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); + }, + nth: function(fragment, m) { + var mm, formula = m[6], predicate; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + if (mm = formula.match(/^(\d+)$/)) // digit only + return '[' + fragment + "= " + mm[1] + ']'; + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (mm[1] == "-") mm[1] = -1; + var a = mm[1] ? Number(mm[1]) : 1; + var b = mm[2] ? Number(mm[2]) : 0; + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + + "((#{fragment} - #{b}) div #{a} >= 0)]"; + return new Template(predicate).evaluate({ + fragment: fragment, a: a, b: b }); + } + } + } + }, + + criteria: { + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', + className: 'n = h.className(n, r, "#{1}", c); c = false;', + id: 'n = h.id(n, r, "#{1}", c); c = false;', + attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', + attr: function(m) { + m[3] = (m[5] || m[6]); + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); + }, + pseudo: function(m) { + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); + }, + descendant: 'c = "descendant";', + child: 'c = "child";', + adjacent: 'c = "adjacent";', + laterSibling: 'c = "laterSibling";' + }, + + patterns: { + // combinators must be listed first + // (and descendant needs to be last combinator) + laterSibling: /^\s*~\s*/, + child: /^\s*>\s*/, + adjacent: /^\s*\+\s*/, + descendant: /^\s/, + + // selectors follow + tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, + id: /^#([\w\-\*]+)(\b|$)/, + className: /^\.([\w\-\*]+)(\b|$)/, + pseudo: +/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, + attrPresence: /^\[([\w]+)\]/, + attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ + }, + + // for Selector.match and Element#match + assertions: { + tagName: function(element, matches) { + return matches[1].toUpperCase() == element.tagName.toUpperCase(); + }, + + className: function(element, matches) { + return Element.hasClassName(element, matches[1]); + }, + + id: function(element, matches) { + return element.id === matches[1]; + }, + + attrPresence: function(element, matches) { + return Element.hasAttribute(element, matches[1]); + }, + + attr: function(element, matches) { + var nodeValue = Element.readAttribute(element, matches[1]); + return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); + } + }, + + handlers: { + // UTILITY FUNCTIONS + // joins two collections + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + a.push(node); + return a; + }, + + // marks an array of nodes for counting + mark: function(nodes) { + var _true = Prototype.emptyFunction; + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = _true; + return nodes; + }, + + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._countedByPrototype = undefined; + return nodes; + }, + + // mark each child node with its position (for nth calls) + // "ofType" flag indicates whether we're indexing for nth-of-type + // rather than nth-child + index: function(parentNode, reverse, ofType) { + parentNode._countedByPrototype = Prototype.emptyFunction; + if (reverse) { + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { + var node = nodes[i]; + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + } else { + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; + } + }, + + // filters out duplicates and extends all nodes + unique: function(nodes) { + if (nodes.length == 0) return nodes; + var results = [], n; + for (var i = 0, l = nodes.length; i < l; i++) + if (!(n = nodes[i])._countedByPrototype) { + n._countedByPrototype = Prototype.emptyFunction; + results.push(Element.extend(n)); + } + return Selector.handlers.unmark(results); + }, + + // COMBINATOR FUNCTIONS + descendant: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName('*')); + return results; + }, + + child: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) { + for (var j = 0, child; child = node.childNodes[j]; j++) + if (child.nodeType == 1 && child.tagName != '!') results.push(child); + } + return results; + }, + + adjacent: function(nodes) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + var next = this.nextElementSibling(node); + if (next) results.push(next); + } + return results; + }, + + laterSibling: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, Element.nextSiblings(node)); + return results; + }, + + nextElementSibling: function(node) { + while (node = node.nextSibling) + if (node.nodeType == 1) return node; + return null; + }, + + previousElementSibling: function(node) { + while (node = node.previousSibling) + if (node.nodeType == 1) return node; + return null; + }, + + // TOKEN FUNCTIONS + tagName: function(nodes, root, tagName, combinator) { + var uTagName = tagName.toUpperCase(); + var results = [], h = Selector.handlers; + if (nodes) { + if (combinator) { + // fastlane for ordinary descendant combinators + if (combinator == "descendant") { + for (var i = 0, node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName(tagName)); + return results; + } else nodes = this[combinator](nodes); + if (tagName == "*") return nodes; + } + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName.toUpperCase() === uTagName) results.push(node); + return results; + } else return root.getElementsByTagName(tagName); + }, + + id: function(nodes, root, id, combinator) { + var targetNode = $(id), h = Selector.handlers; + if (!targetNode) return []; + if (!nodes && root == document) return [targetNode]; + if (nodes) { + if (combinator) { + if (combinator == 'child') { + for (var i = 0, node; node = nodes[i]; i++) + if (targetNode.parentNode == node) return [targetNode]; + } else if (combinator == 'descendant') { + for (var i = 0, node; node = nodes[i]; i++) + if (Element.descendantOf(targetNode, node)) return [targetNode]; + } else if (combinator == 'adjacent') { + for (var i = 0, node; node = nodes[i]; i++) + if (Selector.handlers.previousElementSibling(targetNode) == node) + return [targetNode]; + } else nodes = h[combinator](nodes); + } + for (var i = 0, node; node = nodes[i]; i++) + if (node == targetNode) return [targetNode]; + return []; + } + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; + }, + + className: function(nodes, root, className, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + return Selector.handlers.byClassName(nodes, root, className); + }, + + byClassName: function(nodes, root, className) { + if (!nodes) nodes = Selector.handlers.descendant([root]); + var needle = ' ' + className + ' '; + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { + nodeClassName = node.className; + if (nodeClassName.length == 0) continue; + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) + results.push(node); + } + return results; + }, + + attrPresence: function(nodes, root, attr, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (Element.hasAttribute(node, attr)) results.push(node); + return results; + }, + + attr: function(nodes, root, attr, value, operator, combinator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + if (nodes && combinator) nodes = this[combinator](nodes); + var handler = Selector.operators[operator], results = []; + for (var i = 0, node; node = nodes[i]; i++) { + var nodeValue = Element.readAttribute(node, attr); + if (nodeValue === null) continue; + if (handler(nodeValue, value)) results.push(node); + } + return results; + }, + + pseudo: function(nodes, name, value, root, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + if (!nodes) nodes = root.getElementsByTagName("*"); + return Selector.pseudos[name](nodes, value, root); + } + }, + + pseudos: { + 'first-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.previousElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'last-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.nextElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'only-child': function(nodes, value, root) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) + results.push(node); + return results; + }, + 'nth-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root); + }, + 'nth-last-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true); + }, + 'nth-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, false, true); + }, + 'nth-last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true, true); + }, + 'first-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, false, true); + }, + 'last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, true, true); + }, + 'only-of-type': function(nodes, formula, root) { + var p = Selector.pseudos; + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); + }, + + // handles the an+b logic + getIndices: function(a, b, total) { + if (a == 0) return b > 0 ? [b] : []; + return $R(1, total).inject([], function(memo, i) { + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); + return memo; + }); + }, + + // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type + nth: function(nodes, formula, root, reverse, ofType) { + if (nodes.length == 0) return []; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + var h = Selector.handlers, results = [], indexed = [], m; + h.mark(nodes); + for (var i = 0, node; node = nodes[i]; i++) { + if (!node.parentNode._countedByPrototype) { + h.index(node.parentNode, reverse, ofType); + indexed.push(node.parentNode); + } + } + if (formula.match(/^\d+$/)) { // just a number + formula = Number(formula); + for (var i = 0, node; node = nodes[i]; i++) + if (node.nodeIndex == formula) results.push(node); + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (m[1] == "-") m[1] = -1; + var a = m[1] ? Number(m[1]) : 1; + var b = m[2] ? Number(m[2]) : 0; + var indices = Selector.pseudos.getIndices(a, b, nodes.length); + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { + for (var j = 0; j < l; j++) + if (node.nodeIndex == indices[j]) results.push(node); + } + } + h.unmark(nodes); + h.unmark(indexed); + return results; + }, + + 'empty': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + // IE treats comments as element nodes + if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue; + results.push(node); + } + return results; + }, + + 'not': function(nodes, selector, root) { + var h = Selector.handlers, selectorType, m; + var exclusions = new Selector(selector).findElements(root); + h.mark(exclusions); + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node._countedByPrototype) results.push(node); + h.unmark(exclusions); + return results; + }, + + 'enabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node.disabled) results.push(node); + return results; + }, + + 'disabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.disabled) results.push(node); + return results; + }, + + 'checked': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.checked) results.push(node); + return results; + } + }, + + operators: { + '=': function(nv, v) { return nv == v; }, + '!=': function(nv, v) { return nv != v; }, + '^=': function(nv, v) { return nv.startsWith(v); }, + '$=': function(nv, v) { return nv.endsWith(v); }, + '*=': function(nv, v) { return nv.include(v); }, + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, + '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } + }, + + split: function(expression) { + var expressions = []; + expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { + expressions.push(m[1].strip()); + }); + return expressions; + }, + + matchElements: function(elements, expression) { + var matches = $$(expression), h = Selector.handlers; + h.mark(matches); + for (var i = 0, results = [], element; element = elements[i]; i++) + if (element._countedByPrototype) results.push(element); + h.unmark(matches); + return results; + }, + + findElement: function(elements, expression, index) { + if (Object.isNumber(expression)) { + index = expression; expression = false; + } + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + expressions = Selector.split(expressions.join(',')); + var results = [], h = Selector.handlers; + for (var i = 0, l = expressions.length, selector; i < l; i++) { + selector = new Selector(expressions[i].strip()); + h.concat(results, selector.findElements(element)); + } + return (l > 1) ? h.unique(results) : results; + } +}); + +if (Prototype.Browser.IE) { + Object.extend(Selector.handlers, { + // IE returns comment nodes on getElementsByTagName("*"). + // Filter them out. + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + if (node.tagName !== "!") a.push(node); + return a; + }, + + // IE improperly serializes _countedByPrototype in (inner|outer)HTML. + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node.removeAttribute('_countedByPrototype'); + return nodes; + } + }); +} + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit; + + var data = elements.inject({ }, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + if (key in result) { + // a key is already present; construct an array of values + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return options.hash ? data : Object.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.blur(); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element, value); + default: + return Form.Element.Serializers.textarea(element, value); + } + }, + + inputSelector: function(element, value) { + if (Object.isUndefined(value)) return element.checked ? element.value : null; + else element.checked = !!value; + }, + + textarea: function(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + }, + + select: function(element, index) { + if (Object.isUndefined(index)) + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + else { + var opt, value, single = !Object.isArray(index); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + value = this.optionValue(opt); + if (single) { + if (value == index) { + opt.selected = true; + return; + } + } + else opt.selected = index.include(value); + } + } + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +}; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) var Event = { }; + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: { }, + + relatedTarget: function(event) { + var element; + switch(event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } +}); + +Event.Methods = (function() { + var isButton; + + if (Prototype.Browser.IE) { + var buttonMap = { 0: 1, 1: 4, 2: 2 }; + isButton = function(event, code) { + return event.button == buttonMap[code]; + }; + + } else if (Prototype.Browser.WebKit) { + isButton = function(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 1 && event.metaKey; + default: return false; + } + }; + + } else { + isButton = function(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + }; + } + + return { + isLeftClick: function(event) { return isButton(event, 0) }, + isMiddleClick: function(event) { return isButton(event, 1) }, + isRightClick: function(event) { return isButton(event, 2) }, + + element: function(event) { + var node = Event.extend(event).target; + return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); + }, + + findElement: function(event, expression) { + var element = Event.element(event); + if (!expression) return element; + var elements = [element].concat(element.ancestors()); + return Selector.findElement(elements, expression, 0); + }, + + pointer: function(event) { + return { + x: event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)), + y: event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)) + }; + }, + + pointerX: function(event) { return Event.pointer(event).x }, + pointerY: function(event) { return Event.pointer(event).y }, + + stop: function(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + event.stopped = true; + } + }; +})(); + +Event.extend = (function() { + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (Prototype.Browser.IE) { + Object.extend(methods, { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return "[object Event]" } + }); + + return function(event) { + if (!event) return false; + if (event._extendedByPrototype) return event; + + event._extendedByPrototype = Prototype.emptyFunction; + var pointer = Event.pointer(event); + Object.extend(event, { + target: event.srcElement, + relatedTarget: Event.relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + return Object.extend(event, methods); + }; + + } else { + Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; + Object.extend(Event.prototype, methods); + return Prototype.K; + } +})(); + +Object.extend(Event, (function() { + var cache = Event.cache; + + function getEventID(element) { + if (element._prototypeEventID) return element._prototypeEventID[0]; + arguments.callee.id = arguments.callee.id || 1; + return element._prototypeEventID = [++arguments.callee.id]; + } + + function getDOMEventName(eventName) { + if (eventName && eventName.include(':')) return "dataavailable"; + return eventName; + } + + function getCacheForID(id) { + return cache[id] = cache[id] || { }; + } + + function getWrappersForEventName(id, eventName) { + var c = getCacheForID(id); + return c[eventName] = c[eventName] || []; + } + + function createWrapper(element, eventName, handler) { + var id = getEventID(element); + var c = getWrappersForEventName(id, eventName); + if (c.pluck("handler").include(handler)) return false; + + var wrapper = function(event) { + if (!Event || !Event.extend || + (event.eventName && event.eventName != eventName)) + return false; + + Event.extend(event); + handler.call(element, event); + }; + + wrapper.handler = handler; + c.push(wrapper); + return wrapper; + } + + function findWrapper(id, eventName, handler) { + var c = getWrappersForEventName(id, eventName); + return c.find(function(wrapper) { return wrapper.handler == handler }); + } + + function destroyWrapper(id, eventName, handler) { + var c = getCacheForID(id); + if (!c[eventName]) return false; + c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); + } + + function destroyCache() { + for (var id in cache) + for (var eventName in cache[id]) + cache[id][eventName] = null; + } + + if (window.attachEvent) { + window.attachEvent("onunload", destroyCache); + } + + return { + observe: function(element, eventName, handler) { + element = $(element); + var name = getDOMEventName(eventName); + + var wrapper = createWrapper(element, eventName, handler); + if (!wrapper) return element; + + if (element.addEventListener) { + element.addEventListener(name, wrapper, false); + } else { + element.attachEvent("on" + name, wrapper); + } + + return element; + }, + + stopObserving: function(element, eventName, handler) { + element = $(element); + var id = getEventID(element), name = getDOMEventName(eventName); + + if (!handler && eventName) { + getWrappersForEventName(id, eventName).each(function(wrapper) { + element.stopObserving(eventName, wrapper.handler); + }); + return element; + + } else if (!eventName) { + Object.keys(getCacheForID(id)).each(function(eventName) { + element.stopObserving(eventName); + }); + return element; + } + + var wrapper = findWrapper(id, eventName, handler); + if (!wrapper) return element; + + if (element.removeEventListener) { + element.removeEventListener(name, wrapper, false); + } else { + element.detachEvent("on" + name, wrapper); + } + + destroyWrapper(id, eventName, handler); + + return element; + }, + + fire: function(element, eventName, memo) { + element = $(element); + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent("HTMLEvents"); + event.initEvent("dataavailable", true, true); + } else { + event = document.createEventObject(); + event.eventType = "ondataavailable"; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) { + element.dispatchEvent(event); + } else { + element.fireEvent(event.eventType, event); + } + + return Event.extend(event); + } + }; +})()); + +Object.extend(Event, Event.Methods); + +Element.addMethods({ + fire: Event.fire, + observe: Event.observe, + stopObserving: Event.stopObserving +}); + +Object.extend(document, { + fire: Element.Methods.fire.methodize(), + observe: Element.Methods.observe.methodize(), + stopObserving: Element.Methods.stopObserving.methodize(), + loaded: false +}); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards and John Resig. */ + + var timer; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (timer) window.clearInterval(timer); + document.fire("dom:loaded"); + document.loaded = true; + } + + if (document.addEventListener) { + if (Prototype.Browser.WebKit) { + timer = window.setInterval(function() { + if (/loaded|complete/.test(document.readyState)) + fireContentLoadedEvent(); + }, 0); + + Event.observe(window, "load", fireContentLoadedEvent); + + } else { + document.addEventListener("DOMContentLoaded", + fireContentLoadedEvent, false); + } + + } else { + document.write("